Рубрики
Без рубрики

Ответ на текстовые SMS-сообщения с помощью Python и Flask

Краткое руководство по получению текстовых SMS-сообщений и ответам на них в приложении Flask, созданном на Python.

Автор оригинала: Matt Makai.

Текстовые сообщения службы коротких сообщений (SMS) легко отправлять из приложений Python с интерфейс программирования веб-приложений (API). Приложения Flask также могут получать входящие текстовые сообщения и отвечать обратно отправителю с помощью всего нескольких строк кода Python.

Инструменты, которые нам нужны

Это руководство подходит как для Python 2, так и для Python 3. Убедитесь, что у вас есть один из те две версии, установленные в вашей системе.

  • Либо Python 2, либо 3
  • pip и
  • virtualenv для обработки
  • зависимости приложений
  • Микро веб-фреймворк Flask
  • Бесплатная учетная запись Twilio для использования своих
  • Веб-API SMS
  • Открытый источник
  • Вспомогательная библиотека Python Twilio
  • Ngrok для туннелирования localhost в нашу Flask
  • приложение, пока оно работает в нашей локальной среде разработки

Если вам нужна помощь в установке pip и virtualenv, взгляните на первые несколько шагов в как настроить Python 3, Flask и Green Unicorn на Ubuntu 16.04 LTS руководство, в котором показано, как установить системные пакеты для этих инструментов.

Установка наших зависимостей

Наш код будет использовать вспомогательную библиотеку, чтобы упростить ответ на текст. сообщения от Python. Зависимость вспомогательной библиотеки вместе с Flask библиотеку кода можно установить из PyPI в виртуальный. В вашем терминале используйте следующую команду для создания нового virtualenv.

virtualenv respondsms

Активируйте virtualenv.

source respondsms/bin/activate

Командная строка изменится после того, как мы правильно активируем virtualenv. примерно так:

Установите Flask и вспомогательную библиотеку Python Twilio в virtualenv с помощью команда pip .

pip install flask twilio==5.7.0

Зависимости установлены, так что мы можем использовать его с нашим кодом Python. Теперь мы можем написать наше приложение Python.

Создание нашего веб-приложения Flask

У нашего приложения Flask будет два маршрута: один, чтобы убедиться, что веб-приложение работает, а другой обрабатывает входящие запросы HTTP POST. Создайте новый файл с именем app.py в вашем домашнем каталоге или в том месте, где вы хотите хранить файлы проекта Python.

В app.py напишите следующий код. Вы также можете увидеть этот код в GitHub Gist если проще скопировать и вставить.

from flask import Flask, Response, request
from twilio import twiml


app = Flask(__name__)


@app.route("/")
def check_app():
    # returns a simple string stating the app is working
    return Response("It works!"), 200


@app.route("/twilio", methods=["POST"])
def inbound_sms():
    response = twiml.Response()
    # we get the SMS message from the request. we could also get the 
    # "To" and the "From" phone number as well
    inbound_message = request.form.get("Body")
    # we can now use the incoming message text in our Python application
    if inbound_message == "Hello":
        response.message("Hello back to you!")
    else:
        response.message("Hi! Not quite sure what you meant, but okay.")
    # we return back the mimetype because Twilio needs an XML response
    return Response(str(response), mimetype="application/xml"), 200


if __name__ == "__main__":
    app.run(debug=True)

Встроенные комментарии к строкам, начинающимся с # , объясняют, что эти строки под ними делать. Приложения Flask определяют URL-маршруты с помощью тега @ app.route декоратор. Нашему приложению нужны два маршрута, поэтому у нас есть два из них декораторы определены.

Попробуйте приложение, запустив его с помощью python app.py . Если у тебя есть проблемы с запуском программы, убедитесь, что ваш виртуальный сервер все еще активен, чтобы что приложение может использовать библиотеки кода Flask и Twilio, которые мы установили ранее.

Откройте веб-браузер и перейдите по адресу localhost: 5000 (или 127.0.0.1:5000). Мы должны см. “Это работает!” на экране.

Есть одна проблема с нашим приложением, работающим в нашей локальной разработке среда: наш сервер не может получать запросы HTTP POST если мы не используем туннель localhost.

Туннелирование локального хоста с Ngrok

Ngrok предоставляет туннель localhost, чтобы снаружи сервисы могут подключаться к серверу, запущенному в вашей локальной разработке окружающая обстановка. Загрузите и установите Ngrok.

Теперь мы можем запустить Ngrok локально и подключить наше приложение Flask, работающее на порту 5000. В каталоге, в который вы извлекли Ngrok, выполните эту команду.

./ngrok http 5000

Замечательно, теперь мы можем использовать этот URL переадресации Ngrok для доступа к нашему приложению. с любого компьютера, подключенного к Интернету. Замените URL-адрес в веб-браузер с вашим собственным URL-адресом пересылки, как я сделал на этом снимке экрана.

Нам просто нужен номер телефона, который попадет в наше приложение с запросом POST. отвечать на текстовые сообщения.

Получение нашего номера телефона

Мы можем использовать маршрут нашего приложения Flask для ответа на входящий веб-API. запросы на основе входящих SMS-сообщений на номер телефона Twilio. Перейти к Веб-сайт Twilio и зарегистрируйтесь для получения бесплатной пробной учетной записи использовать их API. Если у вас уже есть учетная запись Twilio, войдите в свой существующий аккаунт.

Пробная учетная запись Twilio позволяет отправлять и получать текстовые сообщения на ваш собственный подтвержденный номер телефона. Отправлять и отвечать на SMS с любого номер телефона, то вам необходимо обновить свою учетную запись. Пробные аккаунты отлично подходит для начальной разработки перед запуском вашего приложения.

При регистрации вы получаете бесплатный номер телефона Twilio. Мы можем настроить этот номер телефона для пересылки информации по SMS в наш Интернет приложение, настроив ответный веб-перехватчик.

Перейти к экран управления номерами телефонов и нажмите на номер телефона, который хотите настроить для ответа на входящие текстовые сообщения.

Прокрутите вниз до нижней части страницы и найдите «Сообщения». заголовок. Измените текстовое поле «Сообщение приходит», чтобы в нем было ваше ngrok Forwarding URL плюс маршрут “/twilio”, как показано на этом снимке экрана.

Теперь нажмите красную кнопку «Сохранить» внизу, чтобы изменения вступили в силу. эффект.

Наше приложение готово к работе – пора попробовать наш номер телефона! Отправьте «Привет» или любой другой текст на свой номер телефона. Вот что результат выглядит как на моем iPhone.

Это простое приложение Flask – хорошее начало для создания более сложных такие ответы, как добавление обработки естественного языка , создание SMS-ботов Slack или же кодирование SMS на базе NES Game Genies .

Что дальше?

Милая, теперь наше веб-приложение Flask автоматически отвечает на входящие SMS-сообщения. Сообщения! Довольно безумно думать, что целые компании, такие как SuperPhone и Напомнить созданы из кода, который начинался очень аналогично только что написанному коду.

Вопросов? Свяжитесь со мной через Twitter @fullstackpython или @mattmakai . Я также на GitHub с имя пользователя mattmakai .

Что-то не так в этом посте? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос.