你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:接收和回复短信
Azure 通信服务短信功能为开发人员提供了使用短信接收事件的选项。 这些事件将发布到 Azure 事件网格,该服务提供现成的集成,可使用 Webhook、Azure Functions、Power Automate/逻辑应用连接器等来处理这些事件。
收到短信后,可以处理短信以进行回复,或者只需将其记录到数据库以供将来访问。
在本快速入门中,我们将重点介绍如何使用事件网格触发器和 Power Automate/逻辑应用的无代码连接器,通过 Azure Functions 处理短信接收事件。
短信发送到 Azure 通信服务电话号码时生成的 SMSReceived
事件的格式如下:
[{
"id": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
"topic": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/acse2e/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
"subject": "/phonenumber/15555555555",
"data": {
"MessageId": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
"From": "15555555555",
"To": "15555555555",
"Message": "Great to connect with Azure Communication Services events",
"ReceivedTimestamp": "2020-09-18T00:27:45.32Z"
},
"eventType": "Microsoft.Communication.SMSReceived",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2020-09-18T00:27:47Z"
}]
若要开始生成事件,必须为 Azure 通信服务资源配置 Azure 事件网格。
注意
使用 Azure 事件网格会产生额外的费用。 有关详细信息,请参阅 Azure 事件网格定价。
先决条件
事件网格提供对 Azure Functions 的现成支持,因此可以轻松设置事件侦听器,无需处理复杂的分析标头或调试 Webhook 操作。 使用现成的触发器,我们可以设置一个 Azure 函数,该函数在每次检测到与触发器匹配的事件时运行。 本文档重点介绍短信接收触发器。
设置本地环境
使用扩展,按照以下说明创建 Azure 函数。
按照以下说明配置函数:
- 语言:TypeScript
- 模板:Azure 事件网格触发器
- 函数名称:用户定义
创建后,会看到在目录中创建的函数,如下所示:
import { AzureFunction, Context } from "@azure/functions" const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> { context.log(eventGridEvent); }; export default eventGridTrigger;
配置 Azure 函数以接收短信事件
配置 Azure 函数以分析事件中的值,例如发送者、接受者和短信内容。
import { AzureFunction, Context } from "@azure/functions" const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> { context.log(eventGridEvent); const to = eventGridEvent['data']['to']; const from = eventGridEvent['data']['from']; const message = eventGridEvent['data']['message']; }; export default eventGridTrigger;
此时,你已成功处理通过事件接收短信。 现在,该事件的可能处理包含仅记录事件和回复事件。 在下一部分中,我们将重点介绍如何回复收到的短信。 如果不想回复短信,请跳到介绍在本地运行函数的下一部分。
回复短信
- 为了回复传入的短信,我们使用 Azure 通信服务短信功能发送短信。 首先调用
SmsClient
,然后使用资源的connection string
将其初始化。 可以直接将连接字符串粘贴到代码中,也可以将其放在 Azure 函数目录中的 local.settings.json 文件中的 values 下。
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"ACS_CONNECTION_STRING": "<<CONNECTION STRING>>"
}
}
然后,我们根据所获取事件中的
to
和from
值编写要发送的短信。import { AzureFunction, Context } from "@azure/functions" import { SmsClient } from "@azure/communication-sms"; const connectionString = process.env.ACS_CONNECTION_STRING; //Replace with your connection string const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> { context.log(eventGridEvent); const to = eventGridEvent['data']['to']; const from = eventGridEvent['data']['from']; const message = eventGridEvent['data']['message']; const smsClient = new SmsClient(connectionString); const sendResults = await smsClient.send({ from: to, to: [from], message: "Message received successfully. Will respond shortly." }); }; export default eventGridTrigger;
自此,操作有无限种可能。 你可以在最后一步中调整代码来执行操作,包括使用预装的答案回复短信以及添加机器人或仅存储回复,等等。
在本地运行
若要在本地运行函数,请在 Visual Studio Code 中按 F5
。 我们使用 ngrok 将本地运行的 Azure 函数与 Azure 事件网格挂钩。
函数运行后,我们将配置 ngrok。 (需要下载适用于环境的 ngrok。)
ngrok http 7071
复制在函数运行的位置提供的 ngrok 链接。
在 Azure 通信服务资源中通过事件网格配置短信事件。 我们使用 Azure CLI 执行此操作。 你需要使用 Azure 门户中找到的 Azure 通信服务资源的资源 ID。 (资源 ID 如下所示:/subscriptions/
<<AZURE SUBSCRIPTION ID>>
/resourceGroups/<<RESOURCE GROUP NAME>>
/providers/Microsoft.Communication/CommunicationServices/<<RESOURCE NAME>>
)az eventgrid event-subscription create --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type webhook --endpoint "<<NGROK URL>> " --source-resource-id "<<RESOURCE_ID>>" --included-event-types Microsoft.Communication.SMSReceived
现在,已完成全部挂钩,请通过向 Azure 通信服务资源上的电话号码发送短信来测试流。 应在函数运行的终端上看到控制台日志。 如果添加了代码来回复短信,应看到已向你发送回该短信。
部署到 Azure
若要将 Azure 函数部署到 Azure,需要按照以下说明进行操作。 部署后,我们将为 Azure 通信服务资源配置事件网格。 使用部署的 Azure 函数的 URL(在 Azure 门户中的该函数下找到的 URL),我们运行以下命令:
az eventgrid event-subscription update --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type azurefunction --endpoint "<<AZ FUNCTION URL>> " --source-resource-id "<<RESOURCE_ID>>"
由于我们正在更新为本地测试而创建的事件订阅,因此请确保使用前面所用的同一事件订阅名称。
可以向通过 Azure 通信服务资源获取的电话号码发送短信来进行测试。
逻辑应用和 Power Automate 提供现成的连接器,以帮助处理 Azure 通信服务通过事件网格生成的事件。 逻辑应用和 Power Automate 都提供同一组连接器。 你可以决定自己的偏好,请阅读服务之间的差异,然后告知你的决定。
使用事件网格连接器处理事件
首先在首选环境中创建新流。 选择
When a resource event occurs
触发器以开始使用。现在,对其进行配置。 连接器要求提供要使用的订阅。 (应与 Azure 通信服务资源所在的订阅相同)。 指定资源类型。 在此例中选择
Microsoft.Communication.CommunicationServices
。 然后,需要为要连接到的 Azure 通信服务资源提供资源名称。 最后,我们需要选择要接收的事件类型,在本例中为:Microsoft.Communication.SMSReceived
。连接器代表你自动设置事件订阅,并配置它想要接收的事件。
若要在以后更轻松,请添加
Parse JSON connector
来处理来自事件网格连接器的响应。 将连接器配置为从事件网格连接器获取Body
对象,并将其与事件的预期架构匹配:示例架构(打开可查看)
{ "properties": { "data": { "properties": { "From": { "type": "string" }, "Message": { "type": "string" }, "MessageId": { "type": "string" }, "ReceivedTimestamp": { "type": "string" }, "To": { "type": "string" } }, "type": "object" }, "dataVersion": { "type": "string" }, "eventTime": { "type": "string" }, "eventType": { "type": "string" }, "id": { "type": "string" }, "metadataVersion": { "type": "string" }, "subject": { "type": "string" }, "topic": { "type": "string" } }, "type": "object" }
此时,你已成功处理 SMS 事件。 然后,你将获得多个处理选项,包括记录事件和回复短信。 在本文档的上下文中,我们将演示如何回复短信。 继续阅读以了解回复短信的步骤。
回复短信
首先,将 SMS 连接器添加到流中,并使用 Azure 通信服务资源的信息对其进行配置。 配置允许连接器访问资源并代表我们发送短信。 需要资源的
connection string
。接下来,使用发送方和接收方的信息配置连接器。 我们使用收到的事件中的信息来填充。 使用
to
和from
号码将短信发送回原始发送方。 最后,添加消息。
现在,可以通过向与 Azure 通信服务资源关联的电话号码发送短信来保存流并对其进行测试。 你应该会收到一条短信。
自此,操作有无限种可能。 你可以向流添加更多逻辑,包括使用预装的答案回复短信以及添加机器人或仅存储回复,等等。
清理资源
如果想要清理并删除通信服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 了解有关清理资源的详细信息。
免费电话验证
如果你有新的免费电话号码,并且想要发送大量短信或将短信发送到加拿大电话号码,请访问此处来了解如何验证免费电话号码。
后续步骤
在本快速入门中,你已了解如何使用通信服务发送短信。