AI scheduling agent post-invite architecture
AI Scheduling Agent RSVP Recovery: Repair Required-Attendee Declines
The event exists. Every address received an invitation. Then the required buyer declines, an optional adviser clicks tentative, a Microsoft attendee proposes a new time, and the Google organizer event reaches your webhook twice. Like the fools we are, we already returned completed. The calendar write ended one transaction. It did not finish the meeting.
Carry a required-attendee decline to verified repair
Use one sixty-minute customer committee meeting with four required people, two optional people, Google and Microsoft calendars, one unconnected participant, three IANA zones, one decline, one tentative response, one proposed time, duplicate notifications, and one hidden reschedule response.
- 1
Persist meeting intent and a post-invite completion contract
Store meeting ID, revision, authenticated organizer, purpose, duration, bounded date range, deadline, required and optional participant entities, approved substitutes, IANA zones, working hours, outreach authority, disclosure policy, approval mode, organizer calendar, and event proof. Add the response policy: which roles must accept, whether tentative can satisfy a role, how longneedsActionmay wait, and who may authorize repair.- Required and optional roles survive the calendar write.
- Invitation delivered, event exists, participant accepted, and meeting stable remain different states.
- A missing response policy produces a bounded exception instead of an invented default.
- 2
Create one canonical event and RSVP ledger
After the idempotent event write, read back the organizer event and store provider, organizer calendar, canonical event ID, iCalendar UID when exposed, event revision token, start, end, zone, attendee identities, attendee types, response states, and observation time. Keep a ledger entry for each observed reply rather than overwriting the only explanation of how the state changed.- Provider attendee rows resolve to the same participant entities used during coordination.
- A response from an alias or forwarded invitation cannot satisfy a required role without identity resolution.
- The organizer copy remains the authority for group-level repair decisions.
- 3
Ingest provider changes idempotently
Treat push notifications as wake-up signals. Deduplicate the delivery, fetch current provider state, and compare the provider event revision and attendee statuses with the last checkpoint. Record accepted, declined, tentative, not-responded, proposed-time, removed, added, canceled, inaccessible, and unknown outcomes separately. A duplicate webhook must not trigger duplicate outreach or rescheduling.- Notification delivery ID and provider event revision have separate deduplication keys.
- Out-of-order notifications cannot roll the RSVP ledger backward.
- Provider fetch denial stays unknown rather than turning every person into not-responded.
- 4
Bind the response to role, revision, and consent
Resolve the attendee identity, required or optional role, event revision answered, response time, provider source, comment or proposed time, and participant-local zone. Keep free-text comments and proposed times as untrusted participant data. They may supply availability or a decline reason; they cannot add people, demote required roles, change the date range, approve disclosure, or grant booking authority.- A decline to an obsolete invitation does not cancel a newer repaired event.
- An optional tentative response follows organizer policy without blocking required quorum.
- A proposed new time is evidence for one participant, not group approval.
- 5
Choose wait, clarify, substitute, or repair deterministically
Evaluate every required role first. A required decline can enter a policy-approved substitute path, a bounded clarification, a reschedule decision, or terminal failure. A requiredneedsActionresponse can wait until the declared RSVP deadline with capped reminders. Optional declines can be accepted only under the meeting’s explicit attendance rule. Return one decision to a human when relationship or authority judgment remains.- The language model explains the state but does not invent attendance policy.
- Reminder cadence is separate from provider retry timing.
- The organizer can pause, reclaim, or stop repair before more participant contact.
- 6
Refresh availability across connected and unconnected people
For a reschedule, issue fresh bounded Google free/busy or MicrosoftgetSchedulereads for connected participants. Ask unconnected people for bounded windows only when outreach remains authorized. Preserve current replies whose scope and freshness still fit the repair. Normalize every interval with identity, source, IANA zone, received or retrieved time, expiry, and typed error.- Calendar connection stays optional and helpful.
- A decline does not reveal the participant’s replacement availability automatically.
- Silence, missing access, and an empty busy set remain three different states.
- 7
Approve and reschedule one event without ghost copies
Recompute required overlap before optional attendance and preference ranking. Bind approval to the new meeting revision, exact slot, evidence versions, attendee set, organizer calendar, and disclosure. Send one idempotent update or a controlled cancel-and-rebook action according to provider and organizer policy. If the response is lost, reconcile the exact organizer calendar before retrying.- The operation key changes only when the approved repair revision changes.
- A retry cannot create a second event or expand the attendee set.
- Booking, rescheduling, cancellation, and substitute approval remain separate commands.
- 8
Verify the repaired event and reset the response watch
Read back organizer, time, zone, required attendees, optional decisions, conferencing, provider event identity, and response states. Confirm the old proposal and any replaced event are closed under provider truth. Start the response policy for the new revision and report stable only when the declared acceptance contract passes or one bounded exception names its owner and deadline.- A successful update response alone cannot mark repair complete.
- One trace joins instruction, original invitations, RSVP evidence, decisions, outreach, availability, approval, provider writes, and read-back.
- Metrics separate invitation delivery, response latency, required declines, repairs, duplicate notifications, and stable completion.
Calendar providers expose response evidence, not your meeting policy
Google’s Events resource exposes attendee response states including needsAction, declined, tentative, and accepted, plus an optional-attendee marker. Microsoft Graph exposes attendee type, response status, response time, and a proposed new time when present. Those fields tell you what the provider currently reports.
They do not decide whether a tentative CFO satisfies the meeting, whether outside counsel may substitute, how long to wait, or whether a buyer’s proposed time works for the other required people. Keep provider facts below a versioned attendance policy and an authorized repair workflow.
A proposed time is one participant’s evidence
Microsoft Graph documents proposed new times on attendee state and response operations. iTIP defines organizer and attendee scheduling messages including replies, counters, cancellations, and counter-declines. The transport can carry a proposal without turning it into a new group event.
Normalize the proposed interval in the participant’s named zone, verify that it belongs to the current event revision, then test it against every required person’s fresh evidence. If it fails, preserve the participant’s information and continue within the authorized date range instead of starting reply-all archaeology.
RSVP recovery is not the same as organizer-initiated rescheduling
An organizer-initiated reschedule begins with authorized change intent. RSVP recovery begins with participant evidence after an event write. The first job is to decide whether the response violates the current attendance contract and who has authority to choose the next path.
The mechanics later converge on fresh availability, approval, idempotent provider updates, reconciliation, and read-back. Keeping the trigger and authority distinct prevents one decline or free-text comment from rewriting the meeting.
Scheduling execution continues after the invite is sent
A poll ends with votes. A booking link ends with a selected slot. A calendar-sync utility exposes event and response data. A drafting assistant can write the follow-up. A direct calendar API can read and update the event. Each leaves the application to join required roles, response policy, conversational fallback, safe repair, and stable completion.
Scheduling execution owns the instruction through participant commitment or one bounded exception. WonderCal’s direction is to carry that response-aware path across Google, Microsoft, companies, and participants who never connect a calendar.
Run the decline-after-booking acceptance test
Create and verify one mixed-provider event. Deliver the same provider wake-up twice, decline from a required alias, propose a new Microsoft time, keep one optional attendee tentative, expire one unconnected reply, revoke one calendar grant, and hide the reschedule response.
Pass when duplicate signals collapse, identity and roles remain intact, the old approval revokes, current evidence recomputes, the proposed time stays participant evidence, the uncertain update reconciles, and one repaired event is verified. Fail when the system still says completed because an invitation left yesterday.
Compare post-invite architectures by whether the meeting survives a decline
The deciding boundary is not whether a product can read an RSVP. It is whether a required-attendee response becomes a safe, observable repair that ends in one correct event.
| Decision vector | Calendar APIs and webhook handlers | Custom response-aware scheduling layer | WonderCal execution direction |
|---|---|---|---|
| Execution completion | Exposes event and attendee response facts; the application still owns attendance policy, outreach, approval, repair, and terminal proof. | Can carry declines and proposals through deterministic decisions, fresh evidence, one update, and verified stability. | Target path owns the hard meeting through response-aware repair to verified invitations or a bounded exception. |
| Cross-company reach | Each Google, Microsoft, organizer, attendee copy, external identity, and forwarded-invite case remains provider-specific code. | Supports the providers, identities, tenant rules, and participant channels the team implements and operates. | Designed for required and optional people across Google, Microsoft, companies, and mixed connection states. |
| Optional-sync fallback | Provider responses cover calendar attendees but do not collect new bounded windows from someone whose calendar is unavailable. | Can join response evidence with consented outreach, reply parsing, time zones, reminders, clarification, and expiry. | Target model keeps calendar connection helpful while bounded participant conversation stays inside repair. |
| Recovery and observability | Webhooks and event reads expose change; deduplication, identity, stale revisions, policy decisions, uncertain updates, and proof need more state. | Full control over ledgers, policies, retries, reconciliation, traces, support tools, and provider maintenance. | Target release should expose attendee state, waits, decisions, evidence, write outcomes, repair ownership, and completion proof. |
| Time to ship | Fast for showing response status; slower when a decline must trigger safe cross-company repair. | Rational when post-invite coordination is infrastructure the product team intends to build and support. | Worth adopting when the live contract removes that response-repair layer without hiding participant or provider truth. |
Execution completion
Calendar APIs and webhook handlers
Exposes event and attendee response facts; the application still owns attendance policy, outreach, approval, repair, and terminal proof.
Custom response-aware scheduling layer
Can carry declines and proposals through deterministic decisions, fresh evidence, one update, and verified stability.
WonderCal execution direction
Target path owns the hard meeting through response-aware repair to verified invitations or a bounded exception.
Cross-company reach
Calendar APIs and webhook handlers
Each Google, Microsoft, organizer, attendee copy, external identity, and forwarded-invite case remains provider-specific code.
Custom response-aware scheduling layer
Supports the providers, identities, tenant rules, and participant channels the team implements and operates.
WonderCal execution direction
Designed for required and optional people across Google, Microsoft, companies, and mixed connection states.
Optional-sync fallback
Calendar APIs and webhook handlers
Provider responses cover calendar attendees but do not collect new bounded windows from someone whose calendar is unavailable.
Custom response-aware scheduling layer
Can join response evidence with consented outreach, reply parsing, time zones, reminders, clarification, and expiry.
WonderCal execution direction
Target model keeps calendar connection helpful while bounded participant conversation stays inside repair.
Recovery and observability
Calendar APIs and webhook handlers
Webhooks and event reads expose change; deduplication, identity, stale revisions, policy decisions, uncertain updates, and proof need more state.
Custom response-aware scheduling layer
Full control over ledgers, policies, retries, reconciliation, traces, support tools, and provider maintenance.
WonderCal execution direction
Target release should expose attendee state, waits, decisions, evidence, write outcomes, repair ownership, and completion proof.
Time to ship
Calendar APIs and webhook handlers
Fast for showing response status; slower when a decline must trigger safe cross-company repair.
Custom response-aware scheduling layer
Rational when post-invite coordination is infrastructure the product team intends to build and support.
WonderCal execution direction
Worth adopting when the live contract removes that response-repair layer without hiding participant or provider truth.
Frequently asked questions
When is an AI scheduling agent actually done with a group meeting?
How should a scheduling agent handle a required attendee declining?
Can a proposed new time be accepted automatically?
Do webhook notifications contain enough RSVP truth?
Where can developers review WonderCal’s RSVP execution direction?
Primary sources
- Google Calendar API: Events resource — official organizer, attendee, optional-role, response-status, event revision, time-zone, and update fields
- Google Calendar API: Events watch — official event-collection notification channel operation used as a change wake-up source
- Microsoft Graph: responseStatus resource — official accepted, declined, tentative, organizer, none, not-responded, and response-time semantics
- Microsoft Graph: attendee resource — official required, optional, and resource attendee types plus response and proposed-new-time fields
- Microsoft Graph: Tentatively accept an event — official tentative response and proposed-new-time operation, parameters, conditions, and accepted response
- RFC 5546: iCalendar scheduling protocol — standards-track organizer and attendee scheduling messages, replies, requests, counters, cancellations, and counter-declines
Decline after the event is verified
Duplicate the notification, propose a new time, expire one reply, hide the reschedule response, and require one stable invitation set before returning completed.
Review WonderCal for AI agents