call: answer
Пространство имен: microsoft.graph
Важно!
API версии /beta
в Microsoft Graph могут быть изменены. Использование этих API в производственных приложениях не поддерживается. Чтобы определить, доступен ли API в версии 1.0, используйте селектор версий.
Включение бота для ответа на входящий вызов. Запрос на входящий вызов может быть приглашением от участника группового звонка или однорангового вызова. Если получено приглашение на групповой звонок, уведомление содержит параметры chatInfo и meetingInfo .
Ожидается, что бот ответит, отклонит или перенаправит вызов до истечения времени ожидания вызова. Текущее значение времени ожидания — 15 секунд. Текущее значение времени ожидания составляет 15 секунд для обычных сценариев и 5 секунд для сценариев записи на основе политик.
Этот API поддерживает следующие сценарии ТСОП:
- Входящий вызов на номер ТСОП бота, а затем бот приглашает другое ТСОП.
- Входящий вызов на номер ТСОП бота, а затем перенос бота в другое ТСОП.
- Входящий вызов на номер ТСОП бота, а затем бот перенаправляется на другое ТСОП.
- Входящий вызов идентификатора экземпляра бота, а затем бот приглашает другое ТСОП.
- Входящий вызов идентификатора экземпляра бота, а затем перенос бота в другое ТСОП.
- Входящий вызов идентификатора экземпляра бота, а затем бот перенаправляется в другое ТСОП.
- Входящий вызов идентификатора экземпляра бота из запланированного собрания, а затем бот приглашает ТСОП.
- Исходящий вызов бота (с идентификатором экземпляра) в ТСОП.
- P2P-вызов между ботом и другим одноранговым элементом (пользователь Teams, ТСОП), бот приглашает другое ТСОП.
- P2P-вызов между ботом и другим одноранговым элементом (пользователь Teams, ТСОП), бот приглашает другого пользователя Teams.
- Бот присоединяется к запланированному собранию, а затем приглашает ТСОП.
Этот API доступен в следующих национальных облачных развертываниях.
Глобальная служба | Правительство США L4 | Правительство США L5 (DOD) | Китай управляется 21Vianet |
---|---|---|---|
✅ | ❌ | ❌ | ❌ |
Разрешения
Выберите разрешение или разрешения, помеченные как наименее привилегированные для этого API. Используйте более привилегированное разрешение или разрешения только в том случае, если это требуется приложению. Дополнительные сведения о делегированных разрешениях и разрешениях приложений см. в разделе Типы разрешений. Дополнительные сведения об этих разрешениях см. в справочнике по разрешениям.
Тип разрешения | Разрешения с наименьшими привилегиями | Более высокие привилегированные разрешения |
---|---|---|
Делегированные (рабочая или учебная учетная запись) | Не поддерживается. | Не поддерживается. |
Делегированные (личная учетная запись Майкрософт) | Не поддерживается. | Не поддерживается. |
Приложение | Calls.JoinGroupCall.All | Calls.JoinGroupCallAsGuest.All |
Заметка: Для вызова, использующего размещенный в приложении носитель, также требуется разрешение Calls.AccessMedia.All. Для расшифровки
source
в уведомлении о входящих звонках необходимо иметь хотя бы одно из следующих разрешений: Calls.AccessMedia.All, Calls.Initiate.All, Calls.InitiateGroupCall.All, Calls.JoinGroupCall.All, Calls.JoinGroupCallAsGuest.All. —source
это сведения о звонящем в уведомлении о входящем вызове. Без хотя бы одного из этих разрешений объектsource
останется зашифрованным.
HTTP-запрос
POST /app/calls/{id}/answer
POST /communications/calls/{id}/answer
Примечание. Путь
/app
является устаревшим. В дальнейшем используйте путь/communications
.
Заголовки запросов
Имя | Описание |
---|---|
Авторизация | Bearer {token}. Обязательно. Дополнительные сведения о проверке подлинности и авторизации. |
Content-Type | application/json. Обязательно. |
Текст запроса
В тексте запроса предоставьте JSON-объект с указанными ниже параметрами.
Параметр | Тип | Описание |
---|---|---|
callbackUri | String | Позволяет ботам предоставлять определенный URI обратного вызова для параллельного вызова для получения последующих уведомлений. Если это свойство не задано, вместо него используется глобальный URI обратного вызова бота. Это должно быть https . |
acceptedModalities | Коллекция строк | Список модальностей принятия. Возможные значения: audio , video , videoBasedScreenSharing . Требуется для ответа на звонок. |
callOptions | incomingCallOptions | Параметры вызова. |
mediaConfig | appHostedMediaConfig или serviceHostedMediaConfig | Настройка мультимедиа. Обязательно. |
participantCapacity | Целое | Количество участников, которые приложение может обработать для вызова, для сценария записи на основе политик Teams . |
Отклик
Этот метод возвращает 202 Accepted
код ответа.
Примеры
В приведенном ниже примере показано, как вызывать этот API.
Запрос
Ниже показан пример запроса.
POST https://graph.microsoft.com/beta/communications/calls/{id}/answer
Content-Type: application/json
Content-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
}
Отклик
Ниже показан пример отклика.
HTTP/1.1 202 Accepted
Пример 1. Ответ на одноранговый вызов VoIP с размещенным в службе носителем
Уведомление — входящее
POST https://bot.contoso.com/api/calls
Content-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",
"callRoutes": [
{
"routingType": "lookup",
"original": {
"phone": {
"id": "+14258828080"
}
},
"final": {
"user": {
"id": "29362BD4-CD58-4ED0-A206-0E4A33DBB0B6",
"displayName": "Heidi Steen"
}
}
}
],
"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"
}
},
"languageId": "en-US"
}
],
"requestedModalities": [ "audio" ]
}
}
]
}
Запрос
POST /communications/calls/57DAB8B1894C409AB240BD8BEAE78896/answer
Content-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"
}
]
}
}
Отклик
HTTP/1.1 202 Accepted
Уведомление — установка
POST https://bot.contoso.com/api/calls
Content-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"
}
}
]
}
Заметка: Уведомления об установке и установке звонков могут поступать не по порядку.
Уведомление — установлено
POST https://bot.contoso.com/api/calls
Content-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"
}
}
]
}
Заметка: Уведомления об установке и установке звонков могут поступать не по порядку.
Пример 2. Ответ на вызов VOIP с размещенным в приложении носителем
Уведомление — входящее
POST https://bot.contoso.com/api/calls
Content-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"
}
},
"region": "westus",
"languageId": "en-US"
}
],
"requestedModalities": [ "audio" ]
}
}
]
}
Запрос
POST https://graph.microsoft.com/beta/communications/calls/57DAB8B1894C409AB240BD8BEAE78896/answer
Content-Type: application/json
{
"callbackUri": "https://bot.contoso.com/api/calls",
"acceptedModalities": [ "audio" ],
"mediaConfig": {
"@odata.type": "#microsoft.graph.appHostedMediaConfig",
"blob": "<Media Session Configuration Blob>"
}
}
Отклик
HTTP/1.1 202 Accepted
Уведомление — установка
POST https://bot.contoso.com/api/calls
Content-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"
}
}
]
}
Заметка: Уведомления об установке и установке звонков могут поступать не по порядку.
Уведомление — установлено
POST https://bot.contoso.com/api/calls
Content-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"
}
}
]
}
Заметка: Уведомления об установке и установке звонков могут поступать не по порядку.
Уведомление — общий доступ к содержимому запущен
POST https://bot.contoso.com/api/calls
Content-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/calls
Content-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"
}
]
}
Пример 3. Ответ на вызов записи на основе политики
В сценарии записи на основе политик перед присоединением участника политики к вызову боту, связанному с политикой, отправляется уведомление о входящем вызове. Сведения о соединении можно найти в свойстве botData . Затем бот может ответить на звонок и соответствующим образом обновить состояние записи .
Если participantCpapacity
указано в запросе Answer
для уведомления о записи на основе политики, последующее событие присоединения к участнику, принадлежащее той же группе политики, будет отправлено как participantJoiningNotification вместо нового уведомления о входящем вызове до тех пор, пока число участников, обрабатываемых текущим экземпляром вызова, не достигнет номера, указанного в participantCapacity
.
Ниже приведен пример уведомления о входящем вызове, которое бот получит в этом случае.
{
"@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"
}
]
}
}
}
}
]
}