Управление действиями мультимедиа среднего вызова с помощью службы автоматизации вызовов

Служба автоматизации вызовов использует интерфейс REST API для получения запросов на действия и предоставления ответов, чтобы сообщить, был ли запрос успешно отправлен или нет. Из-за асинхронного характера вызова большинство действий имеют соответствующие события, которые активируются при успешном завершении или сбое действия. В этом руководстве рассматриваются действия, доступные разработчикам во время звонков, таких как отправка DTMF и непрерывное распознавание DTMF. Действия сопровождаются примером кода по вызову указанного действия.

Служба автоматизации звонков поддерживает различные другие действия для управления вызовами и записью, которые не включены в это руководство.

Примечание.

Автоматизация вызовов в настоящее время не взаимодействует с Microsoft Teams. Такие действия, как выполнение, перенаправление вызова пользователю Teams или воспроизведение звука пользователю Teams с помощью службы автоматизации вызовов не поддерживается.

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

  1. Основные понятия службы автоматизации вызовов, описывающие модель программирования действий и обратные вызовы событий.
  2. Сведения об идентификаторах пользователей, таких как CommunicationUserIdentifier и Телефон NumberIdentifier, используемых в этом руководстве.
  3. Узнайте больше о том, как управлять вызовами и управлять ими с помощью службы автоматизации вызовов, которая учит вас работе с основами работы с вызовом.

Для всех примеров client кода используется объект CallAutomationClient, который можно создать как показано и callConnection является объектом Call Подключение ion, полученным из ответа 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); 
}