

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# Twilio 通知连接器
<a name="twilio-notifications-connector"></a>

**警告**  <a name="connectors-extended-life-phase-warning"></a>
此连接器已进入*生命周期延长阶段*， AWS IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息，请参阅 [AWS IoT Greengrass Version 1 维护政策](maintenance-policy.md)。

Twilio 通知[连接器](connectors.md)通过 Twilio 进行自动电话呼叫或发送文本消息。您可以使用该连接器来发送通知，以响应 Greengrass 组中的事件。对于电话呼叫，连接器可以将语音消息转发给收件人。

该连接器接收关于 MQTT 主题的 Twilio 消息信息，然后触发 Twilio 通知。

**注意**  
有关介绍如何使用 Twilio 通知连接器的教程，请参阅 [Greengrass 连接器入门（控制台）](connectors-console.md) 或 [Greengrass 连接器入门 (CLI)](connectors-cli.md)。

此连接器具有以下版本。


| 版本 | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/1` | 

有关版本更改的信息，请参阅[更改日志](#twilio-notifications-connector-changelog)。

## 要求
<a name="twilio-notifications-connector-req"></a>

此连接器具有以下要求：

------
#### [ Version 4 - 5 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass 核心软件 v1.9.3 或更高版本。 AWS IoT Greengrass 必须配置为支持本地密钥，如[密钥要求](secrets.md#secrets-reqs)中所述。
**注意**  
此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色，则 Greengrass 有权获得名称以 *greengrass-* 开头的密钥的值。
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) 版本 3.7 或 3.8 已安装在核心设备上，并已添加到 PATH 环境变量中。
**注意**  <a name="use-runtime-py3.8"></a>
要使用 Python 3.8，请运行以下命令来创建从默认 Python 3.7 安装文件夹到已安装的 Python 3.8 二进制文件的符号链接。  

  ```
  sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7
  ```
这会将设备配置为满足 AWS IoT Greengrass的 Python 要求。
+ Twilio 账户 SID、身份验证令牌和支持 Twilio 的电话号码。创建 Twilio 项目后，项目控制面板上会显示这些值。
**注意**  
您可以使用 Twilio 试用账户。如果您使用的是试用账号，则必须将非 Twilio 收件人的电话号码添加到经过验证的电话号码列表中。 有关更多信息，请参阅[如何使用您的免费 Twilio 试用账户](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account)。
+ <a name="conn-twilio-req-secret"></a>用于存储 Twilio 身份 AWS Secrets Manager 验证令牌的文本类型密钥。有关更多信息，请参阅 *AWS Secrets Manager 用户指南*中的[创建基本密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。
**注意**  
要在 Secrets Manager 控制台中创建密钥，请在**明文**选项卡上输入您的令牌。请勿包含引号或其他格式。在 API 中，将令牌指定为 `SecretString` 属性的值。
+ Greengrass 组中引用 Secrets Manager 密钥的密钥资源。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。

------
#### [ Versions 1 - 3 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass 核心软件 v1.7 或更高版本。 AWS IoT Greengrass 必须配置为支持本地密钥，如[密钥要求](secrets.md#secrets-reqs)中所述。
**注意**  
此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色，则 Greengrass 有权获得名称以 *greengrass-* 开头的密钥的值。
+ [Python](https://www.python.org/) 版本 2.7 已安装在核心设备上，并已添加到 PATH 环境变量中。
+ Twilio 账户 SID、身份验证令牌和支持 Twilio 的电话号码。创建 Twilio 项目后，项目控制面板上会显示这些值。
**注意**  
您可以使用 Twilio 试用账户。如果您使用的是试用账号，则必须将非 Twilio 收件人的电话号码添加到经过验证的电话号码列表中。 有关更多信息，请参阅[如何使用您的免费 Twilio 试用账户](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account)。
+ <a name="conn-twilio-req-secret"></a>用于存储 Twilio 身份 AWS Secrets Manager 验证令牌的文本类型密钥。有关更多信息，请参阅 *AWS Secrets Manager 用户指南*中的[创建基本密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。
**注意**  
要在 Secrets Manager 控制台中创建密钥，请在**明文**选项卡上输入您的令牌。请勿包含引号或其他格式。在 API 中，将令牌指定为 `SecretString` 属性的值。
+ Greengrass 组中引用 Secrets Manager 密钥的密钥资源。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。

------

## 连接器参数
<a name="twilio-notifications-connector-param"></a>

该连接器提供以下参数。

------
#### [ Version 5 ]

`TWILIO_ACCOUNT_SID`  <a name="twilio-TWILIO_ACCOUNT_SID"></a>
Twilio 账户 SID，用于调用 Twilio API。  
在 AWS IoT 控制台中显示名称：**Twilio 账号 SID**  
必需：`true`  
类型：`string`  
有效模式：`.+`

`TwilioAuthTokenSecretArn`  <a name="twilio-TwilioAuthTokenSecretArn"></a>
存储 Twilio 身份验证令牌的 Secrets Manager 密钥的 ARN。  
这用于访问核心上的本地密钥的值。
 AWS IoT 控制台中的显示名称：**Twilio 身份验证令牌密钥的 ARN**  
必需：`true`  
类型：`string`  
有效模式：`arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`TwilioAuthTokenSecretArn-ResourceId`  <a name="twilio-TwilioAuthTokenSecretArn-ResourceId"></a>
Greengrass 组中密钥资源的 ID，该资源引用 Twilio 身份验证令牌的密钥。  
 AWS IoT 控制台中的显示名称：**Twilio 身份验证令牌资源**  
