Не могу получить ответ от вебхука

Я создал веб-хук, используя python (используя этот пример) для своего проекта в api.ai.

Мой код здесь:

  #!/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 изображение2

Я не понимаю, где я не прав.

Мой агент работает нормально, но когда я прошу бота получить информацию из веб-перехватчика, я получаю текстовый ответ от api.ai, а не от веб-перехватчика.

Не могли бы вы мне помочь ?


person user2454923    schedule 24.03.2017    source источник


Ответы (1)


Вы используете неверный URL-адрес для веб-перехватчика в выполнении.

Ваш код сопоставляет запрос с /webhook, а ваш URL — https://your-domain.com/debotwebhook.

Либо измените @app.route('/webhook', methods=['POST']) на @app.route('/debotwebhook', methods=['POST']), либо измените URL-адрес в api.ai на https://your-domain.com/webhook.

Кроме того, я вижу лишнее " в вашей речевой переменной после str(parcelinfo[parcelnr]).

Вот агент, который я тестировал с вашим кодом, и справа вы можете увидеть ответ:

введите здесь описание изображения

person Taís Bellini    schedule 24.03.2017
comment
Привет, Таис, спасибо за ваш ответ... я пытаюсь внести изменения, но все еще не могу получить сообщение от веб-перехватчика. У вас есть другая идея? - person user2454923; 27.03.2017
comment
Вы тестируете в API.ai? Там вы можете увидеть JSON генерируемого запроса и ответ, можете ли вы вставить его сюда? Кроме того, могу ли я увидеть Entity @parcelnumber? Я использовал ваш код и смог заставить его работать, но единственная разница заключалась в том, что я использовал @sys.number-integer в качестве номера посылки вместо пользовательского. - person Taís Bellini; 27.03.2017
comment
Я отредактировал ответ, чтобы добавить экран печати работающего агента и еще одну проблему, которую я обнаружил в коде. Это может быть лишний " или какая-то проблема при разборе Entity @parcelnumber. Причина, по которой вы получаете текст API.ai вместо текста в своем коде, вероятно, заключается в том, что ваш веб-хук в какой-то момент дает сбой. Также проверьте журналы вебхука. - person Taís Bellini; 27.03.2017
comment
привет, я внес изменения, как вы сказали... но :( по-прежнему не могу получить ответ. bot.api.ai/dd4ffd3b-8cef-41ad-a925-ec40fec385aa - person user2454923; 28.03.2017
comment
Вы размещаете вебхук на героку? Можете ли вы показать мне журналы, которые вы там получаете? Ваш вебхук по какой-то причине не работает, возможно, логи дадут ответ. - person Taís Bellini; 28.03.2017
comment
2017-03-28T10:35:06.707380+00:00 heroku[router]: at=info code=H81 desc=Пустой метод приложения=POST path=/webhook host=botdelivery.herokuapp.com request_id=548791a9-b0a6-47c2- 8e0c-19fa75635982 fwd=54.159.203.187 dyno=connect=service=status=502 bytes= protocol=https 2017-03-28T10:38:30.882617+00:00 heroku[router]: at=info code=H81 desc=пустое приложение method=POST path=/webhook host=botdelivery.herokuapp.com request_id=04815fd9-1f70-4553-a42f-00bb72ad6b50 fwd=54.159.203.187 dyno=connect=service=status=502 байт=протокол=https - person user2454923; 28.03.2017
comment
Вы развернули свой код на героку? При запросе к вашей конечной точке я получаю Heroku | Добро пожаловать в ваше новое приложение! Обратитесь к документации, если вам нужна помощь в развертывании. - person Taís Bellini; 28.03.2017