【问题标题】:Using an Azure Web Function to receive a Twilio SMS Message使用 Azure Web 函数接收 Twilio SMS 消息
【发布时间】:2018-02-04 08:49:19
【问题描述】:

我正在尝试让 Azure Web 功能接收 Twilio SMS 消息 - 但失败了!

我创建了一个 Web 函数来成功发送 SMS 消息 - 现在我想收听响应并做出反应。

我已经按照以下设置了一个网络功能。目前它非常简单,应该鹦鹉学舌地回复原始消息:

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            var data = await req.Content.ReadAsStringAsync();
            var formValues = data.Split('&')
                .Select(value => value.Split('='))
                .ToDictionary(pair => Uri.UnescapeDataString(pair[0]).Replace("+", " "),
                              pair => Uri.UnescapeDataString(pair[1]).Replace("+", " "));

            // Perform calculations, API lookups, etc. here

            var response = new MessagingResponse()
                .Message($"You said: {formValues["Body"]}");
            var twiml = response.ToString();
            twiml = twiml.Replace("utf-16", "utf-8");

            return new HttpResponseMessage
            {
                Content = new StringContent(twiml, Encoding.UTF8, "application/xml")
            };
        }

在 Twilio 中,我已将手机配置为使用网络挂钩:

我已经部署了 Web 功能,但是当我尝试通过发送消息进行测试时,我在 Twilio 日志中收到以下错误:

11200 尝试检索此 URL 的内容失败 消息不支持的媒体类型 消息:WebHook 请求必须包含格式为 JSON 的实体主体。

有没有人知道如何解决这个错误?

【问题讨论】:

    标签: azure twilio azure-webjobs


    【解决方案1】:

    我刚刚使用 Twilio 的 SMS 服务完成了这项工作。在 Azure 门户中,如果您转到功能,然后转到集成,将模式更改为标准。这会强制 Azure 函数返回正常的 HTTP 响应,并且您可以控制内容类型。如果你使用 application/xml 就可以了。

    【讨论】:

    • 干得好@TheCodeMonk!我将不得不试一试,因为我宁愿在完整的网络应用程序上使用网络功能。
    • 我在尝试将 Kentico Cloud webhook 发布的数据解析到逻辑应用程序内的 Azure 函数时遇到了同样的错误。这个简单的解决方案就像一个魅力!
    • @TheCodeMonk,我想因为界面变了,我找不到你写的时候提到的确切设置,“在Azure门户中,如果你去功能,然后去集成,改变模式为标准”。在线可用的文档太少了,以至于我们陷入了困境。你能告诉我,在哪里可以找到这个设置?
    【解决方案2】:

    好的,目前的解决方案是......它不能在 Azure Web Functions 中完成。 Azure Web 函数需要 JSON 有效负载。 Twilio Webhooks 是一个 XML 值/对。因此,web 函数将拒绝 webhook 调用。

    最好/最简单的方法是按照 Twilio 示例使用 WebAPI 或 MVC 控制器。我尝试了一个示例版本,并让我的 Twilio Webhooks 从开始到结束在大约 15 分钟内回复短信。

    【讨论】:

      【解决方案3】:

      为了调试,我会使用 Postman 或 Fiddler 等工具手动重放(或从头开始创建)与您对 Twilio 的期望相同的请求。然后,您可以查看得到的响应类型,而不必完全依赖 Twilio 的错误消息。

      根据错误代码,我想问题是:

      • 您在 Twilio 号码配置中设置的 URL 实际上并没有达到您的功能。
      • 您的函数响应时间过长。如果 Twilio 在特定时间内没有得到响应,它将抛出 11200。
      • 您的回复格式不正确。这就是上述策略可以帮助您诊断问题的地方。

      【讨论】:

      • 谢谢罗伯。有没有办法将 Twilioo 响应引导为 JSON 格式而不是 XML?
      • 现在我仔细查看了您的代码,您是否尝试通过 SMS 将自动回复发送回您收到消息的号码?
      • 最初我只是为了让代码正常工作而发回响应。最终,我想将响应记录到数据库中,用于一个糟糕的聊天应用程序
      • 我在这里从记忆中工作,但如果我记得,您需要将 HTTP 200 响应发送回 Twilio 的回调。或者,您可以在函数体内触发响应,但这是一个单独的 Web 服务调用。尝试在上面的函数响应中返回 HTTP 200 而没有其他内容,看看错误是否消失。
      • 不,没有区别。看起来 Twilio 请求被 Web 函数拒绝: WebHook 请求必须包含格式为 JSON 的实体主体。我不确定在 Web 功能配置中的哪个位置进行更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2020-08-25
      • 2021-11-10
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多