Xipher Bot API

Мощный API для создания ботов с 50,000+ функциями. Создавайте ботов для автоматизации, игр, платежей и многого другого.

Быстрый старт

Начните создавать ботов за несколько минут. Все запросы к API выполняются через HTTPS.

1. Создайте бота

Перейдите на страницу /bots и создайте нового бота. Вы получите токен для доступа к API. Токен можно посмотреть, нажав кнопку "Показать токен" (потребуется ввести пароль от аккаунта).

2. Базовый запрос

Все запросы к API имеют следующий формат:

URL
https://messenger.xipher.pro/bot<token>/METHOD_NAME
https://messenger.xipher.pro/api/bot/<token>/METHOD_NAME

Важно: Токен вставляется без символов < и >. Например, если токен abc123, то URL будет: https://messenger.xipher.pro/botabc123/getMe. Обе формы пути равнозначны: Telegram-стиль /bot<token>/… и алиас в конвенции нашего API /api/bot/<token>/…. Готовые SDK: xipher_bot.py (Python, без зависимостей) и xipher-bot-sdk.js (JS/Node 18+).

3. Пример на Python

Python
import requests

TOKEN = "YOUR_BOT_TOKEN"  # Получите токен на странице /bots
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

# Получить информацию о боте
response = requests.get(f"{BASE_URL}/getMe")
bot_info = response.json()
print(bot_info)

# Отправить сообщение
# chat_id - это user_id получателя (UUID строка)
response = requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": "user-uuid-here",  # UUID пользователя
    "text": "Привет! 👋"
})
print(response.json())

4. Реализованные методы

Следующие методы Bot API полностью реализованы и готовы к использованию:

  • getMe - получить информацию о боте
  • getUpdates - получить обновления (Long Polling)
  • setWebhook - установить webhook
  • deleteWebhook - удалить webhook
  • getWebhookInfo - получить информацию о webhook
  • sendMessage - отправить текстовое сообщение
  • editMessageText - редактировать сообщение
  • deleteMessage - удалить сообщение
  • forwardMessage - переслать сообщение
  • copyMessage - скопировать сообщение
  • sendPhoto - отправить фото
  • sendAudio - отправить аудио
  • sendVideo - отправить видео
  • sendDocument - отправить документ
  • sendVoice - отправить голосовое сообщение
  • verifyInitData - проверить подпись initData Mini App
  • answerCallbackQuery - ответ на нажатие inline-кнопки
  • getFile - метаданные файла по file_id
  • sendInvoice / createInvoiceLink / answerPreCheckoutQuery - приём платежей звёздами (XTR)
  • setChatTitle / pinMessage / banChatMember / promoteChatMember - управление группами
  • createNewStickerSet - создать набор стикеров бота

Сообщения от пользователей приходят боту в getUpdates и на webhook автоматически — когда пользователь пишет боту в личку. Сообщения бота доставляются получателю мгновенно: WebSocket + push, если он офлайн.

Аутентификация

Все запросы к API требуют токен бота в URL. Токен выдается при создании бота на странице /bots. Для просмотра токена нажмите кнопку "Показать токен" и введите пароль от аккаунта.

GET getMe

Проверяет токен бота и возвращает основную информацию о боте.

Пример запроса
curl https://api.xipher.pro/bot<token>/getMe
Ответ
{
  "ok": true,
  "result": {
    "id": "bot-user-uuid",
    "is_bot": true,
    "first_name": "My Bot",
    "username": "mybot",
    "can_join_groups": false,
    "can_read_all_group_messages": false
  }
}

Клавиатуры (Inline + Reply)

Inline keyboard добавляет кнопки под сообщением, а Reply keyboard показывает нижние кнопки в чате (как в Telegram).

INFO Формат reply_markup

Параметр reply_markup используется в методах sendMessage, sendPhoto и других для добавления кнопок.

Структура inline_keyboard
{
  "inline_keyboard": [
    [
      {"text": "Кнопка 1", "callback_data": "button1"},
      {"text": "Кнопка 2", "callback_data": "button2"}
    ],
    [
      {"text": "Открыть сайт", "url": "https://example.com"}
    ]
  ]
}

