
На этой странице я положил все посты из моего ТГ-канала про этот проект и рандомные заметки по ходу работы.
Первая попытка
Первая попытка работы над ботом была в ноябре 2024 года.
Мне не нравилось то, как я работаю с базой клиентов.
База клиентов и лидов — это это люди, которые уже выбрали вас однажды. Одни решили написать вам, другие заплатили деньги. База клиентов и лидов — это деньги.
Особой мотивации добавила одна ситуация.
Я созваниваюсь по заявке на оформление Геткурс. Там девушка, мы с ней болтаем и ждем основателя школы. Он подключается и происходит такой диалог:
— О, Даня, ты что-ли?
— Миша, привет! Как дела, вы решили ещё одну школу оформить?
— Ага, слушай, мы тебе проект передаем тогда, создавай чат и документы, все оплатим.
— Договор.
Мы с этим клиентом уже оформляли школу полгода назад. Он забыл обо мне. То есть когда пришла задача оформить ещё одну школу, он не вспомнил обо мне, он дал задачу ассистенту найти исполнителя.
И так может быть с любым клиентом или лидом из вашей базы. У меня их 900 человек. Я возможно потерял много денег из-за того, что просто не напоминаю о себе.
Ниже я приведу свои сообщения из телеграма, где я делился работой над этим ботом.
Рассказ из телеграма

Сегодня поднялся на одну ступеньку выше в изучении ИИ.
На скриншоте показал, как ИИ автоматически заполнил карточки лидов в Notion.
Максимум что я делал — кодил там и для чего-то личного использовал gpt и claude. Получалось тоже неплохо, но хотелось чего-то большего.
Сегодня сделал связку Telegram + Notion + Claude.
Искусственный интелект:
1. Берет телеграм-ник из Notion
2. Идет в диалог в телеграме, проводит анализ,
3. Возвращается в Notion: проставляет теги и пишет краткое содержание диалога, ставит дату первого и последнего контакта
Это было ощущение волшебства)
Я когда увидел, что он про цену написал, выставил правильный статус и причину отказа — охренел)
Всю неделю кручу-верчу связку Notion + Telegram + ИИ. Нащупываю инструмент, который поможет автоматизировать работу с базой лидов/клиентов.
Всё это добро написано на языке Python, кстати. Знаю ли я Python? Nope.


Играюсь с нейронками, пропал там и не могу ничего с собой поделать 😂
На телеграме лимиты, но у меня чешутся руки поделать что-нибудь.
Значится так, надо обрабатывать базу в Notion.
Я хотел в будущем делать рассылку, а в базе у меня есть английские имена.
Будет выглядеть странно, если я буду их использовать.
Так как в базе 950 человек, делать руками мне это не хочется.
Попросил написать Claude на python скрипт, который анализирует все контакты и проставляет тег у тех, у кого имя латиницей.
На скрине то, как он отчитывается и как это выглядит в Notion.
Следующий шаг — перевод и установка нового имени с помощью GPT.

Я остановился на том, что проставлял метки для имен, которые написаны латиницей, чтобы их перевести.
Код обработал 861 запись и проставил 135 записям метку name-fix.
Это тестовая метка, которую я использую, чтобы потом по ним работать, а не п овсем контактам.
Дальше надо будет использовать GPT, чтобы он перевел имена на русский язык.

Теперь надо переводить
Работает не идеально, но в 95% случев делает то, что я ожидаю.
Теги или ники — не переводит. По именам пишет обоснование.
Я использовал для этого GPT-ассистента.
Туда можно проставить инструкции (промпт) по обработке данных, не передавая их в коде каждый раз.
Это экономит деньги при оплате «услуг» GPT.
GPT для работы использует токены.
Если не использовать ассистента, а каждый раз передавать промпт в коде, он будет тратить на это токены и деньги.
Если нифига не поняли — это нормально. Я сам пока не понимаю, что тут происходит 😁

Поняв, что он нормально переводит имена, выключаю обоснование и запускаю перевод для ~140 имен.
Статистика
🕑 5 минут
🤑 Денег на GPT: 12₽
🍑 Деревянная задница: в подарок
Результат — охренеть 🤯
Я бы задолбался сидеть вручную переписывать. Тут ещё 140 имен. Если переводить 2000 имен — потратишь всего 180₽.
Использовал для этого самую дешевую модель 3.5-turbo. Перевести имя много ума не надо.

Идем дальше.
Для рассылки мне нужно имя. А у некоторых контактов есть имя и фамилия.
Было бы странно в рассылке использовать обращение: «Марина Федорова, добрый день!»
Попросил написать код, который без GPT это делает.
Запустил в режиме тестирования. Если 2 слова в имени, берет только первое имя, а вторую часть удаляет.
Но срабатывает так себе. Потому что где-то имя клиента написано как: «Фамилия Имя».
На скрине из «Довгуша Александра» он взял только «Довгуша».
А имя всё-таки Александра.
Тут спортный момент. 90% скорее всего нормальные.
Но все же хочется потестить GPT и посмотреть, как хорошо он это сделает и сколько на это уйдет средств.

Запустил, отделяет нормально.
Обработка 28 человек обошлась мне в 0.67₽. Меньше рубля.
Экстраполируем на 500 человек → 75₽

Сделал херню
Начала переписывать Name и удалять фамилии.
Если я буду в Notion создавать проект. Там надо выбирать клиента. И я обычно запоминаю клиентов по фамилии.
Например: «Петр Петипак».
Я его помню не как «Петра», а как «Петипака».
И так как скрипт все переписал, по «Петипак» он ничего не найдет.
Введу «Петр» и охренею от того, сколько Петров у меня. Поди найди нужного.
Придется искать по нику телеграма, а это мутная схема.
Создал отдельное поле «Имя». Чтобы он туда проставлял и не трогал старые имена.
Если имя уже стоит, без фамилии — его переносим в поле Имя без использования GPT, чтобы деньги не тратить.

