Is it still not possible to get real-time call events (ringing, answered, ended etc.) for Teams Phone PSTN calls without a bot being a participant in the call?

George Hanousek 20 Reputation points
2026-06-15T11:07:26.01+00:00

As of mid-2026, is there any Graph API subscription or webhook that fires at call start (or ring) for tenant-wide PSTN calls — without requiring a Calling Bot or Compliance Recording policy?

I'm aware that /communications/callRecords is post-call only (2–3 hour delay), and that /communications/calls doesn't support webhook subscriptions. Just want to confirm nothing has changed before committing to the bot approach.

Thanks!

Microsoft Teams | Development
Microsoft Teams | Development

Building, integrating, or customizing apps and workflows within Microsoft Teams using developer tools and APIs

0 comments No comments

Answer accepted by question author
Michelle-N 20,735 Reputation points Microsoft External Staff Moderator
2026-06-15T13:01:15.8433333+00:00

Hi @George Hanousek

Based on the information you provided, I understand you are looking to confirm whether Microsoft has introduced any native Graph API subscriptions or webhooks as of mid-2026 that can fire real-time call events (such as ringing, answered, or ended) for tenant-wide Teams Phone PSTN calls, specifically without deploying a Calling Bot or utilizing a Compliance Recording policy.

After researching the current state of the Microsoft Graph communications APIs, it is still not possible to get real-time lifecycle signaling events for tenant-wide PSTN calls without an active application participant (like a bot) in the call.

Here is a technical breakdown of how the endpoints behave under the hood to help clarify why the bot approach remains necessary for your requirements:

  • /communications/callRecords :This endpoint remains strictly a post-call reporting tool. A call record is generated only after a call has completely terminated. While you can subscribe to webhooks (change notifications) for this endpoint, the notification triggers only after the record is created (with the usual processing delay). It is designed purely for reporting, logging, compliance, and historical analytics, not for real-time signaling.
  • /communications/calls:This endpoint does not support a global, tenant-wide subscription model for all PSTN calls. Microsoft's API architecture dictates that real-time call lifecycle events (like ringing or answering) are strictly bound to the context of an active call object. An application can only receive these signals if it is a direct participant in that specific call.

Depending on your exact business goals, you have two primary architectural approaches:

  1. If you absolutely need real-time events (Ringing, Answering, Call Control): You should commit to the Calling Bot approach. To intercept tenant-wide PSTN traffic, the bot must either be explicitly invited, routed through standard Teams components like Auto Attendants or Call Queues, or deployed via a Compliance Recording/Jotting policy that forces the media/signaling path to include your app.
  2. If near-real-time data after the call ends is acceptable (Logging/CRM Populating): You can bypass the bot complexity entirely. You can use the /communications/callRecords endpoint combined with Graph change notifications (webhooks). This will alert your backend system as soon as the call record is finalized so you can process the PSTN session data for auditing or reporting purposes.

I hope this confirmation helps you commit to your architectural design with confidence. Please let me know how else I can assist!


If the answer is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".  

Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Was this answer helpful?

1 person found this answer helpful.
0 comments No comments

0 additional answers

Sort by: Newest

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.