Messenger Send API - PullRequest
       10

Messenger Send API

0 голосов
/ 27 июня 2018

Я создаю самостоятельно созданный чат-бот Python, который не использует платформу чат-ботов, такую ​​как Dialogflow. Проблема в том, что нет легкой интеграции с приложениями обмена сообщениями, такими как Messenger, чтобы подключить его тоже. Я пытаюсь создать веб-крючок для Messenger с помощью Messenger Send API. Я смотрю на документацию, и она показывает мне, как запросить вызов API POST. Однако, когда я смотрю на примеры в Интернете, все они, похоже, имеют дело со значениями json, называемыми «entry» и «message», которые я нигде не могу найти и не могу понять, почему это необходимо. Мне было интересно, как именно выглядит тело ввода API Messenger для отправки, чтобы я мог вызывать его соответствующим образом и какие объекты json находятся в его теле. Это то, что я так далеко от следующих онлайн-примеров. Я использую Flask. И я использую Почтальон, чтобы проверить это

@app.route("/webhook", methods=['GET','POST'])
def listen():
    if request.method == 'GET':
        return verify_webhook(request)

    if request.method == 'POST':
        payload = request.json
        event = payload['entry'][0]['messaging']
        for x in event:
            if is_user_message(x):
                text = x['message']['text']
                sender_id = x['sender']['id']
                respond(sender_id, text)

        return "ok"

Ниже я думаю, что тело запроса выглядит так:

{
  "object":"page",
  "entry":[
    {
      "id":"1234",
      "time":1458692752478,
      "messaging":[
        {
          "message":{
            "text":"book me a cab"
          },
          "sender":{
            "id":"1234"
          }
        }
      ]
    }
  ]
}

Но он не может прочитать это и выдает ошибку:

Файл "/ Users / Raphael ****** / Documents / ***** _ Project_Raphael / FacebookWebHookEdition.py", строка 42, в режиме прослушивания событие = полезная нагрузка ['entry'] [0] ['message']

TypeError: объект 'NoneType' не может быть подписан

Где я ошибаюсь, что webhook неправильно регистрирует тело как объекты json?

1 Ответ

0 голосов
/ 27 июня 2018

Вот как мы это делаем:

# GET: validate facebook token
if request.method == 'GET':
    valid = messenger.verify_request(request)
    if not valid:
        abort(400, 'Invalid Facebook Verify Token')
    return valid

# POST: process message
output = request.get_json()
if 'entry' not in output:
    return 'OK'

for entry in output['entry']:
    if 'messaging' not in entry:
        continue

    for item in entry['messaging']:

        # delivery notification (skip)
        if 'delivery' in item:
            continue

        # get user
        user = item['sender'] if 'sender' in item else None
        if not user:
            continue
        else:
            user_id = user['id']

        # handle event
        messenger.handle(user_id, item)

# message processed
return 'OK'

EDIT:

Если вы используете почтальон, пожалуйста, не забудьте также установить заголовок Content-Type на application/json, иначе Flask не сможет декодировать его с помощью request.json. Я полагаю, что в твоем случае оттуда не приходит никто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...