Итоговый результат
✅ Сохраняет изначальное имя
✅ Для тех, где уже имя, просто переносит
✅ GPT использует там, где есть имя и фамилия
Стату по переносам нормально пишет. Но GPT-анализов почему-то пишет с минусом.
На обработку всей базы из 910 человек потратил может быть рублей 200₽.
И 3−4 часа работы. Но это время был занят отладкой кода.
Саму работу скрипт делает быстро.
Как нейронка помогает мне формировать персонализированную рассылку.
Последнюю неделю, в свободное от рабочих проектов время я ковырял связку notion + telegram + gpt.
Результат на видео.
🔥 Автоматический менеджер работы с базой
У меня есть проблема — я ужасно работаю с базой клиентов. У меня есть база на 800 контактов, которые ко мне прихдоили и покупали.
Когда у меня нет заказов, я бегу искать новых клиентов. В это время база клиентов из-за угла такая: «Псс, парень, я вообще-то тут!»
Допродать клиенту всегда проще, чем продать новому. Лиды или клиенты вам уже доверяют.
Я решил исправить это. Сейчас я начал работать над кодом, который управляет моим рабочим телеграм-аккаунтом, работает с базой и пишет сообщения с помощью нейронки.
Что он будет делать
1. Из конкретных папок в телеграме добавляет всех клиентов в Notion
2. Анализирует диалоги с ними.
3. Добавляет в базу имя, даже если оно на латинице, он с помощью нейронки переписывает его на кириллицу.
4. Устанавливает рабочие теги: «design, code, getcourse»
5. Устанавливает тег игнора, если ваш лид или клиент уже долго вам не отвечает. Таким он не будет больше писапть
6. Устанавливает резюме диалога: о чем общались, к чему пришли
7. Устанавливает статус отказа, если лид вам отказал: нашел другого спеца, по цене.
8. Устанавливает дату последнего общения
9. Ставит формат обращения: ты/вы.
10. На основании всей информации пишет сообщение-напоминание клиенту о себе.
11. Ставит новую дату последнего обращения и запускает повторную проверку через 3 месяца.
На выходе мы получаем автоматизированную систему, которая работает с вашей базой клиентов.
Вам нужно только раскидывать лидов и клиентов по папкам. Ну и пополнять баланс GhatGPT.
Я уже проделал это со своей базой. Я потратил примерно 500₽ на то, чтобы обработать всю свою базу. Это с тестами, после калибровки все будет стоить меньше.
Пока у меня отдельно лежат все функции. Да, это пока не полный код, но они отдельно работают. Осталось собрать их вместе, закинуть на сервер и запускать раз в неделю например.
Сначала я проверю всё это на себе. Здесь буду делиться промеждуточными этапами. Потом шлифану всё так, чтобы можно было ставить это другим людям.
Менеджер клиентов в Telegram 💬
Сегодня я продолжил работу над системой, которая позволяет автоматизировать взаимодействие с клиентами.
Я решаю проблему, когда у меня много лидов и клиентов, а они просто лежат мёртвым грузом в Telegram или в базе данных. А ведь это — потенциальные заказы. Многие клиенты и лиды забывают об исполнителях уже на следующий день.
Я решил запустить эту систему после случая, когда ко мне пришёл менеджер за оформлением школы на Геткурс. Мы созвонились, и на звонке оказался основатель школы, с которым мы уже оформили одну из его школ. Он просто обо мне забыл. Нужно сделать так, чтобы не забывали.
Я понимаю, что эту проблему можно решить с помощью менеджера по работе с клиентами. И я делаю это ещё и для того, чтобы прокачаться в работе с ИИ — потому что это реальная, а не абстрактная задача.
Сейчас я прохожу по каждой функции системы: тестирую, ищу слабые места, думаю, как можно улучшить. И заодно вспоминаю, что там вообще было — в моменте всё понятно, а через три месяца уже ничего не помнишь.
Ниже опишу, как система работает по частям. Некоторые имена и процессы буду упрощать. Детали — в отдельных постах.
Из чего состоит система
0. Я вручную сортирую людей в Telegram по папкам: «Лиды», «Клиенты».
1. Добавляю людей из этих папок в базу Notion.
2. Беру форму обращения из диалога, добавляю в Notion.
3. Получаю дату первого и последнего сообщения — тоже добавляется в базу.
4. Получаю рабочий тег — по какой теме мы работали. Анализ делает нейросеть и проставляет отметку.
5. Проставляю статус — как прошла работа. Анализирует нейросеть.
6. Резюме диалога — нейросеть делает краткое описание общения в 3−4 предложения.
7. Исправление имён — Vyacheclav → Вячеслав. Чтобы сообщения выглядели правдоподобно.
8. Генерация сообщения: на основе всей информации создаётся текст. Там имя, месяц работы, тема и предложение, сформированное под клиента. Я выделил ~5 ниш: Tilda, GetCourse, дизайн
9. Отправка сообщений — отдельный скрипт шлёт их в Telegram.
Следующим постом расскажу, как улучшил 1 и 2 функции.
Перемещение людей из папок в Notion 💬→📝
Как это работает?
Я указываю скрипту папки, из которых нужно взять контакты. Это папки с клиентами и лидами.
Скрипт проходит по каждой папке, берет каждый контакт и проверяет, есть ли он уже в Notion.
Если контакта в базе нет, скрипт добавляет его с такими данными:
— ник;
— имя;
— дата первого сообщения;
— дата последнего сообщения;
—с какого аккаунта найден.
Что значит «с какого аккаунта найден»?
У меня два Telegram-аккаунта: личный и рабочий.
Допустим, вы хотите проанализировать 400 диалогов. Если не знаете, через какой аккаунт шло общение, вы подключитесь сначала к личному и сделаете 400 запросов. Потом — к рабочему и снова 400 запросов. Это неэффективно.
Гораздо проще, когда сразу известно, с какого аккаунта был контакт. Тогда скрипт проверяет только там, где человек точно есть.
Например:
— 80 клиентов в личном аккаунте;
— 320 в рабочем.
Такой подход экономит время и снижает риск попасть в бан.
Ограничения Telegram
Главная сложность — лимиты Telegram. Нельзя обработать тысячу контактов за секунду. Если Telegram заметит аномальную активность, он отправит вас в бан. Тогда в течение суток ничего сделать не получится.
Чтобы этого не произошло, скрипт делает рандомные паузы между запросами. Это снижает риск блокировки.
Как я ускорил скрипт
Первая версия работала медленно. Она проверяла каждый контакт в папке.
Представьте: в папке 400 человек, но за последний месяц вы добавили только 10 контактов. Скрипт всё равно идет по всем 400. Это долго и бесполезно.
Нейросеть сначала утверждала, что проверять пачками нельзя — только по одному. Но сегодня мне удалось решить эту проблему —теперь скрипт проверяет пачками по 30 человек. Это сильно ускоряет работу.
Еще одно улучшение: я добавил выгрузку базы Notion для предватительной проверки. Теперь при запуске скрипт сначала получает всю базу Notion и сохраняет её в файл.
Потом при обработке новых контактов сверяет их с этим файлом. Это сокращает количество запросов.
👨🎨 Результат
Функция работает как задумано: добавляет контакты из папок в Notion, работает быстро и не попадает в бан. К ней я буду подцеплять остальные функции. Фундамент заложен.
Видео на 3 часа
Для своего клуба я записал видео на 3 часа, неотмонтированное от слова совсем.
Вторая попытка
Я вернулся к проекту спустя несколько месяцев. Я хочу его закончить, но мне сложно это дается. Это происходит, потому что в проекте много функционала, это в целом сложная задача, где много нюансов и деталей.

