Всегда получаю 400: неверный запрос при настройке веб-перехватчика Twilio
Я хочу вести отдельный список отписавшихся от телефона Twilio, и это можно сделать, когда webhook настроен через консоль Twilio для приема входящих сообщений. Я бы разбирал только те сообщения, когда кто-то набирает "СТОП". Я успешно настроил веб-перехватчик
Теперь, когда я набираю "СТОП" на свой номер 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 показывают следующее
По какой-то причине я не могу проанализировать объект запроса, отправленный на мой веб-перехватчик. Эта учетная запись находится в бесплатной пробной версии. Может ли кто-нибудь указать мне на правильную документацию для анализа входящих сообщений.
2 ответа
Евангелист разработчиков 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' }
Вебхук
application/x-www-form-urlencoded
Часто задаваемые вопросы о вебхуках
Для входящих текстовых сообщений Twilio отправит запрос HTTP POST на ваш сервер с телом, в котором используется кодировка application/x-www-form-urlencoded. Просмотрите список параметров, отправленных в этом запросе.