Telegram

Автоответы

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

tg serve может отвечать на входящие сообщения по вашим правилам. Два условия не дают ему писать людям, которым вы не собирались отвечать:

  • Отвечает только тестовым аккаунтам. Ответ уходит только отправителю из testers в файле правил. В новом файле testers пуст, поэтому никто не получит ответ, пока вы не добавите свой тестовый аккаунт.
  • Отправка выключена, пока вы её не включите. permissions.replies.send должен быть allow. ask означает отказ: у фонового сервера некого спросить.

Полные списки параметров — в commands.md.

Создать и включить правило

tg replies add away
tg replies edit away --template 'Thanks, {{ sender.firstName | default: "there" }}! I will answer in the morning.'
tg replies edit away --outside 09:00-19:00 --days mon-fri --timezone Europe/Madrid
tg replies edit away --per-chat 1/12h --per-person 1/1d

add создаёт выключенное правило со всеми явно записанными настройками. Правила хранятся в <profile>.replies.json, в той же папке, что configFile из вывода tg config show --json. Добавьте ID своего тестового аккаунта в testers:

{ "testers": [{ "id": "1000001" }], "rules": [ … ] }

ID правил состоят из строчных букв, цифр и -; каждый уникален. Правило, отправляющее ответ, нельзя включить с пустым шаблоном.

Затем посмотрите, что правило ответило бы, включите его и запустите сервер:

tg replies test --since-time 7d
tg replies on away
tg config set permissions.replies.send allow
tg serve

replies test читает только сообщения, уже сохранённые в локальном хранилище. Ничего не отправляет, не меняет и никогда не подключается. tg replies off away выключает одно правило.

Условия и аудитория

replies edit меняет только указанные поля. Список через запятую заменяет весь список; пустая строка очищает его.

ЧтоПараметры
Действие--do reply,task — ответ, задача или оба
Чаты--kinds dialog,group, --chats, --not-chats
Условия--words, --question / --no-question, --mentions-me / --no-mentions-me
Отправители--people, --not-people, --contacts-only / --no-contacts-only
Ответ--template, --as-reply / --no-as-reply
Лимиты--per-chat, --per-person, например 1/12h
Рабочее время--outside, --days, --timezone, --no-hours

При первой настройке рабочего времени укажите вместе интервал, дни и часовой пояс; затем можно менять по одному. Ошибочное изменение не перезаписывает файл; остальные правила, testers и записи об ответах сохраняются.

tg replies audience показывает, кому может отвечать весь файл правил. --reply all разрешает всех; --reply listed — только разрешённые списки. --allow-people, --allow-chats, --deny-people и --deny-chats заменяют эти списки; запрет важнее разрешения. Поверх аудитории всё равно действует testers. Действие task открывает задачу на этом компьютере и не ограничивается аудиторией.

Шаблоны и модель

В шаблоне можно использовать sender.firstName, sender.name, chat.title, chat.kind и now (в часовом поясе правила или UTC, если рабочее время не задано), с фильтрами вроде {{ now | date: "%H:%M" }}. Текст входящего сообщения не является переменной шаблона. Неизвестные переменные и фильтры отклоняются.

Модель может написать только блок ai; всё вне него — ваш текст:

Thanks, {{ sender.firstName | default: "there" }}!
{% ai %}Briefly confirm you got the message; I will answer tomorrow.{% else %}I will answer tomorrow.{% endai %}

Содержимое блока — инструкция модели. Входящий текст передаётся модели отдельно, как данные. Если модель не настроена, нет согласия или вызов не удался, отправляется текст else; без else сообщение остаётся без ответа, а причина записывается.

Выберите модель через models.replies.provider (openai или anthropic), models.replies.model и, для своего сервера, models.replies.baseUrl; models.default заполняет незаданные значения. Храните ключ через tg models text key set.

Для модели нужно отдельное согласие, независимо от права на отправку:

tg replies consents show
tg replies consents grant
tg replies consents revoke
tg replies consents deny -1002000002
tg replies consents allow -1002000002

grant разрешает передавать данные входящих сообщений выбранному провайдеру для всего профиля. deny запрещает передавать модели сообщения одного чата; allow снимает этот запрет, но не выдаёт согласия. Для нового провайдера или адреса endpoint нужно новое согласие. tg replies test --ai отправляет сохранённые сообщения модели, чтобы вы могли посмотреть её текст; в Telegram по-прежнему ничего не отправляется.

На что правило никогда не отвечает

  • Ваши сообщения, каналы, боты и сообщения, отправленные от имени чата.
  • Отредактированное сообщение, уже обработанное сообщение и всё, что пришло до запуска serve.
  • В группе — сообщение, которое не упоминает вас и не отвечает вам, если правило не указывает эту группу в chats.

Лимиты perChat и perPerson обязательны для каждого правила, поэтому два автоответчика, отвечающих друг другу, остановятся при первом достигнутом лимите.

Остановить и проверить

tg replies pause
tg replies resume
tg replies status
tg sends list

pause останавливает все правила сразу, включая работающий serve, без перезапуска; resume отменяет паузу. status показывает, разрешена ли отправка, какие правила включены и кому могут отвечать. sends list показывает каждый ответ с отправившим его правилом.