如何使用逻辑应用程序将来自 Twilio 的短信添加到 Azure Table 存储中

How do I add an SMS from Twilio into Azure Table Storage using Logic App

我能够通过 Twilio Web Hook 将文本消息接收到逻辑应用程序中。 as set up by following these instructions

关于 现在我需要将该文本添加到 Azure Table。 我添加了一个 Parse JSON 动作 我应该在内容和架构中添加什么?

我发现如果我在内容框内单击,系统会提示我从标签中选择。我想 Body 是那个。

[更新] 现在我正在尝试直接插入实体,但我不知道如何在设计器中执行此操作。 如何展开实体文本框以便将 JSON 放入?

[更新2]

我发现我可以通过在实体文本框中键入来展开它。但是如何插入 MessageText?

[更新3]

这是我插入实体的方式

我能够将记录放入 Azure 存储 table。但是我短信的body在哪里呢?

我可以看到有问题运行

我想我需要从 Body 中提取一个 body 但我不知道如何

[更新4]

显示原始输入显示

{
    "host": {
        "connection": {
            "name": "/subscriptions/somenumbers/resourceGroups/mydomain.com.au/providers/Microsoft.Web/connections/azuretables"
        }
    },
    "method": "post",
    "path": "/Tables/TextMessages/entities",
    "body": {
        "Message": {
            "$content-type": "application/x-www-form-urlencoded",
            "$content": "VG9Db3VudHJ5PUFVJlRvU3RhdGU9JlNtc01lc3NhZ2VTaWQ9U000MTU4YzU1YmVkNDNjZDFiNWZmMTNiODZiNjIyNzkyNSZOdW1NZWRpYT0wJlRvQ2l0eT0mRnJvbVppcD0mU21zU2lkPVNNNDE1OGM1NWJlZDQzY2QxYjVmZjEzYjg2YjYyMjc5MjUmRnJvbVN0YXRlPSZTbXNTdGF0dXM9cmVjZWl2ZWQmRnJvbUNpdHk9JkJvZHk9VGFrZSsyJkZyb21Db3VudHJ5PUFVJlRvPSUyQjYxNDQ3NDA1NjEzJlRvWmlwPSZOdW1TZWdtZW50cz0xJk1lc3NhZ2VTaWQ9U000MTU4YzU1YmVkNDNjZDFiNWZmMTNiODZiNjIyNzkyNSZBY2NvdW50U2lkPUFDN2FhZTMxM2UwZmRlOGVkZjE5YzhjMGY5NjQ1MTgwNjYmRnJvbT0lMkI2MTQxOTU3NTQxNSZBcGlWZXJzaW9uPTIwMTAtMDQtMDE=",
            "$formdata": [
                {
                    "key": "ToCountry",
                    "value": "AU"
                },
                {
                    "key": "ToState",
                    "value": ""
                },
                {
                    "key": "SmsMessageSid",
                    "value": "SM4158c55bed43cd1b5ff13b86b6227925"
                },
                {
                    "key": "NumMedia",
                    "value": "0"
                },
                {
                    "key": "ToCity",
                    "value": ""
                },
                {
                    "key": "FromZip",
                    "value": ""
                },
                {
                    "key": "SmsSid",
                    "value": "SM4158c55bed43cd1b5ff13b86b6227925"
                },
                {
                    "key": "FromState",
                    "value": ""
                },
                {
                    "key": "SmsStatus",
                    "value": "received"
                },
                {
                    "key": "FromCity",
                    "value": ""
                },
                {
                    "key": "Body",
                    "value": "Take 2"
                },
                {
                    "key": "FromCountry",
                    "value": "AU"
                },
                {
                    "key": "To",
                    "value": "+61447405613"
                },
                {
                    "key": "ToZip",
                    "value": ""
                },
                {
                    "key": "NumSegments",
                    "value": "1"
                },
                {
                    "key": "MessageSid",
                    "value": "SM4158c55bed43cd1b5ff13b86b6227925"
                },
                {
                    "key": "AccountSid",
                    "value": "AC7aae313e0fde8edf19c8c0f964518066"
                },
                {
                    "key": "From",
                    "value": "+61419575415"
                },
                {
                    "key": "ApiVersion",
                    "value": "2010-04-01"
                }
            ]
        },
        "PartitionKey": "Twilio",
        "RowKey": "1d5a06ca-9dbd-4ba9-b514-77904710ffc3"
    }
}

[更新5]

我想我需要知道如何从@triggerBody()

中获取 body 属性

[更新6]

我试过了

    "body": {
        "Message": "@triggerBody()['Body']",
        "PartitionKey": "Twilio",
        "RowKey": "@guid()"
    } 

但这会导致错误

InvalidTemplate. Unable to process template language expressions in action 'Insert_Entity' inputs at line '1' and column '1450': 'The template language expression 'triggerBody()['Body']' cannot be evaluated because property 'Body' doesn't exist. Property selection is not supported on content of type 'application/x-www-form-urlencoded'. Please see https://aka.ms/logicexpressions for usage details.'.

[更新7]

我正在更改 HTTPRequest body 以使用 JSON 架构

"$content-type": "application/json",

而不是

 "$content-type": "application/x-www-form-urlencoded",

[稍后说明] 我这样做是因为 Azure 显示了一条警告消息 "Remember to include a Content-Type header set to application/json in your request" 然而,这两种方式似乎都有效。

[更新8]

当我使用

时,我能够在 Azure 中收到消息

"Message": "@triggerFormDataValue('Body')"

根据评论更新一下答案

如果我们想向Azuretable插入一条消息,我们可以直接输入json格式构造table实体。更多详细信息请参考演示代码和屏幕截图。

注意:Azure table 实体需要 PartionKey 和 Rowkey。

{
 "Message": "@triggerFormDataValue('Body')",
 "PartitionKey": "Twilio",
 "RowKey": "@guid()"
}

您也可以仅使用逻辑应用操作来执行此操作。

您可以使用 Parse JSON 数据操作来解析来自 Twilio 响应的 JSON。正如您在问题中提到的,您的 Twilio 响应的 "Body" 成为 Parse JSON 操作的内容。

要为架构字段生成架构,您可以单击 "Use sample payload to generate schema" link。在 Twilio 响应中粘贴您期望的 JSON 有效负载,例如:

    {
        "message: "A message from twilio"
    }

然后您可以使用解析 JSON 操作的结果来填充 Azure Table 存储。

可以从 Parse JSON 操作填充消息; Partition Key 可以硬编码;可以根据表达式计算 RowKey - @guid().

这里要注意的一件事是 Twilio webhook 的内容类型不是 application/json,因此您不能使用解析 JSON。是application/x-www-url-formencoded。您仍然可以将其解析出来,但需要使用表达式。如果您打开表达式编辑器,获取文本的正文将类似于:

triggerFormDataValue('Body')

FROM phone 号码为

triggerFormDataValue('From')

您可以在触发器的输出中看到不同的表单片段。