必需：`true`  
类型：`string`  
有效模式：`.+`

`DefaultFromPhoneNumber`  <a name="twilio-DefaultFromPhoneNumber"></a>
支持 Twilio 的默认电话号码，Twilio 用该电话号码发送消息。Twilio 用该号码来启动文本或呼叫。  
+ 如果不配置默认电话号码，必须在输入消息正文的 `from_number` 属性中指定电话号码。
+ 如果配置默认电话号码，则可视情况通过指定输入消息正文中的 `from_number` 属性来覆盖默认值。
在 AWS IoT 控制台中显示名称：**默认为来自电话号码**  
必需：`false`  
类型：`string`  
有效模式：`^$|\+[0-9]+`

`IsolationMode`  <a name="IsolationMode"></a>
此连接器的[容器化](connectors.md#connector-containerization)模式。默认值为`GreengrassContainer`，这意味着连接器在 AWS IoT Greengrass 容器内的隔离运行时环境中运行。  
组的默认容器化设置不适用于连接器。
 AWS IoT 控制台中的显示名称：**容器隔离模式**  
必需：`false`  
类型：`string`  
有效值：`GreengrassContainer` 或 `NoContainer`  
有效模式：`^NoContainer$|^GreengrassContainer$`

------
#### [ Version 1 - 4 ]

`TWILIO_ACCOUNT_SID`  <a name="twilio-TWILIO_ACCOUNT_SID"></a>
Twilio 账户 SID，用于调用 Twilio API。  
在 AWS IoT 控制台中显示名称：**Twilio 账号 SID**  
必需：`true`  
类型：`string`  
有效模式：`.+`

`TwilioAuthTokenSecretArn`  <a name="twilio-TwilioAuthTokenSecretArn"></a>
存储 Twilio 身份验证令牌的 Secrets Manager 密钥的 ARN。  
这用于访问核心上的本地密钥的值。
 AWS IoT 控制台中的显示名称：**Twilio 身份验证令牌密钥的 ARN**  
必需：`true`  
类型：`string`  
有效模式：`arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`TwilioAuthTokenSecretArn-ResourceId`  <a name="twilio-TwilioAuthTokenSecretArn-ResourceId"></a>
Greengrass 组中密钥资源的 ID，该资源引用 Twilio 身份验证令牌的密钥。  
 AWS IoT 控制台中的显示名称：**Twilio 身份验证令牌资源**  
必需：`true`  
类型：`string`  
有效模式：`.+`

`DefaultFromPhoneNumber`  <a name="twilio-DefaultFromPhoneNumber"></a>
支持 Twilio 的默认电话号码，Twilio 用该电话号码发送消息。Twilio 用该号码来启动文本或呼叫。  
+ 如果不配置默认电话号码，必须在输入消息正文的 `from_number` 属性中指定电话号码。
+ 如果配置默认电话号码，则可视情况通过指定输入消息正文中的 `from_number` 属性来覆盖默认值。
在 AWS IoT 控制台中显示名称：**默认为来自电话号码**  
必需：`false`  
类型：`string`  
有效模式：`^$|\+[0-9]+`

------

### 创建连接器示例 (AWS CLI)
<a name="twilio-notifications-connector-create"></a>

以下示例 CLI 命令创建一个 `ConnectorDefinition`，它具有包含 Twilio 通知连接器的初始版本。

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyTwilioNotificationsConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/5",
            "Parameters": {
                "TWILIO_ACCOUNT_SID": "abcd12345xyz",
                "TwilioAuthTokenSecretArn": "arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "TwilioAuthTokenSecretArn-ResourceId": "MyTwilioSecret",
                "DefaultFromPhoneNumber": "+19999999999",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

有关介绍如何将 Twilio 通知连接器添加到组的教程，请参阅 [Greengrass 连接器入门 (CLI)](connectors-cli.md) 和 [Greengrass 连接器入门（控制台）](connectors-console.md)。

## 输入数据
<a name="twilio-notifications-connector-data-input"></a>

此连接器接受关于两个 MQTT 主题的 Twilio 消息信息。输入消息必须采用 JSON 格式。
+ 关于 `twilio/txt` 主题的文本消息信息。
+ 关于 `twilio/call` 主题的电话消息信息。

**注意**  
输入消息负载可包含文本消息 (`message`) 或语音消息 (`voice_message_location`)，但不能同时包含二者。

**主题筛选条件：`twilio/txt`**    
**消息属性**    
`request`  
有关 Twilio 通知的信息。  
必需：`true`  
类型：包含以下属性的 `object`：    
`recipient`  
消息收件人。只支持一个收件人。  
必需：`true`  
类型：包含以下属性的 `object`：    
`name`  
收件人的姓名。  
必需：`true`  
类型：`string`  
有效模式：`.*`  
`phone_number`  
收件人的电话号码。  
必需：`true`  
类型：`string`  
有效模式：`\+[1-9]+`  
`message`  
文本消息的文本内容。本主题仅支持文本消息。对于语音消息，请使用 `twilio/call`。  
必需：`true`  
类型：`string`  
有效模式：`.+`  
`from_number`  
发件人的 电话号码。Twilio 用该电话号码来启动消息。只有在未配置 `DefaultFromPhoneNumber` 参数时才需要该属性。如果已配置 `DefaultFromPhoneNumber`，则可使用该属性来覆盖默认值。  
必需：`false`  
类型：`string`  
有效模式：`\+[1-9]+`  
`retries`  
重试次数。默认值是 0。  
必需：`false`  
类型：`integer`  
`id`  
请求的任意 ID。此属性用于将输入请求映射到输出响应。  
必需：`true`  
类型：`string`  
有效模式：`.+`  
**示例输入**  

```
{
    "request": {
        "recipient": {
            "name": "Darla",
            "phone_number": "+12345000000",
            "message": "Hello from the edge"
        },
        "from_number": "+19999999999",
        "retries": 3
    },
    "id": "request123"
}
```

**主题筛选条件：`twilio/call`**    
**消息属性**    
`request`  
有关 Twilio 通知的信息。  
必需：`true`  
类型：包含以下属性的 `object`：    
`recipient`  
消息收件人。只支持一个收件人。  
必需：`true`  
类型：包含以下属性的 `object`：    
`name`  
收件人的姓名。  
必需：`true`  
类型：`string`  
有效模式：`.+`  
`phone_number`  
收件人的电话号码。  
必需：`true`  
类型：`string`  
有效模式：`\+[1-9]+`  
`voice_message_location`  
语音消息的音频内容的 URL。必须采用 TwiML 格式。本主题仅支持语音消息。对于文本消息，请使用 `twilio/txt`。  
必需：`true`  
类型：`string`  
有效模式：`.+`  
`from_number`  
发件人的 电话号码。Twilio 用该电话号码来启动消息。只有在未配置 `DefaultFromPhoneNumber` 参数时才需要该属性。如果已配置 `DefaultFromPhoneNumber`，则可使用该属性来覆盖默认值。  
必需：`false`  
类型：`string`  
有效模式：`\+[1-9]+`  
`retries`  
重试次数。默认值是 0。  
必需：`false`  
类型：`integer`  
`id`  
请求的任意 ID。此属性用于将输入请求映射到输出响应。  
必需：`true`  
类型：`string`  
有效模式：`.+`  
**示例输入**  

```
{
    "request": {
        "recipient": {
            "name": "Darla",
            "phone_number": "+12345000000",
            "voice_message_location": "https://some-public-TwiML"
        },
        "from_number": "+19999999999",
        "retries": 3
    },
    "id": "request123"
}
```

## 输出数据
<a name="twilio-notifications-connector-data-output"></a>

此连接器将状态信息发布为 MQTT 主题的输出数据。

<a name="topic-filter"></a>**订阅中的主题筛选条件**  
`twilio/message/status`

**示例输出：成功**  

```
{
    "response": {
        "status": "success",
        "payload": {
            "from_number": "+19999999999",
            "messages": {
                "message_status": "queued",
                "to_number": "+12345000000",
                "name": "Darla"
            }
        }
    },
    "id": "request123"
}
```

**示例输出：失败**  

```
{
    "response": {
        "status": "fail",
        "error_message": "Recipient name cannot be None",
        "error": "InvalidParameter",
        "payload": None
        }
    },
    "id": "request123"
}
```
输出中的 `payload` 属性是发送消息时来自 Twilio API 的响应。如果连接器检测到输入数据无效（例如，它不指定必填的输入字段），则连接器会返回错误并将值设置为 `None`。以下为示例负载：  

```
{
    'from_number':'+19999999999',
    'messages': {
        'name':'Darla',
        'to_number':'+12345000000',
        'message_status':'undelivered'
    }
}
```

```
{
    'from_number':'+19999999999',
    'messages': {
        'name':'Darla',
        'to_number':'+12345000000',
        'message_status':'queued'
    }
}
```

## 用法示例
<a name="twilio-notifications-connector-usage"></a>

<a name="connectors-setup-intro"></a>使用以下概括步骤设置可用于尝试连接器的示例 Python 3.7 Lambda 函数。

**注意**  <a name="connectors-setup-get-started-topics"></a>
[Greengrass 连接器入门（控制台）](connectors-console.md)和[Greengrass 连接器入门 (CLI)](connectors-cli.md)主题包含显示如何设置、部署和测试 Twilio 通知连接器的 end-to-end步骤。

1. 确保满足连接器的[要求](#twilio-notifications-connector-req)。

1. <a name="connectors-setup-function"></a>创建并发布将输入数据发送到连接器的 Lambda 函数。

   将[示例代码](#twilio-notifications-connector-usage-example)保存为 PY 文件。<a name="connectors-setup-function-sdk"></a>下载并解压[适用于 Python 的AWS IoT Greengrass Core 软件开发工具包](lambda-functions.md#lambda-sdks-core)。然后，创建一个 zip 包，其中在根级别包含 PY 文件和 `greengrasssdk` 文件夹。此 zip 包是您上传到 AWS Lambda的部署包。

   <a name="connectors-setup-function-publish"></a>创建 Python 3.7 Lambda 函数后，请发布函数版本并创建别名。

1. 配置 Greengrass 组。

   1. <a name="connectors-setup-gg-function"></a>通过别名来添加 Lambda 函数（推荐）。将 Lambda 生命周期配置为长时间生存（或在 CLI 中设置为 `"Pinned": true`）。

   1. <a name="connectors-setup-secret-resource"></a>添加所需的密钥资源并授予对 Lambda 函数的读取访问权限。

   1. 添加连接器并配置其[参数](#twilio-notifications-connector-param)。

   1. 添加允许连接器接收[输入数据](#twilio-notifications-connector-data-input)并针对支持的主题筛选条件发送[输出数据](#twilio-notifications-connector-data-output)的订阅。
      + <a name="connectors-setup-subscription-input-data"></a>将 Lambda 函数设置为源，将连接器设置为目标，并使用支持的输入主题筛选条件。
      + <a name="connectors-setup-subscription-output-data"></a>将连接器设置为源，将 AWS IoT Core 设置为目标，并使用支持的输出主题筛选条件。您可以使用此订阅在 AWS IoT 控制台中查看状态消息。

1. <a name="connectors-setup-deploy-group"></a>部署组。

1. <a name="connectors-setup-test-sub"></a>在 AWS IoT 控制台的 “**测试**” 页面上，订阅输出数据主题以查看来自连接器的状态消息。示例 Lambda 函数是长时间生存的，并且在部署组后立即开始发送消息。

   完成测试后，您可以将 Lambda 生命周期设置为按需（或在 CLI 中设置为 `"Pinned": false`）并部署组。这会阻止函数发送消息。

### 示例
<a name="twilio-notifications-connector-usage-example"></a>

以下示例 Lambda 函数向连接器发送一条输入消息。此示例触发文本消息。

```
import greengrasssdk
import json

