共用方式為


通話自動化概觀

Azure 通訊服務通話自動化可讓開發人員建置以伺服器為基礎的智慧型通話工作流程,以及語音和公用交換電話網路 (PSTN) 頻道的通話錄音。 可在 C#、Java、JavaScript 和 Python 中取得的 SDK,其會使用動作事件模型,協助您建置個人化的客戶互動。 您的通訊應用程式可以接聽即時通話事件,並執行控制平面動作 (例如接聽、轉接、播放音訊、開始錄製等),以根據您的商務邏輯來引導和控制通話。

常見使用案例

您可以使用通話自動化建置的一些常見使用案例:

  • 針對交易式工作流程規劃 VoIP 或 PSTN 通話 (例如點擊通話和約會提醒),以改善客戶服務。
  • 使用播放 (音訊 URL、文字轉換語音和 SSML) 和辨識 (DTMF 和語音) 動作,為自助客戶建置互動工作流程,以用於訂單預約和更新等使用案例。
  • 使用直接路由,將您的通訊應用程式與連絡中心和私人電話語音網路整合。
  • 藉由建置號碼遮罩服務來保護客戶的身分識別,讓購買者與銷售人員或使用者與平台上的合作夥伴廠商可安全連線。
  • 建置行銷和客戶服務的自動化客戶拓展計畫,以提高參與度。
  • 基於品質保證目的,在通話後的程序中分析原音音訊的錄音。

使用 Azure 通訊服務通話自動化來建置適合客戶服務案例的通話工作流程,如高階結構所示。 您可以接聽來電或撥打電話。 執行動作,例如播放歡迎訊息,或將客戶連線至 Azure 通訊服務通話 SDK 用戶端應用程式上的即時代理程式來接聽來電要求。 有了 Azure 通訊服務 PSTN 或直接路由的支援,您就可以將此工作流程連線回連絡中心。

客戶服務案例的通話流程圖表。

功能

Azure 通訊服務通話自動化 SDK 目前提供以下功能。

功能區域 功能 .NET Java JavaScript Python
通話前案例 接聽一對一通話 ✔️ ✔️ ✔️ ✔️
接聽群組通話 ✔️ ✔️ ✔️ ✔️
將新的輸出通話放置至一或多個端點 ✔️ ✔️ ✔️ ✔️
重新導向* (轉接) 通話至一或多個端點 ✔️ ✔️ ✔️ ✔️
拒絕來電 ✔️ ✔️ ✔️ ✔️
連線到進行中的通話或會議室 (預覽中) ✔️ ✔️ ✔️ ✔️
通話中案例 將一或多個端點新增至現有通話 ✔️ ✔️ ✔️ ✔️
取消新增端點至現有通話 ✔️ ✔️ ✔️ ✔️
從音訊檔案播放音訊 ✔️ ✔️ ✔️ ✔️
使用文字轉換語音播放音訊 ✔️ ✔️ ✔️ ✔️
透過 DTMF 辨識使用者輸入 ✔️ ✔️ ✔️ ✔️
辨識使用者語音輸入 ✔️ ✔️ ✔️ ✔️
啟動連續 DTMF 辨識 ✔️ ✔️ ✔️ ✔️
停止連續 DTMF 辨識 ✔️ ✔️ ✔️ ✔️
傳送 DTMF ✔️ ✔️ ✔️ ✔️
將參與者靜音 ✔️ ✔️ ✔️ ✔️
從現有的通話移除一或多個端點 ✔️ ✔️ ✔️ ✔️
將 1 對 1 通話盲目轉接至另一個端點 ✔️ ✔️ ✔️ ✔️
將參與者從群組通話盲轉至另一個端點 ✔️ ✔️ ✔️ ✔️
掛斷通話 (移除通話連結) ✔️ ✔️ ✔️ ✔️
終止通話 (移除所有參與者並結束通話) ✔️ ✔️ ✔️ ✔️
取消媒體作業 ✔️ ✔️ ✔️ ✔️
將自訂資訊新增至通話或將通話轉接至端點時,與端點共用自訂資訊 (透過 VOIP 或 SIP 標頭) ✔️ ✔️ ✔️ ✔️
查詢案例 取得通話狀態 ✔️ ✔️ ✔️ ✔️
取得通話中的參與者 ✔️ ✔️ ✔️ ✔️
列出通話中的所有參與者 ✔️ ✔️ ✔️ ✔️
通話錄音 開始/暫停/繼續/停止錄音 ✔️ ✔️ ✔️ ✔️

* 目前不支援將 VoIP 通話轉接或重新導向至某個電話號碼。

架構

通話自動化會使用 REST API 介面來接收要求,並提供回應給服務內執行的所有動作。 由於通話的非同步本質,大部分動作都會在動作順利完成或失敗時觸發對應的事件。

