Compartir vía


Cómo controlar las acciones multimedia de llamadas intermedias con Automatización de llamadas

La automatización de llamadas usa una interfaz de API REST para recibir solicitudes de acciones y proporcionar respuestas que notifiquen si la solicitud se ha enviado correctamente o no. Debido a la naturaleza asincrónica de las llamadas, la mayoría de las acciones tienen eventos correspondientes que se desencadenan cuando la acción se completa correctamente o se produce un error. En esta guía se tratan las acciones disponibles para los desarrolladores durante las llamadas, como Enviar DTMF y Reconocimiento continuo de DTMF. Las acciones se acompañan con código de ejemplo sobre cómo invocar dicha acción.

Call Automation admite otras acciones para administrar llamadas y grabaciones que no se incluyen en esta guía.

Nota:

Actualmente, Automatización de llamadas no interopera con Microsoft Teams. No se admiten acciones como realizar, redirigir una llamada a un usuario de Teams o reproducir audio a un usuario de Teams mediante Automatización de llamadas.

Como requisito previo, le recomendamos que lea los siguientes artículos para sacar el máximo partido de esta guía:

  1. Guía de conceptos de la automatización de llamadas que describe el modelo de programación de eventos de acción y las devoluciones de llamada de evento.
  2. Obtenga información sobre los identificadores de usuario, como CommunicationUserIdentifier y PhoneNumberIdentifier, que se usan en esta guía.
  3. Obtenga más información sobre cómo controlar y dirigir las llamadas con Automatización de llamadas, que le enseña sobre cómo trabajar con los conceptos básicos de tratar con una llamada.

Para todos los ejemplos de código, client es el objeto CallAutomationClient que se puede crear tal como se muestra y callConnection es el objeto CallConnection que se obtiene de la respuesta Answer o CreateCall. También se puede obtener de los eventos de devolución de llamada que recibe la aplicación.

var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");

Enviar DTMF

Puede enviar tonos DTMF a un participante externo, que puede ser útil cuando ya esté en una llamada y necesite invitar a otro participante que tenga un número de extensión o un menú IVR para navegar.

Nota:

Esto solo se admite para los participantes RTC externos y admite el envío de un máximo de 18 tonos a la vez.

SendDtmfAsync (método)

Enviar una lista de tonos DTMF a un participante externo.

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); 

Cuando la aplicación envía estos tonos DTMF, recibirá actualizaciones de eventos. Puede usar los SendDtmfTonesCompleted eventos y SendDtmfTonesFailed para crear lógica de negocios en la aplicación para determinar los pasos siguientes.

Ejemplo de evento SendDtmfTonesCompleted

if (acsEvent is SendDtmfTonesCompleted sendDtmfCompleted) 
{ 
    logger.LogInformation("Send DTMF succeeded, context={context}", sendDtmfCompleted.OperationContext); 
} 

Ejemplo de SendDtmfTonesFailed

if (acsEvent is SendDtmfTonesFailed sendDtmfFailed) 
{ 
    logger.LogInformation("Send dtmf failed: result={result}, context={context}", 
        sendDtmfFailed.ResultInformation?.Message, sendDtmfFailed.OperationContext); 
} 

Reconocimiento continuo de DTMF

Puede suscribirse para recibir tonos DTMF continuos a lo largo de la llamada. La aplicación recibe tonos DTMF a medida que el participante de destino presiona una tecla en su teclado. Estos tonos se envían a la aplicación uno por uno, ya que el participante los presiona.

StartContinuousDtmfRecognitionAsync (método)

Comience a detectar los tonos DTMF enviados por un participante.

await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .StartContinuousDtmfRecognitionAsync(new PhoneNumberIdentifier(c2Target), "dtmf-reco-on-c2"); 

Cuando la aplicación ya no quiera recibir tonos DTMF del participante, puede usar el StopContinuousDtmfRecognitionAsync método para que Azure Communication Services sepa para dejar de detectar los tonos DTMF.

StopContinuousDtmfRecognitionAsync

Deje de detectar los tonos DTMF enviados por el participante.

var continuousDtmfRecognitionOptions = new ContinuousDtmfRecognitionOptions(new PhoneNumberIdentifier(callerPhonenumber)) 
{ 
    OperationContext = "dtmf-reco-on-c2" 
}; 

var startContinuousDtmfRecognitionAsyncResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .StartContinuousDtmfRecognitionAsync(continuousDtmfRecognitionOptions); 

La aplicación recibe actualizaciones de eventos cuando estas acciones se realizan correctamente o no. Puede usar estos eventos para crear lógica de negocios personalizada para configurar el siguiente paso que debe llevar a cabo la aplicación cuando reciba estas actualizaciones de eventos.

ContinuousDtmfRecognitionToneReceived (evento)

Ejemplo de cómo puede controlar correctamente un tono DTMF detectado.

if (acsEvent is ContinuousDtmfRecognitionToneReceived continuousDtmfRecognitionToneReceived) 
{ 
	logger.LogInformation("Tone detected: sequenceId={sequenceId}, tone={tone}", 
	continuousDtmfRecognitionToneReceived.SequenceId, 
        continuousDtmfRecognitionToneReceived.Tone); 
} 

Azure Communication Services proporciona un SequenceId elemento como parte del ContinuousDtmfRecognitionToneReceived evento, que la aplicación puede usar para reconstruir el orden en el que el participante entró en los tonos DTMF.

ContinuousDtmfRecognitionFailed (evento)

Ejemplo de cómo se puede controlar cuando se produce un error en la detección de tono DTMF.

if (acsEvent is ContinuousDtmfRecognitionToneFailed continuousDtmfRecognitionToneFailed) 
{ 
    logger.LogInformation("Start continuous DTMF recognition failed, result={result}, context={context}", 
        continuousDtmfRecognitionToneFailed.ResultInformation?.Message, 
        continuousDtmfRecognitionToneFailed.OperationContext); 
} 

ContinuousDtmfRecogntionStopped (evento)

Ejemplo de cómo controlar cuándo se ha detenido el reconocimiento continuo de DTMF, esto podría deberse a que la aplicación invocó el StopContinuousDtmfRecognitionAsync evento o porque la llamada ha finalizado.

if (acsEvent is ContinuousDtmfRecognitionStopped continuousDtmfRecognitionStopped) 
{ 
    logger.LogInformation("Continuous DTMF recognition stopped, context={context}", continuousDtmfRecognitionStopped.OperationContext); 
}