

**终止支持通知**： AWS 将于 2026 年 2 月 20 日终止对 Amazon Chime 服务的支持。2026 年 2 月 20 日之后，您将无法再访问 Amazon Chime 控制台或 Amazon Chime 应用程序资源。有关更多信息，请访问该[博客文章](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/)。**注意：**这不会影响 [Amazon Chime 软件开发工具包](https://aws.amazon.com/chime/chime-sdk/)服务的可用性。

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

# 扩展 Amazon Chime 桌面客户端
<a name="extend-chime-client"></a>

您可以通过添加聊天机器人、代理电话会话和 Webhook 来扩展 Amazon Chime 桌面客户端的功能。用户可使用聊天机器人执行任务，如查询内部系统以获取信息。用户可使用代理电话会话在不透露其电话号码的情况下，拨打电话并发送短信。Webhook 可以自动向聊天室发送消息。例如，Webhook 可以向团队同时发送会议提醒和链接。

**Topics**
+ [User management](users.md)
+ [为 Amazon Chime 桌面客户端集成聊天机器人](chat-bots.md)
+ [创建适用于 Amazon Chime 的 Webhook](webhooks.md)

# User management
<a name="users"></a>

以下代码片段有助于您管理 Amazon Chime 用户。本主题中的所有示例都使用了 Java。

**Topics**
+ [邀请多个用户](invite-users.md)
+ [下载用户列表](download-users.md)
+ [注销多个用户](logout-users.md)
+ [更新用户个人信息 PINs](update-pins.md)

# 邀请多个用户
<a name="invite-users"></a>

以下示例显示了如何邀请多用户加入 Amazon Chime `Team` 账户。

```
List<String> emails = new ArrayList<>();
emails.add("janedoe@example.com");
emails.add("richardroe@example.net");
InviteUsersRequest inviteUsersRequest = new InviteUsersRequest()
    .withAccountId("chimeAccountId")
    .withUserEmailList(emails);

chime.inviteUsers(inviteUsersRequest);
```

# 下载用户列表
<a name="download-users"></a>

以下示例显示了如何以 `.csv` 格式，下载与 Amazon Chime 管理账户关联的用户列表。

```
BufferedWriter writer = Files.newBufferedWriter(Paths.get("/path/to/csv"));
CSVPrinter printer = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("userId", "email"));

ListUsersRequest listUsersRequest = new ListUsersRequest()
    .withAccountId(accountId)
    .withMaxResults(1);

boolean done = false;
while (!done) {
    ListUsersResult listUsersResult = chime.listUsers(listUsersRequest);
    for (User user: listUsersResult.getUsers()) {
        printer.printRecord(user.getUserId(), user.getPrimaryEmail());
    }

    if (listUsersResult.getNextToken() == null) {
        done = true;
    }

    listUsersRequest = new ListUsersRequest()
        .withAccountId(accountId)
        .withNextToken(listUsersResult.getNextToken());
}

printer.close();
```

# 注销多个用户
<a name="logout-users"></a>

以下示例显示了如何注销 Amazon Chime 管理账户中的多个用户。

```
ListUsersRequest listUsersRequest = new ListUsersRequest()
    .withAccountId("chimeAccountId");
ListUsersResult listUsersResult = chime.listUsers(listUsersRequest);

for (User user: listUsersResult.getUsers()) {
    LogoutUserRequest logoutUserRequest = new LogoutUserRequest()
        .withAccountId(user.getAccountId())
        .withUserId(user.getUserId());

    chime.logoutUser(logoutUserRequest);
}
```

# 更新用户个人信息 PINs
<a name="update-pins"></a>

以下示例显示了如何重置 Amazon Chime 特定用户的会议个人 PIN 码。

```
ResetPersonalPINRequest request = new ResetPersonalPINRequest()
    .withAccountId("chimeAccountId")
    .withUserId("userId");

ResetPersonalPINResult result = chime.resetPersonalPIN(request);

User user = result.getUser();
user.getPersonalPIN()
```

# 为 Amazon Chime 桌面客户端集成聊天机器人
<a name="chat-bots"></a>

你可以使用 AWS Command Line Interface (AWS CLI)、Amazon Chime API 或 AWS SDK 将聊天机器人与 Amazon Chime 集成。聊天机器人允许您利用 Amazon Lex 和其他 AWS 服务的强大功能 AWS Lambda，通过 Amazon Chime 聊天室中的用户可以访问的智能对话界面来简化常见任务。

如果您是 Amazon Chime 企业账户管理员，则可以使用聊天机器人帮助用户执行以下任务：
+ 查询内部系统以获取信息。
+ 自动执行任务。
+ 接收关键问题的通知。
+ 创建支持票证。

有关 Amazon Chime 企业账户的更多信息，请参阅 [管理您的 Amazon Chime 账户](manage-chime-account.md)。

如果您是 Amazon Chime 企业账户管理员，则最多可以创建 10 个聊天机器人以集成至 Amazon Chime。这些聊天机器人仅适用于由您账户成员创建的聊天室。只有聊天室管理员才能为聊天室添加聊天机器人。聊天机器人添加至聊天室后，聊天室成员可以运行由创建者提供的命令与聊天机器人进行交互。有关更多信息，请参阅本主题中的下一节。

Linux 和 macOS 的用户可以构建支持自定义的示例聊天机器人。有关更多信息，请参阅[为 Amazon Chime 构建自定义聊天机器人](https://aws.amazon.com/blogs/business-productivity/build-custom-chat-bots-for-amazon-chime/)。

**Topics**
+ [将聊天机器人与 Amazon Chime 配合使用](use-bots.md)
+ [发送给聊天机器人的 Amazon Chime 事件](events-bots.md)

# 将聊天机器人与 Amazon Chime 配合使用
<a name="use-bots"></a>

如果您是 Amazon Chime 企业账户管理员，则最多可以创建 10 个聊天机器人以集成至 Amazon Chime。这些聊天机器人仅适用于由您账户成员创建的聊天室。只有聊天室管理员才能为聊天室添加聊天机器人。聊天机器人添加至聊天室后，聊天室成员可以运行由创建者提供的命令与聊天机器人进行交互。有关更多信息，请参阅《Amazon Chime 用户指南》**中的[使用聊天机器人](https://docs.aws.amazon.com/chime/latest/ug/chat-bots.html)。

您还可以使用 Amazon Chime API 操作，为 Amazon Chime 账户启用或停用聊天机器人。有关更多信息，请参阅 [更新聊天机器人](update-bots.md)。

**注意**  
您无权删除聊天机器人。要阻止在您的账户中使用聊天机器人，请使用《亚马逊 Chime API 参考》中的 Amazon [UpdateBot](https://docs.aws.amazon.com/chime/latest/APIReference/API_UpdateBot.html)*Chime* API 操作。停用聊天机器人时，聊天室管理员只能将其移出聊天室，而无法添加。如果对聊天室中已停用的聊天机器人执行 @mention 操作，用户将会收到错误消息。

## 先决条件
<a name="bots-prereqs"></a>

在启动用于集成聊天机器人与 Amazon Chime 的程序前，请先完成以下先决条件：
+ 创建聊天机器人。
+ 创建 Amazon Chime 出站端点，向机器人发送事件信息。从 AWS Lambda 函数 ARN 或 HTTPS 端点中选择。有关 Lambda 的更多信息，请参阅 *[AWS Lambda 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/)*。

## 适用于 HTTPS 端点的 DNS 最佳实践
<a name="dns-practices"></a>

在为您的 HTTPS 端点分配 DNS 时，我们建议采用以下最佳实践：
+ 使用专用于自动程序端点的 DNS 子域。
+ 仅使用 A 记录指向自动程序端点。
+ 保护您的 DNS 服务器和 DNS 注册商账户，以防止域劫持。
+ 使用专用于自动程序端点的公开有效的 TLS 中间证书。
+ 在处理机器人消息前，请先对其签名进行加密验证。

创建聊天机器人后，使用 AWS Command Line Interface (AWS CLI) 或 Amazon Chime API 操作完成以下各节中描述的任务。

**Topics**
+ [步骤 1：将聊天机器人集成至 Amazon Chime](integrate-bots.md)
+ [步骤 2：为 Amazon Chime 聊天机器人配置出站端点](config-endpoints.md)
+ [步骤 3：为 Amazon Chime 聊天室添加聊天机器人](add-bots.md)
+ [对聊天机器人请求进行身份验证](auth-bots.md)
+ [更新聊天机器人](update-bots.md)

# 步骤 1：将聊天机器人集成至 Amazon Chime
<a name="integrate-bots"></a>

完成[先决条件](use-bots.md#bots-prereqs)后，使用 AWS CLI 或 Amazon Chime API 将您的聊天机器人与 Amazon Chime 集成。

**注意**  
这些流程会为聊天机器人创建姓名和电子邮件地址。聊天机器人的名称和电子邮件地址创建后就无法更改。

## AWS CLI
<a name="integ-cli"></a>

**要整合聊天机器人，请使用 AWS CLI**

1. 如需将聊天机器人集成至 Amazon Chime，请运行 AWS CLI中的 **create-bot** 命令。

   ```
   aws chime create-bot --account-id 12a3456b-7c89-012d-3456-78901e23fg45 --display-name exampleBot --domain example.com
   ```

   1. 请输入聊天机器人的显示名称，最多包含 55 个字母数字或特殊字符（如 \$1、–、%）。

   1. 请输入 Amazon Chime 企业账户的注册域名。

1. Amazon Chime 将返回包含机器人 ID 在内的响应结果。

   ```
   "Bot": {
           "CreatedTimestamp": "timeStamp",
           "DisplayName": "exampleBot",
           "Disabled": exampleBotFlag,
           "UserId": "1ab2345c-67de-8901-f23g-45h678901j2k",
           "BotId": "botId",
           "UpdatedTimestamp": "timeStamp",
           "BotType": "ChatBot",
           "SecurityToken": "securityToken",
           "BotEmail": "displayName-chimebot@example.com"
            }
   ```

1. 请复制并保存机器人 ID 和电子邮件地址，以备如下程序使用。

## Amazon Chime API
<a name="integ-api"></a>

**使用 Amazon Chime API 集成聊天机器人**

1. *要将您的聊天机器人与 Amazon Chime 集成，请使用[CreateBot](https://docs.aws.amazon.com/chime/latest/APIReference/API_CreateBot.html)《亚马逊 Chime API 参考》中的 API 操作。*

   1. 请输入聊天机器人的显示名称，最多包含 55 个字母数字或特殊字符（如 \$1、–、%）。

   1. 请输入 Amazon Chime 企业账户的注册域名。

1. Amazon Chime 将返回包含机器人 ID 在内的响应结果。请复制并保存机器人 ID 和电子邮件地址。机器人的电子邮件地址显示为：`exampleBot-chimebot@example.com`。

## AWS 适用于 Java 的 SDK
<a name="integ-sdk"></a>

以下示例代码演示了如何使用适用于 Java 的 AWS SDK 集成聊天机器人。

```
CreateBotRequest createBotRequest = new CreateBotRequest()
    .withAccountId("chimeAccountId")
    .withDisplayName("exampleBot")
    .withDomain("example.com");

chime.createBot(createBotRequest);
```

Amazon Chime 将返回包含机器人 ID 在内的响应结果。请复制并保存机器人 ID 和电子邮件地址。机器人的电子邮件地址显示为：`exampleBot-chimebot@example.com`。

# 步骤 2：为 Amazon Chime 聊天机器人配置出站端点
<a name="config-endpoints"></a>

为 Amazon Chime 企业账户创建聊天机器人 ID 后，继续配置出站端点，以便 Amazon Chime 向机器人发送消息。[出站终端节点可以是 AWS Lambda 函数 ARN，也可以是您在先决条件中创建的 HTTPS 终端节点。](use-bots.md#bots-prereqs)有关 Lambda 的更多信息，请参阅 *[AWS Lambda 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/)*。

**注意**  
如果机器人的 HTTPS 出站端点未配置或者为空，则聊天室管理员无法将其加入聊天室。同时，聊天室用户也无法与机器人互动。

## AWS CLI
<a name="endpoint-cli"></a>

如需为聊天机器人配置出站端点，请运行 AWS CLI中的 **put-events-configuration** 命令。配置 Lambda 函数 ARN 或 HTTPS 出站端点。

------
#### [ Lambda ARN ]

```
aws chime put-events-configuration --account-id 12a3456b-7c89-012d-3456-78901e23fg45 --bot-id botId --lambda-function-arn arn:aws:lambda:us-east-1:111122223333:function:function-name
```

------
#### [ HTTPS endpoint ]

```
aws chime put-events-configuration --account-id 12a3456b-7c89-012d-3456-78901e23fg45 --bot-id botId --outbound-events-https-endpoint https://example.com:8000
```

------

Amazon Chime 使用机器人 ID 和 HTTPS 端点进行响应。

```
{
    "EventsConfiguration": {
        "BotId": "BotId", 
        "OutboundEventsHTTPSEndpoint": "https://example.com:8000"
    }
}
```

## Amazon Chime API
<a name="endpoint-api"></a>

要为聊天机器人配置出站终端节点，请使用《亚马逊 Ch [PutEventsConfiguration](https://docs.aws.amazon.com/chime/latest/APIReference/API_PutEventsConfiguration.html)ime API 参考》中的 A *mazon Chime* API 操作。配置 Lambda 函数 ARN 或 HTTPS 出站端点。
+ **如果您配置 Lambda 函数 ARN，Amazon** Chime 会调用 Lambda 来添加权限，以允许 Amazon Chime 管理员的账户 AWS 调用提供的 Lambda 函数 ARN。然后实施试运行调用，以验证 Amazon Chime 是否有权调用此函数。如果权限添加失败或者试运行调用失败，则 `PutEventsConfiguration` 请求将返回 HTTP 4xx 错误。
+ **如需配置 HTTPS 出站端点**：Amazon Chime 使用 Challenge JSON 有效负载，向上一步提供的 HTTPS 出站端点发送 HTTP Post 请求以验证端点。您的出站 HTTPS 端点必须使用 JSON 格式来回应质询参数，从而进行响应。下面的示例显示了请求和有效的响应。

------
#### [ Request ]

  ```
                 HTTPS POST 
  
                 JSON Payload:
                 {
                    "Challenge":"00000000000000000000",
                    "EventType" : "HTTPSEndpointVerification"
                 }
  ```

------
#### [ Response ]

  ```
                 HTTP/1.1 200 OK
                 Content-type: application/json
  
                 {
                     "Challenge":"00000000000000000000"
                 }
  ```

------

  如果质询握手失败，则 `PutEventsConfiguration` 请求将返回 HTTP 4xx 错误。

## AWS 适用于 Java 的 SDK
<a name="endpoint-sdk"></a>

以下示例代码演示了如何使用适用于 Java 的 AWS SDK 配置终端节点。

```
PutEventsConfigurationRequest putEventsConfigurationRequest = new PutEventsConfigurationRequest()
     .withAccountId("chimeAccountId")
     .withBotId("botId")
     .withOutboundEventsHTTPSEndpoint("https://www.example.com")
     .withLambdaFunctionArn("arn:aws:lambda:region:account-id:function:function-name");

 chime.putEventsConfiguration(putEventsConfigurationRequest):
```

# 步骤 3：为 Amazon Chime 聊天室添加聊天机器人
<a name="add-bots"></a>

只有聊天室管理员才能为聊天室添加聊天机器人。管理员会使用 [步骤 1](integrate-bots.md) 中为聊天机器人创建的电子邮件地址。

**在聊天室中添加聊天自动程序**

1. 打开 Amazon Chime 桌面客户端或 Web 应用程序。

1. 选择右上角的齿轮图标，然后选择**管理 Webhook 和机器人**。

1. 选择 **Add bot (添加自动程序)**。

1. 在**电子邮件地址**中输入您的电子邮件地址。

1. 选择 **添加**。

自动程序名称将会出现在聊天室名单中。如果必须执行其他操作后才能为聊天室添加聊天机器人，请向聊天室管理员说明此类操作。

聊天机器人添加至聊天室后，为聊天室用户提供机器人运行命令。完成这项任务的一种方法是设定聊天机器人程序，使其在收到聊天室邀请时向聊天室发送命令帮助。此外，AWS 还建议您为聊天机器人用户创建帮助命令。

# 对聊天机器人请求进行身份验证
<a name="auth-bots"></a>

您可以对 Amazon Chime 聊天室向聊天机器人发送的请求进行身份验证。为此，请根据请求计算签名。然后，验证计算得出的签名是否与请求标题中的签名相匹配。Amazon Chime 使用 HMAC SHA256 哈希来生成签名。

如果使用 HTTPS 出站端点配置 Amazon Chime 聊天机器人，请采用以下身份验证步骤。

**为配有 HTTPS 出站端点的聊天机器人验证 Amazon Chime 签名请求**

1. 从 HTTP 请求中获取 **Chime-Signature** 标头。

1. 获取请求的 **Chime-Request-Timestamp** 标头和 **body (正文)**。然后，在这两个元素之间使用竖线作为分隔符以形成一个字符串。

1. 使用 CreateBot 响应**SecurityToken**中的作为 **HMAC\$1SHA\$1256** 的初始密钥，并对您在步骤 2 中创建的字符串进行哈希处理。

1. 使用 Base64 编码器对上述哈希字节编码为一个签名字符串。

1. 将此计算得到的签名与 **Chime-Signature** 标头中的签名进行比较。

下面的代码示例演示了如何使用 Java 生成签名。

```
        private final String DELIMITER = "|";
        private final String HMAC_SHA_256 = "HmacSHA256";
   
        private String generateSignature(String securityToken, String requestTime, String requestBody) 
        {
            try {
                final Mac mac = Mac.getInstance(HMAC_SHA_256);
                SecretKeySpec key = new SecretKeySpec(securityToken.getBytes(UTF_8), HMAC_SHA_256);
                mac.init(key);
                String data = requestTime + DELIMITER + requestBody;
                byte[] rawHmac = mac.doFinal(data.getBytes(UTF_8));

                return Base64.getEncoder().encodeToString(rawHmac);
                } 
            catch (Exception e) {
                throw e;
                }
         }
```

HTTPS 出站端点必须在 2 秒内通过 `200 OK` 响应 Amazon Chime 请求。否则，请求将失败。如果 HTTPS 出站端点（因连接问题或读取超时）超过 2 秒不可用，或如果 Amazon Chime 收到 5xx 响应代码，则 Amazon Chime 会重发两次请求。在初始请求失败 200 毫秒后将发送第一次重试请求。在第一次重试请求失败 400 毫秒后发送第二次重试请求。如果在第二次重试之后出站 HTTPS 端点仍不可用，则请求失败。

**注意**  
每当重试请求时，**Chime-Request-Timestamp** 都会发生更改。

如果使用 Lambda 函数 ARN 配置 Amazon Chime 聊天机器人，请采用以下身份验证步骤。

**为配有 Lambda 函数 ARN 的聊天机器人验证 Amazon Chime 签名请求**

1. 从 Lambda 请求中获取 **Chime-Signatur** **e 和 Chime-Request-Tim** estam **ClientContext**p，采用 Base64 编码的 JSON 格式。

   ```
   {
   "Chime-Signature" : "1234567890",
   "Chime-Request-Timestamp" : "2019-04-04T21:30:43.181Z"
   }
   ```

1. 从请求负载中获取请求的 **body (正文)**。

1. 使用`CreateBot`响应**SecurityToken**中的作为 **HMAC\$1SHA\$1256** 的初始密钥，并对您创建的字符串进行哈希处理。

1. 使用 Base64 编码器对上述哈希字节编码为一个签名字符串。

1. 将此计算得到的签名与 **Chime-Signature** 标头中的签名进行比较。

如果在调用 Lambda 时发生 `com.amazonaws.SdkClientException`，Amazon Chime 会重发两次请求。

# 更新聊天机器人
<a name="update-bots"></a>

作为 Amazon Chime 账户管理员，您可以将 Amazon Chime API 与软件开发工具包结合使用 AWS ， AWS CLI 也可以查看您的聊天机器人详情。您也可以启用或停用账户中的聊天机器人。还可以为聊天机器人重新生成安全令牌。

有关更多信息，请参阅《Amazon Chime API 参考》**中的以下主题：
+ [GetBot](https://docs.aws.amazon.com/chime/latest/APIReference/API_GetBot.html)— 获取您的聊天机器人详细信息，例如机器人电子邮件地址和机器人类型。
+ [UpdateBot](https://docs.aws.amazon.com/chime/latest/APIReference/API_UpdateBot.html)— 启用或停止在您的账户中使用聊天机器人。
+ [RegenerateSecurityToken](https://docs.aws.amazon.com/chime/latest/APIReference/API_RegenerateSecurityToken.html)— 为您的聊天机器人重新生成安全令牌。

您还可以为聊天机器人更改 `PutEventsConfiguration`。例如，如果聊天机器人在初始配置中可以使用 HTTPS 出站端点，则您可以删除之前的事件配置，重新为 Lambda 函数 ARN 设置事件配置。

有关更多信息，请参阅《Amazon Chime API 参考》**中的以下主题：
+ [DeleteEventsConfiguration](https://docs.aws.amazon.com/chime/latest/APIReference/API_DeleteEventsConfiguration.html)
+ [PutEventsConfiguration](https://docs.aws.amazon.com/chime/latest/APIReference/API_PutEventsConfiguration.html)

# 发送给聊天机器人的 Amazon Chime 事件
<a name="events-bots"></a>

以下事件均由 Amazon Chime 发送给聊天机器人：
+ **邀请**：在为 Amazon Chime 聊天室添加聊天机器人时发送的事件
+ **提及**：在聊天室用户对聊天机器人执行 @mentions 操作时发送的事件
+ **移除**：在移除 Amazon Chime 聊天室中的聊天机器人时发送的事件

以下示例显示了在发生上述事件时，聊天机器人收到的 JSON 格式的有效负载。

**Example ：邀请事件**  

```
            {
              "Sender": {
                            "SenderId": "user@example.com",
                            "SenderIdType": "EmailId"
                         },
              "Discussion": {
                            "DiscussionId": "abcdef12-g34h-56i7-j8kl-mn9opqr012st",
                            "DiscussionType": "Room"
                            },
              "EventType": "Invite",
              "InboundHttpsEndpoint": {
                                        "EndpointType": "Persistent",
                                        "Url": "https://hooks.a.chime.aws/incomingwebhooks/a1b2c34d-5678-90e1-f23g-h45i67j8901k?token=ABCDefGHiJK1LMnoP2Q3RST4uvwxYZAbC56DeFghIJkLM7N8OP9QRsTuV0WXYZABcdefgHiJ"
                                      },
              "EventTimestamp": "2019-04-04T21:27:52.736Z"
            }
```

**Example ：提及事件**  

```
            {
                "Sender": {
                            "SenderId": "user@example.com",
                            "SenderIdType": "EmailId"
                          },
                "Discussion": {
                                "DiscussionId": "abcdef12-g34h-56i7-j8kl-mn9opqr012st",
                                "DiscussionType": "Room"
                              },
                "EventType": "Mention",
                "InboundHttpsEndpoint": {
                                            "EndpointType": "ShortLived",
                                            "Url": "https://hooks.a.chime.aws/incomingwebhooks/a1b2c34d-5678-90e1-f23g-h45i67j8901k?token=ABCDefGHiJK1LMnoP2Q3RST4uvwxYZAbC56DeFghIJkLM7N8OP9QRsTuV0WXYZABcdefgHiJ"
                                        },
                "EventTimestamp": "2019-04-04T21:30:43.181Z",
                "Message": "@botDisplayName@example.com Hello Chatbot"
            }
```

**注意**  
有关提及事件的 `InboundHttpsEndpoint` URL 将在发送 2 分钟后过期。

**Example ：移除事件**  

```
            {
                "Sender": {
                            "SenderId": "user@example.com",
                            "SenderIdType": "EmailId"
                          },
                "Discussion": {
                                "DiscussionId": "abcdef12-g34h-56i7-j8kl-mn9opqr012st",
                                "DiscussionType": "Room"
                              },
                "EventType": "Remove",
                "EventTimestamp": "2019-04-04T21:27:29.626Z"
            }
```

# 创建适用于 Amazon Chime 的 Webhook
<a name="webhooks"></a>

Webhook 允许 Web 应用程序互相进行实时通信。Webhook 通常会在操作时发送通知。例如，假设您运营着一个在线购物网站。当客户为购物车添加商品、为订单付款或发送评论时，您会收到 Webhook 的通知。Webhook 不需要像传统应用程序那样进行大量编程，也不会耗费太多的处理能力。没有 webhook 的程序必须定期轮询才能实时获取数据。具有 webhook 的发送应用程序则可以立即发布数据。

您创建的入站 Webhook 能够以编程方式向 Amazon Chime 聊天室发送消息。例如，Webhook 可以通知客户服务团队有关创建新的高优先级服务单的内容以及在聊天室中添加指向该服务单的链接。

Webhooks 消息可通过 markdown 进行格式设置并且可以包含表情符号。HTTP 链接和电子邮件地址会显示为活跃链接。消息还可以包括 @All 和 @Present 注释以分别提醒聊天室内的所有成员和在线成员。要直接 @ 提及某个聊天室参与者，请使用其别名或完整的电子邮件地址。例如，@`alias` 或 @`alias@domain.com`。

Webhook 只是聊天室中不支持共享的一种功能。Amazon Chime 聊天室管理员可以为每个聊天室添加最多 10 个 Webhook。

根据以下流程，您可以将创建的 Webhook 集成至 Amazon Chime 聊天室。

**将 Webhook 集成至聊天室**

1. 从聊天室管理员处获取 Webhook URL。有关更多信息，请参阅《Amazon Chime 用户指南》**中的[将 Webhook 添加到聊天室](https://docs.aws.amazon.com/chime/latest/ug/chat-webhooks.html)。

1. 您可以使用脚本或应用程序中创建的 Webhook URL 向聊天室发送消息：

   1. URL 接受 HTTP POST 请求。

   1. Amazon Chime Webhook 接受含有单一密钥**内容**的 JSON 有效负载。以下是带示例负载的示例 curl 命令：

      ```
      curl -X POST "<Insert your webhook URL here>" -H "Content-Type:application/json" --data '{"Content":"Message Body emoji test: :) :+1: link test: http://sample.com email test: marymajor@example.com All member callout: @All All Present member callout: @Present"}'
      ```

      以下是适用于 Windows 用户的 PowerShell 命令示例：

      ```
      Invoke-WebRequest -Uri '<Insert your webhook URL here>' -Method 'Post' -ContentType 'application/JSON' -Body '{"Content":"Message Body emoji test: :) :+1: link test: http://sample.com email test: marymajor@example.com All member callout: @All All Present member callout: @Present"}'
      ```

在外部程序将 HTTP POST 发送到 Webhook URL 之后，服务器会验证 Webhook 是否有效且具有已分配的聊天室。网络钩子出现在聊天室花名册中，其名称旁边带有一个网络钩子图标。网络钩子发送的聊天室消息出现在网络钩子名称下的聊天室中，后跟 **(Webhook)**。

**注意**  
当前没有为 Webhooks 启用 CORS。

## 排查 Webhook 错误
<a name="webhook-errors"></a>

以下是与 Webhook 相关的错误的列表：
+ 每个 Webhook 的传入 Webhook 速率限制为每个聊天室 1 TPS。限制会导致 HTTP 429 错误。
+ 由一个 Webhook 发布的消息必须为 4 KB 或更小。较大的消息负载会导致 HTTP 413 错误。
+ 具有 @All 和 @Present 注释的 Webhook 所发布的消息仅适用于具有 50 个或更少成员的聊天室。超过 50 个成员会导致 HTTP 400 错误。
+ 如果重新生成 Webhook URL，使用旧的 URL 会导致 HTTP 404 错误。
+ 如果删除房间内的 Webhook，使用旧的 URL 会导致 HTTP 404 错误。
+ 无效的 webhook URLs 会导致 HTTP 403 错误。
+ 如果服务不可用，用户会在响应中收到 HTTP 503 错误。