Цель проекта — автоматизировать общение с базой лидов и клиентов.
Лидам и клиентам нужно напоминать о себе. Лиды забывают ответить, клиенты забывают о тебе на следующий день.
Напоминать нужно не шаблонно, а с личным подходом, обращаться по имени, напоминать контекст общения.
Кроме этого нужно саму базу пополнять. Для этого из телеграма нужно выгружать все в Notion. Это рутинная работа, которую хочется передать другому.
Напоминаем себе о функциях
До этого я работал с Cursor. В этот раз я решил взять подписку за Claude Code за $ 100, чтобы наконец закончить эту задачу и отбить с новых заказов эту подписку.
В Claude Code реализована интересная функция — Claude.md. Это файл, где лежат инструкции для нейронки, правила и описание проекта.
Я попросил сделать этот файл и описать все то, что лежит внутри проекта. Потому что я уже не помню.
Он создал папку docs и внутри 3 файла. Один про архитектуру и файлы, другой про изменения, третий про статус проекта.
- architecture — тут лежит описание всех технологий и описание работы файлов. Я хоть могу понять и вспомнить, что я там натворил с Cursor.
- changelog — здесь последние изменения в проекте, что и какого числа было изменено.
- project_status — здесь план по проекту и отметки чебоксами, что выполнено, что осталось

План по работе
Моя проблема в том, что я хочу сделать из этого менеджера гребаный комбайн многих функций. Каждая функция с виду простая, но когда начинаешь зарываться в детали, все становится сложнее.
Моя цель сейчас, отсечь лишнее и оставить какую-то одну функцию, проработать её, закончить и выложить. на сервер, чтобы она работала автоматически. Чтобы сработало хоть небольшое позитивное подкрепление.
Потому что я много часов потратил на разработку всего этого функционала без результата. Поработал, словил дофамина, в результате — пшик.
Описание функционала
С нейронками написание кода уходит на второй план. В большей части ботов я не знаю, что в коде. Это наводит нас на важную работу — принятие решений.
Нужно решить, что, как должно работать. Определить важный и неважный функционал.
Этим и займемся.

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

После этого надо было собрать в кучу промты ассистентов из openai. Чтобы claude code видел все, что я сделал по проекту.

Я создал отдельный файл и указал там все промпты ассистентов.

Определение первой функции
Надо определиться, какая функция должна быть первой.
Самая важная функция — функция напоминания. Именно там лежат деньги: клиент вспомнил обо мне → понял, что хотел мне передать работу → заказ → деньги.
Но это конечная цель ИИ-менеджера, конечный результат.
Глобально я разделил бы работу нашего менеджера на 3 части:
- Добавление в базу с анализом
- Проверка, кому надо написать
- Формирование и отправка сообщения
- Фоновый анализ диалогов, которые обновились
Первый шаг: добавление контактов из телеграма в ноушн.
У меня сейчас много функций анализа диалога лежат отдельно.

Хотя их можно объединить изучение диалога:
- Берем Username
- Берем имя аккаунта
- Берем дату последнего сообщения
- Определяем форма обращения
- Проверяем на игнор
- Анализируем первые и последние 20 сообщений
- Понимаем work tag, по какой теме работали
- Смотрим результат работы, как поработали
- Определяем статус работы
- Составляем короткий саммари диалога для поля «доп.инфа»
- Фиксим и упрощаем имя
Это большой список, но лучше четко определить спектр работ на первый этап, оттестировать все функции и собрать их. А не дробить весь проект на кучу функций и ломать голову, как их потом соединять.
Разработка анализа диалогов
Описываю всю ситуацию claude code в режиме планирования, прикладывая ссылку на этот же кейс.

Он все проанализировал и предложил план

Я прочитал план, он все правильно понял и что важно, действительно прочитал кейс. Это можно понять по определению общих задач бота.

В терминале он предложил ответить на пару вопросов, как будем двигаться. Как по мне, здесь он промахнулся, потому что я описал, что я хочу: начать постепенно делать его и первая задача — анализ. А он в первом же вопросе про приоритет делает несколько вариантов, в котором есть единый пайплайн.



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

Составил список todo и идет работать по нему

Он работал безостановочно 14 минут и интегрировал все недостающие модули

