azure - 如何使用 Azure 逻辑应用程序将使用 Twilio 发送的彩信中的图像提取到 Azure Blob 存储中?

标签 azure twilio azure-blob-storage azure-logic-apps

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}"
  }
}

HttpGet

然后,您将能够在逻辑应用的后续步骤中引用此 SID。

{
  "inputs": {
    "host": {
      "connection": {
        "name": "@parameters('$connections')['twilio']['connectionId']"
      }
    },
    "method": "get",
    "path": "/Messages/@{encodeURIComponent(triggerOutputs()['relativePathParameters']['mms_message_sid'])}.json",
    "authentication": "@parameters('$authentication')"
  }
}

UseSid

检索消息

我简要地了解了 Twilio 连接器,并建议您不要使用它,因为它会使您的逻辑应用大大变得复杂。

相反,您可以使用Get Media API通过 Http 连接器。您需要构建以下形式的 URL:https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages/{mms_message_sid}/Media.json

retrive_media_list

然后,您应该会收到一条响应,其中包含消息的 media_listcontent_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"
        }
      }
    }
  }
}

parse_HTTP_response_body_json

迭代`media_list`

现在事情相对容易了。您添加一个针对上一步中的 media_list 的 For Each 步骤。

对于每个媒体,我们需要进行 API 调用来实际检索其二进制内容。您可能想要指定与媒体类型相关的 HTTP header 。尝试一下,看看什么有效。

retrieve_media_content

保存到 Azure Blob 存储

我不会在这里提供任何细节,因为您说过,您已经知道如何为短信做到这一点。只需确保在 HTTP2 之后添加必要的步骤( For Each 步骤中)。

希望有帮助。逻辑应用程序并不是“简单的集成挤压”。

关于azure - 如何使用 Azure 逻辑应用程序将使用 Twilio 发送的彩信中的图像提取到 Azure Blob 存储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601641/

相关文章:

azure - 具有 EF 迁移的 Azure 网站如何确保更新时的完整性

twilio - 无需调用号码即可收听 twiml

.net - Windows Azure : Can't see trace listener's output in diagnostics logs

twilio - Twilio 出站用户创建

twilio - 仅在工作时间转接 Twilio 调用

python - 在Python中覆盖Azure Blob的最佳方法

azure 数据工厂: iterate over millions of files

azure - 如何使用 Azure ML 创建的标签在语言认知服务中训练自定义模型?

azure - 如何从 Azure Web App 上的 go 应用程序跟踪日志

powershell - 有关 Azure 服务主体 key 过期的报告