Telegram — самый популярный способ общения с OpenClaw. В этом руководстве разберём настройку от создания бота до продвинутых сценариев: групповые чаты, inline-режим, отправка файлов.
Создание Telegram-бота
Шаг 1. Откройте BotFather
Найдите @BotFather в Telegram и начните диалог.
Шаг 2. Создайте бота
Отправьте команду /newbot и следуйте инструкциям:
- Придумайте имя бота (например, «Мой ассистент»)
- Придумайте username — уникальный идентификатор, заканчивающийся на
bot(например,my_assistant_bot)
Шаг 3. Получите токен
BotFather пришлёт токен вида:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz
Сохраните его — это ключ доступа к вашему боту.
Шаг 4. Настройте бота (опционально)
Полезные команды BotFather:
| Команда | Что делает |
|---|---|
/setdescription | Описание бота (видно при первом открытии) |
/setabouttext | Текст «О боте» в профиле |
/setuserpic | Аватарка бота |
/setcommands | Меню команд |
Базовая настройка OpenClaw
Добавьте токен в openclaw.json
Источник: конфигурация каналов из официальной документации и страницы Telegram.
// ~/.openclaw/openclaw.json
{
channels: {
telegram: {
enabled: true,
botToken: "123456789:ABCdefGHIjklMNOpqrsTUVwxyz",
dmPolicy: "pairing", // pairing | allowlist | open | disabled
},
},
}
По умолчанию используется режим pairing — неизвестные отправители получают код подтверждения, который нужно одобрить.
Альтернативный способ: через CLI
Если вы используете Docker, канал можно добавить через командную строку:
openclaw-cli channels add --channel telegram --token "<ваш-токен-бота>"
Ограничьте доступ
Для режима allowlist — только указанные пользователи могут общаться с ботом:
{
channels: {
telegram: {
botToken: "YOUR_TOKEN",
dmPolicy: "allowlist",
allowFrom: [
123456789, // Ваш Telegram ID
987654321, // ID друга/коллеги
],
},
},
}
Как узнать свой Telegram ID:
- Напишите боту @userinfobot
- Он пришлёт ваш числовой ID
Запустите агента
openclaw gateway --port 18789
Напишите что-нибудь боту — он должен ответить.
Продвинутые настройки
Примечание: настройки ниже описывают возможности Telegram-интеграции OpenClaw. Полный список полей конфигурации смотрите в официальной документации.
Полная конфигурация
// ~/.openclaw/openclaw.json
{
channels: {
telegram: {
botToken: "YOUR_TOKEN",
// Контроль доступа
allowFrom: [123456789],
allowedGroups: [], // ID групп, где бот может работать
adminUsers: [123456789], // Могут управлять ботом
// Поведение
typingIndicator: true, // Показывать «печатает...»
readReceipts: true, // Отмечать сообщения прочитанными
replyInThread: true, // Отвечать в тредах (если это ответ)
// Обработка сообщений
handleEdits: true, // Реагировать на редактирование
handleForwards: false, // Игнорировать пересланные сообщения
maxMessageLength: 4096, // Разбивать длинные ответы
// Медиа
handlePhotos: true, // Принимать фото
handleDocuments: true, // Принимать файлы
handleVoice: true, // Принимать голосовые (требует whisper)
// Rate limiting
rateLimit: {
messagesPerMinute: 20,
cooldownMessage: "Слишком много сообщений, подождите немного.",
},
},
},
}
Несколько пользователей
{
channels: {
telegram: {
botToken: "YOUR_TOKEN",
allowFrom: [
123456789, // Алексей
234567890, // Мария
345678901, // Иван
],
// Разные права
adminUsers: [
123456789, // Только Алексей — админ
],
},
},
}
Админы могут:
- Перезапускать агента командой
/restart - Очищать память командой
/clear - Смотреть логи командой
/logs
Работа в группах
{
channels: {
telegram: {
botToken: "YOUR_TOKEN",
allowedGroups: [
-1001234567890, // ID группы (начинается с -100)
],
groupSettings: {
trigger: "@", // Реагировать только на упоминание
replyToAll: false, // Не отвечать на все сообщения
mentionRequired: true, // Требовать @username бота
},
},
},
}
Как узнать ID группы:
- Добавьте бота @getidsbot в группу
- Он покажет ID группы
Команды бота
Настройте меню команд через BotFather (/setcommands):
start - Начать диалог
help - Справка
clear - Очистить контекст
status - Статус агента
И обработайте их в SOUL.md:
# Команды
- /start — поприветствуй пользователя и расскажи о своих возможностях
- /help — покажи список доступных команд
- /clear — очисти контекст текущего разговора, подтверди очистку
- /status — покажи свой статус (модель, версия, время работы)
Работа с медиафайлами
Приём фото
{
channels: {
telegram: {
handlePhotos: true,
photoSettings: {
analyze: true, // Анализировать через vision
saveTo: "./media/", // Сохранять локально
maxSizeMb: 10,
},
},
},
}
С включённым analyze: true агент сможет «видеть» и описывать фотографии (требуется модель с vision, например Claude).
Отправка файлов
Агент может отправлять файлы через скилл:
// skills/send-file.js
export const manifest = {
name: "send_file",
description: "Отправляет файл пользователю в Telegram"
};
export async function execute({ path }, context) {
await context.gateway.sendDocument(context.chatId, path);
return { sent: true };
}
Голосовые сообщения
{
channels: {
telegram: {
handleVoice: true,
voiceSettings: {
transcribe: true, // Расшифровывать в текст
provider: "whisper", // whisper | google | azure
language: "ru",
},
},
},
}
Агент получит текст голосового сообщения и сможет ответить.
Webhook vs Polling
Polling (по умолчанию)
Агент периодически спрашивает Telegram: «Есть новые сообщения?»
{
channels: {
telegram: {
mode: "polling",
pollingInterval: 1000, // мс между запросами
},
},
}
Плюсы: работает за NAT, не нужен домен Минусы: небольшая задержка, нагрузка на сеть
Webhook
Telegram сам присылает сообщения на ваш сервер.
{
channels: {
telegram: {
mode: "webhook",
webhookUrl: "https://your-domain.com/telegram/webhook",
webhookPort: 8443,
sslCert: "/path/to/cert.pem",
sslKey: "/path/to/key.pem",
},
},
}
Плюсы: мгновенная доставка, меньше трафика Минусы: нужен публичный IP и SSL-сертификат
Для большинства случаев polling — оптимальный выбор.
Несколько ботов
Можно запустить несколько Telegram-ботов:
{
channels: {
telegramPersonal: {
type: "telegram",
botToken: "BOT_1_TOKEN",
allowFrom: [123456789],
},
telegramWork: {
type: "telegram",
botToken: "BOT_2_TOKEN",
allowFrom: [234567890, 345678901],
},
},
}
Каждый бот будет работать независимо, но использовать общую память и скиллы.
Отладка
Тестовый режим
{
channels: {
telegram: {
debug: true, // Подробные логи
dryRun: true, // Не отправлять сообщения (только логировать)
},
},
}
Типичные проблемы
«Unauthorized» или «Token invalid»
- Проверьте токен — скопируйте заново из BotFather
- Убедитесь, что бот не заблокирован
Бот не отвечает в группе
- Добавьте ID группы в
allowed_groups - Проверьте
mentionRequired— возможно, нужно упомянуть бота
«Too many requests»
- Telegram ограничивает частоту запросов
- Увеличьте
pollingIntervalили настройтеrateLimit
Сообщения приходят с задержкой
- Нормально для polling — задержка 1-2 секунды
- Для мгновенной доставки используйте webhook
Безопасность
Не публикуйте токен
Токен бота — это полный доступ к нему. Если токен утёк:
- Откройте BotFather
- Отправьте
/revoke - Выберите бота
- Получите новый токен
- Обновите openclaw.json
Ограничивайте доступ
Всегда используйте allowFrom или allowedGroups. Публичный бот без ограничений — риск.
Храните токен безопасно
Используйте переменные окружения вместо хранения токена в конфигурации:
export TELEGRAM_BOT_TOKEN="123456789:ABCdef..."
openclaw gateway --port 18789
Что дальше
- Быстрый старт — если ещё не настроили OpenClaw
- Настройка SOUL.md — как агент должен общаться в Telegram
- Безопасность — защита бота и данных
- Установка на VPS — запуск бота на сервере 24/7