Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 Amazon IoT Greengrass Version 2,这样可以添加重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Twilio 通知连接器
警告
此连接器已进入生命周期延长阶段,Amazon IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息,请参阅 Amazon IoT Greengrass Version 1 维护策略。
Twilio 通知连接器通过 Twilio 进行自动电话呼叫或发送文本消息。您可以使用该连接器来发送通知,以响应 Greengrass 组中的事件。对于电话呼叫,连接器可以将语音消息转发给收件人。
该连接器接收关于 MQTT 主题的 Twilio 消息信息,然后触发 Twilio 通知。
注意
有关介绍如何使用 Twilio 通知连接器的教程,请参阅 Greengrass 连接器入门(控制台) 或 Greengrass 连接器入门 (CLI)。
此连接器具有以下版本。
版本 |
ARN |
---|---|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
有关版本更改的信息,请参阅更改日志。
要求
此连接器具有以下要求:
连接器参数
该连接器提供以下参数。
创建连接器示例 (Amazon CLI)
以下示例 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) 和 Greengrass 连接器入门(控制台)。
输入数据
此连接器接受关于两个 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" }
输出数据
此连接器将状态信息发布为 MQTT 主题的输出数据。
- 订阅中的主题筛选条件
-
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' } }
用法示例
使用以下概括步骤设置可用于尝试连接器的示例 Python 3.7 Lambda 函数。
注意
Greengrass 连接器入门(控制台)和Greengrass 连接器入门 (CLI) 主题包含端到端步骤,说明如何设置、部署和测试 Twilio 通知连接器。
确保满足连接器的要求。
-
创建并发布将输入数据发送到连接器的 Lambda 函数。
将示例代码保存为 PY 文件。下载并解压适用于 Python 的 Amazon IoT Greengrass Core 软件开发工具包。然后,创建一个 zip 包,其中在根级别包含 PY 文件和
greengrasssdk
文件夹。此 zip 包是您上传到 Amazon Lambda 的部署包。创建 Python 3.7 Lambda 函数后,请发布函数版本并创建别名。
-
配置 Greengrass 组。
-
部署组。
-
在 Amazon IoT 控制台中,在测试页面上,订阅输出数据主题以查看连接器中的状态消息。示例 Lambda 函数是长时间生存的,并且在部署组后立即开始发送消息。
完成测试后,您可以将 Lambda 生命周期设置为按需(或在 CLI 中设置为
"Pinned": false
)并部署组。这会阻止函数发送消息。
示例
以下示例 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
许可证
Twilio 通知连接器包含以下第三方软件/许可:
twilio-python
/MIT
该连接器在 Greengrass Core 软件许可协议
更改日志
下表介绍每个版本连接器的更改。
版本 |
更改 |
---|---|
5 |
增加了用于配置连接器容器化模式的 |
4 |
已将 Lambda 运行时升级到 Python 3.7,这会更改运行时要求。 |
3 |
进行了修复,以减少过多的日志记录。 |
2 |
少量错误修复和改进。 |
1 |
首次发布。 |
Greengrass 组在一个时间上只能包含一个版本的连接器。有关升级连接器版本的信息,请参阅升级连接器版本。