Управление действиями мультимедиа среднего вызова с помощью службы автоматизации вызовов
Служба автоматизации вызовов использует интерфейс REST API для получения запросов на действия и предоставления ответов, чтобы сообщить, был ли запрос успешно отправлен или нет. Из-за асинхронного характера вызова большинство действий имеют соответствующие события, которые активируются при успешном завершении или сбое действия. В этом руководстве рассматриваются действия, доступные разработчикам во время звонков, таких как отправка DTMF и непрерывное распознавание DTMF. Действия сопровождаются примером кода по вызову указанного действия.
Служба автоматизации звонков поддерживает различные другие действия для управления вызовами и записью, которые не включены в это руководство.
Примечание.
Автоматизация вызовов в настоящее время не взаимодействует с Microsoft Teams. Такие действия, как выполнение, перенаправление вызова пользователю Teams или воспроизведение звука пользователю Teams с помощью службы автоматизации вызовов не поддерживается.
В качестве необходимых условий рекомендуется ознакомиться со следующими статьями, чтобы получить большую часть этого руководства:
- Основные понятия службы автоматизации вызовов, описывающие модель программирования действий и обратные вызовы событий.
- Сведения об идентификаторах пользователей, таких как CommunicationUserIdentifier и PhoneNumberIdentifier, используемых в этом руководстве.
- Узнайте больше о том, как управлять вызовами и управлять ими с помощью службы автоматизации вызовов, которая учит вас работе с основами работы с вызовом.
Для всех примеров client
кода используется объект CallAutomationClient, который можно создать, как показано, и callConnection
является объектом CallConnection, полученным из ответа Answer или CreateCall. Вы также можете получить его из событий обратного вызова, полученных приложением.
var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");
Отправка DTMF
Вы можете отправлять тоны DTMF внешнему участнику, что может оказаться полезным, если вы уже находитесь на вызове и хотите пригласить другого участника, у которого есть номер расширения или меню IVR для перехода.
Примечание.
Это поддерживается только для внешних участников ТСОП и поддерживает отправку не более 18 тонов за раз.
Метод SendDtmfAsync
Отправьте список тонов DTMF внешнему участнику.
var tones = new DtmfTone[] { DtmfTone.One, DtmfTone.Two, DtmfTone.Three, DtmfTone.Pound };
var sendDtmfTonesOptions = new SendDtmfTonesOptions(tones, new PhoneNumberIdentifier(calleePhonenumber))
{
OperationContext = "dtmfs-to-ivr"
};
var sendDtmfAsyncResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.SendDtmfTonesAsync(sendDtmfTonesOptions);
Когда приложение отправляет эти тоны DTMF, вы получаете обновления событий. Вы можете использовать SendDtmfTonesCompleted
события и SendDtmfTonesFailed
события для создания бизнес-логики в приложении, чтобы определить следующие действия.
Пример события SendDtmfTonesCompleted
if (acsEvent is SendDtmfTonesCompleted sendDtmfCompleted)
{
logger.LogInformation("Send DTMF succeeded, context={context}", sendDtmfCompleted.OperationContext);
}
Пример SendDtmfTonesFailed
if (acsEvent is SendDtmfTonesFailed sendDtmfFailed)
{
logger.LogInformation("Send dtmf failed: result={result}, context={context}",
sendDtmfFailed.ResultInformation?.Message, sendDtmfFailed.OperationContext);
}
Непрерывное распознавание DTMF
Вы можете подписаться на непрерывные тоны DTMF во время вызова. Приложение получает тон DTMF, так как целевой участник нажимает клавишу на клавиатуре. Эти тоны отправляются в приложение по одному, так как участник нажимает их.
Метод StartContinuousDtmfRecognitionAsync
Начните обнаруживать тоны DTMF, отправленные участником.
await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartContinuousDtmfRecognitionAsync(new PhoneNumberIdentifier(c2Target), "dtmf-reco-on-c2");
Если приложение больше не хочет получать от участника тон DTMF, вы можете использовать StopContinuousDtmfRecognitionAsync
этот метод, чтобы сообщить Службы коммуникации Azure знать, чтобы остановить обнаружение тонов DTMF.
StopContinuousDtmfRecognitionAsync
Остановите обнаружение тонов DTMF, отправленных участником.
var continuousDtmfRecognitionOptions = new ContinuousDtmfRecognitionOptions(new PhoneNumberIdentifier(callerPhonenumber))
{
OperationContext = "dtmf-reco-on-c2"
};
var startContinuousDtmfRecognitionAsyncResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartContinuousDtmfRecognitionAsync(continuousDtmfRecognitionOptions);
Приложение получает обновления событий при успешном выполнении или сбое этих действий. Эти события можно использовать для создания пользовательской бизнес-логики, чтобы настроить следующий шаг, который необходимо выполнить при получении этих обновлений событий.
Событие ContinuousDtmfRecognitionToneReceived
Пример успешного обнаружения тона DTMF.
if (acsEvent is ContinuousDtmfRecognitionToneReceived continuousDtmfRecognitionToneReceived)
{
logger.LogInformation("Tone detected: sequenceId={sequenceId}, tone={tone}",
continuousDtmfRecognitionToneReceived.SequenceId,
continuousDtmfRecognitionToneReceived.Tone);
}
Службы коммуникации Azure предоставляет в SequenceId
рамках ContinuousDtmfRecognitionToneReceived
события, которое приложение может использовать для восстановления порядка, в котором участник вошел в тон DTMF.
Событие ContinuousDtmfRecognitionFailed
Пример того, как можно обрабатывать при сбое обнаружения тонов DTMF.
if (acsEvent is ContinuousDtmfRecognitionToneFailed continuousDtmfRecognitionToneFailed)
{
logger.LogInformation("Start continuous DTMF recognition failed, result={result}, context={context}",
continuousDtmfRecognitionToneFailed.ResultInformation?.Message,
continuousDtmfRecognitionToneFailed.OperationContext);
}
Событие ContinuousDtmfRecogntionStopped
Пример того, как обрабатывать при остановке непрерывного распознавания DTMF, это может быть связано с тем, что ваше приложение вызвало StopContinuousDtmfRecognitionAsync
событие или завершилось вызов.
if (acsEvent is ContinuousDtmfRecognitionStopped continuousDtmfRecognitionStopped)
{
logger.LogInformation("Continuous DTMF recognition stopped, context={context}", continuousDtmfRecognitionStopped.OperationContext);
}
Удержание
Действие удержания позволяет разработчикам временно приостановить беседу между участником и системой или агентом. Это может быть полезно в сценариях, когда участнику необходимо передать другому агенту или отделу или когда агенту необходимо обратиться к руководителю в фоновом режиме, прежде чем продолжить беседу. В это время вы можете воспроизвести звук для участника, который находится на удержании.
// Option 1: Hold without additional options
await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia().HoldAsync(c2Target);
/*
// Option 2: Hold with play source
PlaySource playSource = /* initialize playSource */;
await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia().HoldAsync(c2Target, playSource);
// Option 3: Hold with options
var holdOptions = new HoldOptions(target)
{
OperationCallbackUri = new Uri(""),
OperationContext = "holdcontext"
};
await callMedia.HoldAsync(holdOptions);
*/
Прекращение удержания
Действие отмены удержания позволяет разработчикам возобновить беседу между участником и системой или агентом, который ранее был приостановлен. Когда участник отключается, он сможет снова услышать систему или агент.
var unHoldOptions = new UnholdOptions(target)
{
OperationContext = "UnHoldPstnParticipant"
};
// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);
/*
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/
Потоковая передача звука (общедоступная предварительная версия)
Потоковая передача звука позволяет подписаться на потоки звука в режиме реального времени из текущего вызова. Дополнительные сведения о начале работы с потоковой передачей звука и сведениями о событиях обратного вызова потоковой передачи звука см . на этой странице.
Транскрибирование в режиме реального времени (общедоступная предварительная версия)
Транскрибирование в режиме реального времени позволяет получить доступ к динамическим транскрибированиям для звука текущего звонка. Дополнительные сведения о начале работы с транскрибированием в режиме реального времени и сведениями о событиях обратного вызова транскрибирования в режиме реального времени см . на этой странице.
Таблица совместимости действий мультимедиа
В следующей таблице показано, какие операции мультимедиа разрешены для запуска или очереди, если предыдущая операция по-прежнему выполняется или находится в очереди.
Существующая операция | Вызов ноги | Допустимо | Запрещено |
---|---|---|---|
PlayToAll | Главная | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | нет |
Распознать (негрупповый вызов) | Главная | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | нет |
Воспроизведение | Под | PlayToAll, Recognize(Non-Group Call) | PlayTo, Recognize(Групповой вызов), SendDTMF, StartContinuousDtmfRecognition |
Распознать(групповой вызов) | Под | PlayToAll, Recognize(Non-Group Call) | PlayTo, Recognize(Групповой вызов), SendDTMF, StartContinuousDtmfRecognition |
SendDTMF | Под | PlayToAll, Recognize(Non-Group Call) | PlayTo, Recognize(Групповой вызов), SendDTMF, StartContinuousDtmfRecognition |
StartContinuousDtmfRecognition | Под | PlayToAll, Recognize(Non-Group Call),PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Нет |