Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Twilio и Python друзья навек

- Привет, меня зовут Алексей и я backend-разработчик
- Привет, Алексей


Да, так, примерно, всё и есть. Я программист и это зависимость. Зависимость от творчества. Программист, как и художник не может не писать. Непрерывный поиск, учёба и создание нового.

Всё новое рождается в голове, проявляется на чёрном экране (на самом деле - #272822), фиксируется в недрах git и обретает жизнь в виртуальности инстансов на AWS.

Такова суровая правда жизни. Я - творец и мне это нравится.

Но оставим лирику в стороне.

Обозначим проблему

В последнем проекте, над которым я тружусь (не я один - нас команда) возникла необходимость обеспечить пользователям возможность связи. Писать друг другу сообщения.

Для начала сформировали такой список требований:

  1. Внешний сервис, не новичок. Без необходимости для нас поднимать, настраивать, масштабировать.
  2. Возможность сделать изолированные сообщества. Наш проект - сервис для компаний и все пользователи и чаты должны быть изолированы от других компаний-клиентов.
  3. Развитой инструмент для работы с ним. Внятный API или полноценные библиотеки для основных языков. На данном этапе Python, JS, Java.
  4. Бесплатно, хотя бы на первое время. Ограниченный бюджет на старте требовал, чтобы можно было разрабатывать и показывать продукт без дополнительных вложений.

Выбор в конце 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

5
203.818 GOLOS
На Golos с August 2017
Комментарии (1)
Сортировать по:
Сначала старые