Twilio и Python друзья навек
- Привет, меня зовут Алексей и я backend-разработчик
- Привет, Алексей
Да, так, примерно, всё и есть. Я программист и это зависимость. Зависимость от творчества. Программист, как и художник не может не писать. Непрерывный поиск, учёба и создание нового.
Всё новое рождается в голове, проявляется на чёрном экране (на самом деле - #272822), фиксируется в недрах git и обретает жизнь в виртуальности инстансов на AWS.
Такова суровая правда жизни. Я - творец и мне это нравится.
Но оставим лирику в стороне.
Обозначим проблему
В последнем проекте, над которым я тружусь (не я один - нас команда) возникла необходимость обеспечить пользователям возможность связи. Писать друг другу сообщения.
Для начала сформировали такой список требований:
- Внешний сервис, не новичок. Без необходимости для нас поднимать, настраивать, масштабировать.
- Возможность сделать изолированные сообщества. Наш проект - сервис для компаний и все пользователи и чаты должны быть изолированы от других компаний-клиентов.
- Развитой инструмент для работы с ним. Внятный API или полноценные библиотеки для основных языков. На данном этапе Python, JS, Java.
- Бесплатно, хотя бы на первое время. Ограниченный бюджет на старте требовал, чтобы можно было разрабатывать и показывать продукт без дополнительных вложений.
Выбор в конце 2015 был не особенно широк (как, в прочем и сейчас). Поэтому выбрали Twilio. У этого сервиса, хорошо известного в области VoIP и всяких SMS, как раз появился, в стадии бета, подпроект InternetMessaging (сейчас - Programmable Chat).
Первые шаги
Беглый просмотр интернетов не выявил ничего, близкого к нашей задаче. Т.е. примеров, статей, проясняющих методику работы с сервисом не обнаружилось. "Надо писать" - подумал я.
Из того, что сразу нашлось - имелась вполне интерактивная документация, официальная python-библиотека (backend у нас на Python) и пара примеров в блоге. Примеры, правда или про SMS или о-о-очень начального уровня.
Поэтому пришлось, путём проб и ошибок, торить свою тропинку.
Самым сложным на начальном этапе было представить себе алгоритм работы с этим сервисом в целом. О чём я вам и расскажу.
Про регистрацию
... на www.twilio.com отдельно говорить нет смысла.
Примечание редактора. Сервис требует SMS-подтверждения. Мне удалось подтвердить на номер с сайта onlinesim.ru
Средства
После регистрации вам даётся некоторые средства, в рамках которых вы и можете разбираться/экспериментировать.
Что есть сразу
Сразу по регистрации у нас есть Account и мы попадаем на его Dashboard.
Важно записать, запомнить, сохранить:
- ACCOUNT SID (ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)
- AUTH TOKEN (он просто длинный)
Эти два параметра используются во всех запросах.
На время экспериментов можно воспользоваться тестовыми параметрами доступа (Test Credentials). Загляните в Settings -> General.
Ну и у вас есть доступ к Programmable Chat - тот API, который нам нужен для организации чатов наших клиентов.
Так же у вас есть доступ (хотя он есть всегда) к документации. Там всё довольно методично описано. По английски. И довольно запутанно.
Следующий шаг
Не сомневаюсь, что pip install twilio
в своём virtualenvs (или pyenv - кому что удобнее) вы уже выполнили.
Поэтому следующим шагом у вас будет создание Сервиса (Service). Сервис - это то, что инкапсулирует в себе все сущности, с которыми мы будем работать: пользователи (users), их роли (roles), каналы (channels) и участники (members).
Каждой компании-клиенту при регистрации мы создаём Service. Это просто (я немного усложню пример из документации):
from twilio.rest import Client
def get_twilio_credentials():
twilio_acc = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
twilio_token = "1a1a1a1a1a1a1aaa1a1a1a"
return (twilio_acc, twilio_token)
def create_twilio_service(name):
account, token = get_twilio_credentials()
client = Client(account, token)
service = client.chat.services.create(
friendly_name=name
)
service.update(reachability_enabled=True)
create_twilio_service("New Company")
Организуем для себя удобный способ получения сохранённых где-то данных для доступа. Можете брать их из переменных окружения, сохранить их в настройках, поместить в БД.
В функции create_twilio_service
получаем учётные данные, создаём экземпляр клиента и инициируем создание сервиса. Единственный (необязательный) параметр - friendly_name
.
На будущее - по умолчанию механизм проверки активности пользователей (позволяющий показывать, залогинен ли он) отключён. Этот параметр (reachability_enabled=True
) нельзя передать при создании сервиса, так что выполним это действие отдельно.
Далее
Дальше мы рассмотрим создание остальных сущностей, разберёмся с генерацией токена для авторизации пользователей и рассмотрим, как это должно выглядеть со стороны клиентов.
Данный материал подготовлен автором @guest007