Azure 通訊服務會使用事件方格來為所有「回撥」通話中動作傳遞 IncomingCall 事件和 HTTPS Webhook。

來電和動作執行流程的螢幕擷取畫面。

通話動作

通話前動作

這些動作會在 IncomingCall 事件通知中列出的目的地端點連線之前執行。 Webhook 回撥事件只會傳達 answer 預先通話動作,而不傳達 rejectredirect 動作。

接聽 – 使用事件方格和通話自動化 SDK 中的 IncomingCall 事件,您的應用程式可以接聽通話。 在 IVR 案例中使用此動作,讓您的應用程式以程式設計方式接聽傳入的 PSTN 通話。 其他案例包括代表使用者接聽通話。

拒絕 – 拒絕通話表示您的應用程式可以接收 IncomingCall 事件,並阻止通話連線到目的地端點。

重新導向 – 使用事件方格中的 IncomingCall 事件,您可以將通話重新導向到一或多個端點,以建立單一或同時響鈴 (sim-ring) 案例。 重新導向動作不會接聽通話。 通話被重新導向或轉送到另一個目的地端點以進行接聽。

建立通話 - 使用 [建立通話] 動作來撥打電話給電話號碼和其他通訊使用者。 使用案例包括:應用程式撥打電話來主動通知使用者服務中斷或訂單更新。

連線通話 (預覽中) - 使用 [連線通話] 動作來連線到進行中的通話,並對其採取通話動作。 您也可以使用此動作以程式設計方式連線及管理會議室通話,例如使用您的服務執行會議室的 PSTN 撥出。

通話中動作

您的應用程式可以對使用通話自動化 SDK 接聽或撥出的通話執行這些動作。 每個通話中動作都有對應的成功或失敗 Webhook 回撥事件。

新增/刪除參與者 – 您可以在單一要求中新增一或多個參與者,每個參與者都是受支援的目的地端點的變體。 Webhook 回撥會針對成功新增至通話的每個參與者傳送。

播放 – 當您的應用程式接聽通話或撥打電話時,您可以為來電者播放音訊提示。 有需要時可循環播放音訊,例如播放等候音樂。 若要深入了解,請參閱在通話中播放音訊透過播放動作自訂向使用者發出的語音提示

辨識輸入 – 在您的應用程式播放音訊提示後,您可以要求使用者輸入以驅動應用程式中的商務邏輯和導覽。 若要深入了解,請參閱收集使用者輸入和操作指南透過辨識動作收集使用者輸入

連續 DTMF 辨識 – 當您的應用程式需要能夠在通話的任何時間點接收 DTMF 音調,而不需要應用程式觸發特定辨識動作。 此功能在代理程式正在通話並需要使用者輸入某種識別碼或追蹤號碼的情況下非常有用。 若要深入了解,請參閱如何控制通話中的媒體動作

傳送 DTMF – 當您的應用程式需要將 DTMF 音調傳送給外部參與者時。 使用此動作來撥出到外部代理程式並提供分機號碼,或導覽外部 IVR 功能表。

靜音 – 您的應用程式可以根據商務邏輯將特定使用者靜音。 如果使用者想要說話,則必須手動取消靜音。

轉接 – 當您的應用程式接聽通話或對端點撥打電話時,該通話可以轉接至另一個目的地端點。 如果轉接 1:1 通話,應用程式無法使用通話自動化 SDK 來控制通話。

錄音 – 您可以根據應用程式商務邏輯,決定何時開始/暫停/繼續/停止錄音,或者您可以將控制權授與終端使用者以觸發這些動作。 若要深入了解,請檢視我們的概念快速入門

掛斷 – 當您的應用程式接聽一對一通話時,掛斷動作會移除通話連結,並終止與另一個端點的通話。 如果通話中有兩個以上的參與者 (群組通話),則執行「掛斷」動作會從群組通話中移除您應用程式的端點。

終止 – 無論您的應用程式是否接聽一對一或群組通話,或撥打電話給一或多個參與者,此動作將會移除所有參與者並結束通話。 透過在「掛斷」通話動作中將 forEveryOne 屬性設為 true 來觸發此作業。

取消媒體作業 - 根據商務邏輯,您的應用程式可能需要取消進行中或已排入佇列的媒體作業。 根據取消的媒體作業和佇列中的媒體作業,您的應用程式可能會收到指示動作已取消的 Webhook 事件。

查詢案例

列出參與者 – 傳回通話中所有參與者的清單。 錄製和轉譯 Bot 會從這份清單中省略。

事件

下表概述 Azure 通訊服務所發出的目前事件。 下列兩個表格描述事件方格所發出的事件,以及從通話自動化中作為 Webhook 事件發出的事件。

事件方格的事件

