Skip to content

Latest commit

 

History

History
689 lines (599 loc) · 24.1 KB

File metadata and controls

689 lines (599 loc) · 24.1 KB
titledescriptionauthorms.localizationpriorityms.subservicedoc_typems.date
call: answer
Answer an incoming call.
rahulva-msft
medium
cloud-communications
apiPageType
10/22/2024

call: answer

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]

Permissions

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. The source is the caller info in the incoming call notification. Without at least one of these permissions, the source will remain encrypted.

HTTP request

POST /communications/calls/{id}/answer

Request headers

NameDescription
AuthorizationBearer {token}. Required. Learn more about authentication and authorization.
Content-typeapplication/json. Required.

Request body

In the request body, provide a JSON object with the following parameters.

ParameterTypeDescription
callbackUriStringAllows 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.
acceptedModalitiesString collectionThe list of accepted modalities. Possible values are: audio, video, videoBasedScreenSharing. Required for answering a call.
callOptionsincomingCallOptionsThe call options.
mediaConfigappHostedMediaConfig or serviceHostedMediaConfigThe media configuration. (Required)
participantCapacityInt32The number of participants that the application can handle for the call, for Teams policy-based recording scenario.

Response

This method returns a 202 Accepted response code.

Examples

The following example shows how to call this API.

Request

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]


Response

The following example shows the response.

HTTP/1.1 202 Accepted

Example 1: Answer a Peer-to-Peer VoIP call with service hosted media

Notification - incoming

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" ] } } ] }

Request

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]


Response

HTTP/1.1 202 Accepted

Notification - establishing

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.

Notification - established

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.

Example 2: Answer VOIP call with application hosted media

Notification - incoming

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" ] } } ] }

Request

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]


Response

HTTP/1.1 202 Accepted

Notification - establishing

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.

Notification - established

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.

Notification - content sharing started

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" } ] }

Notification - content sharing ended

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" } ] }

Example 3: Answer a policy-based recording call

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" } ] } } } } ] } 
close