Teilen über


So steuern Sie Medienaktionen mit mittlerer Anrufsteuerung

Die Anrufautomatisierung verwendet eine REST-API-Schnittstelle, um Anforderungen für Aktionen zu empfangen und Antworten bereitzustellen, um darüber zu informieren, ob die Anforderung erfolgreich übermittelt wurde. Da Anrufe asynchron erfolgen, verfügen die meisten Aktionen über entsprechende Ereignisse, die ausgelöst werden, wenn die Aktion erfolgreich oder mit Fehlern abgeschlossen wird. In diesem Leitfaden werden die Aktionen behandelt, die Entwicklern während Anrufen zur Verfügung stehen, z. B. "DTMF senden" und "Fortlaufende DTMF-Erkennung". Aktionen werden mit Beispielcode zum Aufrufen der genannten Aktion begleitet.

Die Anrufautomatisierung unterstützt verschiedene andere Aktionen zum Verwalten von Anrufen und Aufzeichnungen, die in diesem Handbuch nicht enthalten sind.

Hinweis

Die Anrufautomatisierung kann derzeit nicht mit Microsoft Teams interagieren. Aktionen wie das Tätigen, Umleiten eines Anrufs an einen Teams-Benutzer oder das Wiedergeben von Audio an einen Teams-Benutzer mithilfe der Anrufautomatisierung werden nicht unterstützt.

Als Voraussetzung empfehlen wir Ihnen, die folgenden Artikel zu lesen, um dieses Handbuch optimal zu nutzen:

  1. Im Leitfaden mit Konzepten der Anrufautomatisierung werden das Programmiermodell für Aktionen und Ereignisse sowie Ereignisrückrufe beschrieben.
  2. Erfahren Sie mehr über Benutzerbezeichner wie CommunicationUserIdentifier und PhoneNumberIdentifier, die in diesem Leitfaden verwendet werden.
  3. Erfahren Sie mehr darüber , wie Sie Anrufe mit der Anrufautomatisierung steuern und steuern, was Sie über die Grundlagen des Umgangs mit einem Anruf unterrichtet.

Für alle Codebeispiele ist client das CallAutomationClient-Objekt, das wie gezeigt erstellt werden kann, und callConnection ist das CallConnection-Objekt, das aus der Antwort oder der CreateCall-Antwort abgerufen wird. Sie können es auch aus Rückrufereignissen abrufen, die von Ihrer Anwendung empfangen wurden.

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

DTMF senden

Sie können DTMF-Töne an einen externen Teilnehmer senden. Dies kann hilfreich sein, wenn Sie bereits an einem Anruf teilnehmen und einen anderen Teilnehmer einladen müssen, der über eine Durchwahlnummer oder ein IVR-Menü verfügt, um zu navigieren.

Hinweis

Dies wird nur für externe PSTN-Teilnehmer unterstützt und unterstützt das Senden von maximal 18 Tönen gleichzeitig.

SendDtmfAsync-Methode

Senden Sie eine Liste der DTMF-Töne an einen externen Teilnehmer.

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

Wenn Ihre Anwendung diese DTMF-Töne sendet, erhalten Sie Ereignisupdates. Sie können die Geschäftslogik in Ihrer Anwendung mithilfe der SendDtmfTonesCompleted Ereignisse SendDtmfTonesFailed erstellen, um die nächsten Schritte zu ermitteln.

Beispiel für ein SendDtmfTonesCompleted-Ereignis

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

Beispiel für SendDtmfTonesFailed

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

Kontinuierliche DTMF-Erkennung

Sie können den Empfang fortlaufender DTMF-Töne während des gesamten Anrufs abonnieren. Ihre Anwendung empfängt DTMF-Töne, wenn der Zielteilnehmer auf einer Taste auf der Wähltastatur drückt. Diese Töne werden nacheinander an Ihre Anwendung gesendet, während der Teilnehmer sie drückt.

StartContinuousDtmfRecognitionAsync-Methode

Beginnen Sie mit der Erkennung von DTMF-Tönen, die von einem Teilnehmer gesendet werden.

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

Wenn Ihre Anwendung keine DTMF-Töne mehr vom Teilnehmer empfangen möchte, können Sie die StopContinuousDtmfRecognitionAsync Methode verwenden, um Azure Communication Services mitzuteilen, dass die Erkennung von DTMF-Tönen nicht mehr erkannt wird.

StopContinuousDtmfRecognitionAsync

Beenden Sie die Erkennung von DTMF-Tönen, die vom Teilnehmer gesendet werden.

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

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

Ihre Anwendung empfängt Ereignisupdates, wenn diese Aktionen erfolgreich sind oder fehlschlagen. Sie können diese Ereignisse verwenden, um benutzerdefinierte Geschäftslogik zu erstellen, um den nächsten Schritt zu konfigurieren, den Ihre Anwendung ausführen muss, wenn sie diese Ereignisupdates empfängt.

ContinuousDtmfRecognitionToneReceived-Ereignis

Beispiel für eine erfolgreiche Behandlung eines DTMF-Tons.

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

Azure Communication Services bietet Ihnen einen SequenceId Teil des ContinuousDtmfRecognitionToneReceived Ereignisses, mit dem Ihre Anwendung die Reihenfolge rekonstruieren kann, in der der Teilnehmer die DTMF-Töne eingegeben hat.

ContinuousDtmfRecognitionFailed-Ereignis

Beispiel für die Behandlung, wenn die DTMF-Tonerkennung fehlschlägt.

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

ContinuousDtmfRecogntionStopped-Ereignis

Beispiel für die Behandlung, wenn die fortlaufende DTMF-Erkennung beendet wurde, kann dies darauf zurückzuführen sein, dass die Anwendung das StopContinuousDtmfRecognitionAsync Ereignis aufgerufen hat oder weil der Aufruf beendet wurde.

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