快速入門:接收和回覆 SMS

Azure 通訊服務 SMS 功能提供選項讓開發人員取用 SMS 接收事件。 這些事件會張貼至 Azure 事件方格,提供現成可用的整合,以使用 Webhook、Azure Functions、Power Automate/Logic App 連接器等等來處理這些作業。

接收 SMS 訊息之後,可以處理以進行回應,或只是將其記錄到資料庫以供日後存取。

在本快速入門中,我們將著重於使用事件方格觸發程序和適用於 Power Automate/Logic Apps 的無程式碼連接器,透過 Azure Functions 展示 SMS 接收事件的處理。

當 SMS 傳送至 Azure 通訊服務電話號碼時所產生的 SMSReceived 事件,會以下列方式格式化:

[{
  "id": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
  "topic": "/subscriptions/50ad1522-5c2c-4d9a-a6c8-67c11ecb75b8/resourcegroups/acse2e/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
  "subject": "/phonenumber/15555555555",
  "data": {
    "MessageId": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
    "From": "15555555555",
    "To": "15555555555",
    "Message": "Great to connect with Azure Communication Services events",
    "ReceivedTimestamp": "2020-09-18T00:27:45.32Z"
  },
  "eventType": "Microsoft.Communication.SMSReceived",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2020-09-18T00:27:47Z"
}]

若要開始產生事件,我們必須為 Azure 通訊服務資源設定 Azure 事件方格。

注意

使用 Azure 事件方格會產生額外的成本。 如需詳細資訊,請參閱 Azure 事件方格價格

必要條件

事件方格提供 Azure Functions 的現成支援,讓您輕鬆設定事件接聽程式,而不需要處理複雜的剖析標頭或偵錯 Webhook。 使用現成可用的觸發程序,我們可以設定每次偵測到符合觸發程序的事件時執行的 Azure 函式。 在本文件中,我們著重於 SMS 接收觸發程序。

設定本機環境

  1. 使用 Visual Studio Code,安裝 Azure Functions 延伸模組

  2. 使用延伸模組,依照下列指示建立 Azure Function。

    使用下列指示設定函式:

    • 語言:TypeScript
    • 範本:Azure 事件方格觸發程序
    • 函式名稱:使用者定義

    建立後,您會看到在目錄中建立的函式,如下所示:

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
    
    };
    
    export default eventGridTrigger;
    
    

設定 Azure Function 以接收 SMS 事件

  1. 設定 Azure Function 來剖析事件中的值,例如傳送者、傳送至那個號碼以及訊息是什麼。

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
       context.log(eventGridEvent);
       const to = eventGridEvent['data']['to'];
       const from = eventGridEvent['data']['from'];
       const message = eventGridEvent['data']['message'];
    
    };
    
    export default eventGridTrigger;
    
    

此時,您已成功透過事件處理接收 SMS。 現在,對於該事件可執行作業的範圍從只記錄到可回應。 在下一節中,我們著重於回應我們接收的 SMS。 如果您不想回應 SMS,請跳至下一節的在本機執行函式。

回應 SMS

  1. 為了回應傳入 SMS,我們使用 Azure 通訊服務 SMS 功能來傳送 SMS。 我們從針對資源叫用 SmsClient 和使用 connection string 將其初始化來開始作業。 您可以直接將連接字串貼到程式碼中,或將其放在 Azure Function 目錄中 local.settings.json 檔案的值底下。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "ACS_CONNECTION_STRING": "<<CONNECTION STRING>>"
  }
}

  1. 然後,我們會根據 to 和我們所取得事件的 from 值,來撰寫要傳送的 SMS。

    import { AzureFunction, Context } from "@azure/functions"
    import { SmsClient } from "@azure/communication-sms";
    
    const connectionString = process.env.ACS_CONNECTION_STRING; //Replace with your connection string
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
        const to = eventGridEvent['data']['to'];
        const from = eventGridEvent['data']['from'];
        const message = eventGridEvent['data']['message'];
    
        const smsClient = new SmsClient(connectionString);
    
        const sendResults = await smsClient.send({
            from: to,
            to: [from],
            message: "Message received successfully. Will respond shortly."
        });
    
    };
    
    export default eventGridTrigger;
    

這裡有無限可能。 從使用預先設定的回答來回應訊息,到新增 Bot 或只是儲存回應,您可以在最後一個步驟中調整程式碼來執行此動作。

在本機執行

若要在本機執行函式,請在 Visual Studio Code 中按 F5。 我們使用 ngrok,將本機執行的 Azure 函式與 Azure 事件方格掛勾。

  1. 函式執行後,我們會設定 ngrok。 (您必須針對您的環境下載 ngrok。)

    ngrok http 7071
    

    複製您的函式執行所在位置所提供的 ngrok 連結。

  2. 透過 Azure 通訊服務資源內的事件方格設定 SMS 事件。 我們會使用 Azure CLI 來執行此作業。 您需要在 Azure 入口網站中找到之 Azure 通訊服務資源的資源識別碼。 (資源識別碼看起來如下所示:/subscriptions/<<AZURE SUBSCRIPTION ID>>/resourceGroups/<<RESOURCE GROUP NAME>>/providers/Microsoft.Communication/CommunicationServices/<<RESOURCE NAME>>)

    
    az eventgrid event-subscription create --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type webhook --endpoint "<<NGROK URL>> " --source-resource-id "<<RESOURCE_ID>>"  --included-event-types Microsoft.Communication.SMSReceived 
    
    
  3. 既然所有項目都已連結,請將 SMS 傳送至您在 Azure 通訊服務資源上的電話號碼,以測試流程。 您應該會在函式執行所在的終端上看到主控台記錄。 如果您新增程式碼以回應 SMS,您應該會看到該簡訊傳回給您。

