Forum Discussion
Microsoft Graph callRecords Webhook Not Triggering for Bot Initiated Calls
Hii,
I am working with the Microsoft Graph API and have set up a subscription on `/communications/callRecords` to receive webhook notifications whenever a new call record is created in our tenant.
Our Setup:
- Subscription resource: `/communications/callRecords`
- Change type: `created`
- Permission: `CallRecords.Read.All` (Application type, admin consent granted)
- Token: Generated using `client_credentials` (app-only token, NOT delegated)
What is Working:
- Webhook fires correctly for calls made from the Teams interface (user-to-user calls)
- Bot callback URL receives call state events (call establishing, established, terminated)
- callRecords ARE generated and visible via `GET /communications/callRecords` for bot calls too
The Problem:
- Webhook does NOT fire for calls initiated programmatically via `POST /communications/calls` (bot/application identity calls)
- Even though the callRecord exists and is visible in Graph API, no webhook notification is sent
Our Bot Call Payload:
```json
{
"@odata.type": "#microsoft.graph.call",
"callbackUri": "https://our-server.com/webhook",
"source": {
"identity": {
"application": {
"id": "our-app-id",
"displayName": "My Calling App"
}
}
},
"targets": [
{
"identity": {
"user": {
"id": "target-user-id",
"displayName": "User"
}
}
}
],
"requestedModalities": ["audio"],
"mediaConfig": {
"@odata.type": "#microsoft.graph.serviceHostedMediaConfig"
}
}
```
Our Questions:
1. Is this a known limitation — that `callRecords` webhooks do not fire for application/bot-initiated calls?
2. If the callRecord IS generated and visible via GET, why is the webhook notification system not triggering?
3. Is there any configuration, permission, or approach that can make the webhook fire for bot calls the same way it does for Teams interface calls?
4. Is `callChainId` the only reliable way to fetch callRecords for programmatically initiated calls?
We have already verified:
- Subscription is active and not expired
- Correct Application permission with admin consent
- App-only token used for subscription creation
- Webhook endpoint responds with 202 within 3 seconds
- callRecord is visible via GET after waiting 150 minutes
Waiting 150 minutes and polling manually works, but we want real-time webhook notifications just like we get for Teams interface calls.
Any official clarification or guidance from Microsoft engineers would be highly appreciated.
Thank you!