

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS 最终用户消息社交中的消息和事件目的地
<a name="managing-event-destinations"></a>

事件目的地是发送 WhatsApp 事件的 Amazon SNS 主题或 Amazon Connect 实例。开启活动发布功能后，您的所有发送和接收事件都将发送到消息和事件目的地。使用事件可监控、跟踪和分析传出消息和传入的客户通信的状态。

每个 WhatsApp 企业账户 (WABA) 可以有一个活动目的地。与 WABA 关联的所有资源中的所有事件都记录到该事件目的地。例如，您可以拥有一个与其关联的三个电话号码的 WABA，并且这些电话号码中的所有事件都记录到一个事件目的地。

**Topics**
+ [向 AWS 最终用户消息社交添加消息和事件目的地](managing-event-destinations-add.md)
+ [AWS 最终用户消息社交中的消息和事件格式](managing-event-destination-dlrs.md)
+ [WhatsApp 消息状态](managing-event-destinations-status.md)

# 向 AWS 最终用户消息社交添加消息和事件目的地
<a name="managing-event-destinations-add"></a>

当您开启消息和事件发布功能后，您的 WhatsApp 企业账户 (WABA) 生成的所有事件都将发送到 Amazon SNS 主题。这包括与 WABA 关联的每个电话号码的事件。您的 WABA 可以有一个与之关联的 Amazon SNS 主题。

## 先决条件
<a name="managing-event-destinations-add_prerequisite"></a>

在开始之前，必须满足以下先决条件才能使用 Amazon SNS 主题或 Amazon Connect 实例作为消息和事件目的地。

