Бот сам записывает меня на встречи, читая переписку в Telegram
В переписке с партнёром написал: «Давай после обеда, часа в 3». Он согласился. Мы разошлись по своим делам. В 2:30 мне пришло уведомление: «Через 30 минут созвон с Русланом». Я ничего не нажимал. Никакого «добавить в Google Calendar», никакого ручного ввода. Просто написал в чате — и система сама поняла, что это встреча, и поставила напоминание.
Это не магия и не какое-то продвинутое приложение. Это результат того, что 23 марта 2026 года я потратил несколько часов на настройку автодетекта встреч из Telegram-переписки. Решение для проблемы, которая у меня была годами: я договариваюсь о встречах в чатах и потом их забываю.
Проблема: встречи живут в чатах, а не в календаре
Большинство договорённостей о созвонах и встречах у меня происходят в Telegram. «Давай завтра утром?» «В пятницу после 5?» «Сегодня в 16:00 ок?» Это быстрее, чем отправлять приглашение в Google Calendar, и естественнее, чем формальное планирование.
Проблема в том, что такие договорённости существуют только в переписке. Они нигде не структурированы, нет напоминания, нет уведомления за полчаса. Я договорился, переключился на другой чат или задачу — и про встречу забыл.
За несколько месяцев управления виллами я пропустил несколько созвонов именно по этой причине. Не потому что не хотел, а потому что «давай в 3» не превратилось автоматически в запись в календаре. Нужен был промежуточный шаг — «теперь записать в Calendar» — который я регулярно не делал.
Классическое решение: дисциплина. Договорился → тут же занёс в Calendar. Я пробовал. Не работает на длинной дистанции. Слишком много переключений контекста, слишком мало трения между «написал» и «закрыл чат».
Инсайт: ассистент видит всю переписку
У меня есть Telegram-ассистент, который отвечает клиентам когда я занят. Он работает через API и видит все входящие и исходящие сообщения в нужных чатах. В какой-то момент я поймал очевидную мысль: он видит переписку. Значит, он видит, когда я с кем-то договариваюсь о встрече. Почему бы ему не ловить эти договорённости и не создавать напоминания сам?
Раньше ассистент был реактивным: кто-то написал → он ответил. Теперь я добавил ему проактивный слой: анализируй исходящие сообщения (то, что пишу я) и входящие от конкретных чатов, ищи признаки встреч, создавай напоминания.
Это принципиальный сдвиг в архитектуре: не «бот реагирует на команды», а «бот наблюдает за контекстом и действует проактивно».
Как работает детектор встреч
Технически: каждое исходящее сообщение из моих чатов проходит через LLM-классификатор. Он смотрит на сообщение в контексте последних нескольких реплик диалога и отвечает на вопрос: «Есть ли в этом обмене договорённость о конкретной встрече или созвоне?»
Если да — извлекает из текста структурированные данные:
- С кем встреча (имя или username собеседника)
- Когда (дата и время, включая относительные — «завтра», «в пятницу», «после обеда»)
- Формат (звонок, встреча, Zoom, в офисе)
- Тема (если упомянута в переписке)
Относительные даты обрабатываются с учётом текущего времени и часового пояса. «Завтра в 10» — бот знает дату сегодня, вычисляет завтра, добавляет часовой пояс Бали. «В пятницу» — находит ближайшую пятницу в будущем. «После обеда» — ставит дефолт на 14:00 и создаёт напоминание с пометкой «уточни точное время».
После извлечения данных бот создаёт напоминание: за 30 минут до встречи приходит сообщение в мой личный чат с деталями. Это не запись в Google Calendar — это Telegram-уведомление, которое точно увижу.
Обработка переносов
В реальной жизни встречи переносятся. «Слушай, в 3 не смогу — давай лучше в 4?» Обычная ситуация в переписке, но для бота это отдельный случай: нужно понять, что человек отменяет/переносит уже существующую договорённость, а не создаёт новую.
Решил через контекст: если в чате уже есть активное напоминание, и в той же переписке появляется новое время с маркерами переноса («давай лучше», «перенесём», «лучше в ...»), — бот обновляет существующее напоминание, а не создаёт второе.
Работает не идеально в пограничных случаях, но ловит 90% реальных переносов корректно. Для оставшихся 10% лучше получить два напоминания, чем ни одного.
Что было в первый день
Запустил 23 марта. За первый день бот поймал три договорённости, которые я бы точно потерял:
- Созвон с инвестором про результаты февраля — «давай после обеда, часа в 3». Я написал это и переключился в другой чат. Без напоминания — пропустил бы.
- Онлайн-встреча с подрядчиком по ремонту одной из вилл — «в среду в 11, ок?» Он подтвердил, я ответил «ок» и забыл. Бот поймал его «ок» как взаимное подтверждение и поставил напоминание.
- Звонок с партнёром по новому проекту — «на этой неделе в четверг». Размытое время, бот поставил напоминание на четверг с пометкой «уточни время».
Три встречи, которые существовали только в чатах и нигде больше. До настройки бота — как минимум одну из них я бы точно пропустил. После — все три прошли.
Что бот не ловит (и это правильно)
Не каждое упоминание времени — это встреча. «Договор действует до 31 марта», «вилла занята до пятницы», «пришли в понедельник, я буду свободнее» — это не договорённости о встречах.
Классификатор обучен на различие между «мы оба согласились встретиться» и «в тексте есть дата». Для этого он смотрит не на одно сообщение, а на последние 5-10 реплик диалога: есть ли в них двусторонняя договорённость, согласование времени, подтверждение со стороны обоих участников.
Ложные срабатывания случаются, но редко. За первые две недели работы — около 5 ложных напоминаний на 23 корректных. Это терпимо. Лишнее напоминание занимает 2 секунды на закрытие. Пропущенный созвон — значительно дороже.
Разница с традиционным календарём
Есть много инструментов для управления встречами. Google Calendar, Calendly, даже встроенные Telegram-боты для планирования. Почему не они?
Проблема не в инструменте, а в точке трения. Любой инструмент, который требует от меня явного действия — «нажать кнопку», «отправить команду», «скопировать в другое приложение» — проигрывает потому, что это действие нужно совершить в момент, когда я занят другим. Когда пишу в чат, я думаю о разговоре, а не о календаре.
Автодетект убирает это трение полностью. Я пишу так же, как писал раньше. Бот работает фоном. Напоминание появляется тогда, когда нужно, — без каких-либо действий с моей стороны.
Это и есть смысл хорошей автоматизации: не «дать человеку мощный инструмент», а «убрать потребность в инструменте». Наладчик не делает — он делает так, чтобы делалось само.
Контекстный ассистент vs реактивный
Этот проект был частью более широкого эксперимента: что получится, если дать ассистенту больше контекста о том, что я делаю?
Реактивный ассистент — это тот, который отвечает на явные команды. «Поставь напоминание на 3 часа» → ставит. Это полезно, но требует от меня помнить отдавать команды.
Контекстный ассистент — это тот, который видит, что происходит, и действует без явных команд. Я договорился о встрече — бот создал напоминание. Я написал что-то, похожее на задачу — бот добавил её в список. Я упомянул имя из базы контактов — бот проверил, не требует ли этот контакт follow-up.
Разница между ними — разница между инструментом и помощником. Инструмент делает то, что ему говорят. Помощник делает то, что нужно, замечая это сам.
Telegram — уникальная среда для такого ассистента, потому что вся коммуникация идёт через один канал. Звонки, переписки с клиентами, переговоры с подрядчиками, общение с инвесторами — всё в Telegram. Ассистент, который видит этот поток, видит почти всё, что происходит в деловой жизни.
Технические детали реализации
Бот подключён к личному аккаунту через Telegram API (MTProto, не Bot API). Это важно: Bot API видит только сообщения, которые написаны боту напрямую или в группах, где он добавлен. MTProto позволяет читать любую переписку на аккаунте, включая личные чаты.
Каждое сообщение обрабатывается асинхронно: получение → буфер → классификация → если встреча — создание напоминания. Буфер нужен потому, что один реплика не всегда однозначна — нужен контекст нескольких сообщений подряд.
Для классификации использую Claude с системным промптом, описывающим задачу. Промпт примерно такой: «Ты анализируешь фрагмент переписки. Твоя задача — определить, договорились ли собеседники о встрече или созвоне. Если да — извлеки: время, дату, участников, формат. Отвечай только JSON.»
JSON проверяется на валидность, дата переводится в UTC с учётом часового пояса пользователя, напоминание ставится в очередь на отправку. Простая, надёжная цепочка.
Что планирую добавить
Сейчас бот ловит встречи из переписки и ставит напоминания. Следующий шаг — двухсторонняя синхронизация с Google Calendar: когда напоминание создаётся, событие автоматически добавляется в Calendar. И наоборот: если я добавлю что-то в Calendar вручную — бот знает об этом и не создаёт дубль, если та же встреча упомянется в переписке.
Ещё хочу добавить автоматический follow-up: если встреча прошла и в течение дня не появился ни один результат (запись, договорённость, задача) — бот спрашивает «что решили?» и помогает зафиксировать итоги.
Конечная цель: ассистент, который ведёт мою деловую жизнь не потому что я ему командую, а потому что видит контекст и понимает, что происходит. Это другой класс автоматизации — не автоматизация задач, а автоматизация внимания.
— Ассистент читает исходящие сообщения в Telegram через MTProto API
— Claude классифицирует: есть ли в переписке договорённость о встрече?
— Если да — извлекает время, участника, формат; создаёт напоминание за 30 минут
— Переносы обрабатываются: если встреча переносится в той же переписке — напоминание обновляется
— Первый день: 3 корректных напоминания о встречах, которые иначе были бы пропущены
— За две недели: ~23 корректных, ~5 ложных срабатываний