Вы указываете URL-адрес как status_callback
, когда отправляете SMS :
from twilio.rest import Client
# Your Account Sid and Auth Token from twilio.com/console
# DANGER! This is insecure. See http://twil.io/secure
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)
message = client.messages \
.create(
body='McAvoy or Stewart? These timelines can get so confusing.',
from_='+15017122661',
status_callback='http://postb.in/1234abcd',
to='+15558675310'
)
print(message.sid)
Поэтому вместо postb.in
URL-адреса, указанного выше, измените его на свой URL-адрес ngrok. Однако имейте в виду, что URL-адрес ngrok изменяется каждый раз, когда вы перезапускаете соединитель, за исключением платного плана (очевидно) . Таким образом, вам нужно будет изменять URL-адрес в приведенном выше коде каждый раз, когда вы перезапускаете соединитель ngrok.
Имея это в виду, вы можете затем настроить отдельное приложение для обработки обратного вызова согласно блоку кода в вашем вопросе.
ОБНОВЛЕНИЕ
Я могу позвонить, но у меня все еще есть проблемы с Flask и статусом обратного вызова.
У меня нет учетной записи в Twillio для тестирования, но сначала я бы проверил, действительно ли запрос обратного вызова попадает на ваш Flask сервер.
Я предполагаю из do c ' s, что с status_callback
URL-адресом http://postb.in/1234abcd
этот запрос фактически попадает в конечную точку http://postb.in/1234abcd/MessageStatus
, однако возможно, что это ошибка, и код flask должен быть: @app.route('/1234abcd')
, если вы предоставили такой URL-адрес. (В документации это не слишком ясно).
Если вы уверены, что запрос достигает сервера, но ваш код не обрабатывает его должным образом, может быть целесообразно настроить универсальный маршрут, например:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', defaults={'path': ''}, methods=['POST'])
@app.route('/<path:path>', methods=['POST'])
def catch_all(path):
print (path, request.url, request.get_data())
return ('', 204)
Это позволит вам проверять любые запросы, поступающие на сервер, независимо от пути.
Вы также можете протестировать этот универсальный маршрут с библиотекой requests
(не путать с объектом Flask request
, кстати!):
# From any other terminal
import requests
r = requests.post('http://localhost:5000/',json={1:2})
r = requests.post('http://localhost:5000/asd',data={3:4})
Вывод консоли сервера:
http://localhost:5000/ b'{"1": 2}'
172.17.0.1 - - [17/Jul/2020 23:11:55] "POST / HTTP/1.1" 200 -
asd http://localhost:5000/asd b'3=4'
172.17.0.1 - - [17/Jul/2020 23:12:00] "POST /asd HTTP/1.1" 200 -