Arama Otomasyonu ile arama ortası medya eylemlerini denetleme
Çağrı Otomasyonu, eylemlere yönelik istekleri almak ve isteğin başarıyla gönderilip gönderilmediğini bildirmek üzere yanıtlar sağlamak için REST API arabirimi kullanır. Çağırmanın zaman uyumsuz yapısı nedeniyle çoğu eylem, eylem başarıyla tamamlandığında veya başarısız olduğunda tetiklenen ilgili olaylara sahiptir. Bu kılavuz, aramalar sırasında DTMF Gönderme ve Sürekli DTMF Tanıma gibi geliştiricilerin kullanabileceği eylemleri kapsar. Eylemlere, söz edilen eylemin nasıl çağrıldığını gösteren örnek kod eşlik eder.
Çağrı Otomasyonu, bu kılavuza dahil olmayan çağrıları ve kaydı yönetmek için diğer çeşitli eylemleri destekler.
Not
Çağrı Otomasyonu şu anda Microsoft Teams ile birlikte çalışmıyor. Arama Otomasyonu kullanarak Teams kullanıcısına arama yapma, aramayı yeniden yönlendirme veya Teams kullanıcısına ses çalma gibi eylemler desteklenmez.
Önkoşul olarak, bu kılavuzdan en iyi şekilde emin olmak için aşağıdaki makaleleri okumanızı öneririz:
- Eylem-olay programlama modelini ve olay geri çağırmalarını açıklayan Çağrı Otomasyonu kavramları kılavuzu .
- Bu kılavuzda kullanılan CommunicationUserIdentifier ve PhoneNumberIdentifier gibi kullanıcı tanımlayıcıları hakkında bilgi edinin.
- Çağrı otomasyonu ile çağrıları denetleme ve yönlendirme hakkında daha fazla bilgi edinin. Bu, size bir çağrıyla ilgilenmenin temellerini öğretir.
Tüm kod örnekleri için, client
gösterildiği gibi oluşturulabilen CallAutomationClient nesnesidir ve callConnection
Answer veya CreateCall yanıtından alınan CallConnection nesnesidir. Ayrıca, uygulamanız tarafından alınan geri çağırma olaylarından da alabilirsiniz.
var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");
DTMF Gönderme
Bir dış katılımcıya DTMF tonları gönderebilirsiniz. Bu, zaten bir aramada olduğunuzda ve uzantı numarası veya IVR menüsü olan başka bir katılımcıyı gezinmeye davet etmeniz gerektiğinde yararlı olabilir.
Not
Bu yalnızca dış PSTN katılımcıları için desteklenir ve aynı anda en fazla 18 ton göndermeyi destekler.
SendDtmfAsync Yöntemi
Dış katılımcıya DTMF tonlarının listesini gönderin.
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);
Uygulamanız bu DTMF tonlarını gönderdiğinde olay güncelleştirmeleri alırsınız. Sonraki adımları belirlemek üzere uygulamanızda iş mantığı oluşturmak için ve SendDtmfTonesFailed
olaylarını kullanabilirsinizSendDtmfTonesCompleted
.
SendDtmfTonesCompleted olayı örneği
if (acsEvent is SendDtmfTonesCompleted sendDtmfCompleted)
{
logger.LogInformation("Send DTMF succeeded, context={context}", sendDtmfCompleted.OperationContext);
}
SendDtmfTonesFailed örneği
if (acsEvent is SendDtmfTonesFailed sendDtmfFailed)
{
logger.LogInformation("Send dtmf failed: result={result}, context={context}",
sendDtmfFailed.ResultInformation?.Message, sendDtmfFailed.OperationContext);
}
Sürekli DTMF Tanıma
Arama boyunca sürekli DTMF tonları almak için abone olabilirsiniz. Hedeflenen katılımcı tuş takımındaki bir tuşa bastığında uygulamanız DTMF tonlarını alır. Bu tonlar, katılımcı bunlara bastığında uygulamanıza tek tek gönderilir.
StartContinuousDtmfRecognitionAsync Yöntemi
Katılımcı tarafından gönderilen DTMF tonlarını algılamaya başlayın.
await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartContinuousDtmfRecognitionAsync(new PhoneNumberIdentifier(c2Target), "dtmf-reco-on-c2");
Uygulamanız artık katılımcıdan DTMF tonları almak istediğinde, Azure İletişim Hizmetleri DTMF tonlarını algılamayı durdurmasını bildirmek için yöntemini kullanabilirsinizStopContinuousDtmfRecognitionAsync
.
StopContinuousDtmfRecognitionAsync
Katılımcı tarafından gönderilen DTMF tonlarını algılamayı durdurun.
var continuousDtmfRecognitionOptions = new ContinuousDtmfRecognitionOptions(new PhoneNumberIdentifier(callerPhonenumber))
{
OperationContext = "dtmf-reco-on-c2"
};
var startContinuousDtmfRecognitionAsyncResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartContinuousDtmfRecognitionAsync(continuousDtmfRecognitionOptions);
Uygulamanız, bu eylemler başarılı veya başarısız olduğunda olay güncelleştirmelerini alır. Uygulamanızın bu olay güncelleştirmelerini aldığında gerçekleştirmesi gereken bir sonraki adımı yapılandırmak üzere özel iş mantığı oluşturmak için bu olayları kullanabilirsiniz.
ContinuousDtmfRecognitionToneReceived Olayı
Algılanan bir DTMF tonunun nasıl işleneceğini gösteren örnek.
if (acsEvent is ContinuousDtmfRecognitionToneReceived continuousDtmfRecognitionToneReceived)
{
logger.LogInformation("Tone detected: sequenceId={sequenceId}, tone={tone}",
continuousDtmfRecognitionToneReceived.SequenceId,
continuousDtmfRecognitionToneReceived.Tone);
}
Azure İletişim Hizmetleri, size etkinliğin ContinuousDtmfRecognitionToneReceived
bir parçası olarak, uygulamanızın katılımcının DTMF tonlarına girme sırasını yeniden oluşturmak için kullanabileceği bir SequenceId
sağlar.
ContinuousDtmfRecognitionFailed Olayı
DTMF ton algılaması başarısız olduğunda nasıl işleyebileceğinize örnek.
if (acsEvent is ContinuousDtmfRecognitionToneFailed continuousDtmfRecognitionToneFailed)
{
logger.LogInformation("Start continuous DTMF recognition failed, result={result}, context={context}",
continuousDtmfRecognitionToneFailed.ResultInformation?.Message,
continuousDtmfRecognitionToneFailed.OperationContext);
}
ContinuousDtmfRecogntionStopped Olayı
Sürekli DTMF tanıma durdurulduğunda nasıl işleneceğini gösteren örnek, bunun nedeni uygulamanızın olayı çağırması veya çağrının StopContinuousDtmfRecognitionAsync
sona ermiş olması olabilir.
if (acsEvent is ContinuousDtmfRecognitionStopped continuousDtmfRecognitionStopped)
{
logger.LogInformation("Continuous DTMF recognition stopped, context={context}", continuousDtmfRecognitionStopped.OperationContext);
}
Basılı Tutma
Ayrı tutma eylemi, geliştiricilerin bir katılımcı ile sistem veya aracı arasındaki konuşmayı geçici olarak duraklatmasını sağlar. Bu, katılımcının başka bir aracıya veya departmana aktarılması gereken senaryolarda veya temsilcinin konuşmaya devam etmeden önce arka planda bir gözetmene danışması gerektiğinde yararlı olabilir. Bu süre boyunca, beklemedeki katılımcıya ses çalmayı seçebilirsiniz.
// 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);
*/
Beklet
Korumayı kaldırma eylemi, geliştiricilerin daha önce duraklatılmış olan bir katılımcı ile sistem veya aracı arasındaki konuşmayı sürdürmesine olanak tanır. Katılımcı beklemeden kaldırıldığında sistemi veya aracıyı yeniden duyabilecektir.
var unHoldOptions = new UnholdOptions(target)
{
OperationContext = "UnHoldPstnParticipant"
};
// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);
/*
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/
Ses akışı (genel önizleme)
Ses akışı, devam eden bir aramadan gerçek zamanlı ses akışlarına abone olmanıza olanak tanır. Ses akışını kullanmaya başlama hakkında daha ayrıntılı yönergeler ve ses akışı geri çağırma olayları hakkında bilgi için bu sayfaya bakın.
Gerçek zamanlı transkripsiyon (genel önizleme)
Gerçek zamanlı transkripsiyon, devam eden bir aramanın sesi için canlı transkripsiyonlara erişmenizi sağlar. Gerçek zamanlı transkripsiyonu kullanmaya başlama hakkında daha ayrıntılı yönergeler ve gerçek zamanlı transkripsiyon geri çağırma olayları hakkında bilgi için bu sayfaya bakın.
Medya Eylemi Uyumluluk Tablosu
Aşağıdaki tabloda, önceki bir işlem çalışmaya/kuyruğa alınmaya devam ediyorsa hangi medya işlemlerinin çalıştırılmasına/kuyruğa alınmaya izin verilip verilmediğini göstermektedir.
Mevcut İşlem | Bacağını Ara | İzin Verilir | İzin verilmiyor |
---|---|---|---|
PlayToAll | Ana | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Hiçbiri |
Tanıma(Grup Dışı Arama) | Ana | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Hiçbiri |
PlayTo | Alt | PlayToAll, Recognize(Grup Dışı Çağrı) | PlayTo, Recognize(Grup Çağrısı), SendDTMF, StartContinuousDtmfRecognition |
Tanıma(Grup Araması) | Alt | PlayToAll, Recognize(Grup Dışı Çağrı) | PlayTo, Recognize(Grup Çağrısı), SendDTMF, StartContinuousDtmfRecognition |
SendDTMF | Alt | PlayToAll, Recognize(Grup Dışı Çağrı) | PlayTo, Recognize(Grup Çağrısı), SendDTMF, StartContinuousDtmfRecognition |
StartContinuousDtmfRecognition | Alt | PlayToAll, Recognize(Non-Group Call),PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Hiçbiri |