Параметры кнопки

text
Текст на кнопке
String, обязательный
callback_data
Данные, которые будут отправлены боту при нажатии (до 64 байт)
String, опциональный
url
URL для открытия при нажатии (вместо callback_data)
String, опциональный
Пример использования
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

# Создать клавиатуру с кнопками
keyboard = {
    "inline_keyboard": [
        [
            {"text": "✅ Да", "callback_data": "yes"},
            {"text": "❌ Нет", "callback_data": "no"}
        ],
        [
            {"text": "📖 Документация", "url": "https://messenger.xipher.pro/api"}
        ]
    ]
}

# Отправить сообщение с кнопками
response = requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": "USER_UUID",
    "text": "Хотите продолжить?",
    "reply_markup": keyboard
})
INFO Reply Keyboard (нижние кнопки)

Reply keyboard отображается внизу чата и отправляет текст кнопки как сообщение пользователя.

Структура keyboard
{
  "keyboard": [
    [{"text": "Ответить пользователю"}],
    [{"text": "История"}, {"text": "Открыть чат"}]
  ],
  "resize_keyboard": true,
  "one_time_keyboard": false,
  "input_field_placeholder": "Выберите действие"
}

Параметры

keyboard
Массив рядов кнопок (каждый ряд — массив кнопок)
Array, обязательный
resize_keyboard
Уменьшает высоту кнопок
Boolean, опциональный
one_time_keyboard
Скрывает клавиатуру после нажатия
Boolean, опциональный
input_field_placeholder
Плейсхолдер в поле ввода
String, опциональный
remove_keyboard
Убирает активную клавиатуру
Boolean, опциональный
Пример использования
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

keyboard = {
    "keyboard": [
        [{"text": "Ответить пользователю"}],
        [{"text": "История"}, {"text": "Открыть чат"}]
    ],
    "resize_keyboard": True,
    "one_time_keyboard": False
}

requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": "USER_UUID",
    "text": "Новый вопрос поддержки",
    "reply_markup": keyboard
})

Получение обновлений

Есть два способа получения обновлений: Long Polling (getUpdates) и Webhooks.

GET getUpdates

Получает обновления через Long Polling. Используется для получения новых сообщений, callback query и других событий.

Параметры

offset
Идентификатор первого обновления для возврата
Integer, опциональный
limit
Количество обновлений для получения (1-100)
Integer, опциональный, по умолчанию 100
timeout
Таймаут в секундах для Long Polling
Integer, опциональный, по умолчанию 0
автоподтверждение
Выданные апдейты подтверждаются сервером автоматически — offset хранить не нужно
Свойство платформы
Python
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

# Получить обновления
response = requests.get(f"{BASE_URL}/getUpdates?offset=0&limit=100&timeout=30")
updates = response.json()
print(updates)

Работа с сообщениями

Отправка, редактирование и управление сообщениями в чатах.

POST sendMessage

Отправляет текстовое сообщение в указанный чат.

Параметры

chat_id
Уникальный идентификатор чата (UUID пользователя в формате строки)
String (UUID), обязательный
Примечание: В Xipher используется UUID формат для идентификаторов пользователей, а не числовые ID. Как и в Telegram, бот не может написать первым: получатель должен написать боту хотя бы раз — иначе метод вернёт 403 Forbidden.
text
Текст сообщения (до 4096 символов)
String, обязательный
parse_mode
Форматирование: "HTML" (b/i/u/s/code/pre/blockquote) или "MarkdownV2" конвертируются в разметку Xipher (**жирный**, *курсив*, __подчёркнутый__, ~~зачёркнутый~~, `код`, ||спойлер||, цитаты) и рендерятся у получателя. "None" — как есть
String, опциональный
reply_to_message_id
ID сообщения, на которое отвечаем
Integer, опциональный
reply_markup
Inline keyboard под сообщением или Reply keyboard (нижние кнопки)
Object, опциональный
Формат: {"inline_keyboard": [[{"text": "Кнопка", "callback_data": "data"}]]}
Reply keyboard: {"keyboard": [[{"text": "Кнопка"}]], "resize_keyboard": true}
См. раздел Клавиатуры для подробностей.
Python
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

response = requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": "user-uuid-here",  # UUID пользователя (строка)
    "text": "Привет! Это мой первый бот 🤖",
    "parse_mode": "HTML"
})

print(response.json())
Пример с кнопками
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

# Отправить сообщение с inline кнопками
response = requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": "user-uuid-here",
    "text": "Выберите действие:",
    "reply_markup": {
        "inline_keyboard": [
            [
                {"text": "✅ Принять", "callback_data": "accept"},
                {"text": "❌ Отклонить", "callback_data": "reject"}
            ],
            [
                {"text": "🌐 Открыть сайт", "url": "https://xipher.pro"}
            ]
        ]
    }
})

print(response.json())
POST editMessageText

Редактирует текст отправленного сообщения.

Параметры

chat_id
ID чата, где находится сообщение
Integer или String, обязательный
message_id
ID сообщения для редактирования
Integer, обязательный
text
Новый текст сообщения
String, обязательный
POST deleteMessage

Удаляет сообщение из чата.

Параметры

chat_id
ID чата
Integer или String, обязательный
message_id
ID сообщения для удаления
Integer, обязательный
POST forwardMessage

Пересылает сообщение из одного чата в другой. Сохраняет информацию об исходном отправителе.

Параметры

chat_id
ID чата, куда пересылать
Integer или String, обязательный
from_chat_id
ID чата, откуда пересылать
Integer или String, обязательный
message_id
ID сообщения для пересылки
Integer, обязательный
POST copyMessage

Копирует сообщение из одного чата в другой. Не сохраняет информацию об исходном отправителе.

Параметры

chat_id
ID чата, куда копировать
Integer или String, обязательный
from_chat_id
ID чата, откуда копировать
Integer или String, обязательный
message_id
ID сообщения для копирования
Integer, обязательный

Медиа и файлы

Отправка фотографий, видео, аудио, документов и других медиафайлов.

POST sendPhoto

Отправляет фотографию в чат. Поддерживаются файлы до 10 ГБ.

Параметры

chat_id
ID чата
Integer или String, обязательный
photo
Файл платформы: file_id (/files/..., доступный боту) или multipart/form-data с файлом (до 10 ГБ). URL не принимается
InputFile или String, обязательный
caption
Подпись к фотографии (до 1024 символов)
String, опциональный
POST sendAudio

Отправляет аудиофайл в чат.

Параметры

chat_id
ID чата
Integer или String, обязательный
audio
Файл платформы: file_id (/files/..., доступный боту) или multipart/form-data с файлом. URL не принимается
InputFile или String, обязательный
caption
Подпись к аудио (до 1024 символов)
String, опциональный
POST sendDocument

Отправляет документ любого формата (до 10 ГБ).

POST sendVideo

Отправляет видеофайл.

POST sendVoice

Отправляет голосовое сообщение (OGG Opus).

Клавиатуры и кнопки

Inline и Reply клавиатуры для взаимодействия с пользователями (кнопки под сообщением и нижние кнопки).

POST InlineKeyboardMarkup

Создает кнопки под сообщением. Кнопки могут открывать URL, отправлять callback или запускать Mini Apps.

Пример
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

keyboard = {
    "inline_keyboard": [
        [
            {"text": "Кнопка 1", "callback_data": "button1"},
            {"text": "Кнопка 2", "callback_data": "button2"}
        ],
        [
            {"text": "Открыть сайт", "url": "https://example.com"}
        ]
    ]
}

requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": 123456789,
    "text": "Выберите действие:",
    "reply_markup": keyboard
})
POST ReplyKeyboardMarkup

Нижняя клавиатура (как в Telegram). Нажатие отправляет текст кнопки.

Пример
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