iot_client = greengrasssdk.client('iot-data')
TXT_INPUT_TOPIC = 'twilio/txt'
CALL_INPUT_TOPIC = 'twilio/call'

def publish_basic_message():

    txt = {
        "request": {
            "recipient" : {
                "name": "Darla",
                "phone_number": "+12345000000",
                "message": 'Hello from the edge'
            },
            "from_number" : "+19999999999"
        },
        "id" : "request123"
    }
    
    print("Message To Publish: ", txt)

    client.publish(topic=TXT_INPUT_TOPIC,
                   payload=json.dumps(txt))

publish_basic_message()

def lambda_handler(event, context):
    return
```

## 许可证
<a name="twilio-notifications-connector-license"></a>

Twilio 通知连接器包含以下第三方软件/许可：
+ [twilio-python](https://github.com/twilio/twilio-python)/MIT

该连接器在 [Greengrass Core 软件许可协议](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)下发布。

## 更改日志
<a name="twilio-notifications-connector-changelog"></a>

下表介绍每个版本连接器的更改。


| 版本 | 更改 | 
| --- | --- | 
| 5 | <a name="isolation-mode-changelog"></a>增加了用于配置连接器容器化模式的 `IsolationMode` 参数。 | 
| 4 | <a name="upgrade-runtime-py3.7"></a>已将 Lambda 运行时升级到 Python 3.7，这会更改运行时要求。 | 
| 3 | 进行了修复，以减少过多的日志记录。 | 
| 2 | 少量错误修复和改进。 | 
| 1 | 首次发布。  | 

<a name="one-conn-version"></a>Greengrass 组在一个时间上只能包含一个版本的连接器。有关升级连接器版本的信息，请参阅[升级连接器版本](connectors.md#upgrade-connector-versions)。

## 另请参阅
<a name="twilio-notifications-connector-see-also"></a>
+ [使用 Greengrass 连接器与服务和协议集成](connectors.md)
+ [Greengrass 连接器入门（控制台）](connectors-console.md)
+ [Greengrass 连接器入门 (CLI)](connectors-cli.md)
+ [Twilio API 参考](https://www.twilio.com/docs/api)