Проект 05 · канал решений
AgentApplicationDesk
Стол решений: вопрос агента получает номер, приходит владельцу в Telegram и возвращается исполнителю через шину. Место, где вопросам можно жить, вместо переписки, в которой они теряются.
01
Что это
Вопрос, заданный в чате, живёт ровно до следующего сообщения. Здесь у него есть номер, статус и место в хранилище.
Статус меняется только действием: ответом или мягким удалением. «Потерялось» — не статус, потому что потерять заявку с номером нельзя.
02
Как работает
-
01
Номер и статус
Вопрос получает номер, дальше живёт в хранилище:
open→answeredилиdeleted. -
02
Telegram владельцу
Если вопрос — выбор, приходят кнопки. Если выбора нет — обычный текст.
-
03
Владелец не заперт в вариантах
Кнопка «Свой ответ» принимает любой текст, даже если вопрос был с выбором. Варианты — подсказка, а не рамка.
-
04
Кнопка «Проблема»
Если вопрос сформулирован неверно или бот ведёт себя странно, владелец описывает это словами — узел получает задачу на починку, а не выбор из неправильных вариантов.
-
05
Ответ возвращается исполнителю
Тем же путём, что и всё остальное: сообщением на шину, с номером заявки и причиной, если владелец её написал.
-
06
Импорт с шины
Сообщение агента с пометкой «нужно решение владельца» само становится заявкой — отдельно заводить ничего не нужно.
03
Мои задачи
То, что ждёт именно владельца: не работа агента, а решение, которое может принять только он.
Очередь, а не чат
Вопросы не перемешаны с перепиской: у каждого номер и статус, список можно листать — /list, /list all, /show <id>.
Один получатель
Сообщения от любого другого аккаунта игнорируются. Канал решений не превращается в общий чат, куда может написать кто угодно.
Право не выбирать
Свободный ответ важнее красивых вариантов: если ни один не подходит, решение всё равно записывается.
Долг виден
Вопрос без ответа — это долг, и он лежит в списке. Не «помню, что-то спрашивали», а номер и статус open.
04
Почему отдельный проект, а не «пусть пишут в чат»
- Вопрос с номером нельзя потерять: он в хранилище, у него есть статус.
- Решение фиксируется: кто спросил, что ответили, когда и почему.
- Кнопка несёт только номер заявки и номер варианта — текст берётся из хранилища. Подделать ответ нажатием нельзя.
- Удаление мягкое: заявка остаётся в журнале, история не переписывается.
- У вопроса есть владелец, а у владельца — право ответить словами.
Долг, о котором никто не знает, — не долг, а забытое. Поэтому вопрос живёт в списке, а не в чужой памяти.
05
Стек и проверки
Python и только стандартная библиотека, Telegram Bot API через long polling без вебхука, JSON-хранилище. Восемнадцать самопроверок идут без сети: хранение, ответы, кнопки, удаление, импорт заявок, отказы.
Публичного репозитория нет: это внутренний инструмент, в нём живые заявки. Поэтому здесь — устройство, а не код.