keyboard = {
    "keyboard": [
        [{"text": "Ответить пользователю"}],
        [{"text": "История"}, {"text": "Открыть чат"}]
    ],
    "resize_keyboard": True
}

requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": 123456789,
    "text": "Новый вопрос поддержки",
    "reply_markup": keyboard
})
POST answerCallbackQuery

Отвечает на нажатие inline-кнопки. Может показать уведомление или открыть URL.

Администрирование

Управление группами: бот действует через права своего владельца.

Права проверяются по владельцу бота: бот может управлять группой, только если владелец — админ этой группы с нужным правом (смена названия, закрепление, ограничение, назначение админов). Владельца группы нельзя забанить и нельзя повысить.

POST banChatMember

Исключает участника из группы (нужно право владельца на ограничения).

Параметры

chat_id
ID группы
String, обязательный
user_id
ID исключаемого участника
String, обязательный
POST promoteChatMember

Назначает участника администратором (нужно право владельца на назначение).

Параметры

chat_id
ID группы
String, обязательный
user_id
ID участника
String, обязательный
can_change_info, can_post_messages, can_edit_messages, can_delete_messages, can_invite_users, can_restrict_members, can_pin_messages, can_promote_members
Выдаваемые права (битовая модель платформы)
Boolean, опциональные
POST setChatTitle

Изменяет название группы (нужно право владельца на изменение информации). До 128 символов.

Параметры

chat_id
ID группы
String, обязательный
title
Новое название
String, обязательный
POST pinMessage

Закрепляет сообщение в группе (нужно право владельца на закрепление; сообщение должно принадлежать группе).

Параметры

chat_id
ID группы
String, обязательный
message_id
ID сообщения
String, обязательный

Платежи (звёзды XTR)

Приём платежей звёздами Xipher: деньги реально переводятся со счёта пользователя на счёт бота через книгу операций платформы. Фиатные валюты (USDT/TON/BTC/RUB) для ботов пока не подключены — принимается только currency: "XTR".

Как идёт оплата: бот вызывает sendInvoice → в чате появляется карточка счёта → пользователь жмёт «Оплатить» → боту уходит апдейт pre_checkout_query → бот отвечает answerPreCheckoutQuery (у клиента 10 секунд на получение вердикта, оплата без подтверждения бота сервер отклоняет) → звёзды переводятся → боту уходит апдейт successful_payment. Как и в Telegram, бот может отклонить платёж с сообщением об ошибке.

POST sendInvoice

Отправляет счет на оплату в чат.

Параметры

chat_id
ID чата
Integer или String, обязательный
title
Название товара
String, обязательный
description
Описание товара (до 255 символов)
String, обязательный
payload
Метаданные платежа — вернутся боту в pre_checkout_query и successful_payment (до 128 байт)
String, обязательный
currency
Валюта: "XTR" (звёзды Xipher)
String, обязательный
prices
Массив цен, суммируется поле amount. Итог: от 1 до 1 000 000 звёзд
Array of LabeledPrice, обязательный
POST createInvoiceLink

Создает ссылку на оплату для использования в кнопках или вне мессенджера.

POST answerPreCheckoutQuery

Подтверждает или отклоняет запрос на оплату перед списанием средств.

Работа с файлами

Метаданные файлов и наборы стикеров бота.

GET getFile

Метаданные файла по file_id. Бот видит только файлы, которые сам отправил или получил; file_id — это путь вида /files/<имя>. Файл доступен по ссылке https://messenger.xipher.pro<file_path>.

Параметры

file_id
Путь файла платформы
String, обязательный
POST createNewStickerSet

Создаёт набор стикеров бота. Стикеры — файлы платформы: file_id доступных боту файлов или multipart-загрузка (поля-файлы с именами sticker0, sticker1, …). Лимит — 120 стикеров в наборе.

Параметры

name
Имя набора (до 64)
String, обязательный
title
Заголовок набора (до 64)
String, обязательный
stickers
Массив {"file_id": "/files/..."}
Array, обязательный

Webhooks

Настройка webhooks для получения обновлений в реальном времени.