**亚马逊 SNS 主题**
+ 已经[创建](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)了 Amazon SNS 主题并[添加了权限](#managing-event-destinations-sns-policies)。
**注意**  
不支持 Amazon SNS FIFO 主题。
+ **（可选）**要使用使用 AWS KMS 密钥加密的 Amazon SNS 主题，您必须向 AWS 最终用户消息社交授予[现有密钥](#managing-event-destinations-topic-policies)策略的权限。

**Amazon Connect 实例**
+ 已[创建](https://docs.aws.amazon.com/connect/latest/adminguide/tutorial1-set-up-your-instance.html)一个 Amazon Connect 实例并添加了[权限](#managing-event-destinations-amazon-connect-policies)。

## 添加消息和事件目的地
<a name="managing-event-destinations-add_steps"></a>

1. 打开 AWS 最终用户消息社交控制台，网址为[https://console.aws.amazon.com/social-messaging/](https://console.aws.amazon.com/social-messaging/)。

1. 选择**企业账户**，然后选择一个 WABA。

1. 在**事件目标**选项卡上，选择**编辑目标**。

1. 要打开活动目的地，请选择 “**启用**”。

1. 对于**目的地类型**，请选择 Amazon SNS 或 Amazon Connect

   1. **要将您的活动发送到亚马逊 SNS 目的地，请在主题 ARN 中输入现有主题 ARN。**有关示例 IAM 策略，请参阅 [Amazon SNS 主题的 IAM 策略](#managing-event-destinations-sns-policies)。

   1. 适用于 Amazon Connect

      1. 对于 **Connect 实**例，请从下拉列表中选择一个实例。

      1. 对于**双向渠道角色**，选择以下任一选项：

         1. **选择现有 IAM 角色**-从现有 IAM **角色下拉列表中选择现有 IAM** 策略。有关示例 IAM 策略，请参阅 [Amazon Connect 的 IAM 策略](#managing-event-destinations-amazon-connect-policies)。

         1. **输入 IAM 角色 ARN** — 在 “**使用现有** IAM 角色 Arn” 中输入 IAM 策略的 ARN。有关示例 IAM 策略，请参阅 [Amazon Connect 的 IAM 策略](#managing-event-destinations-amazon-connect-policies)。

1. 选择**保存更改**。

## 加密的 Amazon SNS 主题政策
<a name="managing-event-destinations-topic-policies"></a>

您可以使用使用 AWS KMS 密钥加密的 Amazon SNS 主题来提高安全级别。如果您的应用程序处理私有或敏感数据，这种增强的安全性会有所帮助。有关 AWS KMS 使用密钥加密 Amazon SNS 主题的更多信息，[请参阅《*亚马逊简单通知*服务开发者指南》中的启用服务事件 AWS 源和加密主题之间的兼容性](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html#compatibility-with-aws-services)。

**注意**  
不支持 Amazon SNS FIFO 主题。

该示例语句使用了可选但推荐的`SourceAccount`和`SourceArn`条件来避免混淆副手问题，并且只有 AWS 最终用户消息社交所有者帐户才有权访问。有关混淆代理问题的更多信息，请参阅 *[IAM 用户指南](https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html)*中的[混淆代理问题](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)。

您使用的密钥必须是*对称*的。加密的 Amazon SNS 主题不支持非对称 AWS KMS 密钥。

必须修改密钥策略以允许 “ AWS 最终用户社交消息” 使用该密钥。按照《*AWS Key Management Service 开发人员指南*》中[更改密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)中的说明向现有密钥策略添加以下权限：

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "social-messaging.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{ACCOUNT_ID}"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:{PARTITION}:social-messaging:{REGION}:{ACCOUNT_ID}:*"
        }
     }
}
```

## Amazon SNS 主题的 IAM 策略
<a name="managing-event-destinations-sns-policies"></a>

要使用现有 IAM 角色或创建新角色，请将以下策略附加到该角色，以便 AWS 最终用户消息社交可以代入该角色。有关如何修改角色的信任关系的信息，请参阅 [https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html](https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html)中的[修改角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_manage.html)部分。

以下是 IAM 角色的**权限策略**。权限策略允许发布到 Amazon SNS 主题。

在以下 IAM 权限策略中，进行以下更改：
+ *\$1PARTITION\$1*替换为您在其中使用 AWS 最终用户消息社交的 AWS 分区。
+ *\$1REGION\$1*替换为您 AWS 区域 在中使用 AWS 最终用户消息社交的。
+ *\$1ACCOUNT\$1*替换为您的唯一 ID AWS 账户。
+ *\$1TOPIC\$1NAME\$1*替换为将接收消息的 Amazon SNS 主题。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": [
          "social-messaging.amazonaws.com"
        ]
       },
    "Action": "sns:Publish",
    "Resource": "arn:{PARTITION}:sns:{REGION}:{ACCOUNT}:{TOPIC_NAME}"
}
```

## Amazon Connect 的 IAM 策略
<a name="managing-event-destinations-amazon-connect-policies"></a>

如果您希望 AWS 最终用户消息社交使用现有的 IAM 角色或创建新角色，请将以下策略附加到该角色，以便 AWS 最终用户消息社交可以代入该角色。有关如何修改角色的现有信任关系的信息，请参阅 [https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html](https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html)中的[修改角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_manage.html)。此角色既用于发送事件，也用于将电话号码从 AWS 最终用户消息社交导入到 Amazon Connect。

要创建新的 IAM 策略，请执行以下操作：

1. 按照《IAM 用户指南》的[使用 JSON 编辑器创建策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)中的说明创建新的**权限策略**。

   1. 在步骤 5 中，使用 IAM 角色的**权限策略**允许发布到 Amazon Connect。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "AllowOperationsForEventDelivery",
                 "Effect": "Allow",
                 "Action": [
                     "connect:SendIntegrationEvent"
                 ],
                 "Resource": "*"
             },
             {
                 "Sid": "AllowOperationsForPhoneNumberImport",
                 "Effect": "Allow",
                 "Action": [
                     "connect:ImportPhoneNumber",
                     "social-messaging:GetLinkedWhatsAppBusinessAccountPhoneNumber",
                     "social-messaging:TagResource"
                 ],
                 "Resource": "*"
             }
         ]
     }
     ```

------

1. 按照《IAM 用户指南》的[使用自定义信任策略创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)中的说明创建新的**信任策略**。

   1. 在步骤 4 中，使用 IAM 角色的**信任策略**。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": [
                          "social-messaging.amazonaws.com"
                      ]
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 在步骤 10 中，添加您在上一步中创建的**权限策略**。

## 后续步骤
<a name="managing-event-destinations_next_steps"></a>

设置您的 Amazon SNS 主题后，您必须为该主题订阅终端节点。终端节点将开始接收发布到关联主题的消息。有关订阅主题的更多信息，请参阅亚马逊 S [NS 开发者指南中的订阅 Amazon SN](https://docs.aws.amazon.com//sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) *S* 主题。

# AWS 最终用户消息社交中的消息和事件格式
<a name="managing-event-destination-dlrs"></a>

事件的 JSON 对象包含 AWS 事件标头和 WhatsApp JSON 有效负载。有关 JSON WhatsApp 通知负载和值的列表，请参阅*WhatsApp 商业平台云 API [参考中的 Webhooks 通知负载](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components)参考*和[消息状态](https://developers.facebook.com/docs/whatsapp/conversation-types#message-status)。

## AWS 最终用户消息社交事件标题
<a name="managing-event-destination-dlrs_body"></a>

事件的 JSON 对象包含 AWS 事件标题和 WhatsApp JSON。标题包含您的 WhatsApp 企业账户 (WABA) ARNs 的 AWS 标识符和电话号码。

```
{
  "context": {
    "MetaWabaIds": [
      {
        "wabaId": "1234567890abcde",
        "arn": "arn:aws:social-messaging:us-east-1:123456789012:waba/fb2594b8a7974770b128a409e2example"
      }
    ],
    "MetaPhoneNumberIds": [
      {
        "metaPhoneNumberId": "abcde1234567890",
        "arn": "arn:aws:social-messaging:us-east-1:123456789012:phone-number-id/976c72a700aac43eaf573ae050example"
      }
    ]
  },
  "whatsAppWebhookEntry": "{\"...JSON STRING....",
  "aws_account_id": "123456789012",
  "message_timestamp": "2025-01-08T23:30:43.271279391Z",
  "messageId": "6d69f07a-c317-4278-9d5c-6a84078419ec"
}
//Decoding the contents of whatsAppWebhookEntry
{
//WhatsApp notification payload
}
```

在前面的示例事件中：
+ *1234567890abcde*是来自 Meta 的 WABA ID。
+ *abcde1234567890*是来自 Meta 的电话号码 ID。
+ *fb2594b8a7974770b128a409e2example*是 WhatsApp 企业账户 (WABA) 的 ID。
+ *976c72a700aac43eaf573ae050example*是电话号码的 ID。

## 用于接收消息的 WhatsApp JSON 示例
<a name="managing-event-destination-dlrs-example-receive-text"></a>

以下显示了来自的传入消息的事件记录 WhatsApp。从 WhatsApp 中接收`whatsAppWebhookEntry`的 JSON 以 JSON 字符串的形式接收，并且可以转换为 JSON。有关字段及其含义的列表，请参阅《*WhatsApp 商业平台云 API [参考》中的 Webhooks 通知负载](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components)参考*。

```
{
  "context": {
    "MetaWabaIds": [
      {
        "wabaId": "1234567890abcde",
        "arn": "arn:aws:social-messaging:us-east-1:123456789012:waba/fb2594b8a7974770b128a409e2example"
      }
    ],
    "MetaPhoneNumberIds": [
      {
        "metaPhoneNumberId": "abcde1234567890",
        "arn": "arn:aws:social-messaging:us-east-1:123456789012:phone-number-id/976c72a700aac43eaf573ae050example"
      }
    ]
  },
  "whatsAppWebhookEntry": "{\"...JSON STRING....",
  "aws_account_id": "123456789012",
  "message_timestamp": "2025-01-08T23:30:43.271279391Z",
  "messageId": "6d69f07a-c317-4278-9d5c-6a84078419ec"
}
```

你可以使用诸如 [jq 之类的工具将 J](https://jqlang.org/) SON 字符串转换为 JSON。以下是 JSON 格式的：`whatsAppWebhookEntry`

```
{
  "id": "503131219501234",
  "changes": [
    {
      "value": {
        "messaging_product": "whatsapp",
        "metadata": {
          "display_phone_number": "14255550123",
          "phone_number_id": "46271669example"
        },
        "statuses": [
          {
            "id": "wamid.HBgLMTkxNzM5OTI3MzkVAgARGBJBMTM4NDdGRENEREI5Rexample",
            "status": "sent",
            "timestamp": "1736379042",
            "recipient_id": "01234567890",
            "conversation": {
              "id": "62374592e84cb58e52bdaed31example",
              "expiration_timestamp": "1736461020",
              "origin": {
                "type": "utility"
              }
            },
            "pricing": {
              "billable": true,
              "pricing_model": "CBP",
              "category": "utility"
            }
          }
        ]
      },
      "field": "messages"
    }
  ]
}
```

## 用于接收媒体消息的 WhatsApp JSON 示例
<a name="managing-event-destination-dlrs-example-receive-media"></a>

以下显示了传入媒体消息的事件记录。要检索媒体文件，请使用 GetWhatsAppMessageMedia API 命令。有关字段及其含义的列表，请参阅 [Webhooks 通知负载](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components)参考

```
{
//AWS End User Messaging Social header
}
//Decoding the contents of whatsAppWebhookEntry
{
  "id": "365731266123456",
  "changes": [
    {
      "value": {
        "messaging_product": "whatsapp",
        "metadata": {
          "display_phone_number": "12065550100",
          "phone_number_id": "321010217760100"
        },
        "contacts": [
          {
            "profile": {
              "name": "Diego"
            },
            "wa_id": "12065550102"
          }
        ],
        "messages": [
          {
            "from": "14255550150",
            "id": "wamid.HBgLMTQyNTY5ODgzMDIVAgASGCBDNzBDRjM5MDU2ODEwMDkwREY4ODBDRDE0RjVGRkexample",
            "timestamp": "1723506230",
            "type": "image",
            "image": {
              "mime_type": "image/jpeg",
              "sha256": "BTD0xlqSZ7l02o+/upusiNStlEZhA/urkvKf143Uqjk=",
              "id": "530339869524171"
            }
          }
        ]
      },
      "field": "messages"
    }
  ]
}
```

# WhatsApp 消息状态
<a name="managing-event-destinations-status"></a>

当您发送消息时，您会收到有关该消息的状态更新。您必须启用事件记录才能接收这些通知，请参阅[AWS 最终用户消息社交中的消息和事件目的地消息和事件目的地](managing-event-destinations.md)。

## 消息状态
<a name="managing-event-destinations-status_body"></a>

下表包含可能的消息状态。


****  

| 状态名称 | 说明 | 
| --- | --- | 
| 接受的 | 该邮件已被 WhatsApp 接受处理。 | 
| 已删除 | 客户删除了该邮件，如果邮件已下载到您的服务器，则您也应将其删除。 | 
| 已交付 | 消息已成功传送给客户。 | 
| 已失败 | 消息发送失败。 | 
| 消息重试次数已用尽，正在丢弃消息。 | 无法在 180 分钟的重试期 WhatsApp 内将该消息移交给该消息，因此已被丢弃。 | 
| read | 客户阅读了消息。只有当客户开启已读回执时，才会发送此状态。 | 
| 已发送 | 消息已发送，但仍在传输中。 | 
| warning | 该消息包含不可用或不存在的项目。 | 

## 其他资源
<a name="managing-event-destinations-status_additional_resources"></a>

有关更多信息，请参阅《*WhatsApp 商业平台云 API 参考*》中的[消息状态](https://developers.facebook.com/docs/whatsapp/conversation-types#message-status)。