Уведомления о входящих звонках

При регистрации бота для звонков и собраний Microsoft Teams указывается URL-адрес веб-перехватчика для звонков. Этот URL-адрес является конечной точкой веб-перехватчика для всех входящих вызовов бота.

Определение протокола

Входящее уведомление предоставляется в устаревшем формате для совместимости с предыдущим протоколом Skype. Чтобы преобразовать вызов в протокол Microsoft Graph, бот должен определить, имеет ли уведомление устаревший формат, и предоставить следующий ответ:

HTTP/1.1 204 No Content

Бот снова получит уведомление, но на этот раз по протоколу Microsoft Graph.

В будущем выпуске платформы мультимедиа в режиме реального времени можно будет настроить протокол, поддерживаемый приложением, чтобы избежать получения первоначального обратного вызова в устаревшем формате.

В следующем разделе приводятся сведения о входящих уведомлениях звонков, перенаправленных для сопоставления регионов с вашей системой.

Перенаправление для сопоставления регионов

Вы вызываете веб-перехватчик из центра обработки данных, в котором проводится вызов. Вызов начинается в любом центре обработки данных и не учитывает сходство регионов. Уведомление отправляется в ваше развертывание в зависимости от разрешения GeoDNS. Если приложение определяет (посредством проверки исходных полезных данных уведомления или иным способом), что должно выполняться в другом развертывании, то предоставляет следующий ответ:

HTTP/1.1 302 Found
Location: your-new-location

Включите бот для ответа на входящий вызов с помощью API ответов. Можно указать, как адресу обратного вызова callbackUri следует обрабатывать этот конкретный вызов. Это полезно для экземпляров с отслеживанием состояния, где вызов обрабатывается определенным разделом и вы хотите внедрить эти сведения в callbackUri для маршрутизации в нужный экземпляр.

В следующем разделе приводятся сведения о проверке подлинности обратного вызова путем проверки маркера, опубликованного в веб-перехватчике.

Проверка подлинности обратного вызова

Бот должен исследовать маркер, опубликованный в веб-перехватчике, для проверки запроса. Каждый раз, когда API публикует что-нибудь в веб-перехватчике, сообщение HTTP POST содержит маркер OAuth в заголовке авторизации в качестве маркера носителя, а в качестве аудитории указан идентификатор вашего приложения.

Приложение должно проверить этот маркер перед принятием запроса обратного вызова.

В данном примере программного кода демонстрируется проверка подлинности обратного вызова.

POST https://bot.contoso.com/api/calls
Content-Type: application/json
Authentication: Bearer <TOKEN>

"value": [
    "subscriptionId": "2887CEE8344B47C291F1AF628599A93C",
    "subscriptionExpirationDateTime": "2016-11-20T18:23:45.9356913Z",
    "changeType": "updated",
    "resource": "/app/calls/8A934F51F25B4EE19613D4049491857B",
    "resourceData": {
        "@odata.type": "#microsoft.graph.call",
        "state": "Established"
    }
]

Маркер OAuth имеет следующие значения и подписан Skype:

{
    "aud": "0efc74f7-41c3-47a4-8775-7259bfef4241",
    "iss": "https://api.botframework.com",
    "iat": 1466741440,
    "nbf": 1466741440,
    "exp": 1466745340,
    "tid": "1fdd12d0-4620-44ed-baec-459b611f84b2"
}

Конфигурацию OpenID, опубликованную на https://api.aps.skype.com/v1/.well-known/OpenIdConfiguration, можно использовать для проверки маркера. Каждое значение токена OAuth используется следующим образом:

  • aud, где аудиторией является URI идентификатора приложения, указанный для приложения.
  • tid — идентификатор клиента для Contoso.com.
  • iss— издатель маркера, https://api.botframework.com

Для обработки кода веб-перехватчик должен проверить маркер, убедиться, что срок его действия не истек, и проверка, подписан ли он опубликованной конфигурацией OpenID. До принятия запроса обратного вызова необходимо также проверить, совпадает ли aud с идентификатором вашего приложения.

Дополнительные сведения см. в статье Проверка входящих запросов.

Следующий этап

Дополнительные ресурсы