Клієнт v2v-demo — мультигалузевий AI-консьєрж: Telegram-бот, Mini App і веб
Роль Solo Creator / Architect
Період Aug 2026 – ongoing
Стек
Go Telegram Bot API Telegram Mini Apps Telegram Stars OpenAI Whisper Ollama ElevenLabs Azure Speech lingua-go
v2v-demo — мультигалузевий AI-консьєрж: Telegram-бот, Mini App і веб preview

v2v-demo — мультигалузевий AI-консьєрж: Telegram-бот, Mini App і веб

Огляд

Рушій голосового й текстового AI-консьєржа на Go, що працює через три інтерфейси на одному API: Telegram-бот, Telegram Mini App і веб-сторінку. У кожному з них він веде справжню двомовну (українську/англійську) розмову голосом чи текстом, відповідає лише з фіксованої бази знань і передає розмову людині в момент невпевненості. Те, що почалося як один сценарій, виросло у десять по-справжньому незалежних асистентів — стоматологічна клініка, автосервіс, агенція нерухомості, клінінгова компанія, бюро перекладів, салон краси, барбершоп, ресторан, піцерія та магазин акупресурних товарів — обираних з одного inline-пікера при /start (він також веде на сторінки портфоліо, проєктів, брифів і «Про мене»), кожен зі своєю базою знань, системним промптом і схемою збору ліда, усі на одному й тому ж ядрі гейта заземлення.

Результат: один фреймворк, десять бізнес-галузей, без форкнутої кодової бази — кожен асистент ділить той самий гейт заземлення, а скриптований probe-інструмент знайшов реальний баг, критичний для безпеки (запит на стоматологічну седацію потрапляв у звичайний запис), ще до того, як він дістався користувача.

Це живе демо, не скріншот — протестуйте самі: напишіть @v2v_demo_bot у Telegram і оберіть галузь при /start; натисніть Open Concierge у боті, щоб відкрити Mini App; або відкрийте веб-версію web.pere.org.ua. Той самий рушій, ті самі асистенти, три способи зайти.


Один рушій, три інтерфейси

Логіка розмови — сесії, теми, ліміти, розпізнавання мови, діалог із заземленням, озвучення, ліди — живе в рушії й віддається через один /v1 API. Кожен інтерфейс — тонкий клієнт поверх нього:

Інтерфейс Що додає
Telegram-бот (v2v-bot) Long-poll адаптер: голос чи текст у чаті, вибір теми, голосові відповіді
Telegram Mini App (v2v-tma) Відкривається кнопкою Open Concierge у боті: повноцінний мобільний екран із Voice-to-UI (голосова чи текстова команда підсвічує товар і додає його в кошик), кошиком і цінами на сервері, перевіркою Telegram initData (HMAC-SHA256) та оплатою через інвойс Telegram Stars
Веб (v2v-web) Звичайна сторінка з вибором теми, чатом і кошиком; невеликий Go-сервер віддає її й проксіює /v1, поручаючись за відвідувача анонімним cookie-ідентифікатором, з лімітами на відвідувача й на IP

Опис бота в Telegram із кнопкою Open Concierge, що запускає Mini App


Справжня складна задача

Плавність голосового бота маскує його точність. Природно звучний голос, що читає розмиту чи вигадану відповідь, провалює єдине, що важливо — тому архітектура побудована навколо заземлення, а не красномовності: уся база знань їде в кожному промпті, ключовий гейт ловить питання поза темою чи про відповідальність до виклику LLM, а модель має інструкцію передавати людині замість вигадувати. Друга складна задача — узагальнити це на десять непов’язаних бізнесів без форку коду: кожна тема постачає свою базу знань, промпт, привітання, години роботи та схему слотів через один JSON-маніфест — гейт, оркестрація LLM і Telegram-механіка лишаються ідентичними під капотом.


Архітектура

