«АТИ Мессенджер» (далее Мессенджер) — сервис для обмена сообщениями, документами, файлами между пользователями ATI.SU. С помощью мессенджера можно договориться о перевозке, отправить фото, электронные документы.
Отправка файлов, изображений, документов ATI.SU, геометок
Общение в открытых и закрытых групповых чатах
Общение с подписчиками в каналах
Типичные сценарии использования мессенджера
Диалог
Создать диалог по конкретному грузу или из интерфейса мессенджера с определенным пользователем
Отправить сообщение
Закрепить диалог
Заблокировать/разблокировать пользователя
Скрыть диалог
Групповой чат и канал
Создать групповой чат или канал
Отправить приглашения участникам ATI.SU
Вступить в чат по приглашению
Исключить участника
API для работы с АТИ Мессенджером
API Мессенджера предоставляет набор методов, необходимых для получения списка чатов пользователя ATI.SU, получения сообщений в чате, отправки сообщения в чат и другие. Благодаря этому API можно организовать интеграцию между мессенджером и сторонней системой.
Используемые термины
Чат - абстрактная сущность чата в мессенджере, любой чат имеет одну или более подписку.
Подписка - связка пользователя и конкретного канала. Диалог, например, состоит из 2-х подписок, групповой чат - из N подписок. Список чатов, отображающийся в интерфейсе, есть список подписок. Подписка так же содержит опции пользователя относительно этого чата (скрыт, заблокирован, закреплен и т.п.).
Диалог - чат между двумя участниками; диалог нельзя удалить, только скрыть.
Групповой чат - чат между группой участников, пользователи вступают чат по приглашению; в закрытых чатах приглашать могут только администраторы, в открытых - все участники.
Администратор - создатель и владелец группового чата. В закрытых группах только администратор может приглашать пользователей в чат.
Канал - групповой чат, писать в который может только администратор.
История - список сообщений чата.
Хвост - последнее сообщение в истории (отображается в каждом чате из списка).
Пользователь ATI.SU - участник ATI.SU, обладающий лицензией и имеющий доступ ко всем сервисам ATI.SU.
Псевдопользователь(АТИ Водитель) - пользователь чата, не являющийся полноценным участником ATI.SU, но имеющий возможность быть участником как диалога, так и группового чата в мессенджере.
ID аккаунта ATI.SU - уникальный идентификатор аккаунта в ATI.SU, для АТИ водителя имеет формат driver_{номер телефона}.
User ID - {ID аккаунта ATI.SU}.{ID контакта}, у АТИ водителя контакт ID контакта всегда 0.
АТИ код - код участника ATI.SU отображающийся в шапке сайта и в профиле участника, может совпадать с ID аккаунта. Код АТИ Водителя совпадает с ID.
Структура подписки
Подписка является ключевой сущностью в чате, большинство АПИ методов так или иначе отдают объект подписки в качестве ответа. Некоторые поля в теле подписки могут дублироваться или казаться избыточными, так же типы некоторых полей могут вызывать вопросы - все это связано с поддержкой старых версий, в новых версиях эти рудименты исчезнут.
Подписки диалогов и групповых чатов выглядят похоже, но имеют некоторые отличия.
Имя поля
Описание
Тип
Пример
Диалог
Группа
Обязательное поле
id
ID чата
string
28ba1e3b16974c32989b1а
да
да
да
channel_type
Тип чата
string
group
да
да
да
name
Название чата
string
my awesome group
да
да
да
description
Описание чата
string
my awesome group description
да
да
да
owner
User ID владельца чата
string
890386.0
да
да
да
user
User ID владельца подписки
string
1423414.0
да
да
да
ctime
Дата и время создания чата (GMT+3)
string
2021-01-22T11:25:15+00:00
да
да
да
utime
Дата и время последнего обновления подписки (GMT+3)
string
2021-03-24T08:51:53+00:00
да
да
да
dts
UTC Timestamp последнего прочитанного пользователем сообщения
integer
1611314906749707
да
нет
да
uts
UTC Timestamp последнего обновления подписки
integer
1622639302000000
да
да
да
del_ts
UTC Timestamp последней очистки истории
integer
1622639302000000
да
нет
нет
ts
UTC Timestamp последнего сообщения
integer
1622639302435456
да
да
да
unread
Количество непрочитанных сообщений в чате
string
0
да
да
да
partner
АТИ Код партнера
string
777
да
нет
да
partner_full
АТИ Код партнера с ID контакта
string
777.0
да
нет
да
partner_id
ID Аккаунта АТИ партнера
string
2716044
да
нет
да
users
Список {АТИ код}.{ID контакта} участников чвтв
list
[“14234140.0”, “777.0”]
да
нет
да
count
Кол-во участников
integer
3
нет
да
да
invite
Флаг подписки с приглашением
bool
true
нет
да
нет
removed
Флаг подписки на удаленный канал
bool
true
нет
да
нет
excluded
Флаг исключенной подписки
bool
true
нет
да
нет
pinned
Флаг прикрепленной подписки
string
1
да
да
нет
locked
Флаг подписки с заблокированным юзером
string
1
да
нет
нет
complaint
ID пожаловавшегося пользователя
string
1423414.0
да
нет
нет
complaint_reason
Причина блокировки
string
spam
да
нет
нет
tail
Хвост чата
dict
{…}
да
да
нет
Описание методов
Чаты
Создание чата
Для создания диалогов и групповых чатов используется общий метод.
Диалог:
При добавлении диалога создастся 2 подписки, но подписка собеседника будет скрыта пока в нее не напишут.
Между двумя одинаковыми пользователями возможен только один диалог, при повторном создании будет возвращена та же самая подписка.
Диалог можно создать двумя способами: используя ID аккаунта либо АТИ код, в зависимости от способа необходимо использовать поля id и ati_id соответственно. Не стоит указывать оба поля при запросе.
Группа, канал:
По умолчанию при добавлении группы создастся чат с одним юзером в качестве участника (в ответ вернется его подписка).
Можно создать чат и одновременно пригласить нескольких пользователей указав их списком в поле members.
Обновление мета-данных группового чата
Метод используется для изменения имени или описания группового чата администратором.
Удаление группового чата владельцем
При удалении канала или группы все подписки участников будут помечены флагом removed.
Подписки
Получение всех подписок пользователя
Метод возвращает постраничный список подписок.
Получение информации о подписке
Участники групповых чатов
Получение списка участников
С помощью параметров метода можно запрашивать как приглашенных так и текущих участников группового чата.
Приглашение пользователя в групповой чат
При вызове метода у приглашенного пользователя создастся подписка с флагом invite.
Исключение участника из группового чата
При вызове метода у исключенного пользователя в подписку добавится флаг excluded.
Принятие приглашения в групповой чат
После принятия приглашения флаг invite должен пропасть из подписки.
Удаление себя из группового чата или удаление приглашения
При вызове метода подписка удалится из базы данных.
Сообщения
Получение истории сообщений
Метод возвращает постраничный список сообщений.
Отправка сообщения
Метод отправки сообщения. Поддерживаются текстовые сообщения, сообщения с картинкой или файлом, а также сообщения с геометкой. Одно сообщение должно содержать либо текст, либо одно вложение (картинку или файл), либо геометку.
Для отправки картинки обязательно прислать одновременно image, image_height и image_width.
Для отправки геометки обязательно прислать одновременно geo_longitude и geo_latitude.
Получение прикреплённого к сообщению изображения
Получение изображения, прикреплённого к сообщению. Работает только для сообщений, у которых image_id не равен null. Использовать image_id не нужно: достаточно передать идентификатор сообщения message_id.
Получение прикреплённого к сообщению файла
Получение файла, прикреплённого к сообщению. Работает только для сообщений, у которых file_id не равен null. Использовать file_id не нужно: достаточно передать идентификатор сообщения message_id.
Прочие методы
Изменение настроек подписки
Изменение настроек подписки (скрыть/закрепить).
Приглашение нескольких пользователей в групповой чат
По умолчанию используются id-шники аккаунтов, но если флаг ati_id выставлен в true, будут использованы именно коды.
Удаление сообщения из диалога
Удалять сообщения можно в диалогах и только если они не прочитаны собеседником. В качестве идентификатора можно использовать как непосредственно id сообщения так и его временную метку в UTC.
Очистка истории
Очистить переписку можно только в диалогах, причем история изменится лишь для владельца подписки, у собеседника все останется как есть. При вызове метода в подписку добавится поле del_ts, содержащее временную метку, начиная с которой сообщения не будут возвращаться в методе history.
Получение счетчика чатов с непрочитанными сообщениями
Метод вернет количество чатов с непрочитанными сообщениями.
Получение количества непрочитанных чатов по типам (все/диалоги/групповые чаты)
Метод аналогичный inbox, но счетчики будут разбиты по типам чатов.