Документация API
Адрес: https://api.wabado.ru. Токен передаётся в заголовке Authorization, профиль в параметре profile_id.
| Метод | Адрес | Что делает |
|---|---|---|
| POST | /api/profiles | Создать профиль: name, messenger (whatsapp, telegram, max, telegram_bot, max_bot, vk_group), webhook_url. Для telegram_bot, max_bot и vk_group нужен bot_token. Для Telegram ещё api_id и api_hash |
| POST | /api/profiles/credentials | Заменить ключи Telegram: api_id, api_hash |
| GET | /api/profiles | Список профилей |
| GET | /api/profiles/status | Статус профиля и период возможной потери |
| POST | /api/profiles/restart | Перезапустить профиль |
| POST | /api/profiles/logout | Выйти из аккаунта и удалить сессию |
| DELETE | /api/profiles | Удалить профиль |
| GET | /api/auth/qr | QR для входа, data-URL с картинкой |
| POST | /api/auth/code/request | Код для входа по номеру: phone. WhatsApp и Telegram |
| POST | /api/auth/code/confirm | Подтвердить вход: code и password. Telegram и MAX |
| GET | /api/auth/history | История входов и выходов |
| GET | /api/capabilities | Что умеет мессенджер этого профиля |
| POST | /api/sync/message/send | Отправить текст и дождаться результата |
| POST | /api/async/message/send | Поставить текст в очередь: timeout_from, timeout_to, ttl |
| POST | /api/sync/message/file/send | Отправить файл: url или b64_file, caption, file_name |
| POST | /api/async/message/file/send | Поставить файл в очередь |
| GET | /api/media/{token} | Скачать файл по ссылке из уведомления |
| GET | /api/events/missed | Список недоставленных событий |
| POST | /api/events/missed/ack | Отметить события обработанными: event_ids |
| POST | /api/webhooks | Добавить адрес уведомлений: url, events, chat_types (по умолчанию только private) |
| POST | /api/webhooks/chat_types | Выбрать чаты для адреса: id, chat_types из private, group, channel |
| GET | /api/webhooks | Список адресов |
| DELETE | /api/webhooks | Удалить адрес: id |
| GET | /api/cascades | Список шаблонов каскада |
| POST | /api/cascades | Создать шаблон: name, steps из profile_id, body, wait_minutes |
| DELETE | /api/cascades | Удалить шаблон: id |
| POST | /api/cascades/send | Каскад на одного получателя: recipient, cascade_id или steps, vars |
| GET | /api/cascades/status | Ход каскада: id |
Повтор запроса
Заголовок Idempotency-Key защищает отправку от дублей на 24 часа.
Уведомления
События: incoming_message, outgoing_message_api, outgoing_message_phone, delivery_status, authorization_status, profile_status, restriction_status, incoming_call, cascade_status.
Сообщения из групп и каналов по умолчанию не отправляются. Включить их можно у каждого адреса: chat_types в API или флажки в кабинете. В сессиях MAX тип чата пока неизвестен, поэтому оттуда приходят все сообщения.
Мы делаем до 8 попыток за 254 секунды: через 0, 2, 6, 14, 30, 62, 126 и 254 секунды, с небольшим отклонением. Успех только при ответе 2xx. Отбрасывайте повторы по event_id, порядок восстанавливайте по sequence.
Проверка подписи: заголовок X-Signature содержит sha256= и HMAC-SHA256 от строки X-Timestamp.тело, ключ — секрет адреса.
$expected = 'sha256=' . hash_hmac('sha256', $_SERVER['HTTP_X_TIMESTAMP'] . '.' . $body, $secret);
hash_equals($expected, $_SERVER['HTTP_X_SIGNATURE']);Если адрес не ответил
После 8 неудач содержимое удаляется. Остаются ID, чат, тип и время, они доступны 30 дней через /api/events/missed. Сам текст можно посмотреть в телефоне.
Поля possible_gap_from и possible_gap_to в статусе профиля показывают период, когда события могли потеряться из-за перезапуска сервиса.
Файлы
Входящий файл приходит ссылкой media_url. Ссылка требует токен и живёт 7 дней или пока файл есть у мессенджера. Заберите нужные файлы сразу.
Каналы и profile_id
В кабинете подключённый номер или бот называется каналом. В API это профиль: profile_id.
Каскад
Шаги идут по порядку. Следующий канал используется, если отправка не удалась или, при wait_minutes больше 0, за это время нет подтверждения. Переменные пишутся как {{имя}}, значения передаются в vars. Итог приходит событием cascade_status. Методы каскада работают только с токеном на все каналы.
Токены и профили
Токен работает со всеми профилями аккаунта или только с выбранными. Чужой для токена профиль отвечает 404. Токену с выбранными профилями недоступны создание профиля и webhook на весь аккаунт: они отвечают 403 token_scope.
Ключи Telegram
Для профиля Telegram нужны ваши api_id и api_hash с my.telegram.org. API их не возвращает, а хранятся они зашифрованными.
Получатель
В recipient передаётся номер. Telegram принимает также @username. Для ответа используйте chat_id из уведомления. В WhatsApp он бывает в формате @lid, поэтому в уведомлении есть chat_phone, если номер известен.