Всегда получаю 400: неверный запрос при настройке веб-перехватчика Twilio

Я хочу вести отдельный список отписавшихся от телефона Twilio, и это можно сделать, когда webhook настроен через консоль Twilio для приема входящих сообщений. Я бы разбирал только те сообщения, когда кто-то набирает STOP. Я успешно настроил веб-перехватчик  введите описание изображения здесь

Теперь, когда я набираю STOP на свой номер Twilio со своего телефона, я всегда получаю плохой запрос. Мой код выглядит следующим образом

@app.route('/twilio/unsubscribes_incremental', methods=['POST', 'GET'])
def phone_unsubscribes_incremental():
    print("start")
    print("The arguments are ", request.args)
    payload = request.get_json(force=True)
    print("The payload is ", payload)
    #resp = MessagingResponse()
    if payload.get('Body') in twilio_unsubscribe_list:
        stream_data_to_bq(payload)
    #resp.message("")
    #return str(resp)
    return jsonify({"status":"ok"})

Моя консоль Python выглядит следующим образом:  введите описание изображения здесь

Моя консоль ngrok выглядит следующим образом:  введите описание изображения здесь

Журналы моей консоли Twilio выглядят следующим образом:  введите описание изображения здесь

По какой-то причине я не могу проанализировать объект запроса, отправленный на мой веб-перехватчик. Эта учетная запись находится в бесплатной пробной версии. Может ли кто-нибудь указать мне на правильную документацию для анализа входящих сообщений.


person sandeep007    schedule 08.04.2021    source источник
comment
В качестве улучшения здесь используйте pyngrok для программного запуска и управления ngrok из сценария Python.   -  person alexdlaird    schedule 13.04.2021


Ответы (2)


Веб-крючок application/x-www-form-urlencoded

Часто задаваемые вопросы по веб-перехватчику

Для входящих текстовых сообщений Twilio отправит на ваш сервер HTTP-запрос POST с телом, которое использует кодировку application / x-www-form-urlencoded. Просмотрите список параметров, отправленных в этом запросе.

person Alan    schedule 08.04.2021

Проповедник разработчиков Twilio здесь.

Как указывает Алан, запросы веб-перехватчиков Twilio отправляют данные в форме application/x-www-form-urlencoded, в том же формате, что и веб-форма. Это не JSON. Twilio также ожидает, что ваше приложение ответит application/xml.

Итак, вы должны прочитать данные из request.form и, поскольку не похоже, что вы ожидаете, что Twilio будет делать что-либо дальше с запросом, вернуть пустой <Response> элемент TwiML.

Примерно так должно работать:

@app.route('/twilio/unsubscribes_incremental', methods=['POST', 'GET'])
def phone_unsubscribes_incremental():
    print("start")
    print("The arguments are ", request.args)
    payload = request.form
    print("The payload is ", payload)
    if payload.get('Body') in twilio_unsubscribe_list:
        stream_data_to_bq(payload)
    resp = MessagingResponse()
    return str(resp), { 'Content-Type': 'application/xml' }
person philnash    schedule 09.04.2021
comment
Спасибо за код. Работает - person sandeep007; 09.04.2021