Python-приложения могут легко отправлять и отвечать на текстовые и мультимедийные сообщения с помощью веб-API. Исходящие сообщения отправляются через RESTful API Twilio, а входящие сообщения принимаются приложением, когда Twilio делает HTTP POST-запрос. Мы рассмотрим, как настроить веб-приложение на Bottle для обработки как SMS, так и MMS сообщений.
Вам понадобится Python 2 или 3. Однако сообщество разработчиков рекомендует использовать Python 3 для всех новых приложений. Установите одну из этих версий Python на свою систему. Также нам потребуются следующие компоненты:
— Веб-фреймворк Bottle
— Ngrok для туннелирования локального хоста к нашему веб-приложению во время его работы в локальной среде разработки
— Бесплатная учетная запись Twilio для использования API обмена сообщениями и получения вебхуков
— Открытая библиотека-помощник Twilio для Python
— Документация TwiML для ответа на входящие POST-запросы от Twilio
Весь код для этого руководства можно найти в открытом репозитории GitHub.
Если вам нужна помощь в настройке среды разработки перед тем, как мы приступим к написанию приложения, ознакомьтесь с этим полезным руководством по настройке Python 3, Bottle и Gunicorn на Ubuntu 16.04 LTS.
##
Установка зависимостей приложения
Наше приложение будет использовать библиотеку-помощник Twilio для Python для отправки и ответа на сообщения. Bottle и библиотека-помощник устанавливаются из PyPI в виртуальное окружение. Откройте терминал и используйте команду `virtualenv` для создания нового виртуального окружения:
Активируйте скрипт `activate` виртуального окружения, чтобы сделать его активной установкой Python для нашей оболочки. Обратите внимание, что это нужно делать в каждом окне терминала, где вы хотите использовать это виртуальное окружение.
После активации командная строка изменится и будет отображать имя виртуального окружения в скобках, как в этом примере:
Мы установили необходимые зависимости. Теперь Python-код, запущенный с активированным виртуальным окружением, сможет использовать эти пакеты. Пришло время приобрести телефонный номер, который мы будем использовать для создания веб-приложения на Bottle, обрабатывающего SMS и MMS сообщения.
Перейдите на сайт Twilio и зарегистрируйтесь для получения бесплатной учетной записи или войдите в существующую учетную запись Twilio.
Пробные учетные записи Twilio позволяют отправлять и получать сообщения на ваш собственный номер телефона. Пробные версии отлично подходят для начальной разработки перед запуском приложения в продакшн. Обновите свою учетную запись, чтобы отправлять и получать сообщения на любые телефонные номера и с них.
Если вам нужен новый телефонный номер или вы хотите посмотреть существующие номера, перейдите на экран управления телефонными номерами по этой ссылке или нажмите на «#» в левой навигационной панели консоли.
Имея учетные данные аккаунта и телефонный номер Twilio, мы можем написать немного Python-кода для отправки исходящих сообщений.
Веб-приложение на Bottle будет иметь два маршрута. Один маршрут позволит нам протестировать, что приложение работает. Другой маршрут будет обрабатывать и отвечать на входящие HTTP POST-запросы от Twilio. Создайте новый файл с именем `app.py` в директории, где вы хотите хранить этот Python-проект.
Напишите следующий код в новом файле `app.py`.
Строки, начинающиеся с `#`, являются комментариями, объясняющими, что делают строки кода ниже. Веб-приложения на Bottle определяют маршруты URL с помощью декораторов `@route` и `@post`, в зависимости от типа HTTP-запроса, который должен обрабатывать маршрут: GET или POST соответственно.
Нам нужно получить учетные данные аккаунта, Account SID и Auth Token, из консоли Twilio, чтобы создать объект `client`.
Теперь мы можем запустить сервер разработки Bottle, так как учетные данные Twilio добавлены в код `app.py`. Убедитесь, что ваше виртуальное окружение остается активированным, чтобы приложение могло использовать библиотеки Bottle и Twilio, которые мы установили ранее. Попробуйте запустить приложение Bottle с помощью команды `python app.py`.
Откройте веб-браузер и перейдите по адресу localhost:5000 (или 127.0.0.1:5000). На экране должно появиться сообщение «Bottle web app up and running!».
Мы можем протестировать функцию отправки SMS через URL `/send-sms/`. Например, попробуйте этот URL, чтобы отправить сообщение «About to take a drive down the I-95» с вашего номера Twilio на другой номер телефона (не забудьте заменить номера «from» и «to» в URL):
http://localhost:5000/send-sms///about to take a drive down the i-95/
Простое сообщение об успехе должно сообщить нам, что SMS было отправлено на номер получателя.
Подождите секунду, пока SMS дойдет, и вы должны увидеть что-то подобное на iPhone или эквивалентное на Android:
У нас есть основа работающего приложения на Bottle, которое может отправлять исходящие SMS. Теперь мы можем добавить отправку MMS с изображениями.
Отправка MMS сообщений очень похожа на то, как мы только что отправляли SMS, за исключением того, что нам нужен еще один аргумент для нашей функции `create_message`. Мы можем указать `media_url` с URL-адресом изображения в формате .gif, .jpg или .png, чтобы отправить его как часть нашего MMS. Также возможно отправлять видеоролики и аудиоклипы, о чем вы можете прочитать больше в документации.
Дополните существующий файл `app.py` следующими новыми выделенными строками.
Давайте попробуем новый код MMS нашего приложения. Введите этот URL в браузере, но замените телефонные номера на ваш номер Twilio и номер, на который вы хотите отправить MMS:
http://localhost:5000/send-mms///my favorite new game/
Вот как это выглядит, когда мы успешно получаем MMS:
Что, если мы хотим отвечать на входящие SMS и MMS сообщения с помощью нашего приложения на Bottle? Есть одна проблема с нашим веб-приложением, работающим в локальной среде разработки. Twilio не может отправить HTTP POST-запрос на сервер веб-приложения. Мы можем решить эту проблему во время разработки с помощью инструмента туннелирования локального хоста.
Ngrok — это инструмент туннелирования локального хоста, который связывает вашу локальную среду разработки с внешним URL. Скачайте и установите версию Ngrok, подходящую для вашей операционной системы.
Мы можем запустить Ngrok локально и открыть доступ к нашему приложению на Bottle, работающему на порту 5000. Запустите эту команду в директории, где находится исполняемый файл Ngrok.
Отлично, теперь мы можем использовать URL переадресации, чтобы Twilio мог отправлять POST-запросы нашему приложению при получении входящего SMS. Замените URL в текстовом поле на свой собственный URL переадресации, как я сделал на этом скриншоте.
Теперь мы можем настроить Twilio для отправки POST-запроса нашему приложению через Ngrok. Перейдите на экран управления телефонными номерами и нажмите на номер телефона, который вы хотите настроить для ответа на текстовые сообщения.
Прокрутите вниз и найдите заголовок «Messaging». Измените текстовое поле «A Message Comes in» на URL переадресации Ngrok плюс маршрут «/twilio», как показано на скриншоте ниже.
Нажмите кнопку «Save», чтобы наши изменения вступили в силу.
Обновите файл `app.py` следующей новой выделенной функцией, которая будет обрабатывать POST-запросы от Twilio при получении SMS или MMS на наш номер телефона.
Наше приложение готово к работе — пора протестировать наш номер телефона! Отправьте «Hello» или любой другой текст на ваш номер телефона. Вот как это выглядит на моем iPhone.
Отличная работа! Это лаконичное веб-приложение на Bottle — хорошее начало для создания более сложных программ.
Здорово, наше приложение на Bottle может отправлять и отвечать на входящие SMS и MMS сообщения. Наше приложение может делать гораздо больше. Вот несколько более углубленных руководств, которые помогут вам сделать следующий шаг к созданию еще более полезных Python-приложений:
Если у вас есть вопросы или комментарии, пожалуйста, свяжитесь со мной через следующие каналы: