Amazon Connect Customer の双方向 SMS で受信テキストを取得して Lambda で扱ってみた
はじめに
Amazon Connect Customer の双方向 SMS を利用していると、受信した SMS メッセージから特定の情報を抽出し、CRM などの外部システムへ連携したいケースがあります。
たとえば、利用者が SMS で送信した問い合わせ番号や予約番号を取り出し、後続の Lambda で処理して CRM に登録するような構成です。
今回は、Amazon Connect Customer のフロー上で [コンタクト属性の設定] ブロックを使い、SMS の受信メッセージをコンタクト属性として取得し、その値を Lambda で扱う方法を試しました。
全体像
今回のフロー全体は以下です。

SMS の受信メッセージをコンタクト属性に設定し、後続の Lambda で取得するフロー
処理の流れは以下です。
- 利用者が Amazon Connect Customer の電話番号宛てに SMS を送信する
- フロー内の [コンタクト属性の設定] ブロックで、SMS の初期メッセージをユーザー定義属性
smsに設定する - [AWS Lambda 関数を呼び出す] ブロックで Lambda を実行する
- 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 に設定します。
取得元として以下を指定します。
| 項目 | 設定値 |
|---|---|
| 名前空間 | メディア |
| キー | 初期メッセージ |

メディア名前空間の初期メッセージを参照する設定
設定先のコンタクト属性は以下です。
| 項目 | 設定値 |
|---|---|
| 名前空間 | ユーザー定義済み |
| キー | 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 を呼び出します。

コンタクト属性 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"
}
}
}
Channel は CHAT として渡されていました。
今回確認したいポイントは、SMS の本文がユーザー定義属性 sms として Lambda に渡されることです。
この結果から、フロー内で メディア / 初期メッセージ をユーザー定義属性 sms に設定しておけば、Lambda から受信 SMS の本文を取得できることを確認できました。
まとめ
Amazon Connect Customer の双方向 SMS で受信した初期メッセージを、ユーザー定義属性 sms に設定し、Lambda から取得できることを確認しました。
ポイントは、メディア / 初期メッセージ を [コンタクト属性の設定] ブロックでユーザー定義属性に設定してから Lambda を呼び出すことです。
SMS の内容をもとに CRM 連携などの後続処理を行う場合の参考になれば幸いです。








