來電概念

Azure 通訊服務通話自動化可讓開發人員建立可以撥打和接聽電話的應用程式。 它會利用事件方格訂用帳戶來傳遞 IncomingCall 事件,讓您的環境接收這些通知非常重要,您的應用程式才能有效地轉接或接聽電話。 因此,瞭解來電的基本概念對於充分發揮 Azure 通訊服務通話自動化的潛力至關重要。

電話撥接情節

設定環境之前,務必瞭解可觸發 IncomingCall 事件的案例。 若要觸發 IncomingCall 事件,您必須撥打電話至 Azure 通訊服務身分識別或與您的 Azure 通訊服務資源相關聯的公用交換電話網路 (PSTN) 號碼。 以下是這些資源的範例:

  1. Azure 通訊服務識別
  2. 由 Azure 通訊服務資源所擁有的 PSTN 電話號碼

基於上述範例,下列案例會觸發傳送至事件方格的 IncomingCall 事件:

來源 Destination 案例
Azure 通訊服務識別 Azure 通訊服務識別 通話、重新導向、新增參與者、轉接
Azure 通訊服務識別 Azure 通訊服務資源的 PSTN 號碼 通話、重新導向、新增參與者、轉接
公用 PSTN 由 Azure 通訊服務資源所擁有的 PSTN 號碼 通話、重新導向、新增參與者、轉接

注意

請務必理解 Azure 通訊服務身分識別可以代表使用者或應用程式。 雖然平台沒有內建功能可將身分識別明確指派給使用者或應用程式,但您的應用程式或支援基礎結構可以達成此目的。 若要深入了解本主題,請參閱身分識別概念指南

註冊事件方格資源提供者

如果您先前在 Azure 訂用帳戶中從未使用過事件方格,可能必須註冊事件方格資源提供者。 若要註冊提供者,請遵循下列步驟:

  1. 前往 Azure 入口網站。
  2. 選取左側功能表上的 [訂用帳戶]
  3. 選取您用於事件方格的訂用帳戶。
  4. 在左側功能表的 [設定] 下,選取 [資源提供者] 。
  5. 尋找 Microsoft.EventGrid
  6. 若未註冊資源提供者,請選取 [註冊]

從事件方格接收來電通知

在 Azure 通訊服務中,可以透過事件方格訂用帳戶接收 IncomingCall 通知。 身為通知的接收者,您可以選擇如何處理通知。 由於通話自動化 API 會針對事件運用 Webhook 回呼,因此通常會使用 'Webhook' 事件方格訂用帳戶。 不過,此服務提供各種訂用帳戶類型,而且您可自由選擇最適合您需求的訂用帳戶類型。

此結構有下列優點:

  • 使用事件方格訂閱篩選條件,可以路由傳送 IncomingCall 通知至特定應用程式。
  • PSTN 號碼指派和路由邏輯可以存在於應用程式,而非在線上靜態設定。
  • 電話撥接情節章節說明,即使使用者彼此通話,您的應用程式仍可接收通知。 接著,為符合合規性需求,您可以將此情節與通話錄音 API 相結合。

如需事件的範例承載,以及發佈至事件方格之其他呼叫事件的詳細資訊,請參閱此指南

以下是事件方格 Webhook 訂用帳戶的範例,其中事件類型篩選只會接聽 IncomingCall 事件。

Image showing IncomingCall subscription.

通話自動化和事件方格的通話路由選項

在通話自動化和事件方格中,可以根據您的特定需求量身打造通話路由。 藉由在事件方格訂用帳戶中使用進階篩選,您可以訂閱與特定來源/目的地電話號碼或 Azure 通訊服務身分識別有關的 IncomingCall 通知。 接著,可將此通知導向至端點,例如 Webhook 訂用帳戶。 使用通話自動化 SDK,端點應用程式可接著決定將通話重新導向至另一個 Azure 通訊服務識別或 PSTN。

注意

為了確保您的應用程式只接收必要的事件,建議您在事件方格中設定篩選。 這在產生 IncomingCall 事件的案例中特別重要,例如將輸入 PSTN 通話重新導向至 Azure 通訊服務端點。 如果未使用篩選,您的事件方格訂用帳戶會收到兩個 IncomingCall 事件;一個用於 PSTN 通話,另一個用於 Azure 通訊服務使用者,即便您只想接收第一個通知。 忽視在應用程式中使用篩選或其他機制來處理這類案例,可能會導致無限迴圈和其他不想要的行為。

以下是事件方格訂用帳戶上的進階篩選範例,用於監看以 PSTN 電話號碼`+18005551212 開頭的 data.to.PhoneNumber.Value 字串。

Image showing Event Grid advanced filter.

號碼指派

在 Azure 通訊服務中使用 IncomingCall 通知時,您可自由地將任何特定號碼與任何端點產生關聯。 例如,如果您取得 +14255551212 的 PSTN 電話號碼,並希望將該號碼指派給應用程式中 375f0e2f-e8db-4449-9bf7-2054b02e42b4 身分識別的使用者,您應該維持該號碼與身分識別的對應。 當傳送的 IncomingCall 通知符合 to 欄位中的電話號碼時,您可以叫用 Redirect API 並提供使用者的身分識別。 換句話說,您可以在應用程式中管理號碼指派,並在執行階段將通話路由傳送或接聽通話。

最佳做法

  1. 若要確保事件方格將事件傳遞至 Webhook 端點,並防止惡意使用者向您的端點發送大量事件,您必須證明端點的擁有權。 若要解決接收事件的任何問題,請確認您設定的 Webhook 已藉由處理 SubscriptionValidationEvent 來驗證。 如需詳細資訊,請參閱此指南

  2. 收到來電事件時,如果您的應用程式無法在所需的時間範圍內以 200Ok 狀態碼回應事件方格,事件方格會利用指數輪詢重試再次傳送事件。 不過,來電只會響鈴 30 秒,而在該時間之後回覆電話將會無效。 若要防止重試過期或過時的通話,建議將重試原則的 [事件傳遞嘗試上限] 設定為 2,並將 [事件存留時間] 設定為 1 分鐘。 您可以在事件訂閱的 [其他功能] 索引標籤之下找到這些設定。 在這裡深入了解重試。

  3. 建議您啟用事件方格資源的記錄功能,以監視無法傳遞的事件。 若要這麼做,請瀏覽至通訊資源的 [事件] 索引標籤底下的系統主題,然後從 [診斷] 設定啟用記錄功能。 您可以在 'AegDeliveryFailureLogs' 資料表中找到失敗記錄。

    AegDeliveryFailureLogs
    | limit 10 
    | where Message has "incomingCall"
    

下一步