【问题标题】:How to determine why an Azure Function App is not triggered by a webhook如何确定 Webhook 未触发 Azure Function App 的原因
【发布时间】:2019-05-27 02:12:03
【问题描述】:

我有:

  • HTTP webhook 配置中的 JavaScript Azure 函数;该函数提供一个 URL;函数执行一个动作
  • 在软件中配置的 webhook 我希望接收来自的通知
  • 一个带有 HTTP/webhook 步骤的 Azure 逻辑应用,该步骤提供了一个 URL 供 webhook 通知转到

我的目标是 Azure Function 的 URL 从软件的 webhook 接收通知并执行操作。 Azure 逻辑应用仅用于测试。

什么有效

  • 在软件的 webhook 配置中使用 Azure 逻辑应用的 URL 时,将执行所需的操作。一切正常。
  • Azure 逻辑应用的日志记录显示来自传入 Webhook 的 JSON 输出。我希望(但相信这可能是我出错的地方)这是 webhook 发送到 Azure 逻辑应用程序 URL 的 JSON。在 Azure Function UI 的“测试”选项卡 >“请求正文”字段中使用此 JSON 时,将执行所需的操作。一切正常。
  • 当 Azure 函数的 URL 和 JSON 在 Postman 请求中时,将执行所需的操作。一切正常。

什么不起作用

  • 在软件的 webhook 配置中使用 Azure Function 的 URL 时,不会执行任何操作。这当然是我的目标。从我所阅读的所有内容中,我了解到此 URL 作为 webhook 端点应该工作。

Azure 函数的 URL

这是从 获取函数 URL > 默认(功能键)

https://<app_name>.azurewebsites.net/api/content?code=<api_key>

其他 Azure Function 配置设置

  • 允许的 HTTP 方法:GETPOST
  • 授权级别:功能

我相信通过 webhook 的 JSON

{
  "headers": {
    "Expect": "100-continue",
    "Host": "redacted",
    "X-Telligent-Webhook-Sender": "redacted",
    "Content-Length": "16908",
    "Content-Type": "application/json; charset=utf-8"
  },
  "body": {
    "events": [{
      "TypeId": "ec9da4f4-0703-4029-b01e-7ca9c9ed6c85",
      "DateOccurred": "2018-12-17T22:55:37.7846546Z",
      "EventData": {
        "ActorUserId": 9999,
        "ContentId": "redacted",
        "ContentTypeId": "redacted",
        "ForumReplyId": 9999,
        "ForumThreadId": 9999,
        "ForumId": 9999
      }
    }]
  }
}

我还尝试使用以下测试代码获得相同的结果。它与软件公司提供的样本有效载荷数据更接近:

我尝试了什么

{
  "events": [{
    "TypeId": "ec9da4f4-0703-4029-b01e-7ca9c9ed6c85",
    "DateOccurred": "2018-12-17T22:55:37.7846546Z",
    "EventData": {
      "ActorUserId": 9999,
      "ContentId": "redacted",
      "ContentTypeId": "redacted",
      "ForumReplyId": 9999,
      "ForumThreadId": 9999,
      "ForumId": 9999
    }
  }]
}

Sample payload data

{
  "events": [
    {
      "TypeId": "407ad3bc-8269-493e-ac56-9127656527df",
      "DateOccurred": "2015-12-04T16:31:55.5383926Z",
      "EventData": {
        "ActorUserId": 2100,
        "ContentId": "4c792b81-6f09-4a45-be8c-476198ba47be"
      }
    },
    {
      "TypeId": "3b75c5b9-4705-4a97-93f5-a4941dc69bc9",
      "DateOccurred": "2015-12-04T16:48:03.7343926Z",
      "EventData": {
        "ActorUserId": 2100,
        "ContentId": "4c792b81-6f09-4a45-be8c-476198ba47be"
      }
    }
  ]
}

我不知道如何确定为什么 Azure Function 没有被 webhook 触发。该软件的 API documentation 似乎没有提供一种查看通过 webhook 发送的 JSON 的方法,尽管我可能是没有经验的。

Azure、Postman 或其他工具中是否有一种机制可以让我看到通过 webhook 发送的 JSON 是什么?或者是否有其他方法可以确定问题的原因?

感谢您的帮助。

【问题讨论】:

  • 您可以尝试一个简单的函数应用程序,它只记录发送的数据并尝试吗?
  • 您可以使用 Hookbin(google it)之类的工具来捕获请求中的 JSON...我知道这已经 2 岁了,但要小心。

标签: json azure-functions webhooks azure-logic-apps


【解决方案1】:

这就是我从 Azure 警报中获取 JSON 文件的方式。

  1. 在服务器上安装 Ruby
  2. 使用以下命令安装 Sinatra gem install sinatra
  3. 创建文件webhook.rb并在下面粘贴代码
require 'sinatra'

set :port, 80
set :bind, '0.0.0.0'

post '/event' do
  status 204 #successful request with no body content

  request.body.rewind
  request_payload = JSON.parse(request.body.read)

  #append the payload to a file
  File.open("events.txt", "a") do |f|
    f.puts(request_payload)
  end
end
  1. 使用命令ruby webhook.rb 运行Web 服务
  2. JSON 填充被写入文件events.txt

【讨论】:

    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2018-11-17
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多