Подключения (API v2)
Подключения в API Radist.Online: создание и настройка соединений с Telegram, WhatsApp, MAX, Одноклассниками, VK, Авито и банками, привязка к подписке и примеры авторизации.
Общее
Swagger: https://api.radist.online/v2/docs#/Connections
Необходимые права доступа (scopes) для работы с API: connections
Подключение/connection - сущность, содержащая параметры для соединения с внешним сервисом (telegram/whatsapp/tinkoff/amocrm и т.п.)
Замечания
- Через API нельзя удалить подключения. Для удаления необходимо обратиться в поддержку. Имейте в виду, что при удалении также удаляются связанные сущности. Например, при удалении терминала банка, будут удалены все выставленные счета. При удалении мессенджера, будут удалены все чаты и история переписки.
- Редактирование параметров доступно не для всех типов подключений. Например, подключения AMOCRM/BITRIX управляются полностью на нашей стороне.
- Чтобы подключение работало, оно должно быть в оплаченной подписке.
Управление подключениями
Список подключений
ConnectionsListConnections (GET /companies/{company_id}/connections/)
Все подключения компании. Параметры: limit (от 1 до 100, по умолчанию 100), offset и types — список типов подключений, если нужны только мессенджеры или только банки. В ответе count — сколько всего подключений в компании, connections — сама страница.
У каждого подключения приходят id, name, type, radist_token, last_status (текущий статус, см. историю статусов), integrations — id интеграций, в которые оно добавлено, subscription_id и subscription, а в params — параметры, свои для каждого типа.
Пример ответа
| |
Карточка подключения
ConnectionsGetConnection (GET /companies/{company_id}/connections/{connection_id})
Одно подключение в том же формате, что и элемент списка, вместе с текущим статусом в last_status. Если подключения с таким id в компании нет, метод вернёт 404 с ошибкой 10000 (CONNECTION_NOT_FOUND).
История статусов
ConnectionsGetConnectionStatusesHistory (GET /companies/{company_id}/connections/{connection_id}/statuses/)
Последние 10 записей о смене статуса, свежие сверху. Параметров у метода нет, постраничного вывода тоже: за более длинной историей приходите к вебхуку connections.status_changed и складывайте её у себя.
В каждой записи status_type — good или bad, и status_subtype:
normal— всё в порядке;whatsapp_qr_not_scanned— QR-код не отсканирован (только WhatsApp);generic_authorization_error— ошибка авторизации;generic_connection_error— прочие ошибки соединения.
Пример ответа
| |
Чёрный список чатов
Чаты из чёрного списка не создаются и сообщения из них не принимаются: если такой клиент напишет, вы не получите ни чат, ни вебхук. Список свой у каждого подключения и работает только для мессенджеров — whatsapp, waba, telegram, telegram_bot, max_personal, max_bot, vk_group, vk_direct, avito. Для остальных типов (банки, CRM) методы вернут 404 с ошибкой 10000 (CONNECTION_NOT_FOUND), как будто подключения нет.
scopes connections, а на добавление и удаление — messaging. Если ключ создан только с connections, чтение работает, а изменение вернёт 403.Просмотр
ConnectionsGetChatsBlacklist (GET /companies/{company_id}/connections/{connection_id}/chats_blacklist/)
Параметры limit (от 1 до 200, по умолчанию 200) и offset. В каждой записи id (он нужен для удаления), source_chat_id, chat_name, phone и created_at.
source_chat_id — идентификатор заблокированного чата на стороне мессенджера, тот же, что принимает GET /companies/{company_id}/messaging/chats/by_source/. Это не chat_id, который принимает добавление ниже: там ожидается наш внутренний идентификатор чата.
Добавление
ConnectionsAddChatToBlacklist (POST /companies/{company_id}/connections/{connection_id}/chats_blacklist/)
В запросе нужно передать либо phone, либо chat_id — id чата в нашей системе (см. Чаты). Если не передать ничего, метод вернёт 422.
Чем именно блокировать, зависит от мессенджера:
whatsappиwaba— можно по номеру телефона, чат при этом заводить не нужно;telegram,telegram_bot,max_personal,max_bot,vk_group,vk_direct,avito— только поchat_id: у этих мессенджеров нет номера, по которому можно опознать собеседника. Если передать толькоphone, метод вернёт422с ошибкой 10015 (CONNECTION_BLACKLIST_CHAT_EXPECTED_CHAT_ID).
В чёрном списке одного подключения может быть до 2048 чатов; при превышении метод вернёт 409 с ошибкой 10009 (CONNECTION_BLACKLIST_LIMIT_EXCEEDED). Повторное добавление того же чата — 409 с ошибкой 10007 (CONNECTION_BLACKLIST_CHAT_IS_ALREADY_BLACKLISTED).
Добавить чат в чёрный список
| |
Удаление
ConnectionsDeleteChatFromBlacklist (DELETE /companies/{company_id}/connections/{connection_id}/chats_blacklist/{item_id})
item_id — это id записи из списка, а не id чата. В ответ приходит 204 No Content. Если такой записи в чёрном списке подключения нет, метод вернёт 404 с ошибкой 10008 (CONNECTION_BLACKLIST_CHAT_IS_NOT_BLACKLISTED).
Примеры
Подключение Telegram
Подключение происходит в несколько шагов:
- Создание сессии для авторизации
- Авторизация
- Ввод пароля двухфакторной авторизации (если есть)
- Создание подключения
Подключение через сканирование QR-кода
- Создаём сессию авторизации TelegramInitializeSession
| |
- Отображаем пользователю QR-код для сканирования
- Периодически (например, раз в 5 секунд) опрашиваем статус сессии: TelegramSendLoginRequest
| |
- Если в ответ снова получили сессию со
status=waiting_for_qrи qr-код изменился, показываем новый код пользователю. - Если в ответ получили сессию со
status=waiting_for_password, то показываем пользователю поле ввода пароля для 2FA. Этого шага может не быть, если 2FA отключена.
| |
- После того, как получили сессию со
status=authenticated, можно создавать подключение: ConnectionsCreateConnection
| |
Подключение через код в чате Telegram
- Создаём сессию авторизации TelegramInitializeSession
| |
- Показываем пользователю поле для ввода кода
- Когда получили код, авторизуемся: TelegramSendLoginRequest
| |
- Если в ответ получили сессию со
status=waiting_for_password, то показываем пользователю поле ввода пароля для 2FA. Этого шага может не быть, если 2FA отключена.
| |
- После того, как получили сессию со
status=authenticated, можно создавать подключение: ConnectionsCreateConnection
| |
Повторная авторизация
В некоторых случаях может быть необходимо повторить авторизацию. Например, если в приложении Telegram принудительно завершили сессию, которую открыл наш сервис.
Это делается аналогично тому, как происходит первое подключение (см. примеры выше), только при создании сессии для авторизации нужно обязательно передать connection_id и после успешной авторизации не нужно создавать новое подключение.
| |
Подключение Telegram Bot
Подключение
Необходимо создать подключение с типом telegram_bot, передав API ключ от бота: ConnectionsCreateConnection
| |
| |
Подключение WhatsApp
Авторизация, подключение
Необходимо создать подключение с типом whatsapp: ConnectionsCreateConnection
| |
| |
После создания подключение ещё не авторизовано (last_status.status_subtype = whatsapp_qr_not_scanned). Авторизуйте его методом WhatsAppInitWhatsappLogin — он поддерживает два способа авторизации, выбираемых параметром auth_type: по QR-коду (qr, по умолчанию) или по коду на телефон (phone).
Способ 1 — по QR-коду (auth_type=qr). В ответе возвращается qr_code (data-URI) и срок его действия expires_at. Отобразите QR-код пользователю — он сканирует его в мобильном приложении WhatsApp: Настройки → Связанные устройства → Привязка устройства.
| |
Способ 2 — по коду на телефон (auth_type=phone). Параметр phone обязателен. В ответе возвращается восьмизначный код подтверждения auth_code (в формате XXXX-XXXX) и срок действия expires_at. Покажите auth_code пользователю — он вводит его в приложении WhatsApp при привязке устройства по номеру телефона: Настройки → Связанные устройства → Привязка устройства → Связать по номеру телефона.
| |
В обоих случаях после истечения expires_at вызовите метод повторно, чтобы получить новый код/QR. Если подключение уже авторизовано, метод вернёт 409.
Опрашивайте статус авторизации методом WhatsAppGetWhatsappInstanceStatus (например, раз в 5 секунд), пока не получите status=ok:
| |
status=ok — подключение авторизовано, status=loading — ожидаем подтверждения кода/QR или запуск инстанса. QR-код и код подтверждения этот метод не возвращает — для их получения используйте login.
Для переподключения повторно вызовите login и заново отсканируйте QR-код или введите код.
Подключение MAX
Первое подключение
- Создаём сессию авторизации:
MaxPersonalInitializeSession
| |
- Показываем пользователю поле для ввода кода
- Когда получили код, авторизуемся:
| |
- После того, как получили сессию со
status=authenticated, можно создавать подключение: ConnectionsCreateConnection
| |
Подключение MAX Bot
Подключение
Необходимо создать подключение с типом max_bot, передав токен бота: ConnectionsCreateConnection
| |
Подключение Одноклассников
Первое подключение
Необходимо создать подключение с типом odnoklassniki, передав API ключ от группы: ConnectionsCreateConnection
| |
| |
Изменение API-ключа
Необходимость изменить API-ключ может возникнуть по разным причинам:
- В настройках группы сбросили ключ
- Ключ давно не использовался и стал неактивен
Для его обновления можно использовать метод: ConnectionsUpdateConnection
Подключение VK (группа)
Первое подключение
Необходимо создать подключение с типом vk_group, передав ключ доступа сообщества (Настройки сообщества → Работа с API → Ключи доступа, права messages): ConnectionsCreateConnection
| |
Подключение VK (Direct, личный аккаунт)
Авторизация происходит через QR-код (аналогично Telegram), с дополнительным шагом валидации, если VK посчитает вход подозрительным.
Первое подключение
- Создаём сессию авторизации и получаем QR-код: VKDirectInitializeSession
| |
- Отображаем пользователю QR-код для сканирования в мобильном приложении VK
- Периодически (например, раз в 2-3 секунды) опрашиваем статус сессии: VKDirectPollLogin
| |
- Пока пользователь не отсканировал код,
statusостаётсяwaiting_for_qr_scan. Если сессия протухла, отменена или недействительна, придётstatus=need_refresh_qr— нужно заново вызвать/vk_direct/init. - Если VK посчитал вход подозрительным, придёт
status=need_validation_code. Запросите у пользователя код подтверждения и повторите/vk_direct/login, дополнительно передавvalidation_code:
| |
- Когда пользователь подтвердил вход в мобильном приложении,
statusстанетauthenticated:
| |
- После этого можно создавать подключение, передав тот же
session_id: ConnectionsCreateConnection
| |
Повторная авторизация
Аналогично Telegram: при вызове /vk_direct/init передайте connection_id уже существующего подключения — сессия будет привязана к тому же устройству (device_id), и повторно создавать подключение после успешной авторизации не нужно.
| |
Подключение Авито
В отличие от остальных мессенджеров, Авито подключается через OAuth — создать подключение одним запросом нельзя, нужен переход пользователя на страницу авторизации Авито.
Подключение
- Получаем ссылку для авторизации: AvitoGetAvitoAuthUrl
| |
- Открываем
auth_urlв браузере пользователя (например, во всплывающем окне). Пользователь авторизуется и разрешает доступ на стороне Авито. - Авито перенаправляет пользователя на наш callback-адрес — он не является частью публичного API и вызывается только со стороны Авито. После успешной авторизации подключение с типом
avitoсоздаётся автоматически, без дополнительных запросов с вашей стороны. - Дождитесь появления нового подключения (например, опросив список подключений) или подпишитесь на вебхук
connections.status_changed.