Microsoft Exchange · Arazzo Workflow

Microsoft Exchange Find Times and Book a Meeting

Version 1.0.0

Suggest meeting times for attendees, then book the top suggestion.

1 workflow 1 source API 1 provider
View Spec View on GitHub CalendarCollaborationContactsEmailEnterpriseArazzoWorkflows

Provider

microsoft-exchange

Workflows

find-times-and-book-meeting
Get meeting time suggestions and create an event for the best one.
Calls findMeetingTimes for the supplied attendee and constraints, then creates an event using the first suggested time slot.
2 steps inputs: attendeeAddress, meetingDuration, subject, timeZone, windowEnd, windowStart outputs: eventId, suggestionStart
1
findTimes
findMeetingTimes
Ask Graph to suggest meeting times for the attendee within the supplied window and duration, returning a single best candidate.
2
bookMeeting
createEvent
Create the event using the start and end of the top meeting time suggestion and invite the attendee.

Source API Descriptions

Arazzo Workflow Specification

microsoft-exchange-find-times-and-book-meeting-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Microsoft Exchange Find Times and Book a Meeting
  summary: Suggest meeting times for attendees, then book the top suggestion.
  description: >-
    A scheduling-assistant pattern on Microsoft Graph calendar. The workflow
    asks Graph to suggest meeting times for a set of attendees within a time
    window, then books an event using the start and end of the highest-ranked
    suggestion. Each step inlines its request so the flow can be executed
    without consulting the underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: graphCalendarApi
  url: ../openapi/microsoft-exchange-graph-calendar-openapi.yml
  type: openapi
workflows:
- workflowId: find-times-and-book-meeting
  summary: Get meeting time suggestions and create an event for the best one.
  description: >-
    Calls findMeetingTimes for the supplied attendee and constraints, then
    creates an event using the first suggested time slot.
  inputs:
    type: object
    required:
    - subject
    - attendeeAddress
    - windowStart
    - windowEnd
    - timeZone
    - meetingDuration
    properties:
      subject:
        type: string
        description: The subject for the meeting to book.
      attendeeAddress:
        type: string
        description: The email address of the required attendee.
      windowStart:
        type: string
        description: Start of the time window to search, ISO 8601 (e.g. 2026-07-01T09:00:00).
      windowEnd:
        type: string
        description: End of the time window to search, ISO 8601 (e.g. 2026-07-01T17:00:00).
      timeZone:
        type: string
        description: The time zone name for the constraint and event.
      meetingDuration:
        type: string
        description: The meeting length in ISO 8601 duration format (e.g. PT1H).
  steps:
  - stepId: findTimes
    description: >-
      Ask Graph to suggest meeting times for the attendee within the supplied
      window and duration, returning a single best candidate.
    operationId: findMeetingTimes
    requestBody:
      contentType: application/json
      payload:
        attendees:
        - type: required
          emailAddress:
            address: $inputs.attendeeAddress
        timeConstraint:
          timeSlots:
          - start:
              dateTime: $inputs.windowStart
              timeZone: $inputs.timeZone
            end:
              dateTime: $inputs.windowEnd
              timeZone: $inputs.timeZone
        meetingDuration: $inputs.meetingDuration
        maxCandidates: 1
        returnSuggestionReasons: true
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      suggestionStart: $response.body#/meetingTimeSuggestions/0/meetingTimeSlot/start/dateTime
      suggestionEnd: $response.body#/meetingTimeSuggestions/0/meetingTimeSlot/end/dateTime
      suggestionStartTz: $response.body#/meetingTimeSuggestions/0/meetingTimeSlot/start/timeZone
      suggestionEndTz: $response.body#/meetingTimeSuggestions/0/meetingTimeSlot/end/timeZone
  - stepId: bookMeeting
    description: >-
      Create the event using the start and end of the top meeting time
      suggestion and invite the attendee.
    operationId: createEvent
    requestBody:
      contentType: application/json
      payload:
        subject: $inputs.subject
        start:
          dateTime: $steps.findTimes.outputs.suggestionStart
          timeZone: $steps.findTimes.outputs.suggestionStartTz
        end:
          dateTime: $steps.findTimes.outputs.suggestionEnd
          timeZone: $steps.findTimes.outputs.suggestionEndTz
        attendees:
        - type: required
          emailAddress:
            address: $inputs.attendeeAddress
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      eventId: $response.body#/id
      webLink: $response.body#/webLink
  outputs:
    suggestionStart: $steps.findTimes.outputs.suggestionStart
    eventId: $steps.bookMeeting.outputs.eventId