クイックスタート: SMS の受信と応答

Azure Communication Services SMS 機能では、開発者が SMS 受信イベントを使用するオプションを提供します。 イベントは、Webhook、Azure Functions、Power Automate/Logic App コネクタなどを使用して処理するために、すぐに使用できる統合を提供する Azure Event Grid に投稿されます。

SMS メッセージは、受信したら処理して応答したり、後でアクセスできるように単にデータベースにログを記録したりできます。

このクイックスタートでは、Power Automate/Logic Apps 用の Event Grid トリガーとコードなしのコネクタを使用して、Azure Functions を介して SMS 受信イベントの処理を紹介することに重点を置きます。

SMS が Azure Communication Services の電話番号に送信されると生成される 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 Communication Services リソースの Azure Event Grid を構成する必要があります。

注意

Azure Event Grid を使用すると、追加のコストが発生します。 詳しくは、Azure Event Grid の価格に関するページをご覧ください。

前提条件

Event Grid では、Azure Functions をすぐにサポートできるため、ヘッダーの解析や Webhook のデバッグの複雑さに対処することなく、イベント リスナーを簡単に設定できます。 すぐに使用できるトリガーを使用して、トリガーに一致するイベントが検出されるたびに実行される Azure 関数を設定できます。 このドキュメントでは、SMS 受信トリガーに焦点を当てています。

ローカル環境の設定

  1. Visual Studio Code を使用して Azure Functions 拡張機能をインストールします。

  2. 拡張機能を使用して、次の手順に従って Azure 関数を作成します。

    次の手順で関数を構成します。

    • 言語: TypeScript
    • テンプレート: Azure Event Grid トリガー
    • 関数名:ユーザー定義

    作成されると、次のような関数がディレクトリに作成されます。

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

SMS イベントを受信するように Azure 関数を構成する

  1. 誰が送信したかなどのイベントの値から、番号とメッセージの内容に至るまでを解析するように Azure 関数を構成します。

    
    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 Communication Service の SMS 機能を使用して SMS を送信します。 まず、SmsClient を呼び出し、リソースの connection string を使用して初期化します。 接続文字列をコードに直接貼り付けることも、Azure 関数ディレクトリの local.settings.json ファイル内の値の下に配置することもできます。

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

  1. 次に、取得したイベントの tofrom の値に基づいて送信する 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;
    

ここから、可能性は無限です。 事前に用意された回答でメッセージに応答することから、ボットを追加したり、単に応答を保存したりすることまで、最後の手順でコードを調整してそれを行うことができます。

ローカルでの実行

関数をローカルで実行するには、Visual Studio Code で F5 を押します。 ngrok を使用して、ローカルで実行されている Azure 関数を Azure Event Grid にフックします。

  1. 関数が実行されたら、ngrok を構成します。 (環境に合わせて ngrok をダウンロードする必要があります)。

    ngrok http 7071
    

    関数が実行されている場所を指定する ngrok リンクをコピーします。

  2. Azure Communication Services リソース内で Event Grid を使用して SMS イベントを構成します。 これは、Azure CLI を使用して行います。 Azure portal で見つかった Azure Communication Services リソースのリソース ID が必要です。 (リソース ID は、/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. すべてがフックされたので、Azure Communication Services リソースの電話番号に SMS を送信してフローをテストします。 関数が実行されているターミナルにコンソール ログが表示されます。 SMS に応答するコードを追加した場合は、テキスト メッセージが配信されることがわかります。

Azure にデプロイ

Azure 関数を Azure にデプロイするには、次の手順に従う必要があります。 デプロイ後、Azure Communication Services リソース用に Event Grid を構成します。 デプロイされた Azure 関数の URL (Azure portal の関数の下にある URL) を使用して、次のコマンドを実行します。


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

ローカル テスト用に作成したイベント サブスクリプションを更新するため、必ず、上記で使用したのと同じイベント サブスクリプション名を使用してください。

テストするには、Azure Communication Services リソースから入手した電話番号に SMS を送信します。

Logic Apps と Power Automate には、Event Grid を介して Azure Communication Services によって生成されたイベントを処理するのに役立つ、すぐに使用できるコネクタが用意されています。 Logic Apps と Power Automate の両方で、同じコネクタ セットが提供されます。 どちらを使用するかはご自身で決定してください。決定を通知するために、サービス間の違いを確認してください。

Event Grid コネクタを使用したイベントの処理

  1. まず、希望する環境で新しいフローを作成します。 開始する When a resource event occurs トリガーを選択します。

    Power Automate のトリガー選択のスクリーンショット。

  2. 次に、それを構成しましょう。 コネクタでは、使用するサブスクリプションを指定する必要があります。 (Azure Communication Services リソースがあるのと同じサブスクリプションである必要があります)。 リソースの種類を指定します。 この場合は、Microsoft.Communication.CommunicationServices を選びます。 次に、接続先の Azure Communication Services リソースのリソース名を指定する必要があります。 最後に、受信するイベントの種類 (この場合は Microsoft.Communication.SMSReceived) を選択する必要があります。

    Event Grid コネクタのスクリーンショット。

    コネクタでは、ユーザーに代わってイベント サブスクリプションを自動的に設定し、受信するイベントを構成します。

  3. 後で便利なように、Event Grid コネクタからの応答を処理するために Parse JSON connector を追加します。 Event Grid コネクタから 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"
        }
    
    

    JSON コネクタの解析のスクリーンショット。

この時点で、SMS イベントは正常に処理されました。 その後、イベントのログ記録から SMS への応答に至るまで、実行する処理の内容には複数のオプションがあります。 このドキュメントのコンテキストでは、応答する方法について説明します。 引き続き、SMS に応答する手順を説明します。

SMS への応答

  1. まず、SMS コネクタをフローに追加し、Azure Communication Services リソースの情報を使用して構成します。 これにより、コネクタからリソースにアクセスして、ユーザーの代わりに SMS を送信できます。 リソースには connection string が必要です。

    SMS コネクタの設定画面のスクリーンショット。

  2. 次に、送信者と受信者の情報を使用してコネクタを構成します。 受信したイベントの情報を使用して設定します。 SMS を元の送信者に返送するには、tofrom の番号を逆にします。 最後に、メッセージを追加します。

    SMS コネクタ構成のスクリーンショット。

これで、フローを保存し、Azure Communication Services リソースに関連付けられている電話番号に SMS を送信してテストできます。 テキスト メッセージが返されます。

ここから、可能性は無限です。 事前に用意された回答でメッセージに応答することから、ボットを追加したり、単に応答を格納したりすることまで、フローにさらにロジックを追加できます。

リソースをクリーンアップする

Communication Services サブスクリプションをクリーンアップして解除する場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 詳細については、リソースのクリーンアップに関する記事を参照してください。

フリーダイヤル検証

新しいフリーダイヤル番号があるとき、大量の SMS メッセージを送信したり、SMS メッセージをカナダの電話番号に送信したりする場合、ここにアクセスしてフリーダイヤル番号を検証する方法を確認してください。

次の手順

このクイックスタートでは、Communication Services を使用して SMS メッセージを送信する方法について説明しました。