Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Запись вызовов часто используется непосредственно через пользовательский интерфейс вызывающего приложения, где пользователь активирует запись. Для приложений в таких отраслях, как банковские или медицинские услуги, запись звонков требуется от get-go. Служба должна автоматически записывать данные в целях соответствия требованиям. В этом примере показано, как записать вызов при запуске. Он использует Службы коммуникации Azure и Сетка событий Azure для активации функции Azure при запуске вызова. Он автоматически записывает каждый вызов в Службы коммуникации Azure ресурсе.
В этом кратком руководстве мы сосредоточимся на демонстрации обработки событий, запущенных вызовом, с помощью Функции Azure с помощью триггеров сетки событий. Для начала записи мы используем пакет SDK службы автоматизации вызовов для Службы коммуникации Azure.
Событие "Начало вызова" при форматировании запуска вызова следующим образом:
[
{
"id": "a8bcd8a3-12d7-46ba-8cde-f6d0bda8feeb",
"topic": "/subscriptions/{subscription-id}/resourcegroups/{group-name}/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
"subject": "call/{serverCallId}/startedBy/8:acs:bc360ba8-d29b-4ef2-b698-769ebef85521_0000000c-1fb9-4878-07fd-0848220077e1",
"data": {
"startedBy": {
"communicationIdentifier": {
"rawId": "8:acs:bc360ba8-d29b-4ef2-b698-769ebef85521_0000000c-1fb9-4878-07fd-0848220077e1",
"communicationUser": {
"id": "8:acs:bc360ba8-d29b-4ef2-b698-769ebef85521_0000000c-1fb9-4878-07fd-0848220077e1"
}
},
"role": "{role}"
},
"serverCallId": "{serverCallId}",
"group": {
"id": "00000000-0000-0000-0000-000000000000"
},
"room": {
"id": "{roomId}"
},
"isTwoParty": false,
"correlationId": "{correlationId}",
"isRoomsCall": true
},
"eventType": "Microsoft.Communication.CallStarted",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2021-09-22T17:02:38.6905856Z"
}
]
Примечание.
Использование Сетка событий Azure несет дополнительные затраты. Дополнительные сведения см. в Сетка событий Azure ценах.
Предварительные требования
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Активный ресурс Служб коммуникации и строка подключения. Создайте ресурс Служб коммуникации.
- Установите Azure CLI.
Настройка нашей локальной среды
С помощью Visual Studio Code установите расширение Функции Azure.
С расширением создайте функцию Azure, следуя этим инструкциям.
Настройте функцию со следующими инструкциями:
- Язык: C#
- Шаблон: триггер Сетка событий Azure
- Имя функции: определяемое пользователем
После создания вы увидите функцию, созданную в каталоге следующим образом:
using System; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EventGrid; using Microsoft.Extensions.Logging; using Azure.Messaging.EventGrid; using System.Threading.Tasks; namespace Company.Function { public static class acs_recording_test { [FunctionName("acs_recording_test")] public static async Task RunAsync([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log) { log.LogInformation(eventGridEvent.EventType); } } }
Настройка функции Azure для получения CallStarted
события
- Настройте функцию Azure для выполнения действий при
CallStarted
активации события.
public static async Task RunAsync([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{
if(eventGridEvent.EventType == "Microsoft.Communication.CallStarted")
{
log.LogInformation("Call started");
var callEvent = eventGridEvent.Data.ToObjectFromJson<CallStartedEvent>();
// CallStartedEvent class is defined in documentation, but the objects looks like this:
// public class CallStartedEvent
// {
// public StartedBy startedBy { get; set; }
// public string serverCallId { get; set; }
// public Group group { get; set; }
// public bool isTwoParty { get; set; }
// public string correlationId { get; set; }
// public bool isRoomsCall { get; set; }
// }
// public class Group
// {
// public string id { get; set; }
// }
// public class StartedBy
// {
// public CommunicationIdentifier communicationIdentifier { get; set; }
// public string role { get; set; }
// }
// public class CommunicationIdentifier
// {
// public string rawId { get; set; }
// public CommunicationUser communicationUser { get; set; }
// }
// public class CommunicationUser
// {
// public string id { get; set; }
// }
}
}
Начать запись
- Создайте метод для обработки
CallStarted
событий. Этот метод активирует запись для запуска при запуске вызова.
public static async Task RunAsync([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{
if(eventGridEvent.EventType == "Microsoft.Communication.CallStarted")
{
log.LogInformation("Call started");
var callEvent = eventGridEvent.Data.ToObjectFromJson<CallStartedEvent>();
await startRecordingAsync(callEvent.serverCallId);
}
}
public static async Task startRecordingAsync (String serverCallId)
{
CallAutomationClient callAutomationClient = new CallAutomationClient(Environment.GetEnvironmentVariable("ACS_CONNECTION_STRING"));
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator(serverCallId));
recordingOptions.RecordingChannel = RecordingChannel.Mixed;
recordingOptions.RecordingContent = RecordingContent.AudioVideo;
recordingOptions.RecordingFormat = RecordingFormat.Mp4;
var startRecordingResponse = await callAutomationClient.GetCallRecording()
.StartRecordingAsync(recordingOptions).ConfigureAwait(false);
}
Локальное выполнение
Чтобы запустить функцию локально, можно нажать клавишу F5
Visual Studio Code. Мы используем ngrok, чтобы подключить нашу локальную функцию Azure с Сетка событий Azure.
После запуска функции мы настроим ngrok. (Необходимо скачать ngrok для вашей среды.)
ngrok http 7071
Скопируйте ссылку ngrok, указанную в месте выполнения функции.
Настройте события C
allStarted
через сетку событий в Службы коммуникации Azure ресурсе. Мы делаем это с помощью Azure CLI. Вам нужен идентификатор ресурса для ресурса Службы коммуникации Azure, найденного в портал Azure. (Идентификатор ресурса выглядит примерно так:/subscriptions/<<AZURE SUBSCRIPTION ID>>/resourceGroups/<<RESOURCE GROUP NAME>>/providers/Microsoft.Communication/CommunicationServices/<<RESOURCE NAME>>
)az eventgrid event-subscription create --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type webhook --endpoint "<<NGROK URL>>/runtime/webhooks/EventGrid?functionName=<<FUNCTION NAME>> " --source-resource-id "<<RESOURCE_ID>>" --included-event-types Microsoft.Communication.CallStarted
Теперь, когда все подключено, протестируйте поток, запустив вызов ресурса. Вы увидите журналы консоли в терминале, где выполняется функция. Вы можете проверка, что запись начинается с помощью функции записи вызовов в пакете SDK для вызова и проверка для логического включения true.
Развернуть в Azure
Чтобы развернуть функцию Azure в Azure, необходимо выполнить следующие инструкции. После развертывания мы настроим сетку событий для ресурса Службы коммуникации Azure. С URL-адресом развернутой функции Azure (URL-адрес, найденный в портал Azure под функцией), мы выполните аналогичную команду:
az eventgrid event-subscription update --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type azurefunction --endpoint "<<AZ FUNCTION URL>> " --source-resource-id "<<RESOURCE_ID>>"
Так как мы обновляем созданную подписку на события, обязательно используйте то же имя подписки на события, которое вы использовали на предыдущем шаге.
Вы можете протестировать, выполнив вызов в ресурсе, как показано на предыдущем шаге.