本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
接收傳入 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 最終使用者傳訊會收到訊息,並將其發佈到您指定的 Amazon SNS 主題。從那裡,您可以使用任何 SNS 訂閱者來處理訊息,例如 Lambda 函數、Amazon SQS 佇列或 HTTP/HTTPS 端點。
雙向 RCS 訊息傳送流程的運作方式如下:
-
客戶從支援 RCS 的裝置傳送文字訊息到您的 AWS RCS 代理程式。
-
AWS 最終使用者傳訊會收到傳入訊息,並根據您設定的關鍵字進行評估。如果訊息符合關鍵字,服務會傳送設定的自動回應 (如果有的話)。
-
AWS 最終使用者傳訊會將訊息承載作為 JSON 物件發佈到您為 AWS RCS 代理程式上的雙向傳訊設定的 Amazon SNS 主題。
-
您的 SNS 訂閱者 (例如 Lambda 函數) 會收到訊息承載,並根據您的應用程式邏輯進行處理。
AWS 最終使用者傳訊中的 RCS 目前支援傳入文字訊息。如果客戶傳送媒體訊息 (例如影像或影片) 到您的 AWS RCS 代理程式,訊息會以 IGNORED 狀態記錄。您的應用程式不會透過 SNS 主題接收媒體訊息。
設定您的雙向傳訊目的地
若要在應用程式中接收和處理傳入 RCS 訊息,您必須在 AWS RCS 代理程式上啟用雙向傳訊並設定目的地。雙向傳訊預設為停用。當您啟用它時,您可以指定 AWS Amazon SNS 主題,其中終端使用者傳訊會傳送傳入訊息。您可以使用 AWS 最終使用者傳訊主控台或 API 來設定目的地。
SNS 主題許可
您為雙向 RCS 訊息設定的 Amazon SNS 主題必須允許 AWS 最終使用者訊息將訊息發佈到其中。您有兩種授予存取權的選項。
選項 1:使用 IAM 角色
建立 AWS 最終使用者傳訊可擔任的 IAM 角色,以將訊息發佈到您的 SNS 主題。此角色同時需要信任政策和許可政策。
以下是 IAM 角色的信任政策。將 accountId 取代為 的唯一 ID AWS 帳戶。
{ "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 主題,而 SMSVoiceAllowEncryptedSNSTopics Sid 是加密 Amazon SNS 主題的選用項目。進行下列變更:
-
將 AWS
分割區取代為您使用 AWS 最終使用者傳訊的分割區。 -
將
區域取代為您使用 AWS 最終使用者傳訊 AWS 區域 的 。 -
將
accountId取代為 的唯一 ID AWS 帳戶。 -
將
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 最終使用者傳訊會將 JSON 承載發佈至設定的 Amazon SNS 主題。RCS 傳入訊息承載使用與 SMS 雙向訊息相同的格式:
{ "originationNumber": "+14255550182", "destinationNumber": "+12125550101", "messageKeyword": "JOIN", "messageBody": "EXAMPLE", "inboundMessageId": "cae173d2-66b9-564c-8309-21f858e9fb84", "previousPublishedMessageId": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" }
傳入訊息承載包含下列欄位:
| 欄位 | Description |
|---|---|
|
傳送傳入訊息的電話號碼 (客戶的電話號碼)。 |
|
接收訊息之 AWS RCS 代理程式的識別符。 |
|
符合傳入訊息的已註冊關鍵字,如果有的話。關鍵字會根據訊息內文的開頭進行評估。 |
|
傳入訊息的文字內容。 |
|
傳入訊息的唯一識別符。 |
|
如果傳入訊息是對上一個傳出訊息的回覆,則客戶回應的傳出訊息的唯一識別符。 |
支援的訊息類型
AWS 最終使用者傳訊中的 RCS 目前支援接收傳入文字訊息。當客戶傳送文字訊息到您的 AWS RCS 代理程式時,訊息會傳送到您設定的 Amazon SNS 主題進行處理。
如果客戶傳送媒體訊息 (例如影像、影片或檔案) 到您的 AWS RCS 代理程式, AWS 最終使用者傳訊會以 IGNORED 狀態記錄訊息。媒體訊息不會交付到您的 SNS 主題,也不會由您的應用程式處理。不會將錯誤傳回給寄件者。
RCS 的關鍵字管理
關鍵字可讓您在客戶將特定單字或片語傳送到 AWS RCS 代理程式時設定自動回應。當傳入訊息符合設定的關鍵字時, AWS 最終使用者傳訊會將關聯的自動回應訊息傳回給客戶。
對於 RCS,關鍵字是在 AWS RCS 代理程式上設定,並套用至所有相關聯的 RCS for Business IDs(測試代理程式和國家/地區啟動代理程式)。每個 AWS RCS 代理程式最多可設定 30 個關鍵字。
若要管理 AWS RCS 代理程式的關鍵字,請使用 AWS 最終使用者傳訊主控台或 API。如需關鍵字管理的一般資訊,請參閱 AWS 最終使用者傳訊簡訊中的關鍵字。
注意
在 AWS RCS 代理程式上設定的關鍵字會套用至所有相關聯的註冊。您無法單獨為測試代理程式和國家/地區啟動代理程式設定不同的關鍵字。
使用 Lambda 處理傳入訊息
處理傳入 RCS 訊息的常見模式是將 Lambda 函數訂閱為雙向傳訊設定的 Amazon SNS 主題。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 函數仍會收到訊息。設計您的函數,以避免針對已設定自動回應的關鍵字傳送重複的回應。