Bot API
Справочник методов
Открыть Shalter

Bot API — справочник

Все методы доступны по адресу /api/bot-api/ с заголовком Authorization: Bearer <token>. Ответы в JSON.

Авторизация

Authorization: Bearer <token>

Без заголовка — 401 Missing Authorization. С неверным токеном — 401 Invalid bot token. Боты не используют куки: аутентификация только по токену.

Получение обновлений (long-polling)

GET /api/bot-api/updates
ПараметрТипОписание
afterстрока, ISO 8601Время последнего разобранного сообщения.
timeoutчисло, секунды (0–50)Длинный опрос: сервер держит запрос до первого сообщения.
limitчисло (1–200)Максимум сообщений за один запрос.

Следующее значение after — это messages.at(-1).createdAt. Без timeout запрос возвращает пустоту сразу — используйте long-polling для мгновенных ответов.

Все методы

Сообщения
POST /sendMessageОтправить текстовое сообщение с клавиатурой
POST /sendMessageToUserНаписать первым пользователю по @юзернейму или userId
POST /sendPhotoОтправить изображение по ссылке
POST /sendDocumentОтправить файл по ссылке
POST /sendVideoОтправить видео по ссылке
POST /sendVoiceОтправить голосовое
POST /sendVideoNoteОтправить круглое видео (видеосообщение)
POST /sendStickerОтправить стикер
POST /sendPollСоздать опрос
POST /sendLocationОтправить точку на карте
POST /sendContactОтправить контакт
POST /sendMediaGroupАльбом до 10 файлов
POST /forwardMessageПереслать сообщение
POST /copyMessageКопировать содержимое сообщения без отметки «переслано»
Редактирование и удаление
POST /editMessageTextИзменить текст своего сообщения
POST /editMessageKeyboardЗаменить клавиатуру под своим сообщением
POST /deleteMessageУдалить своё сообщение
POST /sendReactionПоставить или снять реакцию
Чаты
GET /getChatsВсе чаты бота
GET /getChatОдин чат подробно с участниками
POST /createGroupСоздать группу
POST /createChannelСоздать канал
POST /setChatDiscussionПривязка обсуждения к каналу
GET /getChatDiscussionПроверить привязанное обсуждение
POST /exportChatInviteLinkСсылка-приглашение в чат
POST /leaveChatВыйти из чата
Участники
GET /getChatAdminsВладелец и администраторы
GET /getChatMemberУчастник с правами
GET /getChatMemberCountКоличество участников
POST /addChatMemberДобавить участника
POST /promoteChatMemberНазначить/снять администратора
POST /restrictChatMemberОграничить участника на N минут
POST /banChatMemberЗабанить участника
POST /unbanChatMemberРазбанить участника
POST /deleteAnyMessageУдалить чужое сообщение (только админ)
Люди и каналы
GET /getUserДанные пользователя
GET /getUserStatusОнлайн и последний вход
GET /getCommonChatsОбщие чаты с пользователем
GET /resolveUsernameНайти пользователя или канал по @юзернейму
POST /publishPostОпубликовать пост в канале
GET /getChannelStatsПодписчики, просмотры, комментарии
История и поиск
GET /getMessagesСтраница сообщений чата
GET /searchMessagesПоиск по истории чата
GET /getMessageОдно сообщение по ID
GET /getPinnedMessagesЗакреплённые сообщения
Профиль бота и настройки
GET /meКто это и какой апп
POST /setMyProfileИмя и описание бота
POST /setMyAvatarАватар бота
POST /setMyCommandsКоманды бота
GET /getMyCommandsСписок команд
GET /getMyStatsСтатистика бота
Мини-приложения и игры
POST /sendGameКарточка игры в чате
POST /setWebAppВеб-страница бота

sendMessage

POST /api/bot-api/sendMessage
ПолеТипОписание
chatIdстрока, обязательноКуда писать — из msg.chatId входящего.
textстрока, обязательноТекст сообщения (до 4096 символов).
replyToIdстрокаОтветить на конкретное сообщение.
keyboardмассив рядовКнопки под сообщением.

sendMessageToUser

POST /api/bot-api/sendMessageToUser

Написать первым пользователю. Требует username или userId, text и опциональную keyboard. Ограничение: 20 новых диалогов в час (429).

sendPhoto

POST /api/bot-api/sendPhoto

Файл передаётся ссылкой (url) или data:-строкой. Поля: chatId, url, caption, replyToId.

sendDocument

POST /api/bot-api/sendDocument

Файл по ссылке (url). Поля: chatId, url, name, caption, replyToId.

sendVideo

POST /api/bot-api/sendVideo

