次の方法で共有


SMS メッセージを受信する

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

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

この記事では、Power Automate/Logic Apps の Event Grid トリガーとコードなしのコネクタを使用して、Azure Functions を介して SMS 受信イベントを処理する方法について説明します。

SMS が Azure Communication Services の電話番号に送信されたときに生成される SMSReceived イベントは、次のように書式設定されます。

[{
  "id": "d29ebbea-3341-4466-9690-0a03af35228e",
  "topic": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/acse2e/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
  "subject": "/phonenumber/15555555555",
  "data": {
    "MessageId": "d29ebbea-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"
}]

この API によって返される MessageId の形式は、内部実装の詳細と見なされ、予告なしに変更される可能性があります。 クライアントはメッセージ ID を不透明な識別子として扱う必要があり、形式や内容に基づいて構造を解析、推論、またはロジックを構築してはなりません。

イベントの生成を開始するには、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 に応答するために、SMS を送信するために Azure Communication Service SMS 機能を使用します。 まず、 SmsClient を呼び出し、リソースの connection string で初期化します。 接続文字列をコードに直接貼り付けるか、Azure Function ディレクトリの 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 番号を FIP します。 最後に、メッセージを追加します。

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

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

ここからは、可能性は無限大です。 事前に書き込まれた回答でメッセージに応答したり、ボットを追加したり、応答を格納したり、ワークフロー自動化を追加したりできます。

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

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

フリーダイヤル検証

新しいフリーダイヤル番号を使用していて、 大量の SMS メッセージ を送信したり、SMS メッセージをカナダの電話番号に送信したりする場合は、「 SMS FAQ」 > 無料の確認を送信 して、フリーダイヤル番号を確認する方法を確認してください。

次のステップ