部署至 Azure

若要將 Azure Function 部署至 Azure,您必須遵循這些指示。 部署後,我們會針對 Azure 通訊服務資源設定事件方格。 透過已部署之 Azure Function 的 URL (在 Azure 入口網站中函式之下找到的 URL),我們會執行下列命令:


az eventgrid event-subscription update --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type azurefunction --endpoint "<<AZ FUNCTION URL>> " --source-resource-id "<<RESOURCE_ID>>"

由於我們正在更新我們所建立的事件訂用帳戶以進行本機測試,請務必使用您在前面使用的相同事件訂用帳戶名稱。

您可以將 SMS 傳送至您透過 Azure 通訊服務資源採購的電話號碼,以進行測試。

Logic Apps 和 Power Automate 提供現成可用的連接器,以協助透過事件方格處理 Azure 通訊服務所產生的事件。 Logic Apps 和 Power Automate 都提供一組相同的連接器。 由您決定偏好使用哪個服務,請參閱服務之間的差異以做出決策。

使用事件方格連接器處理事件

  1. 首先,在偏好的環境中建立新流程。 挑選要開始使用的 When a resource event occurs 觸發程序。

    Screenshot of trigger pick for Power Automate.

  2. 現在,讓我們進行設定。 連接器會要求您提供想要使用的訂用帳戶。 (應該是 Azure 通訊服務資源所在的相同訂用帳戶)。 指定資源的類型。 在此情況下,請選擇 Microsoft.Communication.CommunicationServices。 然後,您必須為您想要連線的 Azure 通訊服務資源提供資源名稱。 最後,我們需要挑選我們想要接收的事件類型,在此情況下:Microsoft.Communication.SMSReceived

    Screenshot of event grid connector.

    連接器會自動代表您設定事件訂用帳戶,並設定其想要接收的事件。

  3. 若要讓我們稍後的作業更容易,請新增 Parse JSON connector 以處理來自事件方格連接器的回應。 將連接器設定為從事件方格連接器取得 Body 物件,並將其與事件的預期結構描述比對:

    範例結構描述 (開啟以查看)
    
        {
            "properties": {
                "data": {
                    "properties": {
                        "From": {
                            "type": "string"
                        },
                        "Message": {
                            "type": "string"
                        },
                        "MessageId": {
                            "type": "string"
                        },
                        "ReceivedTimestamp": {
                            "type": "string"
                        },
                        "To": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "dataVersion": {
                    "type": "string"
                },
                "eventTime": {
                    "type": "string"
                },
                "eventType": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadataVersion": {
                    "type": "string"
                },
                "subject": {
                    "type": "string"
                },
                "topic": {
                    "type": "string"
                }
            },
            "type": "object"
        }
    
    

    Screenshot of Parse JSON connector.

此時,您已成功處理 SMS 事件。 接著,您有多個選項可對事件進行處理,範圍從記錄事件到回應 SMS。 在本文件的內容中,我們將會示範如何回應。 繼續閱讀以了解回應 SMS 的步驟。

回應 SMS

  1. 首先,將 SMS 連接器新增至流程,並使用 Azure 通訊服務資源的資訊進行設定。 可讓連接器存取資源,並代表我們傳送 SMS。 您需要資源的 connection string

    Screenshot of set up screen for the SMS connector.

  2. 接下來,我們會使用傳送者和收件者的資訊來設定連接器。 我們會使用我們所收到事件中的資訊來填入。 點選 tofrom 號碼以將 SMS 傳送回原始傳送者。 最後,新增訊息。

    Screenshot of the SMS connector configuration.

現在,您可以將 SMS 傳送至與 Azure 通訊服務資源相關聯的電話號碼,以儲存流程並進行測試。 您應該會收到簡訊。

這裡有無限可能。 從使用預先設定的回答來回應訊息,到新增 Bot 或只是儲存回應,您可以將更多邏輯新增至流程。

清除資源

如果您想要清除並移除通訊服務訂用帳戶,您可以刪除資源或資源群組。 刪除資源群組也會刪除與其相關聯的任何其他資源。 深入了解如何清除資源

免付費電話驗證

如果您有新的免付費電話號碼,並且想要傳送大量 SMS 訊息,或是將 SMS 訊息傳送至加拿大電話號碼,請造訪這裡以了解如何驗證您的免付費電話號碼。

下一步

在本快速入門中,您已了解如何使用通訊服務來傳送 SMS 訊息。