Аналогично sendPhoto для видео. Поля: chatId, url, caption, replyToId.

sendVoice

POST /api/bot-api/sendVoice

Голосовое сообщение по ссылке (url). Дополнительно durationSec. Поля: chatId, url, caption, replyToId, durationSec.

sendVideoNote

POST /api/bot-api/sendVideoNote

Круглое видеосообщение. Поля: chatId, url, caption, replyToId, durationSec.

sendSticker

POST /api/bot-api/sendSticker

Стикер по эмодзи. Поля: chatId (обязательно), emoji (обязательно), name, scene, replyToId.

sendPoll

POST /api/bot-api/sendPoll

Опрос с 2–8 вариантами. Поля: chatId, question, options (массив строк), replyToId.

sendLocation

POST /api/bot-api/sendLocation

Точка на карте. Поля: chatId, lat, lng, caption, replyToId.

sendContact

POST /api/bot-api/sendContact

Контакт. Поля: chatId, name, phone, userId, replyToId.

sendMediaGroup

POST /api/bot-api/sendMediaGroup

Альбом до 10 файлов одним сообщением. items — массив { kind, url, name }. Виды: image, video, file, voice, video-note.

editMessageText

POST /api/bot-api/editMessageText

Редактировать своё сообщение. Поля: messageId, text. Чужие сообщения не редактируются (403).

deleteMessage

POST /api/bot-api/deleteMessage

Удалить своё сообщение по messageId. Только свои (403).

sendReaction

POST /api/bot-api/sendReaction

Поставить/снять реакцию. Поля: messageId, emoji. Повторный вызов с тем же эмодзи снимает реакцию.

editMessageKeyboard

POST /api/bot-api/editMessageKeyboard

Заменить клавиатуру под своим сообщением. Поля: messageId, keyboard.

forwardMessage

POST /api/bot-api/forwardMessage

Переслать сообщение. Поля: messageId, toChatId. Оба чата должны быть чатами бота.

copyMessage

POST /api/bot-api/copyMessage

Отправить содержимое сообщения без отметки «переслано». Поля: chatId, messageId.

sendChatAction

POST /api/bot-api/sendChatAction

Показать статус «печатает» или загрузки. Поля: chatId, необязательный action (typing, upload_photo, record_video, upload_video, record_voice, upload_voice, upload_document, record_video_note, upload_video_note). Живёт 5 секунд.

sendGame

POST /api/bot-api/sendGame

Карточка игры в чате. Поля: chatId, gameId.

getChats

GET /api/bot-api/getChats

Все чаты, где состоит бот: id, тип, название, юзернейм, число участников, флаг админа.

getChat

GET /api/bot-api/getChat?chatId=…

Один чат с полным списком участников.

createGroup

POST /api/bot-api/createGroup

Создать группу. Поля: title (обязательно), memberIds — массив userId (только знакомые).

createChannel

POST /api/bot-api/createChannel

Создать канал. Поля: title (обязательно), description, username, isPublic.

setChatDiscussion

POST /api/bot-api/setChatDiscussion

Привязать обсуждение к каналу. action: create, link (с groupId), unlink.

getChatDiscussion

GET /api/bot-api/getChatDiscussion?channelId=…

Проверить, что сейчас привязано к каналу.

getChatAdmins

GET /api/bot-api/getChatAdmins?chatId=…

Владелец и администраторы чата.

getChatMember

GET /api/bot-api/getChatMember?chatId=…&userId=…

Данные участника, его права и срок ограничения.

getChatMemberCount

GET /api/bot-api/getChatMemberCount?chatId=…

Количество участников в чате.

addChatMember

POST /api/bot-api/addChatMember

Добавить участника (только админ). Поля: chatId, userId.

promoteChatMember

POST /api/bot-api/promoteChatMember

Назначить/снять админа (только владелец). Поля: chatId, userId, admin (true/false).

restrictChatMember

POST /api/bot-api/restrictChatMember

Временное молчание (только админ). Поля: chatId, userId, minutes (до 30 дней).

banChatMember

POST /api/bot-api/banChatMember

Забанить участника (только админ). Владельца и админов забанить нельзя (400).

unbanChatMember

POST /api/bot-api/unbanChatMember

Разбанить участника (только админ). Поля: chatId, userId.

deleteAnyMessage

POST /api/bot-api/deleteAnyMessage

Удалить чужое сообщение (только админ). Поля: chatId, messageId.

POST /api/bot-api/exportChatInviteLink

Ссылка-приглашение в чат (только админ). Поля: chatId, revoke (true — выпустить новую).

leaveChat

POST /api/bot-api/leaveChat

Выйти из чата. Поле: chatId.

setChatPermissions

