Marx Bot API

HTTP API, через которое программа бота читает и отправляет сообщения в мессенджере Marx.

Адрес

Все методы — под адресом https://api.bot.marx.moscow/api/bot/v1/. Только HTTPS. Тела запросов и ответов — JSON в UTF-8 с заголовком Content-Type: application/json; загрузка файла — multipart/form-data. Список методов — на странице Методы.

Создать бота и получить токен

Ботов создаёт системный бот @marxbot («Создатель ботов») в приложении Marx.

  1. В настройках приложения нажмите «Создать бота» или найдите @marxbot и откройте чат с ним.
  2. Отправьте /newbot.
  3. Пришлите имя бота: от 1 до 64 символов. Его видят в чатах и в профиле.
  4. Пришлите имя пользователя: от 5 до 32 символов, латиница, цифры и _, в конце — bot. Например, dacha_weather_bot.
  5. В ответе — токен вида marx_pat_…. Нажмите на него, чтобы скопировать.

С токеном любой пишет от имени бота: храните его как пароль. Новый токен выдаёт /token; прежний перестаёт работать сразу.

Команда @marxbotЧто делает
/newbotСоздать бота
/mybotsСписок ваших ботов
/token, /token @имя_ботаНовый токен; без имени при нескольких ботах спросит, какому
/setcommandsЗадать команды бота для меню, строками команда - описание
/deletecommandsУбрать команды бота
/cancelОтменить начатое

У одного человека — до 20 ботов; создать можно до 5 ботов в сутки; токен можно менять до 10 раз в час.

Добавить бота в группу и в канал

Личный чат

Начать личный чат бот не может. Чат появляется, когда человек находит бота по имени пользователя и пишет ему; приложение показывает кнопку «Начать», которая отправляет /start.

Группа

Бота добавляют как обычного участника: в профиле группы — «Добавить участников», найти по @имени. Добавить может любой, у кого есть право добавлять участников; владелец бота для этого не нужен. Участник группы может писать в неё, и бот тоже. Что бот получает из группы — в разделе Что видит бот.

Канал

В канале пишут только админы, поэтому бот должен быть админом: в профиле канала — «Добавить админа», найти по @имени, или «Сделать админом», если бот уже в канале. Это могут владелец канала и админы с правом «Назначать админов». Из канала бот не получает сообщений — он только публикует.

Авторизация

Каждый запрос несёт токен бота в заголовке:

Authorization: Bearer marx_pat_...

Нет заголовка, токен не того вида, отозван или неизвестен — 401:

curl https://api.bot.marx.moscow/api/bot/v1/me \
  -H "Authorization: Bearer marx_pat_not_a_real_token"
{"detail": "invalid api token"}

Ошибки

Ответ с кодом 2xx — успех. Остальные коды несут JSON с полем detail.

КодТелоКогда
400, 401, 403, 404, 409{"detail": "текст"}Запрос понятен, но выполнить его нельзя; текст — на английском, причина для программы и для журнала
422{"detail": [ … ]}Тело не того вида: нет поля, не тот тип, слишком длинная строка. Каждый элемент — одно поле: type, loc (где), msg, input
429{"detail", "code", "retry_after"}Превышен предел частоты
503{"detail", "code", "retry_after"}Сервер занят; повторите через retry_after секунд
500, 502—Ошибка сервера; повторите позже
curl https://api.bot.marx.moscow/api/bot/v1/messages \
  -H "Authorization: Bearer $MARX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body": "нет chat_id"}'
{"detail": [{"type": "missing", "loc": ["body", "chat_id"], "msg": "Field required", "input": {"body": "нет chat_id"}}]}

429 и retry_after

При превышении предела ответ — 429, в code — имя предела из таблицы ниже, в retry_after и в заголовке Retry-After — через сколько секунд можно повторить. Тот же вид у 503 с code db_busy.

{"detail": "rate limit exceeded", "code": "bot.message.send", "retry_after": 17}

Подождите retry_after секунд и повторите запрос. Для POST /messages передавайте client_id: повтор с тем же client_id не создаст второе сообщение.

Пределы частоты

Пределы считаются на токен, кроме создания бота и смены токена — они на человека, владельца ботов. Окно — отрезок времени фиксированной длины от начала минуты, часа или суток по часам сервера, а не от первого запроса: счёт обнуляется на его границе.

ДействиеcodeПредел
POST /messagesbot.message.send60 в минуту
POST /media, число файловbot.media.upload120 в час
POST /media, объёмbot.media.bytes800 МБ в сутки
POST /reactionsbot.reaction.add120 в минуту
GET /updatesbot.updates120 в минуту
POST /webhook, DELETE /webhookbot.webhook10 в час
PUT /commands, DELETE /commandsbot.commands30 за 10 минут
Создать бота у @marxbotbot.create5 в сутки
Новый токен у @marxbotbot.token10 в час

Длинный опрос с timeout=30 — два запроса в минуту, далеко от предела bot.updates.