Бот описывается обычными словами. Дальше работает обвязка: спецификация, в которой поведение записано сценариями, отдельный контейнер и своя база на каждого бота, проверка запросов на живых данных и отчёт о том, чего сделать не удалось.
togable.xyz открыт, сборка начинается после регистрации

Два шага между разговором и работающим ботом: сначала поведение записывается документом, потом по этому документу собирают и проверяют.
Ответы человека становятся не пересказом в переписке, а отдельным документом. Поведение записано сценариями, команды и данные перечислены там же, и правят спецификацию люди: агент читает её перед каждой следующей правкой бота. Это и есть источник правды, по которому потом сверяют результат.
Из описания словами получается не один файл «всё в одном», а бот, разложенный по модулям: категории, клавиатуры, обработчики, точка входа, работа с базой. После каждой правки система сама компилирует его и прогоняет smoke-тест, и так по кругу, пока не сойдётся.
Исходников в интерфейсе нет, и это решение авторов продукта, а не пробел: вкладки с кодом и логами убрали сознательно, потому что заказчику бота они ничего не говорят, а на вопрос «что мой бот умеет» не отвечал никто. Их место заняла спецификация.
Собранный бот в работе и отчёт, которым сборка заканчивается.
Бот, собранный этим продуктом, принимает расход обычной строкой и отвечает разбором: сумма, категория, дата и сколько уже потрачено за месяц. Категория угадывается по смыслу слова, а если угадана не та, её переставляют кнопкой под ответом. Итог за месяц бот считает у себя, поэтому он и накапливается от записи к записи.
Сборка заканчивается не словом «готово», а отчётом, в котором отдельно сказано, что проверено и что сделать не вышло. Здесь названы два затыка, которые кодом не обходятся, и один из них дожидается действия человека на стороне платформы. Это и есть разница между «бот собран» и «бот работает».
Три развилки, на которых продукт мог стать тем, чем мы не хотели. У каждой названа цена ошибки.
цена ошибкиодин бот дотягивается до записей другого, и узнают об этом не от нас
Держать всех ботов в одном процессе и одной базе проще и дешевле. Ровно до первой ошибки в коде, который никто не читал построчно.
Поэтому у каждого бота свой контейнер и своя база. Это дороже по ресурсам и снимает целый класс ошибок разом: дотянуться до чужих данных неоткуда, даже если очень захотеть.
цена ошибки«сделай бота для расходов» выполняется сотней способов, и спорить потом не о чем
Просьба словами это не задание. В ней нет ни того, что считать правильным ответом, ни того, как бот должен вести себя, когда его не поняли.
Между просьбой и кодом стоит спецификация, где поведение записано сценариями «когда, тогда». По ней проверяют результат, и она же остаётся у человека под правку, а не прячется внутри переписки.
цена ошибкичеловек слышит «готово», а узнаёт правду от своих пользователей
Отчёт, в котором всё хорошо, приятнее и бесполезнее. Особенно там, где часть работы упирается во внешнюю сторону и закончена быть не может.
Поэтому непройденное выносится в отчёт отдельным заголовком, вместе с тем, что именно от человека требуется. Проверенное там же названо проверенным: запросы к базе прогнаны на живых данных, а не признаны рабочими на глаз.
Соберём так, чтобы поведение было записано до кода, а отчёт называл и сделанное, и несделанное. Рабочий прототип показываем до оплаты.
Обсудить задачу