如何确定为什么Webhook不触发Azure Function应用程序

时间:2018-12-29 18:33:22

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

我有:

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

我的目标是Azure功能的URL从软件的Webhook接收通知并执行操作。 Azure Logic应用仅用于测试。

什么有效

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

什么不起作用

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

Azure函数的URL

这是从获取功能URL > 默认(功能键)获得的。

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

其他Azure功能配置设置

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

我相信会通过网络挂钩传递的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"
      }
    }
  ]
}

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

Azure,Postman或其他工具中是否存在一种机制,可以让我查看通过Webhook发送的JSON?也许还有另一种方法可以确定问题的原因?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

  1. 在服务器上安装Ruby
  2. 使用以下命令gem install sinatra
  3. 安装Sinatra
  4. 创建文件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
  2. 运行Web服务
  3. 将JSON填充写入文件events.txt