在 my question on getting text messages into Azure 我能够将 SMS 消息发送到 Azure Table Store。
如果文本消息包含图像,因此已作为彩信发送,我想将图像下载到 Azure Blob 存储中。
Twilo 有 a guide on how to download and receive images
但我不确定如何在逻辑应用程序中使用它
我尝试学习this Twilio guide并从 GitHub 克隆了代码。 令人困惑的是,DownloadMmsImages 与 BlockSpamCalls 项目位于同一解决方案中。我不清楚这两个项目之间的关系。
我尝试添加 Twilio GetMessage 操作,但系统提示我在 Message SID 中放入的唯一属性是 Body。
(稍微混淆的)请求正文 JSON 架构是
{
"body": {
"$content": "VG9Db3VudHJ etc",
"$content-type": "application/json",
"$formdata": [
{
"key": "ToCountry",
"value": "AU"
},
{
"key": "ToState",
"value": ""
},
{
"key": "SmsMessageSid",
"value": "SMeda21902 etc"
},
{
"key": "NumMedia",
"value": "0"
},
{
"key": "ToCity",
"value": ""
},
{
"key": "FromZip",
"value": ""
},
{
"key": "SmsSid",
"value": "SMeda2 etc"
},
{
"key": "FromState",
"value": ""
},
{
"key": "SmsStatus",
"value": "received"
},
{
"key": "FromCity",
"value": ""
},
{
"key": "Body",
"value": "Tskez7"
},
{
"key": "FromCountry",
"value": "AU"
},
{
"key": "To",
"value": "+61 etc"
},
{
"key": "ToZip",
"value": ""
},
{
"key": "NumSegments",
"value": "1"
},
{
"key": "MessageSid",
"value": "SMeda2 etc"
},
{
"key": "AccountSid",
"value": "AC7aa etc"
},
{
"key": "From",
"value": "+61 etc"
},
{
"key": "ApiVersion",
"value": "2010-04-01"
}
]
},
"headers": {
"Accept": "*/*",
"Cache-Control": "max-age=259200",
"Connection": "close",
"Content-Length": "381",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "etc.logic.azure.com:443",
"User-Agent": "TwilioProxy/1.1",
"X-Twilio-Signature": "sQf etc"
}
}
最佳答案
免责声明如果此答案中的某些内容不太有效,我提前表示歉意。我没有 Twilio 帐户,无法端到端测试该解决方案。请将其视为一个草案,旨在演示实现预期结果所需的主要步骤和关键细节。
获取消息SID
当您尝试检索消息(或消息的媒体)时,您确实需要提供消息和/或媒体的 SID
/SID
,这基本上是他们的标识符。我假设,逻辑应用程序的此实例正在接收 SID 作为传入 HttpRequest 触发器的一部分。
例如,您可能要求逻辑应用的使用者在 HTTP GET 请求的 URL 中提供消息 SID,如下所示。
{
"kind": "Http",
"inputs": {
"schema": {},
"method": "GET",
"relativePath": "message/{mms_message_sid}"
}
}
然后,您将能够在逻辑应用的后续步骤中引用此 SID。
{
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['twilio']['connectionId']"
}
},
"method": "get",
"path": "/Messages/@{encodeURIComponent(triggerOutputs()['relativePathParameters']['mms_message_sid'])}.json",
"authentication": "@parameters('$authentication')"
}
}
检索消息
我简要地了解了 Twilio 连接器,并建议您不要使用它,因为它会使您的逻辑应用大大变得复杂。
相反,您可以使用Get Media
API通过 Http 连接器。您需要构建以下形式的 URL:https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages/{mms_message_sid}/Media.json
然后,您应该会收到一条响应,其中包含消息的 media_list
、content_type
以及可用于下载实际内容的 uri
彩信。
{
"first_page_uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media.json?PageSize=50&Page=0",
"media_list":[
{
"sid":"ME85ebf7e12cb821f84b319340424dcb02",
"account_sid":"ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"parent_sid":"MM800f449d0399ed014aae2bcc0cc2f2ec",
"content_type":"image/png",
"date_created":"Wed, 25 Sep 2013 22:47:18 +0000",
"date_updated":"Wed, 25 Sep 2013 22:47:19 +0000",
"uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media/ME85ebf7e12cb821f84b319340424dcb02.json"
},
{
"sid":"ME8d8f717e2d6e5383055b3cd150ac5f54",
"account_sid":"ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"parent_sid":"MM800f449d0399ed014aae2bcc0cc2f2ec",
"content_type":"image/png",
"date_created":"Wed, 25 Sep 2013 22:47:18 +0000",
"date_updated":"Wed, 25 Sep 2013 22:47:19 +0000",
"uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media/ME8d8f717e2d6e5383055b3cd150ac5f54.json"
}
],
"previous_page_uri":null,
"uri":"/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/MM800f449d0399ed014aae2bcc0cc2f2ec/Media.json?PageSize=50&Page=0",
"page_size":50,
"next_page_uri":null,
"page":0
}
解析响应 JSON
由于响应正文是一个以字符串表示的 JSON 文档,因此我们将无法迭代 media_list
数组,除非我们跳过一些环节。
只需添加一个解析 JSON 步骤,该步骤使用上一步 (HTTP
) 的 body
作为内容。对于架构,提供以下文档:
{
"inputs": {
"content": "@body('HTTP')",
"schema": {
"type": "object",
"properties": {
"first_page_uri": {
"type": "string"
},
"media_list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sid": {
"type": "string"
},
"account_sid": {
"type": "string"
},
"parent_sid": {
"type": "string"
},
"content_type": {
"type": "string"
},
"date_created": {
"type": "string"
},
"date_updated": {
"type": "string"
},
"uri": {
"type": "string"
}
},
"required": [
"sid",
"account_sid",
"parent_sid",
"content_type",
"date_created",
"date_updated",
"uri"
]
}
},
"previous_page_uri": {},
"uri": {
"type": "string"
},
"page_size": {
"type": "number"
},
"next_page_uri": {},
"page": {
"type": "number"
}
}
}
}
}
迭代`media_list`
现在事情相对容易了。您添加一个针对上一步中的 media_list
的 For Each 步骤。
对于每个媒体,我们需要进行 API 调用来实际检索其二进制内容。您可能想要指定与媒体类型相关的 HTTP header 。尝试一下,看看什么有效。
保存到 Azure Blob 存储
我不会在这里提供任何细节,因为您说过,您已经知道如何为短信做到这一点。只需确保在 HTTP2 之后添加必要的步骤(在 For Each 步骤中)。
希望有帮助。逻辑应用程序并不是“简单的集成挤压”。
关于azure - 如何使用 Azure 逻辑应用程序将使用 Twilio 发送的彩信中的图像提取到 Azure Blob 存储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601641/