Freigeben über


So steuern Sie Medienaktionen während eines Anrufs mit der Anrufautomatisierung

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 Entwickler*innen während Anrufen zur Verfügung stehen, z. B. „DTMF senden“ und „Fortlaufende DTMF-Erkennung“. Den Aktionen ist ein Beispielcode beigefügt, der zeigt, wie die betreffende Aktion aufgerufen werden kann.

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

Hinweis

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

Als Voraussetzung wird empfohlen, die folgenden Artikel zu lesen, um diesen Leitfaden optimal nutzen zu können:

  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 kontrollieren und steuern, wodurch Sie mehr über die Grundlagen des Umgangs mit einem Anruf erfahren.

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 externe*n Teilnehmer*in senden. Dies kann hilfreich sein, wenn Sie bereits an einem Anruf teilnehmen und eine*n andere*n Teilnehmer*in einladen müssen, der*die über eine Durchwahlnummer oder ein IVR-Menü verfügt, um zu navigieren.

Hinweis

Dies wird nur für externe PSTN-Teilnehmende unterstützt. Es können maximal 18 Tönen gleichzeitig gesendet werden.

SendDtmfAsync-Methode

Senden Sie eine Liste der DTMF-Töne an externe Teilnehmende.

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 Ereignisse SendDtmfTonesCompleted und 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); 
} 

Fortlaufende 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 die anvisierten Teilnehmenden auf eine Taste auf der Wähltastatur drückt. Diese Töne werden nacheinander an Ihre Anwendung gesendet, während der*die Teilnehmer*in sie drückt.

StartContinuousDtmfRecognitionAsync-Methode

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

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

Wenn Ihre Anwendung keine DTMF-Töne mehr von Teilnehmenden empfangen soll, können Sie die StopContinuousDtmfRecognitionAsync-Methode verwenden, um Azure Communication Services mitzuteilen, dass DTMF-Töne nicht mehr erkannt werden sollen.

StopContinuousDtmfRecognitionAsync

Beenden Sie die Erkennung von DTMF-Tönen, die von Teilnehmenden 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, wie Sie einen erfolgreich erkannten DTMF-Ton behandeln können.

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

Azure Communication Services bietet Ihnen eine SequenceId als Teil des ContinuousDtmfRecognitionToneReceived-Ereignisses, mit der Ihre Anwendung die Reihenfolge rekonstruieren kann, in der Teilnehmende die DTMF-Töne eingegeben haben.

ContinuousDtmfRecognitionFailed-Ereignis

Beispiel, wie Sie vorgehen können, 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 kontinuierliche DTMF-Erkennung gestoppt wurde, sei es, weil Ihre Anwendung das StopContinuousDtmfRecognitionAsync-Ereignis aufgerufen hat oder weil der Anruf beendet wurde.

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

Halten

Mit der Aktion „Halten“ können Entwickler*innen vorübergehend eine Unterhaltung zwischen Teilnehmenden und einem System oder Agent anhalten. Dies kann hilfreich sein, wenn Teilnehmende an einen anderen Agenten oder eine andere Abteilung übertragen werden müssen oder wenn der Agent einen Vorgesetzten im Hintergrund konsultieren muss, bevor er die Unterhaltung fortsetzt. Während dieser Zeit können Sie den wartenden Teilnehmenden Audio vorspielen.

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

Nicht halten

Mit der Aktion „Nicht halten“ können Entwickler*innen eine Unterhaltung zwischen Teilnehmenden und einem System oder Agent fortsetzen, die zuvor angehalten wurde. Wenn die Teilnehmenden nicht mehr warten müssen, können sie das System oder den Agenten wieder hören.

var unHoldOptions = new UnholdOptions(target) 
{ 
    OperationContext = "UnHoldPstnParticipant" 
}; 

// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);

/* 
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/