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

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 для каналов. Важно правильно сформировать принцип создания этого параметра. По, как минимум, двум причинам:

  1. Он может использоваться для получения доступа к конкретному пользователю вместо параметра sid. Это удобно, поскольку позволяет не хранить sid у себя или не тратить ресурсы на его предварительное получение из других источников.
  2. Именно этот параметр связывает 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

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