Документація Webchatix

Live chat, що працює насамперед через Telegram: відвідувач пише у віджет на сайті, а команда відповідає з Telegram і вебпанелі. Ліворуч — розділи, праворуч — подробиці.

За 5 хвилин

  1. Відкрийте бота → /start — буде створено акаунт на тарифі Free і перший сайт.
  2. Скопіюйте HTML-сніпет і вставте його на сайт перед </body>.
  3. /panel — одноразове посилання до веб-кабінету (або пункт меню «Вебпанель»).
  4. Запросіть оператора: /invite або меню → «Команда» → ➕.
  5. Під’єднайте Telegram-групу: додайте бота до групи (або надішліть у ній /addgroup) і призначте її сайту в розділі «Маршрути».
  6. Запасний варіант — увесь сайт в одну групу: /bindsite site_key у самій групі.

Тарифи й оплата

Реєстрація відкрита: /start у боті створює акаунт на тарифі Free. Платні тарифи оплачуються карткою в кабінеті, розділ Рахунки — платіж проходить через Stripe.

ТарифСайтиКлієнти / міс.ОператориНа місяць
free1301$0
basic2010005$10 ($8 у разі оплати за рік)
unlimited∞∞∞$20 ($16 у разі оплати за рік)

Ціни вказано за місяць. Оплата за рік на 20% дешевша і списується одним платежем ($96 і $192 на рік); у кабінеті річну оплату вибрано за замовчуванням.

Premium (від Basic): шаблони, активне запрошення, правила видимості, нотатки, оцінки.

Клієнт — унікальний відвідувач, який почав діалог у поточному календарному місяці; лічильник обнуляється 1-го числа.

Як працює оплата

  • Кабінет → Рахунки: поточний тариф, використання лімітів, зміна тарифу, перелік рахунків із посиланнями на PDF.
  • Дані картки не потрапляють на наші сервери — сторінка оплати й портал керування належать Stripe.
  • Якщо змінити тариф посеред періоду, Stripe перерахує суму пропорційно; після скасування платний тариф діє до кінця оплаченого періоду, а потім акаунт повертається на Free.
  • На пошту, вказану в цьому ж розділі, надходять чек, повідомлення про невдале списання та нагадування про продовження за кілька днів.
  • Platform, як і раніше, може встановити будь-який тариф вручну: /setplan <id|tg> <plan>.

Меню бота

Головне меню після /start / /menu. Кнопки зазвичай розташовані по дві в ряд.

ПунктЩо робить
🌐 СайтиПерелік сайтів акаунта: налаштування, Online/Offline, сніпет, видалення.
👥 КомандаОператори / учасники акаунта.
➕ ЗапроситиКод і deep link для нового оператора.
💬 ГрупиTelegram-групи, що приймають звернення: під’єднати, призначити сайту, від’єднати.
🔗 ВебпанельMagic link для входу (одноразове, ~10 хв).
🗺 МаршрутиХто отримує діалоги з якого сайту/сторінки.
⚙️ ПанельШвидкий доступ: ops / sites / routes.
📝 ШаблониГотові відповіді (від Basic).
💳 Тарифи й оплатаЦіни, оплата карткою, рахунки (owner).
👑 ВласникПередати права власника іншому учаснику.
🗑 Видалити акаунтКаскадне видалення після підтвердження назвою.
🛠 PlatformЛише ADMIN_IDS: перелік акаунтів / setplan.

Картка сайту

  • Online / Offline — призупинити віджет (чат офлайн).
  • Налаштування — поля брендування, запрошення, GDPR тощо (по дві кнопки в ряд).
  • Оператор — спрямувати цей сайт на людину або групу.
  • Видалити — з підтвердженням назвою сайту.

Команди бота

КомандаХтоПризначення
/start [CODE]усіПочаток роботи / активація запрошення.
/menumemberГоловне меню акаунта.
/helpусіДовідка з команд для вашої ролі.
/panelmemberMagic link до вебпанелі.
/newsite [назва | origin]admin+Створити сайт (+ CORS origins).
/addgroupadmin+ у групіПід’єднати групу як оператора-групу (chat_id не потрібен).
/bindsite KEYadmin+ у групіПрив’язати групу як резервний чат.
/inviteadmin+Запрошення для оператора.
/op_me CODEбудь-хтоПрийняти запрошення.
/tplmemberПерелік / add / del / надсилання відповіддю + /tpl id.
/notememberНотатка до діалогу (від Basic).
/releasememberЗвільнити діалог (+ запит оцінки).
/langусіМова інтерфейсу бота: en / pl / de / ru / uk / be / ar.
/setrole id roleownerowner|admin|operator.
/crm on|offownerУвімкнути/вимкнути CRM-міст акаунта.
/deleteaccountownerВидалити акаунт.
/setplanplatformЗмінити тариф акаунта.
/platformplatformОгляд акаунтів + посилання на /admin/platform/.
/idу чатіПоказати chat_id.

Вебпанель

Вхід для тенанта: посилання з /panel або токен на /admin/login/. Власник платформи має окремий вхід: /admin/platform/ (пароль admin_password).

РозділДля чого
ОглядЛічильники й останні діалоги; назва компанії; CRM-міст для owner — перемикач і посилання вебхука (якщо порожньо — береться спільне з config).
СайтиСтворення, сніпет, повні налаштування віджета.
ОператориУчасники, запрошення, ролі, групи.
МаршрутиПризначення: сайт → оператор/група.
ДіалогиІсторія, звільнення, нотатки, оцінка.
ШаблониСтворення й редагування шаблонів + зведення оцінок (від Basic).
АкаунтиЛише platform: тариф, suspend, impersonate, delete.

