Базовый URL
https://forevormess.com/bot-api/{TOKEN}/{method}
{TOKEN} это секрет вида bot + 32 hex-символа.
Методы с телом: POST, JSON, заголовок Content-Type: application/json.
getUpdates можно вызывать GET или POST.
Токен
Сгенерируйте токен сами и храните как пароль. Первый успешный getMe регистрирует бота.
TOKEN="bot$(openssl rand -hex 16)"
echo "$TOKEN"
Формат ответа
{ "ok": true, "result": ... }
{ "ok": false, "description": "текст ошибки" }
chat_id и большие id лучше передавать строкой, чтобы не терять точность.
Быстрый старт
TOKEN="botYOUR_HEX_HERE"
BASE="https://forevormess.com/bot-api/${TOKEN}"
# 1. Регистрация и проверка
curl -sS -X POST "$BASE/getMe"
# 2. Username и имя в профиле
curl -sS -X POST "$BASE/setMyUsername" \
-H "Content-Type: application/json" \
-d '{"username":"my_bot"}'
curl -sS -X POST "$BASE/setMyName" \
-H "Content-Type: application/json" \
-d '{"first_name":"My Bot"}'
# 3. Long polling
curl -sS "$BASE/getUpdates?timeout=25&offset=0"
# 4. Ответ пользователю
curl -sS -X POST "$BASE/sendMessage" \
-H "Content-Type: application/json" \
-d '{"chat_id":"1234567890123456","text":"Привет!"}'
Методы
getMe
Проверка токена. Создаёт аккаунт бота при первом вызове.
POST /getMe
GET /getMe
setMyUsername
Уникальный @username бота (латиница, цифры, подчёркивание).
{ "username": "my_bot" }
setMyName
{ "first_name": "Имя в профиле" }
setMyDescription
{ "description": "Текст bio бота" }
setMyPhoto
Data URL (data:image/...) или URL картинки на forevormess.com.
{ "photo": "data:image/png;base64,..." }
sendMessage
{
"chat_id": "1234567890123456",
"text": "Текст сообщения",
"reply_markup": { ... }
}
setChatKeyboard
Reply-клавиатура под полем ввода (бар кнопок).
{
"chat_id": "1234567890123456",
"reply_markup": {
"keyboard": [[{"text": "Помощь"}, {"text": "Меню"}]]
}
}
getChat
{ "chat_id": "1234567890123456" }
getChatMembers
{ "chat_id": "1234567890123456" }
deleteMessage
{
"chat_id": "1234567890123456",
"message_id": "9876543210987654"
}
banChatMember
{
"chat_id": "1234567890123456",
"user_id": "1112223334445556",
"reason": "спам",
"until_unix": 0
}
muteChatMember / restrictChatMember
Мут участника группы/канала. Бот должен быть админом с правом мута. Нужен срок.
{
"chat_id": "1234567890123456",
"user_id": "1112223334445556",
"until_unix": 1735689600
}
{
"chat_id": "1234567890123456",
"user_id": "1112223334445556",
"duration_seconds": 600
}
unmuteChatMember
{
"chat_id": "1234567890123456",
"user_id": "1112223334445556"
}
getUserData / setUserData
Произвольный JSON на пользователя (хранилище бота).
GET user: { "user_id": "1112223334445556" }
SET user: { "user_id": "1112223334445556", "data": { "step": 2 } }
getUpdates
Long polling. После каждого апдейта увеличивайте offset на 1.
GET /getUpdates?timeout=25&offset=0
POST { "timeout": 25, "offset": 0 }
Кнопки (reply_markup)
keyboard кнопки под чатом (бар). Отправляются текстом при нажатии.
"reply_markup": {
"keyboard": [
[{"text": "Помощь"}, {"text": "О боте"}],
[{"text": "Меню"}]
]
}
inline_keyboard кнопки под конкретным сообщением бота.
"reply_markup": {
"inline_keyboard": [
[{"text": "OK", "callback_data": "ok"}],
[{"text": "Сайт", "url": "https://forevormess.com"}]
]
}
Типы кнопок: text, callback_data, url, username, chat_username.
Апдейты
В getUpdates приходят объекты:
messageтекст от пользователя (message.text,message.chat.id)callback_queryнажатие inline-кнопки (data, chat изmessage.chat)
while True:
updates = get_updates(offset)
for u in updates:
offset = u["update_id"] + 1
if "message" in u:
handle_message(u["message"])
if "callback_query" in u:
handle_callback(u["callback_query"])
Бот отвечает пользователям после команды «старт» / «start» (логика на вашей стороне).