POST setWebhook

Устанавливает URL для получения обновлений через webhook.

Параметры

url
HTTPS URL (порты 443/8443), который резолвится в публичный IP — внутренние адреса сервер отклоняет
String, обязательный
secret_token
Секретный токен: при каждой доставке уходит заголовком X-Telegram-Bot-Api-Secret-Token — сверяйте его на своём сервере
String, опциональный
allowed_updates
Массив типов обновлений для получения
Array of String, опциональный
Пример
import requests

TOKEN = "YOUR_BOT_TOKEN"
BASE_URL = f"https://messenger.xipher.pro/api/bot/{TOKEN}"

requests.post(f"{BASE_URL}/setWebhook", json={
    "url": "https://yourdomain.com/webhook",
    "secret_token": "your_secret_token",
    "allowed_updates": ["message", "callback_query"]
})
GET getWebhookInfo

Получает информацию о текущем webhook.

POST deleteWebhook

Удаляет webhook и переключает бота на Long Polling.

Кнопки и callback

Inline-кнопки с callback_data: нажатие пользователя доставляется боту.

POST callback_query

Пользователь нажал inline-кнопку → сервер кладёт боту апдейт callback_query (поля id, from, message, data) в getUpdates и на webhook. Апдейт подтверждается автоматически, как и остальные.

POST answerCallbackQuery

Ответ бота на нажатие: текст показывается нажавшему (тост, а с show_alert — уведомление на 10 секунд), url открывается в новой вкладке. Каждый callback_query_id принимается один раз.

Параметры

callback_query_id
ID из апдейта callback_query
String, обязательный
text
Текст уведомления (до 200)
String, опциональный
show_alert
Показать как уведомление вместо тоста
Boolean, опциональный
url
http(s)-ссылка для открытия
String, опциональный

Mini Apps

Веб-приложения ботов, открывающиеся внутри мессенджера с подписанным контекстом пользователя.

POST sendMessage + web_app кнопка

Приложение открывается по кнопке в сообщении бота — прямо в чате, в защищённом контейнере.

Пример
requests.post(f"{BASE_URL}/sendMessage", json={
    "chat_id": "user-uuid-here",
    "text": "Открой наш магазин:",
    "reply_markup": {"inline_keyboard": [[
        {"text": "Открыть магазин", "web_app": {"url": "https://bot.example.com/shop"}}
    ]]}
})
initData Контекст пользователя

При открытии Xipher передаёт приложению параметр ?init_data=… — подписанный HMAC-SHA256(токен_бота) контекст: user_id=…&username=…&bot_user_id=…&auth_date=…&signature=…

POST verifyInitData

Проверка подписи initData (на бэкенде бота или прямо из приложения): ключи до 24 часов, подпись обязательна. Ответ — пользователь и auth_date.

requests.post(f"{BASE_URL}/verifyInitData", json={
    "init_data": init_data_from_url
}).json()
# {"ok": true, "result": {"user": {"id": "...", "username": "..."}, "auth_date": ...}}
POST /api/bot-miniapp-init

Служебный эндпоинт клиента: отдаёт подписанный initData для открытия приложения бота (параметры: bot_user_id или bot_username; авторизация сессией пользователя).

Bot Builder (No-Code)

Визуальный редактор для создания ботов без написания кода.

POST saveBotFlow

Сохраняет сценарий бота, созданный в визуальном редакторе.

Пример JSON схемы
{
  "nodes": [
    {
      "id": 1,
      "type": "trigger_text",
      "data": {"match": "/start"}
    },
    {
      "id": 2,
      "type": "send_message",
      "data": {"text": "Привет! 👋"}
    },
    {
      "id": 3,
      "type": "send_buttons",
      "data": {
        "buttons": [
          {"text": "Кнопка 1", "callback": "action1"},
          {"text": "Кнопка 2", "callback": "action2"}
        ]
      }
    }
  ],
  "edges": [
    {"from": 1, "to": 2},
    {"from": 2, "to": 3}
  ]
}