Виджет на сайте, переписки в супергруппе, рич-карточки статей в ответах, публичный API и вебхуки. Никаких отдельных кабинетов для операторов.
Preact + Shadow DOM, ≤ 50 КБ gzip. Не ломает стили сайта, не тянет тяжёлый рантайм.
Каждое обращение приходит отдельным forum-топиком. История не путается, контекст не теряется.
Атомарный SQL-захват, проигравший видит «уже взял @ivan» — без двойных ответов клиенту.
Серые ✓ — отправлено, ✓✓ — доставлено в виджет, синие ✓✓ — клиент открыл и прочитал.
URL — источник истины. Переключение проекта = переключение URL, JWT синхронизируется автоматически.
Русский по умолчанию в альфе, английский — следом. Часовые пояса хранятся per-user.
Один тег <script> в <head>. Виджет рендерится в Shadow DOM, не наследует стили хоста.
Цвета, логотип, копирайт — через настройки сайта в админке. Меняется без релиза.
Посетитель кликает «продолжить в Telegram» — telegram_user_id привязывается к существующему диалогу, переписка продолжается там.
Под каждым новым топиком — клавиатура: Take · Close · Spam. Никакого web-кабинета для операторов в MVP.
t.me/<bot>?startgroup=<token> — Telegram сам открывает диалог выбора группы. Если бот ещё не админ, токен подождёт промоута.
new → open → assigned → closed (+ spam). Reopen возвращает закрытый топик в работу через reopenForumTopic.
Help-центр на собственном домене компании через CNAME. Ссылки на статьи в ответах оператора рендерятся в виджете рич-карточкой.
Оператор пишет ссылку — клиент видит карточку с заголовком, выдержкой и кнопкой «открыть статью».
Каждое сохранение пишет ArticleVersion. Откат и аудит изменений из коробки.
API — это продукт, а не довесок. Каждая внутренняя фича доступна через /api/v1/* с теми же правами, что и сторонняя интеграция.
# Получить открытые диалоги GET /api/v1/conversations?status=open Authorization: Bearer tgd_live_… # Отправить ответ POST /api/v1/conversations/:id/messages { "body": "Спасибо, передал инженерам" }
Подключение виджета и Telegram-группы — за 5 минут.