POST /api/bot-api/setChatPermissions

Настройка прав чата (только админ). Поле permissions — объект с правилами.

setChatTitle

POST /api/bot-api/setChatTitle

Переименовать чат (только админ). Поля: chatId, title.

setChatDescription

POST /api/bot-api/setChatDescription

Описание канала или группы (только админ). Поля: chatId, description.

getUser

GET /api/bot-api/getUser?userId=…

Данные пользователя: имя, юзернейм, аватар. Email не отдаётся.

getUserStatus

GET /api/bot-api/getUserStatus?userId=…

Онлайн и время последнего посещения.

getCommonChats

GET /api/bot-api/getCommonChats?userId=…

Чаты, где состоят одновременно бот и пользователь.

resolveUsername

GET /api/bot-api/resolveUsername?username=@handle

Найти пользователя, канал или группу по юзернейму. Возвращает kind, user или chat.

me

GET /api/bot-api/me

Аккаунт бота: имя, юзернейм, аватар, мини-приложение.

setMyProfile

POST /api/bot-api/setMyProfile

Изменить имя и описание бота. Поля: name, description.

setMyAvatar

POST /api/bot-api/setMyAvatar

Установить аватар бота. Поле image — URL или data:-строка.

setMyCommands

POST /api/bot-api/setMyCommands

Установить команды бота. Поле commands — массив { command, description }. До 50 команд.

getMyCommands

GET /api/bot-api/getMyCommands

Список установленных команд бота.

getMyStats

GET /api/bot-api/getMyStats

Статистика: число чатов, отправленных сообщений, уникальных собеседников.

setWebApp

POST /api/bot-api/setWebApp

Настроить мини-приложение бота. Поля: url, name.

setWebAppCode

POST /api/bot-api/setWebAppCode

Хостинг кода мини-приложения на сервере Shalter. Поле code (до 200 000 символов), name.

checkWebAppData

POST /api/bot-api/checkWebAppData

Проверить initData мини-приложения. Поле initData.

publishPost

POST /api/bot-api/publishPost

Опубликовать пост в канале (только админ). Поля: chatId, text, url.

getChannelStats

GET /api/bot-api/getChannelStats?chatId=…

Подписчики, посты, просмотры, комментарии канала (только админ).

getMessages

GET /api/bot-api/getMessages?chatId=…&limit=60&before=…

Страница сообщений чата. Свежие в конце. before — идентификатор сообщения для пагинации.

searchMessages

GET /api/bot-api/searchMessages?chatId=…&q=…

Поиск по истории чата. До 50 последних совпадений.

getMessage

GET /api/bot-api/getMessage?messageId=…

Одно сообщение по ID.

getPinnedMessages

GET /api/bot-api/getPinnedMessages?chatId=…

Все закреплённые сообщения в чате.

pinChatMessage

POST /api/bot-api/pinChatMessage

Закрепить сообщение. Поля: messageId, pinned (true по умолчанию).

scheduleMessage

POST /api/bot-api/scheduleMessage

Отложенная отправка. Поля: chatId, text, sendAt (ISO 8601, будущее время).

getScheduled

GET /api/bot-api/getScheduled?chatId=…

Список отложенных сообщений в чате.

cancelScheduled

POST /api/bot-api/cancelScheduled

Отменить отложенное сообщение по scheduledId.

// Минимальный бот на чистом Node.js (нет зависимостей)
const TOKEN = process.env.SHALTER_TOKEN;
const API = "https://shalter.ru/api/bot-api";
const auth = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };

let after = new Date().toISOString();

async function send(chatId, text) {
  await fetch(`${API}/sendMessage`, {
    method: "POST", headers: auth,
    body: JSON.stringify({ chatId, text }),
  });
}

async function tick() {
  const res = await fetch(`${API}/updates?after=${after}&timeout=30`, { headers: auth });
  const { messages } = await res.json();
  for (const msg of messages) {
    after = msg.createdAt;
    if (msg.text === "/start") await send(msg.chatId, "Привет! Я бот.");
    else await send(msg.chatId, `Вы написали: ${msg.text}`);
  }
}

setInterval(() => tick().catch(console.error), 2000);
Ограничения для новых диалогов. sendMessageToUser: максимум 20 новых разговоров в час (429). Человек может запретить ботам писать первыми в настройках конфиденциальности. По номеру телефона искать нельзя.
Бот может только свои сообщения. editMessageText, deleteMessage, editMessageKeyboard — только над сообщениями, отправленными этим ботом. Чужие вернут 403. Действия администратора (pin, ban, restrict) требуют назначения бота админом владельцем чата.
© Shalter. Bot API открыта для индексации поисковиками и ИИ-моделей.