title | description | author | ms.localizationpriority | ms.subservice | doc_type | ms.date |
---|---|---|---|---|---|---|
call: answer | Answer an incoming call. | rahulva-msft | medium | cloud-communications | apiPageType | 10/22/2024 |
Namespace: microsoft.graph
Enable a bot to answer an incoming call. The incoming call request can be an invitation from a participant in a group call or a peer-to-peer call. If an invitation to a group call is received, the notification contains the chatInfo and meetingInfo parameters.
The bot is expected to answer, reject, or redirect the call before the call times out. The current timeout value is 15 seconds for regular scenarios and 5 seconds for policy-based recording scenarios.
This API supports the following PSTN scenarios:
- Incoming call to bot's PSTN number and then bot invites another PSTN.
- Incoming call to bot's PSTN number and then bot transfer to another PSTN.
- Incoming call to bot's PSTN number and then bot redirects to another PSTN.
- Incoming call to bot's instance identifier and then bot invites another PSTN.
- Incoming call to bot's instance identifier and then bot transfer to another PSTN.
- Incoming call to bot's instance identifier and then bot redirects to another PSTN.
- Incoming call to bot's instance identifier from Scheduled Meeting and then bot invites PSTN.
- Outgoing call from bot (with instance identifier) to a PSTN.
- P2P call between bot and another peer (Teams user, PSTN), bot invites another PSTN.
- P2P call between bot and another peer (Teams user, PSTN), bot invites another Teams user.
- Bot join the scheduled meeting and then invite PSTN.
[!INCLUDE national-cloud-support]
Choose the permission or permissions marked as least privileged for this API. Use a higher privileged permission or permissions only if your app requires it. For details about delegated and application permissions, see Permission types. To learn more about these permissions, see the permissions reference.
[!INCLUDE permissions-table]
Note: For a call that uses application-hosted media, you also need the Calls.AccessMedia.All permission. You must have at least one of the following permissions to ensure that the
source
in the incoming call notification is decrypted: Calls.AccessMedia.All, Calls.Initiate.All, Calls.InitiateGroupCall.All, Calls.JoinGroupCall.All, Calls.JoinGroupCallAsGuest.All. Thesource
is the caller info in the incoming call notification. Without at least one of these permissions, thesource
will remain encrypted.
POST /communications/calls/{id}/answer
Name | Description |
---|---|
Authorization | Bearer {token}. Required. Learn more about authentication and authorization. |
Content-type | application/json. Required. |
In the request body, provide a JSON object with the following parameters.
Parameter | Type | Description |
---|---|---|
callbackUri | String | Allows bots to provide a specific callback URI for the concurrent call to receive later notifications. If this property isn't set, the bot's global callback URI is used instead. I must be https . |
acceptedModalities | String collection | The list of accepted modalities. Possible values are: audio , video , videoBasedScreenSharing . Required for answering a call. |
callOptions | incomingCallOptions | The call options. |
mediaConfig | appHostedMediaConfig or serviceHostedMediaConfig | The media configuration. (Required) |
participantCapacity | Int32 | The number of participants that the application can handle for the call, for Teams policy-based recording scenario. |
This method returns a 202 Accepted
response code.
The following example shows how to call this API.
The following example shows the request.
POST https://graph.microsoft.com/v1.0/communications/calls/{id}/answerContent-Type: application/jsonContent-Length: 211 { "callbackUri": "callbackUri-value", "mediaConfig": { "@odata.type": "#microsoft.graph.appHostedMediaConfig", "blob": "<Media Session Configuration Blob>" }, "acceptedModalities": [ "audio" ], "callOptions": { "@odata.type": "#microsoft.graph.incomingCallOptions", "isContentSharingNotificationEnabled": true, "isDeltaRosterEnabled": true }, "participantCapacity": 200 }
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
The following example shows the response.
HTTP/1.1 202 Accepted
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "created", "resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "resourceData": { "@odata.type": "#microsoft.graph.call", "@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "@odata.etag": "W/\"5445\"", "state": "incoming", "direction": "incoming", "source": { "identity": { "user": { "displayName": "Test User", "id": "8A34A46B-3D17-4ADC-8DCE-DC4E7D572698" } }, "region": "westus", "languageId": "en-US" }, "targets": [ { "identity": { "application": { "displayName": "Test BOT", "id": "8A34A46B-3D17-4ADC-8DCE-DC4E7D572698" } } } ], "requestedModalities": [ "audio" ] } } ] }
POST https://graph.microsoft.com/v1.0/communications/calls/57DAB8B1894C409AB240BD8BEAE78896/answerContent-Type: application/json { "callbackUri": "https://bot.contoso.com/api/calls", "acceptedModalities": [ "audio" ], "mediaConfig": { "@odata.type": "#microsoft.graph.serviceHostedMediaConfig", "preFetchMedia": [ { "uri": "https://cdn.contoso.com/beep.wav", "resourceId": "1D6DE2D4-CD51-4309-8DAA-70768651088E" }, { "uri": "https://cdn.contoso.com/cool.wav", "resourceId": "1D6DE2D4-CD51-4309-8DAA-70768651088F" } ] } }
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
HTTP/1.1 202 Accepted
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "updated", "resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "resourceData": { "@odata.type": "#microsoft.graph.call", "@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "@odata.etag": "W/\"5445\"", "state": "establishing" } } ] }
Note: Call establishing/established notifications may arrive out of order.
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "updated", "resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "resourceData": { "@odata.type": "#microsoft.graph.call", "@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "@odata.etag": "W/\"5445\"", "state": "established" } } ] }
Note: Call establishing/established notifications may arrive out of order.
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "created", "resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "resourceData": { "@odata.type": "#microsoft.graph.call", "@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "@odata.etag": "W/\"5445\"", "state": "incoming", "direction": "incoming", "source": { "@odata.type": "#microsoft.graph.participantInfo", "identity": { "user": { "displayName": "Test User", "id": "8A34A46B-3D17-4ADC-8DCE-DC4E7D572698" } }, "region": "westus", "languageId": "en-US" }, "targets": [ { "@odata.type": "#microsoft.graph.invitationParticipantInfo", "identity": { "application": { "displayName": "Test BOT", "id": "8A34A46B-3D17-4ADC-8DCE-DC4E7D572698" } } } ], "requestedModalities": [ "audio" ] } } ] }
POST https://graph.microsoft.com/v1.0/communications/calls/57DAB8B1894C409AB240BD8BEAE78896/answerContent-Type: application/json { "callbackUri": "https://bot.contoso.com/api/calls", "acceptedModalities": [ "audio" ], "mediaConfig": { "@odata.type": "#microsoft.graph.appHostedMediaConfig", "blob": "<Media Session Configuration Blob>" } }
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
[!INCLUDE sample-code] [!INCLUDE sdk-documentation]
HTTP/1.1 202 Accepted
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "updated", "resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "resourceData": { "@odata.type": "#microsoft.graph.call", "@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "@odata.etag": "W/\"5445\"", "state": "establishing" } } ] }
Note: Call establishing/established notifications may arrive out of order.
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "updated", "resourceUrl": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "resourceData": { "@odata.type": "#microsoft.graph.call", "@odata.id": "/communications/calls/57DAB8B1894C409AB240BD8BEAE78896", "@odata.etag": "W/\"5445\"", "state": "established" } } ] }
Note: Call establishing/established notifications may arrive out of order.
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "created", "resourceUrl": "/communications/calls/421f4c00-4436-4c3a-9d9a-c4924cf98e67/contentsharingsessions/2765eb15-01f8-47c6-b12b-c32111a4a86f" } ] }
POST https://bot.contoso.com/api/callsContent-Type: application/json
{ "@odata.type": "#microsoft.graph.commsNotifications", "value": [ { "@odata.type": "#microsoft.graph.commsNotification", "changeType": "deleted", "resourceUrl": "/communications/calls/421f4c00-4436-4c3a-9d9a-c4924cf98e67/contentsharingsessions/2765eb15-01f8-47c6-b12b-c32111a4a86f" } ] }
Under the Policy-based recording scenario, before a participant under policy joins a call, an incoming call notification is sent to the bot associated with the policy. The join information can be found under the botData property. The bot can then choose to answer the call and update the recording status accordingly.
When participantCapacity
is specified in the Answer
request for a policy-based recording notification, subsequent participant joining events belonging to the same policy group is sent out as participantJoiningNotification instead of new incoming call notification, until a number of participants that the current call instance is handling has reached the number specified in participantCapacity
.
The following is an example of the incoming call notification that a bot would receive in this case.
{ "@odata.type":"#microsoft.graph.commsNotifications", "value":[ { "@odata.type":"#microsoft.graph.commsNotification", "changeType":"created", "resource":"/app/calls/e71f0300-9c1f-4d99-b5f4-2722e877d497", "resourceUrl":"/communications/calls/e71f0300-9c1f-4d99-b5f4-2722e877d497", "resourceData":{ "@odata.type":"#microsoft.graph.call", "state":"incoming", "direction":"incoming", "source":{ "@odata.type":"#microsoft.graph.participantInfo", "id":"90fad2ce-8989-41a1-8a66-f6636e629a2a", "identity":{ "@odata.type":"#microsoft.graph.identitySet", "user":{ "@odata.type":"#microsoft.graph.identity", "id":"8A34A46B-3D17-4ADC-8DCE-DC4E7D572698", "identityProvider":"AAD" } }, "endpointType":"default", "region":"amer" }, "targets":[ { "@odata.type":"#microsoft.graph.invitationParticipantInfo", "identity":{ "@odata.type":"#microsoft.graph.identitySet", "applicationInstance":{ "@odata.type":"#microsoft.graph.identity", "id":"832899f8-2ea1-4604-8413-27bd2892079f", "identityProvider":"AAD" } }, "endpointType":"default", "id":"4520a1a5-5394-5a41-aa12-9ee6fa18cfc8", "region":null, "languageId":null } ], "meetingInfo":{ "@odata.type":"#microsoft.graph.tokenMeetingInfo", "token":"join token" }, "tenantId":"932899f8-2ea1-4604-8413-27bd2892079f", "myParticipantId":"1520a1a5-5394-4a41-aa72-9ee6fa18cfc8", "callChainId":"05f2f70f-3a9c-47c1-80a9-cc79e91d8cec", "incomingContext":{ "@odata.type":"#microsoft.graph.incomingContext", "sourceParticipantId":"30fad2ce-8989-41a1-8a66-f6636e629a2a", "observedParticipantId":"30fad2ce-8989-41a1-8a66-f6636e629a2a" }, "id":"e71f0300-9c1f-4d99-b5f4-2722e877d497", "applicationMetadata":{ "botData":{ "mediaHostedRegion":"USEA", "user":{ "participationMethod":"callee", "clientLocation":"US" }, "otherSideUser":{ "id":"971f0300-9c1f-4d99-b5f4-2722e877d490", "participantId":"3520a1a5-5394-4a41-aa72-9ee6fa18cfc8", "tenantId":"1540a1a5-2394-4a41-aa72-9ee6fa18cfc8", "onBehalfOf":{ "id":"871f0300-9c1f-4d99-b5f4-2722e877d490" }, "participationMethod":"caller", "clientLocation":"EUNO" }, "inviteReasons":[ "PolicyBasedRecording" ], "policyIdentifier":"Test Policy", "pairedRecorders":[ { "id":"471f0300-5c1f-4d99-b5f4-2722e877d490", "participantId":"371f0300-2c1f-4d99-b5f4-2722e877d490" } ], "otherRecorders":[ { "id":"671f0300-9c1f-4d99-b5f4-2722e877d490", "participantId":"a71f0300-ec1f-4d99-b5f4-2722e877d490" } ] } } } } ] }