翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
インバウンド RCS メッセージの受信
AWS エンドユーザーメッセージングは双方向 RCS メッセージングをサポートしているため、顧客からテキストメッセージを受信できます。インバウンド RCS メッセージは、SMS 双方向メッセージングと同じパターンに従います。着信メッセージは、設定した Amazon SNS トピックに配信され、Lambda 関数または他の SNS サブスクライバーを使用して処理されます。
重要
インバウンド RCS メッセージを使用するには、AWS RCS エージェントで双方向メッセージング SNS トピックを設定する必要があります。エージェントを作成すると、双方向メッセージングはデフォルトで無効になります。有効にして SNS トピックを設定すると、インバウンドメッセージがそのトピックに配信されます。お客様は、すべてのインバウンド RCS メッセージに対して標準料金で課金されます。
このセクションでは、双方向 RCS メッセージングの仕組み、AWS RCS エージェントでメッセージングを有効にする方法、インバウンドメッセージペイロード形式、キーワードの管理方法について説明します。AWS RCS エージェントの管理については、「」を参照してくださいRCS エージェントの管理。RCS メッセージの送信については、「」を参照してくださいRCS メッセージの送信。
トピック
双方向 RCS メッセージングの仕組み
顧客が AWS RCS エージェントにテキストメッセージを送信すると、 AWS End User Messaging はメッセージを受信し、指定した Amazon SNS トピックに発行します。そこから、Lambda 関数、Amazon SQS キュー、HTTP/HTTPS エンドポイントなどの任意の SNS サブスクライバーを使用してメッセージを処理できます。
双方向 RCS メッセージングフローは、次のように機能します。
-
顧客が RCS 対応デバイスから AWS RCS エージェントにテキストメッセージを送信します。
-
AWS エンドユーザーメッセージングはインバウンドメッセージを受信し、設定したキーワードと照合して評価します。メッセージがキーワードと一致する場合、サービスは設定された自動応答 (存在する場合) を送信します。
-
AWS エンドユーザーメッセージングは、AWS RCS エージェントで双方向メッセージング用に設定した Amazon SNS トピックにメッセージペイロードを JSON オブジェクトとして発行します。
-
SNS サブスクライバー (Lambda 関数など) はメッセージペイロードを受け取り、アプリケーションロジックに従って処理します。
AWS エンドユーザーメッセージングの RCS は現在、インバウンドテキストメッセージをサポートしています。顧客が AWS RCS エージェントにメディアメッセージ (イメージやビデオなど) を送信すると、メッセージは IGNORED ステータスでログに記録されます。アプリケーションは SNS トピックを介してメディアメッセージを受信しません。
双方向メッセージングの送信先の設定
アプリケーションでインバウンド RCS メッセージを受信して処理するには、双方向メッセージングを有効にし、AWS RCS エージェントで送信先を設定する必要があります。双方向メッセージングはデフォルトで無効になっています。有効にすると、 AWS エンドユーザーメッセージングがインバウンドメッセージを配信する Amazon SNS トピックを指定します。送信先は、 AWS エンドユーザーメッセージングコンソールまたは API を使用して設定できます。
SNS トピックのアクセス許可
双方向 RCS メッセージング用に設定した Amazon SNS トピックでは、 AWS エンドユーザーメッセージングがメッセージを発行できるようにする必要があります。アクセスを許可するには、2 つのオプションがあります。
オプション 1: IAM ロールを使用する
End AWS User Messaging が SNS トピックにメッセージを発行するために引き受けることができる IAM ロールを作成します。ロールには、信頼ポリシーとアクセス許可ポリシーの両方が必要です。
以下に示すのは、IAM ロールの信頼ポリシーです。accountId を AWS アカウントの一意の ID と置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SMSVoice", "Effect": "Allow", "Principal": { "Service": "sms-voice.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "accountId" } } } ] }
以下に示すのは、IAM ロールのアクセス許可ポリシーです。SMSVoiceAllowSNSPublish Sid は Amazon SNS トピックへの発行を許可し、Sid SMSVoiceAllowEncryptedSNSTopics は暗号化された Amazon SNS トピックではオプションです。以下の変更を加えます。
-
partition を、 AWS AWS エンドユーザーメッセージングを使用するパーティション
に置き換えます。 -
regionAWS リージョン を、 AWS エンドユーザーメッセージングを使用する に置き換えます。 -
accountIdを AWS アカウントの一意の ID と置き換えます。 -
snsTopicNameを、インバウンドメッセージを受信する Amazon SNS トピックの名前に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SMSVoiceAllowSNSPublish", "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:partition:sns:region:accountId:snsTopicName", "Condition": { "StringEquals": { "aws:ResourceAccount": "accountId" } } }, { "Sid": "SMSVoiceAllowEncryptedSNSTopics", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:sns:topicArn": "arn:partition:sns:region:accountId:snsTopicName", "aws:CalledViaLast": "sns.amazonaws.com" } } } ] }
オプション 2: SNS トピックポリシーを使用する
または、 AWS エンドユーザーメッセージングがメッセージを発行できるようにするポリシーステートメントを SNS トピックに直接追加します。snsTopicArn を SNS トピックの ARN に置き換えます。
{ "Effect": "Allow", "Principal": { "Service": "sms-voice.amazonaws.com" }, "Action": "sns:Publish", "Resource": "snsTopicArn" }
インバウンドメッセージペイロード形式
AWS RCS エージェントが受信テキストメッセージを受信すると、 AWS End User Messaging は設定された Amazon SNS トピックに JSON ペイロードを発行します。RCS インバウンドメッセージペイロードは、SMS 双方向メッセージングと同じ形式を使用します。
{ "originationNumber": "+14255550182", "destinationNumber": "+12125550101", "messageKeyword": "JOIN", "messageBody": "EXAMPLE", "inboundMessageId": "cae173d2-66b9-564c-8309-21f858e9fb84", "previousPublishedMessageId": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" }
インバウンドメッセージペイロードには、次のフィールドが含まれます。
| フィールド | 説明 |
|---|---|
|
インバウンドメッセージを送信した電話番号 (顧客の電話番号)。 |
|
メッセージを受け取った AWS RCS エージェントの識別子。 |
|
インバウンドメッセージと一致する登録済みキーワード。キーワードはメッセージ本文の先頭に対して評価されます。 |
|
インバウンドメッセージのテキストコンテンツ。 |
|
インバウンドメッセージの一意の識別子。 |
|
インバウンドメッセージが以前のアウトバウンドメッセージへの返信である場合、顧客が応答しているアウトバウンドメッセージの一意の識別子。 |
サポートされているメッセージタイプ
AWS エンドユーザーメッセージングの RCS は現在、インバウンドテキストメッセージの受信をサポートしています。顧客が AWS RCS エージェントにテキストメッセージを送信すると、メッセージは設定された Amazon SNS トピックに配信され、処理されます。
顧客が AWS RCS エージェントにメディアメッセージ (イメージ、ビデオ、ファイルなど) を送信すると、 AWS End User Messaging はメッセージを IGNORED ステータスでログに記録します。メディアメッセージは SNS トピックに配信されず、アプリケーションによって処理されません。送信者にエラーは返されません。
RCS のキーワード管理
キーワードを使用すると、顧客が AWS RCS エージェントに特定の単語やフレーズを送信するときに自動応答を設定できます。インバウンドメッセージが設定されたキーワードと一致すると、 AWS End User Messaging は関連する自動応答メッセージを顧客に送信します。
RCS の場合、キーワードは AWS RCS エージェントで設定され、関連するすべての RCS for Business IDs (テストエージェントと国起動エージェント) に適用されます。AWS RCS エージェントごとに最大 30 個のキーワードを設定できます。
AWS RCS エージェントのキーワードを管理するには、 AWS エンドユーザーメッセージングコンソールまたは API を使用します。キーワード管理の一般的な情報については、「」を参照してくださいAWS エンドユーザーメッセージング SMS のキーワード。
注記
AWS RCS エージェントで設定されたキーワードは、関連するすべての登録に適用されます。テストエージェントと国起動エージェントに異なるキーワードを個別に設定することはできません。
Lambda を使用したインバウンドメッセージの処理
インバウンド RCS メッセージを処理する一般的なパターンは、双方向メッセージング用に設定された Amazon SNS トピックに Lambda 関数をサブスクライブすることです。Lambda 関数はインバウンドメッセージペイロードを受け取り、顧客の問い合わせへの応答、コマンドの処理、他のシステムへのメッセージのルーティングなどのアプリケーションロジックを実装できます。
次の Python の例は、インバウンド RCS メッセージを処理し、 SendTextMessage API を使用してレスポンスを送信する Lambda 関数を示しています。
import json import boto3 sms_client = boto3.client('pinpoint-sms-voice-v2') def lambda_handler(event, context): # Parse the SNS message for record in event['Records']: sns_message = json.loads(record['Sns']['Message']) origination_number = sns_message['originationNumber'] message_body = sns_message['messageBody'] keyword = sns_message.get('messageKeyword', '') print(f"Received message from {origination_number}: {message_body}") # Process the message and determine a response if keyword.upper() == 'HELP': response_text = 'Available commands: HELP, STATUS, STOP' elif keyword.upper() == 'STATUS': response_text = 'Your account is active. No action needed.' else: response_text = ( f'Thanks for your message. ' f'Reply HELP for available commands.' ) # Send a response back to the customer try: response = sms_client.send_text_message( DestinationPhoneNumber=origination_number, OriginationIdentity='pool-a1b2c3d4e5f6g7h8i', MessageBody=response_text, MessageType='TRANSACTIONAL' ) print(f"Response sent. Message ID: {response['MessageId']}") except Exception as e: print(f"Failed to send response: {str(e)}") return {'statusCode': 200}
この例では、Lambda 関数は次のようになります。
-
SNS イベントからのインバウンドメッセージペイロードを解析します。
-
messageKeywordフィールドをチェックして、顧客のインテントを決定します。 -
SendTextMessageAPI を介してプールベースの送信 (推奨) を使用してレスポンスを送信します。プールはチャネル選択を自動的に処理します。
注記
インバウンドメッセージにレスポンスを送信するときは、プールベースの送信を使用して、顧客のデバイスが RCS をサポートしなくなった場合に自動 SMS フォールバックを確保します。送信パターンの詳細については、「」を参照してくださいRCS メッセージの送信。
インバウンド RCS メッセージングのベストプラクティス
双方向 RCS メッセージングを実装するときは、次のベストプラクティスに従ってください。
-
エラー処理の実装 — Lambda 関数または SNS サブスクライバーはエラーを適切に処理する必要があります。関数がメッセージを処理できない場合は、SNS サブスクリプションでデッドレターキュー (DLQ) を設定し、後で再試行するために未処理のメッセージをキャプチャします。
-
フォールバックレスポンスの送信 — アプリケーションが処理できないメッセージを受信したら、返信なしで顧客を離れるのではなく、有用なフォールバックレスポンスを送信します。例えば、使用可能なコマンドで応答するか、顧客に代替サポートチャネルを指示します。
-
レスポンスにプールベースの送信を使用する — インバウンドメッセージにレスポンスを送信するときは、プールベースの送信を使用して自動 SMS フォールバックを確保します。これにより、デバイスが RCS をサポートしなくなった場合でも、レスポンスがお客様に届くようになります。
-
メッセージ処理のモニタリング — Amazon CloudWatch メトリクスを使用して、インバウンドメッセージボリュームと処理の成功率をモニタリングします。インバウンドメッセージの急激な増加や処理の失敗率が高いなど、異常なパターンのアラームを設定します。RCS メトリクスの詳細については、「」を参照してくださいRCS CloudWatch メトリクスとモニタリング。
-
キーワードレスポンスを一貫して処理する — キーワードの自動レスポンスとアプリケーションのプログラムによるレスポンスが競合しないようにします。特定のキーワードにキーワード自動応答を設定しても、Lambda 関数は引き続きメッセージを受信します。自動応答が既に設定されているキーワードに対して重複するレスポンスが送信されないように関数を設計します。