Первый запуск с плохим результатом.
============================================================
2026-01-10 12:12:32 - INFO - РЕЗУЛЬТАТЫ ТЕСТА:
2026-01-10 12:12:32 - INFO - ============================================================
2026-01-10 12:12:32 - INFO - Контакт: @nickname
2026-01-10 12:12:32 - INFO - Аккаунт: Рабочий
2026-01-10 12:12:32 - INFO - Имя: Светлана Атех -> Светлана Атех
2026-01-10 12:12:32 - INFO - Сообщений: 68
2026-01-10 12:12:32 - INFO - Первый контакт: 2025-12-28 11:55:44+00:00
2026-01-10 12:12:32 - INFO - Последний контакт: 2026-01-06 14:10:34+00:00
2026-01-10 12:12:32 - INFO - Форма обращения: Вы
2026-01-10 12:12:32 - INFO - Рабочий тег: ???
2026-01-10 12:12:32 - INFO - Игнор: Нет
2026-01-10 12:12:32 - INFO - Статус: Напомнить о себе
2026-01-10 12:12:32 - INFO - Summary: N/A...
2026-01-10 12:12:32 - INFO - Notion page: 2e4af360...
Тег не определен, хотя в переписке мы обсуждали оформление. Статус «Напомнить о себе», хотя по переписке можно понять, что мы ещё работаем.
Была ошибка с айдишниками ассистентов, все проверил, настроил полное логирование.
2026-01-10 12:29:12,431 - DEBUG - ================================================================================
2026-01-10 12:29:12,431 - DEBUG - НАЧАЛО ТЕСТА: @nickname
2026-01-10 12:29:12,431 - DEBUG - Время: 2026-01-10 12:29:12
2026-01-10 12:29:12,431 - DEBUG - ================================================================================
2026-01-10 12:29:14,364 - DEBUG - ============================================================
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: АНАЛИЗ РАБОЧЕГО ТЕГА
2026-01-10 12:29:14,365 - DEBUG - ============================================================
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Входящих сообщений для анализа: 3
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Исходящих сообщений для анализа: 1
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 1: Добрый день! Я хочу увидеть шаблоны. Как они выглядят на моб версии....
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 2: Добрый день! К сожалению, так и не нашла((...
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 3: Даниил, подскажите, пожалуйста, мы сможем применить в оформлении наш фирменный стиль (цвета, шрифты)...
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 4: Светлана, добрый день!
Получил вашу заявку на оформление GetCourse на сайте Remake.space.
Скажите...
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Используем ассистента: asst_Al52EeCQUhIYbOEM39OALs1Z
2026-01-10 12:29:15,162 - DEBUG - WORK_TAG: Создан thread: thread_hZaHRxrDD71vhd7wqlCLCspF
2026-01-10 12:29:16,661 - DEBUG - WORK_TAG: Запущен run: run_TQPJG8Esz2GTkzXwmwTkyfPx
2026-01-10 12:29:17,044 - DEBUG - WORK_TAG: Статус run: queued
2026-01-10 12:29:18,430 - DEBUG - WORK_TAG: Статус run: in_progress
2026-01-10 12:29:19,790 - DEBUG - WORK_TAG: Статус run: completed
2026-01-10 12:29:20,071 - DEBUG - WORK_TAG: Ответ ассистента: TAG: getcourse
REASONING: В исходящем сообщении упоминается оформление платформы GetCourse.
2026-01-10 12:29:20,071 - DEBUG - WORK_TAG: Извлечённый тег: getcourse
2026-01-10 12:29:20,071 - INFO - WORK_TAG: Финальный тег: getcourse
2026-01-10 12:29:20,071 - DEBUG - ============================================================
2026-01-10 12:29:20,071 - DEBUG - IGNORE: ПРОВЕРКА НА ИГНОРИРОВАНИЕ
2026-01-10 12:29:20,071 - DEBUG - ============================================================
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Всего сообщений: 68
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Последнее сообщение от: меня
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Текст: Хорошо...
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Последовательных сообщений от меня: 1
2026-01-10 12:29:20,072 - DEBUG - IGNORE: 1. [2026-01-06] Хорошо...
2026-01-10 12:29:20,072 - DEBUG - IGNORE: Только 1 сообщений подряд (нужно 3+) - не игнор
2026-01-10 12:29:20,072 - DEBUG - ============================================================
2026-01-10 12:29:20,072 - DEBUG - STATUS: ОПРЕДЕЛЕНИЕ СТАТУСА ДИАЛОГА
2026-01-10 12:29:20,072 - DEBUG - ============================================================
2026-01-10 12:29:20,072 - DEBUG - STATUS: Взяли первые 15 + последние 15 (всего 68)
2026-01-10 12:29:20,072 - DEBUG - STATUS: Последнее сообщение от: Я
2026-01-10 12:29:20,072 - DEBUG - STATUS: Диалог для анализа:
2026-01-10 12:29:20,072 - DEBUG - ----------------------------------------
2026-01-10 12:29:20,072 - DEBUG - [Я]: Светлана, добрый день!
2026-01-10 12:29:20,072 - DEBUG -
2026-01-10 12:29:20,072 - DEBUG - Получил вашу заявку на оформление GetCourse на сайте Remake.space.
2026-01-10 12:29:20,072 - DEBUG -
2026-01-10 12:29:20,072 - DEBUG - Скажите пожалуйста, вам удобно было бы созвониться в понедельник и обсудить оформление?
2026-01-10 12:29:20,072 - DEBUG -
2026-01-10 12:29:20,072 - DEBUG - Если да, в какое время?
2026-01-10 12:29:20,072 - DEBUG - [Клиент]: Добрый день! Я хочу увидеть шаблоны. Как они выглядят на моб версии.
2026-01-10 12:29:20,072 - DEBUG - [Я]: Хорошо, я чуть позже отправлю вам ссылку на мобильную версию.
2026-01-10 12:29:20,072 - DEBUG - [Я]: На главной странице есть блок «Как выглядят страницы готового оформления»
2026-01-10 12:29:20,072 - DEBUG -
2026-01-10 12:29:20,072 - DEBUG - Ссылка для перехода к этому блоку
2026-01-10 12:29:20,072 - DEBUG - https://remake.space/#remake-screenshots
2026-01-10 12:29:20,072 - DEBUG -
2026-01-10 12:29:20,072 - DEBUG - Там можете посмотреть как выглядит на компьютере, мобильном и в приложении Геткурса.
2026-01-10 12:29:20,072 - DEBUG - ... и ещё 30 строк
2026-01-10 12:29:20,072 - DEBUG - ----------------------------------------
2026-01-10 12:29:20,072 - DEBUG - STATUS: Отправляем запрос в GPT-4...
2026-01-10 12:29:22,055 - DEBUG - STATUS: Ответ GPT: '🔄 In progress (в работе): "Работаем"'
2026-01-10 12:29:22,055 - DEBUG - STATUS: Поиск точного совпадения для '🔄 in progress (в работе): "работаем': None
2026-01-10 12:29:22,055 - DEBUG - STATUS: Найдено частичное совпадение: 'работаем' -> 'Работаем'
2026-01-10 12:29:22,055 - INFO - STATUS: Финальный статус: Работаем
2026-01-10 12:29:22,055 - DEBUG - SUMMARY: Взяли первые 15 + последние 15 сообщений (всего 68)
2026-01-10 12:29:22,055 - DEBUG - ============================================================
2026-01-10 12:29:22,055 - DEBUG - SUMMARY: ГЕНЕРАЦИЯ SUMMARY ДИАЛОГА
2026-01-10 12:29:22,055 - DEBUG - ============================================================
2026-01-10 12:29:22,055 - DEBUG - SUMMARY: Текст диалога для анализа:
2026-01-10 12:29:22,055 - DEBUG - ----------------------------------------
2026-01-10 12:29:22,055 - DEBUG - [Я]: Светлана, добрый день!
2026-01-10 12:29:22,055 - DEBUG -
2026-01-10 12:29:22,055 - DEBUG - Получил вашу заявку на оформление GetCourse на сайте Remake.space.
2026-01-10 12:29:22,055 - DEBUG -
2026-01-10 12:29:22,055 - DEBUG - Скажите пожалуйста, вам удобно было бы созвониться в понедельник и обсудить оформление?
2026-01-10 12:29:22,055 - DEBUG -
2026-01-10 12:29:22,055 - DEBUG - Если да, в какое время?
2026-01-10 12:29:22,055 - DEBUG - [Клиент]: Добрый день! Я хочу увидеть шаблоны. Как они выглядят на моб версии.
2026-01-10 12:29:22,055 - DEBUG - [Я]: Хорошо, я чуть позже отправлю вам ссылку на мобильную версию.
2026-01-10 12:29:22,055 - DEBUG - [Я]: На главной странице есть блок «Как выглядят страницы готового оформления»
2026-01-10 12:29:22,055 - DEBUG -
2026-01-10 12:29:22,055 - DEBUG - Ссылка для перехода к этому блоку
2026-01-10 12:29:22,055 - DEBUG - https://remake.space/#remake-screenshots
2026-01-10 12:29:22,055 - DEBUG -
2026-01-10 12:29:22,056 - DEBUG - Там можете посмотреть как выглядит на компьютере, мобильном и в приложении Геткурса.
2026-01-10 12:29:22,056 - DEBUG - [Я]: Добрый день!
2026-01-10 12:29:22,056 - DEBUG - Посмотрели мобильный вид оформления? Вам подходит?
2026-01-10 12:29:22,056 - DEBUG - [Клиент]: Добрый день! К сожалению, так и не нашла((
2026-01-10 12:29:22,056 - DEBUG - [Клиент]: Даниил, подскажите, пожалуйста, мы сможем применить в оформлении наш фирменный стиль (цвета, шрифты)?
2026-01-10 12:29:22,056 - DEBUG - [Клиент]: Я правильно поняла, что все наши 800 уроков будут оформлены в одном стиле?
2026-01-10 12:29:22,056 - DEBUG - ... и ещё 25 строк
2026-01-10 12:29:22,056 - DEBUG - ----------------------------------------
2026-01-10 12:29:22,056 - DEBUG - SUMMARY: Используем ассистента: asst_0zTb3Eu34QhYbnL3jtuZRTUg
2026-01-10 12:29:22,441 - DEBUG - SUMMARY: Создан thread: thread_adKbthzZpuQa1AXNnNBcf8XJ
2026-01-10 12:29:23,778 - DEBUG - SUMMARY: Запущен run: run_EifjmZAYZPD1sCui8O8p20tx
2026-01-10 12:29:24,170 - DEBUG - SUMMARY: Статус run: queued
2026-01-10 12:29:25,648 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:27,033 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:28,449 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:29,954 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:32,171 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:33,590 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:35,198 - DEBUG - SUMMARY: Статус run: completed
2026-01-10 12:29:35,502 - DEBUG - SUMMARY: Результат: 1. Имя и должность/роль: Светлана, клиент
2. Основная информация: Светлана обратилась к нам для оформления GetCourse на сайте Remake.space.
3. История взаимодействий:
- Начало общения началось с обсуждения желания Светланы ознакомиться с шаблонами и увидеть мобильную версию.
- Обсуждение включало вопросы о фирменном стиле и переоформлении существующих уроков.
- Обсуждение также включало в себя вопросы об оплате и возможности возвращения к прежнему оформлению.
- Произошел звонок для обсуждения всех вопросов.
- Обсуждался вопрос о проблеме с доступом к файловому хранилищу и необходимости освободить место.
- Светлана оплатила услугу.
4. Текущий статус отношений: Светлана выполнила оплату и в процессе решения проблемы с файловым хранилищем.
5. Потенциал для сотрудничества: Взаимодействие продолжается, Светлана вовлечена в процесс и она активный клиент.
2026-01-10 12:29:35,502 - INFO - SUMMARY: Длина: 879 символов
2026-01-10 12:29:35,502 - DEBUG - ============================================================
2026-01-10 12:29:35,502 - DEBUG - NAME: ПРОВЕРКА/ПЕРЕВОД ИМЕНИ
2026-01-10 12:29:35,502 - DEBUG - ============================================================
2026-01-10 12:29:35,502 - DEBUG - NAME: Исходное имя: 'Светлана Атех'
2026-01-10 12:29:35,502 - INFO - NAME: Имя уже на русском: Светлана Атех
Пока не нравится резюме диалога, слишком подробное. Нужно упростить. Попросил Клод изменить промт ассистента.
Был такая иструкция
Ты - помощник для создания кратких описаний контактов. Твоя задача - создать
структурированное и информативное краткое описание контакта на основе предоставленных данных.
Формат описания должен быть:
1. Имя и должность/роль (если указаны)
2. Основная информация (компания, сфера деятельности)
3. История взаимодействий (когда и по какому поводу общались)
4. Текущий статус отношений
5. Потенциал для сотрудничества
Пиши кратко, но информативно. Используй только факты из предоставленных данных.
Если каких-то данных нет, опусти соответствующий пункт.
"""
user_prompt = f"""
Создай краткое описание для контакта на основе следующих данных:
Имя: {contact_data.get('name', 'Не указано')}
Телеграм: {contact_data.get('telegram', 'Не указано')}
Компания: {contact_data.get('company', 'Не указано')}
Должность: {contact_data.get('position', 'Не указано')}
Первый контакт: {contact_data.get('first_contact', 'Не указано')}
Последний контакт: {contact_data.get('last_contact', 'Не указано')}
Статус: {contact_data.get('status', 'Не указано')}
Категория: {contact_data.get('category', 'Не указано')}
Теги: {', '.join(contact_data.get('tags', []))}
Заметки: {contact_data.get('notes', 'Нет заметок')}
История взаимодействий: {contact_data.get('history', 'Нет истории взаимодействий')}
Стала такая
Прочитай переписку и напиши краткое summary в 2-3 предложениях.
Пиши простым языком, без официоза и списков. Просто опиши суть: кто клиент, что хотел, как проходила работа, чем закончилось.
Примеры хороших ответов:
- "Светлана хотела оформить школу на геткурсе. Не могла найти скриншоты мобильной версии на сайте. Обсудили детали, она оплатила, работаем, сейчас ждем от неё, когда разберется с файловым хранилищем"
- "Обратился за лендингом на тильде. Созвонились, я отправил КП, клиент взял паузу и перестал отвечать. Не отвечает уже 15 дней"
- "Спрашивал про редизайн сайта, но оказалось дорого для него. Отказ."
- "Заказал виджет для геткурса, сделали, доволен. Обещал вернуться за оформлением."
После исправления резюме стало выглядеть человечнее и понятнее
Светлана хотела оформить курсы на GetCourse. Ей было сложно найти примеры мобильной версии оформления, но после того, как я отправил ей ссылку, она ознакомилась с ними. Светлана задала множество вопросов о работе сервиса и оплатила услуги. Но на текущий момент возникли проблемы с хранилищем для установки шрифтов и логотипа, и мы ждем, когда она сможет их решить.
Ещё проверил, чтобы добавлялись поля Telegram ID и Имя, они почему-то отваливались.
Telegram ID — это числовое значение, которое не меняется у аккаунта. У меня 10% базы потерялось, потому что люби поменяли свои ники. Когда руками добавляешь в базу людей, не думаешь об этом. А по Telegram ID вы сможете найти человека, даже если он поменял никнейм и номер телефона.

Имя — тоже важное поле. Когда бот создает карточку, он пишет Светлана Атех. Потом же мы должны это имя использовать в написании сообщений, чтобы не подрубать нейронку для анализа, что из название имя, а что фамилия, мы один раз делаем это при создании карточки.
Оптимизация всех файлов внутри integrated
После того как все примерно начало работать, мы даем задачу к код-коду провести полный анализ всех файлов, определить, где есть проблемы, и предложить план по оптимизации.

Так долго он ещё не работал

На одном контакте бот отработал хорошо. Теперь надо протестировать на трех аккаунтах, который х нет в базе notion, работу с лимитами телеграма.
Тестирование на 3 аккаунтах
Пишем промпт для тестирования на нескольких аккаунтах.

Он должен будет написать отдельный тест, уже с проверкой папок в телеграме и добавлением из них в ноушн. Но только для нескольких контактов. Сам всё это сделает, сделает логирование и даст вердикт.
Я запустил его в plan mode, потому что задач несколько:
- написать файл
- запустить
- просмотреть логи
- дать вердикт
Это не просто написание кода.

После внедрения я решил проверить код, попросил Клода запустить его и он ушел работать на целых 33 минуты

В итоге Клод завис, команда выполнялась бесконечно долго. На отметке 40 минут работы редактор просто вылетел.
Мне не нравилось, что я не вижу, что там происходит.
Я запустил команду и увидел это
2026-01-11 11:57:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:57:36 - INFO - Got 66 valid contacts from 'Leads Re'
2026-01-11 11:57:36 - INFO - Processing folder: Лиды
2026-01-11 11:57:37 - INFO - Folder 'Лиды': 129 peers
2026-01-11 11:57:38 - WARNING - Rate limit reached (30/30). Waiting 54.7s
2026-01-11 11:58:33 - WARNING - Rate limit reached (30/30). Waiting 0.1s
2026-01-11 11:58:33 - WARNING - Rate limit reached (30/30). Waiting 0.2s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.1s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.5s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.1s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:36 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:36 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:36 - WARNING - Rate limit reached (30/30). Waiting 0.6s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 54.7s
Он делал запрос по каждому диалогу, вместо того, чтобы сделать сразу запрос на диалоги оптом. Из-за этого он влетал в лимиты по запросам и бесконечно долго ждал завершения выполнения кода.
Я попросил это исправить и вместо 40 минут код выполнялся за 70−130 секунд. Он делал запросы оптом и получал больше информации за раз.
Сначала он просто сделал тест без анализа диалогов. Проверка базы, проверка новых, добавление.

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

Все промпты лежали в OPENAI ассистентах. Это отдельные пространства, где можно было настраивать и тестирвоать работу нейронок.


Третья попытка


Оркестр функций
Раньше был десяток функций анализа, функция генерации и функция отправки. Теперь функции анализа склеились в одну и всего их стало 3 функции. Они были в отдельных файлах. Я решил обьединить их в один. Он дальше будет управлять функциями. Пока это делаю я вручную.

Вариативность напоминания
Проверив, понял, что одно и тоже сообщение будет восприниматься как спам. Нужно расширить вариативность напоминаний. Отправил Клод найти стратегии напоминания.

Мы не просто напоминаем, а создаем ценность: рекомендуем продукт, спрашиваем как дела, предлагаем бесплатный аудит.
Немного страшно то, что это может работать неправильно. Например написать человеку, с которым мы перестали общаться или клиенту, которому мы закончили работу 2 дня назад.

Заполнение доп. услуг
В отдельном файле будут заполнять услуги, изменения, новости, чтобы он мог их использовать в сообщениях.
Теперь он учитывает количество напоминаний и выбирает то, что мы ещё не использовали.


Официоз в сообщениях
Я в сообщениях придерживаюсь простоты. Не надо сыпать лишние слова словно бисер, важно говорить четко и по делу.
Было
Стало
Ольга, добрый день!
Мы обсуждали с вами оформление раздела клуба на Геткурсе — меню, навигацию, структуру главной страницы.
Напомню о себе. Если тема оформления школы или клуба на Геткурсе всё ещё актуальна — можем обсудить детали и бюджет.
Ольга, добрый день!
Напоминаю о себе. Мы обсуждали оформление раздела клуба на Геткурсе в марте прошлого года.
Если проект всё ещё актуален, можем вернуться к обсуждению.
Учёт давности контакта
Написал контакту, с которым мы общались 3 года назад.
Олег, добрый день!
Напоминаю о себе.
Если у вас сейчас есть проекты по сайтам, где нужен дизайн или верстка — напишите, обсудим.
Как вам работа с заказчиком, которому вы передавали мои контакты? Удалось тогда с ним связаться и обсудить проект?
Это странно, потому что по прошествию 3 лет я могу не помнить человека, а тем более кому я давал его контакты и что там был за клиент.
Скорректировал его поведение в зависимости от разрыва в общении.
Олег, добрый день! Напоминаю о себе.
Если у вас сейчас есть задачи по сайтам - дизайн, редизайн, создание промостраниц или оптимизация скорости - напишите, обсудим.
Также, если есть знакомые, кому нужна помощь с дизайном сайтов - расскажите о нашей партнёрской программе.
Ссылки в сообщениях
Я добавил упоминание виджетов и новостей в сообщения. Но они вставлялись полностью.

Они большие и некрасивые. Надо было их сократить. В телеграме с помощью api можно вставлять зашитые в слова ссылки. Теперь они стали аккуратнее.

А в контекстном файле это записывает в маркдаун стиле:

А ещё добавил к новым услугам теги, чтобы он клиентам по дизайну не отправлял виджеты от Геткурса. Это разные аудитории.

Тестирование
Рано или поздно надо будет прийти к запуску. Это страшновато. Почему? Потому что нейронка сгенерирует сообщения и отправит их 250 людям. Да, я уже давным давно работаю над этим проектом. У меня уже перепроверено и перенастроено все 100 раз. Но все равно страшновато. А что если напишет какую-то глупость?
Даже если он напишет 10% людей немного странные сообщения — ничего страшного.
Настрока расписания работы
- Воскресенье, 3 утра — импорт контактов из папок
- Каждый день в 4 утра — сканирование, кому написать
- Каждый день в 5 утра — генерация сообщений
- Каждый день в 11 утра — отправка сообщений
Лимит работы
Когда я думал: «о как круто, мой менеджер сможет писать каждый день куче людей, напоминать обо мне».
Потом реальность снизошла на меня: а что если он напишет 250 людям и 40 из них начнут предлагать проекты. Я смогу оценить? Нет.
Сколько диалогов у меня новых появится? Охренень как много.
Поэтому я обновил работу скрипта. Он будет каждый день анализировать 15−20 человек и писать столько же сообщений. Чтобы я смог физически их обработать.
Учёт давности контакта
Поведение меняется в зависимости от того, сколько времени прошло с последнего контакта:
- Менее 3 месяцев — можно спрашивать про конкретные детали из переписки.
- 3−12 месяцев — уточнить актуальность, не давить на детали. «Если проект ещё в планах — напишите».
- 1−2 года — не ссылаться на детали старых разговоров как будто они ещё актуальны. Писать как возобновление контакта.
- 2+ года — почти холодный контакт. Никаких «как там с тем проектом» — человек давно забыл детали.
Добавил стратегию напоминания «А ещё можем помочь»
В прошлой итерации у меня были сообщения типа:
Дарья, добрый день!
Напоминаю о себе. В марте 2023 мы с вами обсуждали оформление Геткурса.
Если проект ещё актуален, напишите.
Мы можем помочь:
- с оформлением школы на Геткурсе
- с разработкой виджетов для школы
- с отрисовкой иллюстраций для тренингов
- с версткой сайтов на Геткурсе и Тильде
- Так же у нас есть магазин готовых виджетов для Геткурса с полезными инструментами для учеников, админов.
То есть кроме основного напоминания мы накидывали ещё тем, где можем помочь. Это важно, потому что если клиент или лид уже нас выбрали.
Я встроил это в стратегии, поэтому добавился ещё один пункт к вариативности.
Микс нейронок
Мне порой не нравится как работает Дипсик. Она хороша для анализа, но сообщения порой пишет странно, не так хорошо как Клод. Словно неуверенный в себе школьник подкатывает к красотке.
Я попробовал сгенерировать одно сообщение для лида, получилось 4 цента. Это в районе 3 рублей. Круто, но я думаю можно оптимизировать расходы.
Рассуждение на примере реального контакта:
Рассуждение Anthropic (Claude)
Последний контакт - июль 2025, сейчас февраль 2026, прошло около 7 месяцев. Было 3 предыдущих напоминания (июнь, июль, ноябрь), поэтом у выбираю стратегию ЧЕК-ИН или НОВИНКА. В актуальной информации есть несколько новых виджетов для Геткурса - это релевантно тегу клиента. Выбираю НОВИНКУ: упомяну один конкретный виджет, который может быть п олезен для курса из 12 уроков с прогрессом и заданиями. Виджет прогре сс-бара с маскотом или рейтинга учеников - хорошо вписывается в конте кст (клиент упоминала шкалу прогресса и бейджики). Возьму виджет прог ресс-бара с маскотом - он про прогресс и геймификацию, что прямо из з апроса Ольги.
Сообщение для напоминания:
Ольга, добрый день!
У нас появился новый виджет — прогресс-бар с маскотом. Персонаж меняется по мере того, как ученик набирает баллы за уроки. Для каждого уровня — своё изображение и фразы. Вы как раз упоминали шкалу прогресса и бейджики — это как раз про это.
Если курс уже готов и оформление Геткурса снова в планах — напишите, обсудим старт.
Фраза «прогресс-бар с маскотом» в сообщении будет выделена ссылкой, которая ведет на страницу этого продукта.
В переписке эта девушка указывала, что ей нужен прогресс-бар для учеников и что курс они ещё в разработке.
Анализ от Дипсика, сообщение от Клода
Решил попробовать анализ делать через Дипсик, а написание сообщения через Клод. Баланс между экономией и качеством.
Дипсик читает диалог, читает файл контекста, передаёт саммари клоду, тот уже пишет сообщение. Попробую такой вариант.
Получилось полная ерунда.
Дипсик передал Клоду это
Стратегия СЕЗОН — привязка к началу весны как активному времени для запуска онлайн-курсов. Три предыдущих напоминания без ответа на последнее — нужно короткое, ненавязчивое касание с мягким CTA и упоминанием готового решения Remake как быстрого старта.
А Клод уже написал это
Ольга, добрый день!
Март — традиционно активный месяц для запуска онлайн-курсов. Если проект с оформлением на Геткурсе снова в планах, есть готовое решение Remake — можно запустить быстро, без долгой разработки с нуля.
Если актуально — напишите, расскажу подробнее.
Переход на Клод в сообщениях и завершение тестирования
В генерации сообщений мне не нравилось, что каждый раз был какой-то косяк: то странно напомнит о себе, то услугу вставит неподходящую.
Я понял, что дело в Дипсике. Он стоит в 20 раз меньше, но и качество в несколько раз хуже. При анализе нет критической проблемы. Но при написании сообщения есть. Если человек поймет, что пишет нейронка, отновится будет иначе.
Для меня рубеж — 20 хорошо-написанных сообщений подряд. Когда я даю диалог за диалогом и там отличные сообщения. Тогда мы можем считать, что тестирование завершено и мастшабировать. Ошибки будут. Но лучше иметь 10% ошибок, чем 0% отправленных сообщений.
Сообщения классные, покажу парочку.
Александр, добрый день!
Давно не общались — написал напомнить о себе. В марте работали над страницей оплаты, вы тогда упоминали, что планируете пересмотреть подход к оплатам в целом.
Если эта тема ещё актуальна или появились новые задачи — напишите, обсудим.
Даниил, добрый день!
В июне смотрели виджеты — хотел уточнить, не нашли ничего подходящего или просто руки не дошли?
Из того, что сейчас популярно у школ: виджет допродажи курсов — размещается в боковой панели, ученик сам выбирает нужные продукты и оформляет заказ без участия менеджера.
Удобно, если хотите увеличить средний чек без лишних касаний. Страница виджета.
Если актуально — напишите, обсудим.
Елена, добрый день!
Понимаю, что сейчас у вас много изменений с приходом продюсера и проект на паузе.
Если будет нужна помощь с оформлением Геткурса — дай знать, с радостью помогу.
Буду на связи, как только решите продолжить.
Алёна, добрый день!
Если появятся задачи по редизайну сайта, созданию промостраниц или нужна будет помощь с оптимизацией скорости — пишите, всегда рад помочь.
Спасибо, что готовы порекомендовать меня коллегам. Если будут вопросы или задачи — буду на связи.
Я в восторге! Ощущается как магия!
Адаптивность
Я решил проверить, как он напишет сообщение для клиентки, которая заказала виджет, но несколько дней забывает его оплатить.
Мы отправили ей приложение к договору и счёт на оплату. Ждем оплату.
Интересно, он ей в целом напомнит про то, как классно мы поработали или поймет, что нужно сказать про оплату виджета.
Рассуждение
В переписке уже было 2 напоминания о себе (24 и 26 февраля).
Клиент сказала «только завтра смогу» — то есть 25 февраля, но так и не ответила.
Счёт отправлен 23 февраля, клиент в курсе. Нужно мягко напомнить про оплату счёта и договор.
Стратегия — ВОПРОС, конкретный: про счёт и готовность двигаться дальше.
Предыдущие напоминания были безликими («напоминаю о себе»), поэтому сейчас добавлю конкретику.
Сообщение
Надежда, добрый день!
Счёт и договор отправили 23-го — хотел уточнить, удалось ли посмотреть?
Как только подпишете и оплатите — сразу ставим виджет.
Наглядность для кейса
Для основной страницы кейса мне необходимо сделать наглядное представление, наглядно показать, как скрипт работает. Для того чтобы это сделать, я на отдельную страницу вывожу лог работы всего скрипта.
Чтобы он там показывал, что он взял контакты из папки, обработал их, проанализировал, потом сходил, посмотрел, кому надо написать и составил сообщение и отправил их.
Собрал дашборд, который показывает как менеджер работает, в какой последовательности.
Конечно, это не та наглядность. Это просто костыль, который позволяет хоть как-то показать, как система работает. Сложно показать как работает терминал наглядно.
Отказ от шага генерации сообщений
Сейчас у меня скрипт работает из 4 больших функций:
- Подгрузка контактов из папок Телеграма
- Анализ и добавление в Ноушн
- Генерация
- Отправка
Последние две похожи друг на друга.
Генерация запускается каждую ночь и генерирует сообщение для клиентов: берет всю инфу, читает диалог, генерирует сообщение и сохраняет в Ноушн.
Этот шаг был бы уместен, если бы я проверял сообщение перед отправкой, но я не хочу их проверять. Я хочу чтобы бот работал автоматизированно без моего вмешательства.
Функция отправки берет контакт человека, смотрит его карточку в базе, читает диалог, генерирует и отправляет сообщение.
Получается что функция отправки делает тоже самое, но дополнительное отправляет сообщения.
Логично обьединить их в одну. Чтобы скрипт смотрел переписку, читал карточку в базе, генерировал сообщение и отправлял.
Последние приготовления перед запуском
Остался последний шаг — запуск агента на сервере. Но перед этим нужно постелить газетку:
- Отлепить последнюю версию от остального кода. Сейчас папка с проектом — это нахламление файлов. С каждой попытки я условно создавал папку: «final_result», «final_result1», «final_result_точно последний». И сейчас это лежит всё в одном месте. Надо выделить оттуда рабочий код. Загружать всю папку с кучей файлов и функций — глупо.
- Упаковать это в докер. Загрузка проекта на сервер без докера — это боль. На локальной машине все библиотеки тонко настроены, а сервер — совсем другая машина по содержимому библиотек. Если загружать без докера, можно тронуться, будет десятка ошибок о несостыковках версий. Докер позволяет этого избежать.
- Дашборд состояний системы. Вся работа агента — под капотом. Это 3 питон файла, который регулярно запускаются на сервере. Я не увижу, что сейчас происходит, кому были отправлены сообщения, нет ли ошибок. Оно просто невидимо на сервере будет что-то делать и сообщения будут отправляться.
Разделение файловой системы и упаковка в докер это технические задачи, про них можно не говорить, а о дашборде надо.
Дашборд
Что мне нужно в дашборде?
- Лог работы. Как система работает, что запускает, какие сообщения пишет.
- В порядке ли файлы сессий телеграма. Работает ли авторизация.
- Статистика: добавлено контактов, проанализировано, отправлено сообщений.
- Редактирование файла crm_context.md, чтобы я мог новые услуги добавлять не в коде, а в удобном окне.
Всё в дашборде должно храниться безопасно, чтобы даже при падении сервера можно было подгрузить эти данные и они не пропали.
Первоначальная версия дашборда. Пока мне не нравятся «последние события» и список услуг в «Контексте».
Последние события содержат всякий мусор, отчётливо видеть что происходит без шума в глазах сложно. Надо будет переделать.
В Контексте услуги сливаются друг с другом, редактировать их неудобно.
Такое необычное чувство запускать цикл работы с помощью кнопки в веб-интерфейсе. Я все время работал в терминале и веб-интерфейс ощущается словно из подземелья вышел на солнце.

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

Стало чище, меньше линий и повторяющегося текста.
Логотип

В итоге пришел к анимированному варианту

Гибкость в рассылке
Кроме обычного напоминания есть и другие задачи, более гибкие:
- пушить недавним лидам, которые ушли подумать
- запросить у клиентов отзыв
- у клиентов попросить контакты знакомых, кому я могу предложить свои услуги
Это задачи, которые сейчас я делаю руками. Напоминания о себе — это фоновая задача, которая будет выполнятся медленно и постепенно.
Я решил обернуть этот функционал в «Задачи». Мы можем давать агенту одноразовую и переидическую задачу. Чтобы он написал один раз или неделю.

Я хочу иметь 2 варианта: персонализированно и по-шаблону.
Персонализированно — когда я даю задачу, что мне нужно написать, а нейронка уже на основании переписки сама решает, как написать сообщение.
По-шаблону — когда я даю шаблон сообщения, а нейронка меняет там только обращение к человеку.
Тестирую на друзьях.




Но на этом этапе писал Дипсик + не было настроено понимание ты/вы.
Переключил на Клод и настроил определение обращения.

Лимиты и достижение задачи
Давайте представим, что надо запросить отзыв. Запрашивать будем раз в неделю. Что делать, если человеку уже написали 5 раз, а он игнорит? Наверное нужно перестать ему писать.
Надо вводить лимиты. Чтобы агент мог написать человеку только 5 раз. Значит это надо добавить как настройку в задачу.
Теперь по достижению. Например мы дали агенту 50 человек и сказали запрашивать отзыв. Через неделю 20 человек оставили, а 30 нет. Как потом тормознуть агента, чтобы он не продолжал отправлять тем 20, кто уже отправил.
Лимиты добавляются просто. Так как мы кодом отправляем сообщение, сразу после отправки в базе данных в задаче у пользователя добавляем одно отправленное сообщение.
Надо вводить достижение задачи. Если человек отправил нам видео, а мы поблагодарили его за отзыв → мы ставим ему в базе данных чекбокс о достижении и больше ничего не отправляем.
Для достижения сложнее. Пришлось добавить поле успеха и неуспеха. Чтобы нейрнонка понимала, что такое отказ, а что успех.
Пробуем лимиты и достижения цели
Создам задачу написать самому себе с рабочего на личный аккаунт. Задача — запросить отзыв.

Поставим лимит в 3 сообщения. А критерием успеха будет считывание видео.

Написал первое сообщение и обновил логи

Я ответил ему

Запускаем второй раз

Продолжает мягко напоминать

Отправлю ему видео, проверим как считает выполнение. Обман чистой воды 😂

Запускаем ещё раз


Не понял видео, поэтому продолжил спрашивать.
Добавляем подпись к дополнительным форматам.

Перезапускаем


Я бы ещё добавил, чтобы добавлять к задаче действие после отказа, действие после выполнения.
Потому что действовать надо по-разному. И я не могу предсказать, какие будут задачи.
Действие после результата
Добавим просьбу отзывить отзыв и напишем такие критерии

Долго не хотел понимать, что задача выполнена. Спустя час получилось сделать так, чтобы он помечал выполненным.

Отказ он понимать вообще не хочет.

Внёс изменения, теперь он не попрошайничает отзыв

Дизайн раздела задач
Когда полей было меньше, дизайн выдерживал. Сейчас нет.

Форма стала огромной и неудобной. Её нужно сделатькомпактнее и удобнее. Отдаём её Figma Make на исправление.
Тоже самое проделываем с карточкой задачи

И со списком задач

Генерируем с Figma Make макеты и отдаём Клоду на верстку


Результат первой итерации редизайна. Считай 1 в 1)
Оказывается MCP Figma был не подключен. Он вызывал функции получения дизайн из фигмы, но видимо прикинулся, что работает.
На примере карточкию. Вот так он делал с отключенным MCP, несколько раз переделывал, всё одно.

Стало лучше, но иконки всё равно не подтянул.

Понял, что ему надо подробно описывать задачу по дизайну и указывать проблемы. Частая — не подтягивает svg иконки. Прогнал ещё раз, стало лучше.

Теперь дизайн раздела задач выглядит гораздо лучше