【问题标题】:Can't get the response from webhook无法从 webhook 获得响应
【发布时间】:2017-03-24 16:17:25
【问题描述】:

我在 api.ai 中为我的项目使用 python(使用此示例)创建了一个 webhook

我的代码在这里:

  #!/usr/bin/env python

import urllib
import json
import os

from flask import Flask
from flask import request
from flask import make_response

# Flask app should start in global layout
app = Flask(__name__)


@app.route('/webhook', methods=['POST'])
def webhook():
req = request.get_json(silent=True, force=True)

print("Request:")
print(json.dumps(req, indent=4))

res = makeWebhookResult(req)

res = json.dumps(res, indent=4)
print(res)
r = make_response(res)
r.headers['Content-Type'] = 'application/json'
return r

def makeWebhookResult(req):
if req.get("result").get("action") != "delivery.info":
    return {}
result = req.get("result")
parameters = result.get("parameters")
parcelnr = parameters.get("parcelnumber")

parcelinfo = {'5000':'your parcel has been shipped', '5001':'your parcel has 
not been shipped', '5002':'should be delivered on three days', '5003':'your 
parcel has not been shipped', '5004':'your parcel has been shipped'}

speech = "Parcel with numner" + parcelnr + " is " + 
str(parcelinfo[parcelnr]) "

print("Response:")
print(speech)

return {
    "speech": speech,
    "displayText": speech,
    #"data": {},
    # "contextOut": [],
    "source": "apiai-debot"
}


if __name__ == '__main__':
port = int(os.getenv('PORT', 5000))

print "Starting app on port %d" % port

app.run(debug=True, port=port, host='0.0.0.0')

Api 代理是:

image1 image2

我不明白我错在哪里。

我的代理工作正常,但是当我要求机器人从 webhook 获取信息时,我从 api.ai 而不是 webhook 获取文本响应。

你能帮帮我吗?

【问题讨论】:

    标签: python bots webhooks dialogflow-es facebook-webhooks


    【解决方案1】:

    以下内容对我有用。 request.data 将接收来自 TradingView webhook 消息的消息警报。

    @app.route('/webhook', methods=['POST'])
    def webhook():
        print("\nrequest.data={}".format(request.data))
        return request.data
    

    TradingView 警报消息中,我正在使用以下...

    exchange = {{exchange}}, ticker = {{ticker}}, price = {{close}}, volume = {{volume}}
    

    ...我在日志中收到以下消息:

    $ heroku logs --tail
    
    2022-01-12T20:38:00.510006+00:00 app[web.1]: request.data=b'exchange = BINANCE, ticker = BTCUSDT, price = 43671.85, volume = 10.70612'
    2022-01-12T20:38:00.510512+00:00 app[web.1]: 10.1.58.75 - - [12/Jan/2022:20:38:00 +0000] "POST /webhook HTTP/1.1" 200 73 "-" "Go-http-client/1.1"
    

    【讨论】:

      【解决方案2】:

      您在履行中为 webhook 使用了错误的 url。

      您的代码将请求映射到/webhook,而您的网址是https://your-domain.com/debotwebhook

      要么将@app.route('/webhook', methods=['POST'])更改为@app.route('/debotwebhook', methods=['POST']),要么将api.ai中的url更改为https://your-domain.com/webhook

      另外,我在str(parcelinfo[parcelnr]) 之后的语音变量中看到了一个额外的"

      这是我用你的代码测试的代理,在右边你可以看到答案:

      【讨论】:

      • 您好 Tais,谢谢您的回答...我尝试进行更改,但仍然无法从 webhook 接收消息。你有别的想法吗?
      • 您是否在 API.ai 中进行测试?在那里你可以看到正在生成的请求的 JSON 和答案,你能把它粘贴在这里吗?另外,我可以看到实体@parcelnumber 吗?我使用了您的代码并且能够使其工作,但唯一的区别是我使用@sys.number-integer 作为包裹号而不是自定义号。
      • 我编辑了答案以放置代理工作的打印屏幕以及我在代码中发现的另一个问题。这可能是额外的 " ,或者是解析实体 @parcelnumber 时出现的问题。您获得 API.ai 文本而不是代码中的文本的原因可能是您的 webhook 在某些时候失败了。检查 webhook 的日志。
      • 你好,我按照你说的做了修改......但是:(我仍然无法得到回复。bot.api.ai/dd4ffd3b-8cef-41ad-a925-ec40fec385aa
      • 您是否在 heroku 上托管 webhook?你能告诉我你到达那里的日志吗?您的 webhook 由于某种原因失败了,也许日志会给出答案。
      猜你喜欢
      • 2020-08-25
      • 2021-07-18
      • 2018-02-20
      • 2020-12-11
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多