Twilio и Python друзья навек - 3
Users
После небольшого перерыва продолжим рассматривать работу с Twilio Programmable Chat.
В предыдущих статьях мы посмотрели на основы: создали Сервис и создали Канал для обмена сообщениями. Пришла пора двигаться дальше и создать пользователя.
User
Создание пользователя не сложнее создания остальных сущностей.
Возьмём за основу примеры из предыдущих статей и продолжим:
def get_saved_info(company):
# откуда-то вытаскиваем
return {"service_sid": sid}
def create_twilio_user(user):
account, token = get_twilio_credentials()
client = Client(account, token)
service = client.chat.services(
get_saved_info(user.company)['service_sid']
).fetch()
unique_name = "Usr:{}:{}".format(user.company.id, user.id)
user = service.users.create(
identity=unique_name,
friendly_name=user.username
)
Пример мало чем отличается от создания, к примеру, канала. Обязательный параметр --- identity
и он создаётся почти по тому же принципу. В случае пользователя используем id
компании, сотрудником которой является пользователь и id
самого пользователя.
Остальные параметры можно посмотреть в документации. Некоторых мы коснёмся позднее.
Identity
Параметр identity
несёт такую же смысловую нагрузку как и unique_name
для каналов. Важно правильно сформировать принцип создания этого параметра. По, как минимум, двум причинам:
- Он может использоваться для получения доступа к конкретному пользователю вместо параметра
sid
. Это удобно, поскольку позволяет не хранитьsid
у себя или не тратить ресурсы на его предварительное получение из других источников. - Именно этот параметр связывает User и Member. Но об этом --- дальше.
Members
Однажды созданные пользователи --- это и средство идентификации в системе и способ определить принадлежность каналов, в случае, если канал создаётся непосредственно пользователем.
Но есть ещё один важный аспект в использовании Twilio Programmable Chat. Для того, чтобы читать/писать в конкретный канал пользователь должен стать его участником --- member
.
Мне потребовалось некоторое время, чтобы разобраться с этим вопросом. Вот тут нам и потребуется знать identity
пользователя. Потому что именно по этому параметру осуществляется связь между User
и Member
.
def get_saved_info(company):
# откуда-то вытаскиваем
return {"service_sid": sid}
def add_twilio_member(user):
account, token = get_twilio_credentials()
client = Client(account, token)
service = client.chat.services(
get_saved_info(user.company)['service_sid']
).fetch()
common_un = "Org:{}:{}".format('common', user.company.id)
channel = service.channels(common_un).fetch()
identity = "Usr:{}:{}".format(user.company.id, user.id)
member = channel.members.create(identity)
Сначала мы получаем канал Common
. Заметьте --- не по sid
, а по unique_name
, так что нам не пришлось вытаскивать конкретный sid
из БД или получать его отдельным запросом. Поступайте в данном случае так, как вам удобно.
Затем формируем identity
пользователя тем же способом, что и в предыдущем примере. И после этого добавляем в канал нового участника по сформированному на предыдущем шаге identity
.
На скриншоте из предыдущей части:
full size
виден канал common
, в который добавлено 6 участников и написано 45 сообщений.
Получается, что каждого пользователя нужно отдельно включать в каждый канал, в котором он должен состоять. Мы здесь включили пользователя в канал common
. Можно заранее создать каналы каждому пользователю, если, к примеру, обязательно иметь хотя бы один способ написать сообщение лично (конкретному адресату).
В дальнейшем пользователи могут создавать каналы сами и приглашать в них других пользователей. Если пользователь создаёт канал сам, то, по умолчанию (если мы не изменим это поведение заранее) он будет назначем админом этого канала.
Подключившиеся пользователи будут иметь меньше прав. Это управляется механизмом ролей.
Далее
Вот про сообщения и роли мы и поговорим в следующей части.
За сим пока откланиваюсь
Ваш @guest007