Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба автоматизации вызовов использует интерфейс REST API для получения запросов на действия и предоставления ответов, чтобы сообщить, был ли запрос успешно отправлен или нет. Из-за асинхронного характера вызова большинство действий имеют соответствующие события, которые активируются при успешном завершении или сбое действия. В этой статье рассматриваются действия, доступные разработчикам во время звонков, например SendDTMF
и ContinuousDtmfRecognition
. Действия сопровождаются примером кода по вызову конкретного действия.
Служба автоматизации вызовов поддерживает другие действия для управления вызовами и записями, которые не включены в эту статью.
Note
Автоматизация вызовов в настоящее время не взаимодействует с Microsoft Teams. Действия, такие как выполнение или перенаправление вызова пользователю Teams или воспроизведение звука пользователю Teams с помощью службы автоматизации вызовов, не поддерживаются.
Prerequisites
- Ознакомьтесь со статьёй понятия автоматизации вызовов, которая описывает модель программирования с использованием событий и обратные вызовы событий.
- Сведения об идентификаторах пользователей, таких как
CommunicationUserIdentifier
иPhoneNumberIdentifier
которые используются в этой статье. - Узнайте больше о том, как управлять и направлять вызовами с помощью Автоматизации вызовов, которая ознакомит вас с основами работы с вызовами.
Для всех примеров client
кода — это CallAutomationClient
объект, который можно создать, как показано, и callConnection
является CallConnection
объектом, полученным из Answer
или CreateCall
ответа. Вы также можете получить его из событий обратного вызова, получаемых приложением.
var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");
Отправка DTMF
Вы можете отправлять двухтональные многочастотные (DTMF) сигналы внешнему участнику. Эта возможность может оказаться полезной, если вы уже на вызове и хотите пригласить другого участника, у которого есть номер расширения или использовать интерактивное меню голосового ответа.
Note
Эта функция поддерживается только для внешних участников в общедоступных телефонных сетях и поддерживает отправку не более 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 прекратить их обнаружение.
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);
}
Событие ContinuousDtmfRecognitionStopped
Пример того, что делать при остановке непрерывного распознавания DTMF. Может быть, ваше приложение вызвало StopContinuousDtmfRecognitionAsync
событие или вызов закончился.
if (acsEvent is ContinuousDtmfRecognitionStopped continuousDtmfRecognitionStopped)
{
logger.LogInformation("Continuous DTMF recognition stopped, context={context}", continuousDtmfRecognitionStopped.OperationContext);
}
Hold
Действие удержания позволяет разработчикам временно приостановить беседу между участником и системой или агентом. Эта функция полезна в ситуациях, когда участника нужно перевести к другому агенту или отделу, или когда агенту необходимо проконсультироваться с руководителем перед тем, как продолжить беседу. В течение этого времени вы можете воспроизвести аудиосообщение для удерживаемого участника.
// 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);
*/
Unhold
Действие снятия удержания позволяет разработчикам возобновить беседу между участником и системой или агентом, который был ранее приостановлен. Когда участник снимается с удержания, он снова может слышать систему и агента.
var unHoldOptions = new UnholdOptions(target)
{
OperationContext = "UnHoldPstnParticipant"
};
// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);
/*
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/
Потоковая передача звука
С помощью потоковой передачи звука вы можете подписаться на потоки звука в режиме реального времени из текущего вызова. Дополнительные сведения о начальном этапе работы с потоковой передачей звука и информации о событиях обратного вызова при потоковой передаче звука см. в кратком руководстве: потоковая передача звука на серверной стороне.
Транскрибирование в режиме реального времени
Используя транскрибирование в режиме реального времени, вы можете получить доступ к динамическим транскрибированиям для звука текущего звонка. Дополнительные сведения о начале работы с транскрибированием в режиме реального времени и сведениями о событиях обратного вызова транскрибирования в режиме реального времени см. в статье "Добавление транскрибирования в режиме реального времени" в приложение.
Таблица совместимости действий мультимедиа
В следующей таблице показано, какие операции мультимедиа разрешены к выполнению или постановке в очередь, если предыдущая операция по-прежнему выполняется или находится в очереди.
Существующая операция | Вызов ноги | Allowed | Disallowed |
---|---|---|---|
PlayToAll |
Main |
PlayToAll
Recognize(Non-Group Call)
PlayTo
Recognize(Group Call)
SendDTMF
StartContinuousDtmfRecognition
|
None |
Recognize(Non-Group Call) |
Main |
PlayToAll
Recognize(Non-Group Call)
PlayTo
Recognize(Group Call)
SendDTMF
StartContinuousDtmfRecognition
|
None |
PlayTo |
Sub |
PlayToAll , Recognize(Non-Group Call) |
PlayTo
Recognize(Group Call)
SendDTMF
StartContinuousDtmfRecognition
|
Recognize(Group Call) |
Sub |
PlayToAll , Recognize(Non-Group Call) |
PlayTo
Recognize(Group Call)
SendDTMF
StartContinuousDtmfRecognition
|
SendDTMF |
Sub |
PlayToAll , Recognize(Non-Group Call) |
PlayTo
Recognize(Group Call)
SendDTMF
StartContinuousDtmfRecognition
|
StartContinuousDtmfRecognition |
Sub |
PlayToAll , Recognize(Non-Group Call) ,PlayTo , Recognize(Group Call) , SendDTMF ,StartContinuousDtmfRecognition |
None |