Налаштування сайту

Доступні в боті («Налаштування») і у вебпанелі: Сайти → шестірня.

ПолеЗначення
Назва / заголовок / підзаголовокШапка чату.
Привітання / логотипПерше повідомлення і бренд.
Онлайн з–до, TZ, паузаСтатус Online/Offline.
Ескалація (хв)Сповіщення, якщо немає відповіді.
Колір / позиція / відступиКнопка віджета.
Мова / звукen|pl|de|ru|uk|be|ar і URL mp3.
Allowed originsCORS: домени через кому або *.
Invite *Запрошення-бульбашка (від Basic).
Visibility JSONДе показувати кнопку/запрошення (від Basic).
GDPRПрапорець згоди перед першим надсиланням.
ШІ-відповідачВідповідає відвідувачу, якщо ніхто не відповів N хвилин (за замовчуванням 3).

ШІ-відповідач (Gemini)

Відвідувач написав, а оператор мовчить — через задану кількість хвилин у діалозі відповідає Google Gemini. Відвідувач бачить відповідь у віджеті, а оператори отримують у Telegram картку «Відповів ШІ» з тим самим текстом, щоб ніхто не повторював сказане.

  • Вмикається для кожного сайту окремо: Сайти → шестірня → ШІ-відповідач. Там само — затримка і поле «Що ШІ має знати про компанію»: години роботи, доставка, чого не можна обіцяти.
  • Відповідь людини скидає відлік; діалог, який оператор узяв на себе, ШІ не чіпає.
  • Відповідь ШІ не скасовує ескалацію: адміністратор усе одно отримає сповіщення, що жива людина не відповіла.
  • Модель відповідає коротко, не вигадує цін і термінів, а на пряме запитання визнає, що вона автоматичний асистент.
  • Ключ API задається один раз для всієї інсталяції: gemini_api_key у config/config.php (його можна отримати в Google AI Studio, там є безплатний ліміт). Без ключа прапорець нічого не робить.

Приклад visibility

{"include":["/pricing","/contacts"],"exclude":["/admin"],"desktop":true,"mobile":true}

Віджет на сайті

<script async src="https://ВАШ_ДОМЕН/widget/webchatix.js"
  data-site-key="ВАШ_KEY"></script>

Керування зі сторінки:

webchatix("show");   // показати кнопку
webchatix("hide");   // сховати
webchatix("open");   // відкрити чат
webchatix("close");  // закрити панель

Мова віджета визначається за data-lang, далі за <html lang> сторінки, далі за браузером; підтримуються en / pl / de / ru / uk / be / ar, запасна — англійська. Після зміни налаштувань оновіть сторінку клієнта (версія віджета передається в query ?v=).

Якщо на сайті налаштовано Content-Security-Policy, дозвольте домен віджета у трьох директивах: script-src, style-src і connect-src. Стилі віджет підвантажує окремим файлом webchatix.css, тож тримати заради нього 'unsafe-inline' у style-src не потрібно.

Оператори й ролі

  • owner — повний контроль, запити щодо тарифу, видалення акаунта, CRM, передача прав власника.
  • admin — сайти, запрошення, маршрути, налаштування.
  • operator — відповіді в діалогах, нотатки/шаблони залежно від тарифу.

Один користувач Telegram = один власний акаунт. В інших акаунтах можна бути оператором за запрошенням.

Групи

Крім людей, оператором може бути Telegram-група: звернення надходять у чат карткою, і відповісти може будь-хто з учасників — через Reply на картку. Щоб під’єднати групу, додайте до неї бота (меню → 💬 Групи → «Під’єднати групу») або надішліть у групі /addgroup — вводити chat_id не потрібно, бот визначить його сам. Групи не враховуються в ліміт операторів за тарифом.

Діалоги

  • Повідомлення клієнта надходить у Telegram (групі/оператору відповідно до маршруту).
  • Прийняти — бере діалог на себе; в історії з’являється системне повідомлення.
  • Передати — лише активному учаснику того самого акаунта.
  • Звільнити — можна попросити відвідувача оцінити розмову.
  • Нотатки — бачить команда, але не клієнт (від Basic).
  • Шаблони — Reply на діалог + /tpl id або кнопка шаблону → Reply.

Платформа (власник застосунку)

Telegram ID з ADMIN_IDS / platform_tg_ids плюс пароль admin_password.

  • Веб: /admin/platform/ → акаунти, setplan, suspend, impersonate, delete.
  • Бот: /platform, /setplan id|tg plan.

Вхід від імені акаунта (impersonate) записується в platform_audit (хто/IP/акаунт).

Безпека й GDPR

  • Акаунти ізольовані за account_id.
  • Magic link одноразове; видачу посилань обмежено за частотою.
  • Suspend вимикає віджет, бота й кабінет тенанта.
  • CORS: задайте allowed_origins (не залишайте * у продакшені без потреби).
  • Прапорець GDPR показується до першого повідомлення клієнта.
  • Квота на завантаження файлів залежить від тарифу (max_upload_mb).
  • Не більше 10 нових сайтів на годину для одного акаунта.

Резервні копії та деплой

Скрипт резервного копіювання SQLite з ротацією:

chmod +x scripts/backup-sqlite.sh
# cron щодня:
15 3 * * * /path/to/chat-widget/scripts/backup-sqlite.sh

Копії: data/backups/chat_*.sqlite.gz (за замовчуванням 14 штук).

Після оновлення правил rewrite в aaPanel додайте docs поруч із faq|contact|blog і мовні префікси pl|de|ru|uk|be|ar, а потім перезапустіть бота.