Потік ходу v2v-demo: гейт заземлення до LLM, ескалація або відповідь, лід-запис при завершеному котируванні

Кожен хід проходить через один гейт до будь-якого виклику LLM: скор перетину ключових слів проти бази знань активної теми плюс список ключових слів жорсткої ескалації для тем відповідальності. Нижче порогу довіри чи при влучанні в список відповідальності бот одразу передає людині — без LLM, без вигадки. Вище порогу LLM відповідає з повної бази знань цієї теми й оновлює структурований лід-запис (поля різняться за темою — стоматологічний запис збирає бажаний час, лід нерухомості — бюджет і район); завершений запис записується як лід.


Ключові інженерні рішення

Рішення Чому
Один JSON-маніфест (topics.json) керує пікером Кожна тема постачає власну базу знань, промпт, привітання, години роботи й схему слотів; додавання одинадцятого бізнесу — це зміна даних, не коду; сам пікер з’являється лише коли задекларовано дві чи більше теми
Години роботи per-тема визначають текст ескалації, не лише базу знань У стоматологічної клініки й клінінгової компанії, що працює 7 днів, різна поведінка “ми зачинені”; рішення відкрито/зачинено рахується в Go проти фіксованого часового поясу, ніколи не залишається на здогад моделі
Скриптований probe-інструмент проганяє реальні ходи діалогу через живий конвеєр dialog-probe відтворює сценарні файли проти справжнього гейта заземлення + LLM — без Telegram, без юніт-тест-моків — саме так знайдено баг ескалації седації нижче
Уся база знань у кожному промпті, без retrieval-для-контексту При такому розмірі бази на тему (~17–37 КБ) retrieval лише додає режим відмови (пропустити потрібний фрагмент) без вигоди — ключовий гейт все одно працює окремо як pre-LLM фільтр

Результати

  • Десять незалежних, двомовних асистентів живі за одним пікером: стоматологічна клініка, автосервіс, агенція нерухомості, клінінгова компанія, бюро перекладів, салон краси, барбершоп, ресторан, піцерія, магазин акупресурних товарів — кожен зі своєю базою знань, привітанням і схемою ліда, на одному ядрі гейта заземлення
  • Реальний баг, критичний для безпеки, знайдено автоматизованим probe-прогоном, а не скаргою користувача: стоматологічний запит “дитині потрібне лікування уві сні” потрапляв як звичайний запис на прийом — седація потребує консультації анестезіолога й індивідуального ціноутворення, а не зібраного ліда. Виправлено спеціальним жорстким правилом у промпті теми, перевірено на трьох формулюваннях плюс контрольний випадок, що звичайний запис на чистку все ще завершується
  • Ще два виправлення гейта заземлення знайдено тим самим способом: голий номер телефону (останнє, що запитує кожна тема, яка збирає лід) потрапляв на лінію “уточніть, будь ласка” замість завершення ліда; а дзвінок із проханням “адміністратора” чи “майстра” (не “менеджера”) не розпізнавався як явний запит передачі людині
  • Один рушій за трьома інтерфейсами: Telegram-бот, Mini App і веб-сторінка ділять тих самих асистентів, ліміти й гейт заземлення — новий фронтенд це тонкий клієнт, а не новий продукт
  • Перевіряється на кожен push (gofmt + go vet + go test -race), одна основна стороння залежність (go-telegram/bot) плюс бібліотека визначення мови — все інше стандартна бібліотека Go

Живе демо: @v2v_demo_bot у Telegram (кнопка Open Concierge відкриває Mini App) · web.pere.org.ua · Код: github.com/valpere/v2v-demo


Стек

Go · go-telegram/bot · Telegram Mini Apps · Telegram Stars · Web Speech API · lingua-go (визначення мови) · OpenAI Whisper (локальний CLI + API) · Ollama / OpenAI / Gemini (плагований діалоговий LLM) · ElevenLabs / Azure Neural TTS (плаговано)