Amazon Connect Customer の双方向 SMS で受信テキストを取得して Lambda で扱ってみた

Amazon Connect Customer の双方向 SMS で受信テキストを取得して Lambda で扱ってみた

Amazon Connect Customer の双方向 SMS で受信メッセージをコンタクト属性として取得し、Lambda で処理する方法を試しました。SMS の初期メッセージ属性をユーザー定義属性に設定してから Lambda を呼び出すことで、受信テキストを外部システムへ連携させる構成が実現できます。
2026.07.17

はじめに

Amazon Connect Customer の双方向 SMS を利用していると、受信した SMS メッセージから特定の情報を抽出し、CRM などの外部システムへ連携したいケースがあります。

たとえば、利用者が SMS で送信した問い合わせ番号や予約番号を取り出し、後続の Lambda で処理して CRM に登録するような構成です。

今回は、Amazon Connect Customer のフロー上で [コンタクト属性の設定] ブロックを使い、SMS の受信メッセージをコンタクト属性として取得し、その値を Lambda で扱う方法を試しました。

全体像

今回のフロー全体は以下です。

cm-hirai-screenshot 2026-07-08 13.51.21
SMS の受信メッセージをコンタクト属性に設定し、後続の Lambda で取得するフロー

処理の流れは以下です。

  1. 利用者が Amazon Connect Customer の電話番号宛てに SMS を送信する
  2. フロー内の [コンタクト属性の設定] ブロックで、SMS の初期メッセージをユーザー定義属性 sms に設定する
  3. [AWS Lambda 関数を呼び出す] ブロックで Lambda を実行する
  4. Lambda のイベントから Details.ContactData.Attributes.sms を取得する

今回は、受信メッセージとして テストメッセージ を送信し、Lambda 側でその値を取得できるか確認します。

SMS の初期メッセージ属性について

AWS ドキュメントでは、チャット初期メッセージ属性の InitialMessage について、ウェブチャットまたは SMS で顧客が送信した最初のメッセージであり、JSONPath リファレンスは $.Media.InitialMessage と記載されています。

InitialMessage | ウェブチャットまたは SMS で顧客が送信した最初のメッセージ。 | System | $.Media.InitialMessage

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-attrib-list.html

そのため、SMS の受信本文をフロー内で扱う場合は、この InitialMessage を参照します。
今回の画面上では、名前空間:メディアキー:初期メッセージ として指定しました。

コンタクト属性に SMS の初期メッセージを設定する

SMS の受信メッセージは、メディア / 初期メッセージ としてフロー内で参照できます。

今回は後続の Lambda で Details.ContactData.Attributes.sms として扱えるようにするため、[コンタクト属性の設定] ブロックで メディア / 初期メッセージ をユーザー定義属性 sms に設定します。

取得元として以下を指定します。

項目 設定値
名前空間 メディア
キー 初期メッセージ

cm-hirai-screenshot 2026-07-08 10.59.01
メディア名前空間の初期メッセージを参照する設定

設定先のコンタクト属性は以下です。

項目 設定値
名前空間 ユーザー定義済み
キー sms

この設定により、SMS の初期メッセージを sms というユーザー定義属性として扱えるようになります。

Lambda で受信メッセージを取得する

前章で メディア / 初期メッセージ をユーザー定義属性 sms に設定しました。

そのため、Lambda 側では Amazon Connect Customer から渡されるイベントの Details.ContactData.Attributes.sms から SMS の受信メッセージを取得できます。

今回使用した Lambda コードは以下です。

import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("event:\n%s", json.dumps(event, ensure_ascii=False, indent=2))

    sms = event["Details"]["ContactData"]["Attributes"]["sms"]

    return {
        "statusCode": 200,
        "body": json.dumps({
            "sms": sms
        }, ensure_ascii=False)
    }

このコードでは、Lambda に渡されたイベント全体を CloudWatch Logs に出力しています。

その後、以下のキーから SMS の受信メッセージを取得しています。

sms = event["Details"]["ContactData"]["Attributes"]["sms"]

CRM などの外部システムへ連携する場合は、この sms の値をもとに、必要な情報を抽出して API 呼び出しなどの後続処理につなげます。

Lambda を呼び出す

最後に、フロー上で Lambda を呼び出します。

cm-hirai-screenshot 2026-07-08 13.52.24
コンタクト属性 sms を設定した後に Lambda を呼び出すフロー設定

今回のフローでは、sms 属性を設定した後に Lambda を呼び出しています。

この順序にすることで、Lambda に渡されるイベントの Details.ContactData.Attributes.sms に SMS の初期メッセージが含まれるようになります。

動作確認

発信元から Amazon Connect Customer に対して、以下の SMS を送信しました。

テストメッセージ

Lambda に渡されたイベントでは、以下のように Details.ContactData.Attributes.sms にメッセージ本文が入っていることを確認できました。

{
    "Details": {
        "ContactData": {
            "Attributes": {
                "sms": "テストメッセージ"
            },
            "AwsRegion": "ap-northeast-1",
            "Channel": "CHAT",
            "ContactId": "b945b632-60cf-4b2d-a214-6f635dae0558"
        }
    }
}

ChannelCHAT として渡されていました。

今回確認したいポイントは、SMS の本文がユーザー定義属性 sms として Lambda に渡されることです。

この結果から、フロー内で メディア / 初期メッセージ をユーザー定義属性 sms に設定しておけば、Lambda から受信 SMS の本文を取得できることを確認できました。

まとめ

Amazon Connect Customer の双方向 SMS で受信した初期メッセージを、ユーザー定義属性 sms に設定し、Lambda から取得できることを確認しました。

ポイントは、メディア / 初期メッセージ[コンタクト属性の設定] ブロックでユーザー定義属性に設定してから Lambda を呼び出すことです。

SMS の内容をもとに CRM 連携などの後続処理を行う場合の参考になれば幸いです。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事