事件方格傳送的大部分事件與平台無關。 無論 SDK (通話或通話自動化) 為何,都會傳送它們。 雖然您可以為任何事件建立訂用帳戶,但建議您對想要以程式設計的方式控制通話的所有通話自動化使用案例使用 IncomingCall 事件。 針對報告/遙測用途,請使用其他事件。

事件 描述
IncomingCall 打電話給通訊使用者或電話號碼的通知。
CallStarted 已建立通話 (傳入或傳出)。
CallEnded 已終止通話並移除所有參與者。
ParticipantAdded 已將參與者新增至通話。
ParticipantRemoved 已從通話中移除參與者。
RecordingFileStatusUpdated 有錄音檔案可用。

Azure 通訊服務 - 語音和視訊通話事件中詳細了解這些事件和承載結構描述

通話自動化 Webhook 事件

通話自動化事件會在您接聽或撥打新的電話時,傳送至指定的 Webhook 回撥 URI。

事件 描述
CallConnected 通話已成功啟動 (使用 AnswerCreate 動作時),或您的應用程式已成功連線到進行中的通話 (使用 Connect 動作時)。
CallDisconnected 您的應用程式已與通話中斷連線。
ConnectFailed 您的應用程式無法連線到通話 (僅適用於 Connect 通話動作)。
CallTransferAccepted 轉接動作已順利完成,且受話者連線到目標參與者。
CallTransferFailed 轉接動作失敗。
AddParticipantSucceeded 您的應用程式已成功將參與者新增至通話。
AddParticipantFailed 您的應用程式無法將參與者新增至通話 (因為發生錯誤或參與者不接受邀請)
CancelAddParticipantSucceeded 您的應用程式已成功取消 AddParticipant 要求 (參與者未新增至通話)。
CancelAddParticipantFailed 您的應用程式無法取消 AddParticipant 要求 (這可能是因為已處理要求)。
RemoveParticipantSucceeded 您的應用程式已成功從通話中移除參與者。
RemoveParticipantFailed 您的應用程式無法從通話中移除參與者。
ParticipantsUpdated 在您的應用程式連線到通話時,參與者的狀態已變更。
PlayCompleted 您的應用程式已成功播放提供的音訊檔案。
PlayFailed 您的應用程式無法播放音訊。
PlayCanceled 要求的播放動作已取消。
RecognizeCompleted 使用者輸入的辨識已順利完成。
RecognizeCanceled 要求的 Recognize 動作已取消。
RecognizeFailed 使用者輸入的辨識失敗。
如需辨識動作事件的詳細資訊,請參閱收集使用者輸入的操作指南。
RecordingStateChanged 錄製動作的狀態已從作用中變更為非使用中,反之亦然。
ContinuousDtmfRecognitionToneReceived StartContinuousDtmfRecognition 已順利完成,且已收到來自參與者的 DTMF 音調。
ContinuousDtmfRecognitionToneFailed StartContinuousDtmfRecognition 已完成,但處理來自參與者的 DTMF 音調時發生錯誤。
ContinuousDtmfRecognitionStopped 已成功執行 StopContinuousRecognition
SendDtmfCompleted SendDTMF 已順利完成,且已將 DTMF 音調傳送至目標參與者。
SendDtmfFailed 傳送 DTMF 音調時發生錯誤。

若要了解針對不同動作發佈哪些事件,請參閱通話控制的動作。 本文提供了各種通話控制流程的程式碼範例和順序圖表。

作為確認回撥事件的最佳做法,請使用標準 HTTP 狀態碼 (如 200 OK) 進行回應。 詳細資訊為非必要,且更適合您的偵錯程序。

若要了解如何保護回撥事件傳遞的安全,請參閱如何保護 Webhook 端點的安全

作業回撥 URI

作業回撥 URI 是某些使用事件作為其非同步回應的通話中 API 中的選用參數。 根據預設,當使用者建立通話時,所有事件都會傳送到由 CreateCall / AnswerCall API 事件所設定的預設回撥 URI。 使用作業回撥 URI,API 會將此個別 (僅限一次性) 要求的對應事件傳送至新的 URI。

支援 API 對應的事件
AddParticipant AddParticipantSucceed / AddParticipantFailed
RemoveParticipant RemoveParticipantSucceed / RemoveParticipantFailed
TransferCall CallTransferAccepted / CallTransferFailed
CancelAddParticipant CancelAddParticipantSucceeded / CancelAddParticipantFailed
Play PlayCompleted / PlayFailed / PlayCanceled
PlayToAll PlayCompleted / PlayFailed / PlayCanceled
Recognize RecognizeCompleted / RecognizeFailed / RecognizeCanceled
StopContinuousDTMFRecognition ContinuousDtmfRecognitionStopped
SendDTMF ContinuousDtmfRecognitionToneReceived / ContinuousDtmfRecognitionToneFailed

下一步