本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
剖析 Amazon SNS 訊息格式
Amazon SNS使用以下格式。
主題
HTTP/HTTPS 標頭
當 Amazon SNS傳送訂閱確認、通知或取消訂閱確認訊息至 HTTP/HTTPS 端點時,它會傳送包含數個 Amazon SNS特定標頭值POST的訊息。您可以針對識別訊息類型這類任務使用標頭值,而不必剖析JSON訊息內文即可讀取該Type
值。根據預設,Amazon 會將所有通知SNS傳送至 HTTP/S 端點,並將 Content-Type
設定為 text/plain; charset=UTF-8
。若要選擇文字/純文字 (預設值) 以外的 Content-Type
,請參閱 建立 HTTP/S 交付政策 中的 headerContentType
。
x-amz-sns-message-type
-
訊息的類型。可能的值為
SubscriptionConfirmation
、Notification
和UnsubscribeConfirmation
。 x-amz-sns-message-id
-
通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的通知,會使用原始訊息的訊息 ID。
x-amz-sns-topic-arn
-
發佈此訊息之主題的 Amazon Resource Name (ARN)。
x-amz-sns-subscription-arn
-
此端點訂閱ARN的 。
下列HTTPPOST標頭是對HTTP端點Notification
傳送訊息的標頭範例。
POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent
HTTP/HTTPS 訂閱確認JSON格式
在您訂閱HTTP/HTTPS endpoint, Amazon SNS sends a subscription confirmation message to the HTTP/HTTPS端點之後。此訊息包含 SubscribeURL
值,您必須造訪才能確認訂閱 (或者,您可以使用具有 ConfirmSubscription
的 Token
值)。
注意
在確認訂閱之前,Amazon SNS 不會傳送通知至此端點
訂閱確認訊息是包含訊息內文POST的訊息,其中包含具有下列名稱值對JSON的文件。
Type
-
訊息的類型。若是訂閱確認,類型為
SubscriptionConfirmation
。 MessageId
-
通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的訊息,會使用原始訊息的訊息 ID。
Token
-
您可以與
ConfirmSubscription
動作搭配使用以確認訂閱。或者,您也可直接造訪SubscribeURL
。 TopicArn
-
此端點訂閱之主題的 Amazon Resource Name (ARN)。
Message
-
說明訊息的字串。若是訂閱確認,此字串看起來如下:
You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
SubscribeURL
-
您必須URL造訪 才能確認訂閱。或者,您可以改為使用
Token
和ConfirmSubscription
動作以確認訂閱。 Timestamp
-
傳送訂閱確認的時間 (GMT)。
SignatureVersion
-
使用的 Amazon SNS簽章版本。
-
如果
SignatureVersion
為 1,則Signature
為Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base-64 編碼SHA1withRSA
簽章。 -
如果
SignatureVersion
為 2,則Signature
為Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base-64 編碼SHA256withRSA
簽章。
-
Signature
-
以 Base64 編碼
SHA1withRSA
或Message
、MessageId
、Type
、Timestamp
和TopicArn
值的SHA256withRSA
簽章。 SigningCertURL
-
用來簽署訊息的URL憑證的 。
下列HTTPPOST訊息是傳送至HTTP端點SubscriptionConfirmation
的訊息範例。
POST / HTTP/1.1 x-amz-sns-message-type: SubscriptionConfirmation x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
HTTP/HTTPS 通知JSON格式
當 Amazon SNS傳送通知至訂閱的 HTTP或HTTPS端點時,傳送至端點POST的訊息具有訊息內文,其中包含具有下列名稱值對JSON的文件。
Type
-
訊息的類型。若是通知,類型為
Notification
。 MessageId
-
通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的通知,會使用原始訊息的訊息 ID。
TopicArn
-
發佈此訊息之主題的 Amazon Resource Name (ARN)。
Subject
-
發布通知至主題時指定的
Subject
參數。注意
這是選擇性的參數。如果
Subject
未指定任何 ,則此名稱值對不會出現在JSON本文件中。 Message
-
發布通知至主題時指定的
Message
值。 Timestamp
-
發佈通知的時間 (GMT)。
SignatureVersion
-
使用的 Amazon SNS簽章版本。
-
如果
SignatureVersion
為 1,則Signature
為Message
、MessageId
、Subject
(如果存在)、Type
、Timestamp
和TopicArn
值的 Base-64 編碼SHA1withRSA
簽章。 -
如果
SignatureVersion
為 2,則Signature
為Message
、MessageId
、Subject
(如果存在)、Type
、Timestamp
和TopicArn
值的 Base-64 編碼SHA256withRSA
簽章。
-
Signature
-
以 Base64 編碼
SHA1withRSA
或Message
、MessageId
、Subject
(如果存在)、Type
、Timestamp
和TopicArn
值的SHA256withRSA
簽章。 SigningCertURL
-
用來簽署訊息的URL憑證的 。
UnsubscribeURL
-
URL 可用來從此主題取消訂閱端點的 。如果您造訪此 URL,Amazon 會SNS取消訂閱端點,並停止傳送通知至此端點。
下列HTTPPOST訊息是傳送至HTTP端點Notification
的訊息範例。
POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324 x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96 Content-Length: 773 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96" } }
HTTP/HTTPS 取消訂閱確認JSON格式
HTTP/HTTPS 端點取消訂閱主題後,Amazon SNS會傳送取消訂閱確認訊息至端點。
取消訂閱確認訊息是包含訊息內文POST的訊息,其中包含具有下列名稱值對JSON的文件。
Type
-
訊息的類型。若是取消訂閱確認,類型為
UnsubscribeConfirmation
。 MessageId
-
通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的訊息,會使用原始訊息的訊息 ID。
Token
-
您可以與
ConfirmSubscription
動作搭配使用,以重新確認訂閱。或者,您也可直接造訪SubscribeURL
。 TopicArn
-
此端點取消訂閱之主題的 Amazon Resource Name (ARN)。
Message
-
說明訊息的字串。若是取消訂閱確認,此字串看起來如下:
You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
SubscribeURL
-
您必須URL造訪才能重新確認訂閱的 。或者,您可以改為使用
Token
和ConfirmSubscription
動作來重新確認訂閱。 Timestamp
-
傳送取消訂閱確認的時間 (GMT)。
SignatureVersion
-
使用的 Amazon SNS簽章版本。
-
如果
SignatureVersion
為 1,則Signature
為Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base-64 編碼SHA1withRSA
簽章。 -
如果
SignatureVersion
為 2,則Signature
為Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base-64 編碼SHA256withRSA
簽章。
-
Signature
-
以 Base64 編碼
SHA1withRSA
或Message
、MessageId
、Type
、Timestamp
和TopicArn
值的SHA256withRSA
簽章。 SigningCertURL
-
用來簽署訊息的URL憑證的 。
下列HTTPPOST訊息是傳送至HTTP端點UnsubscribeConfirmation
的訊息範例。
POST / HTTP/1.1 x-amz-sns-message-type: UnsubscribeConfirmation x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1399 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "UnsubscribeConfirmation", "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...", "Timestamp" : "2012-04-26T20:06:41.581Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEHXgJm...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
SetSubscriptionAttributes 交付政策JSON格式
如果您將請求傳送至SetSubscriptionAttributes
動作,並將 AttributeName
參數設定為 的值DeliveryPolicy
,則 AttributeValue
參數的值必須是有效的JSON物件。例如,下面的範例設定交付政策為總計 5 次重試。
http://sns.us-east-2.amazonaws.com/ ?Action=SetSubscriptionAttributes &SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca &AttributeName=DeliveryPolicy &AttributeValue={"healthyRetryPolicy":{"numRetries":5}} ...
使用下列JSON格式作為 AttributeValue
參數的值。
{ "healthyRetryPolicy" : { "minDelayTarget" : int, "maxDelayTarget" : int, "numRetries" : int, "numMaxDelayRetries" : int, "backoffFunction" : "linear|arithmetic|geometric|exponential" }, "throttlePolicy" : { "maxReceivesPerSecond" : int }, "requestPolicy" : { "headerContentType" : "text/plain | application/json | application/xml" } }
如需有關 SetSubscriptionAttribute
動作的詳細資訊,請前往 Amazon Simple Notification Service 參考 SetSubscriptionAttributes 中的 。 API 如需支援HTTP的內容類型標頭的詳細資訊,請參閱 建立 HTTP/S 交付政策。
SetTopicAttributes 交付政策JSON格式
如果您將請求傳送至 SetTopicAttributes
動作,並將 AttributeName
參數設定為 的值DeliveryPolicy
,則 AttributeValue
參數的值必須是有效的JSON物件。例如,下面的範例設定交付政策為總計 5 次重試。
http://sns.us-east-2.amazonaws.com/ ?Action=SetTopicAttributes &TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic &AttributeName=DeliveryPolicy &AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}} ...
針對 AttributeValue
參數的值使用下列JSON格式。
{ "http" : { "defaultHealthyRetryPolicy" : { "minDelayTarget": int, "maxDelayTarget": int, "numRetries": int, "numMaxDelayRetries": int, "backoffFunction": "linear|arithmetic|geometric|exponential" }, "disableSubscriptionOverrides" : Boolean, "defaultThrottlePolicy" : { "maxReceivesPerSecond" : int }, "defaultRequestPolicy" : { "headerContentType" : "text/plain | application/json | application/xml" } } }
如需有關 SetTopicAttribute
動作的詳細資訊,請前往 Amazon Simple Notification Service 參考 SetTopicAttributes 中的 。 API 如需支援HTTP的內容類型標頭的詳細資訊,請參閱 建立 HTTP/S 交付政策。