FreeScout для провайдера: 16 модулей, которые мы написали за восемь месяцев, и почему ушли на свой helpdesk

Как мы вели поддержку интернет-провайдера во FreeScout: 17 тысяч обращений, биллинг в карточке, ИИ на Claude, голосовая почта. Исходники модулей — на GitHub.

Поддержка интернет-провайдера устроена просто и неприятно одновременно. Клиент пишет в чат, во ВКонтакте, в Telegram, на почту, оставляет заявку на сайте — и звонит на голосовую почту. Оператору в этот момент нужен не «тикет», а ответ на три вопроса: кто это, что у него с балансом и тарифом, почему нет интернета.

С ноября 2025 года вся поддержка нашего провайдера жила во FreeScout — открытом helpdesk на Laravel. Готового модуля «биллинг провайдера в карточке обращения» там, конечно, нет. Мы написали его сами, потом ещё пятнадцать. Сегодня выкладываем на GitHub двенадцать живых модулей из шестнадцати и заодно рассказываем, как это работало и почему мы всё-таки ушли.

Коротко весь кейс — в ролике на полторы минуты:

Подкаст: обсуждаем кейс

Разговор о проекте на четыре минуты — если удобнее слушать, чем читать.

Масштаб: что прошло через систему

Цифры из базы FreeScout на момент остановки:

  • 17 751 обращение и 42 156 сообщений — с ноября 2025 по июнь 2026;
  • 10 835 клиентов, 25 сотрудников, 6 почтовых ящиков;
  • почти 14,4 тысячи обращений — голосовая почта (это четыре из пяти);
  • чат на сайте — 352, Telegram — 230, ВКонтакте — 209, почта — 179, форма — 27.
Обращения по каналам, ноябрь 2025 — июнь 2026Голосовая почта≈14 400Чат на сайте352Telegram230ВКонтакте209Почта179Форма27Остальное — внутренние и служебные обращения
Голосовая почта больше всех остальных каналов, вместе взятых, примерно в четырнадцать раз.

Вывод, который сначала удивил: для регионального провайдера главный «чат» — это телефонная голосовая почта. Люди не хотят набирать текст, они хотят проговорить проблему. Поэтому именно её мы автоматизировали глубже всего.

Как всё соединено

flowchart LR
    subgraph IN["Откуда приходит обращение"]
        M["Почта"]
        C["Чат на сайте"]
        F["Форма"]
        V["ВКонтакте"]
        T["Telegram"]
        P["Голосовая почта"]
    end
    IN --> FS["FreeScout<br/>+ наши модули каналов"]
    FS --> S["Панель абонента<br/>(SmitBilling)"]
    S --> B[("Биллинг<br/>REST API")]
    FS --> AI["ClaudeAI:<br/>подсказка оператору,<br/>черновик ответа"]
    FS --> KB["База знаний<br/>оператора"]
    FS --> O["Оператор"]
    S --> O
    AI --> O
    KB --> O

Идея одна: всё, что оператору нужно знать о клиенте, он видит в карточке обращения — без переключения между окнами. Модули делятся на четыре группы.

Четыре группы модулей

1. Откуда приходят обращения

  • VkIntegration — канал ВКонтакте. Гибрид: PHP-модуль внутри FreeScout и мост на Python, который принимает события VK и отправляет в FreeScout.
  • VoiceMail — голосовая почта (о ней ниже).
  • AIFormLabel — метка у обращений из чата-виджета и формы на сайте.

2. Что оператор видит в карточке

  • SmitBilling — боковая панель: договор, тариф, баланс, услуги, адрес, телефоны, статус. Кнопки «Обновить», «Проверить связь» и «Подсказка ИИ».
  • CarbonBilling и AidaBilling — то же для двух прежних биллингов (в репозиторий не вошли). Да, три поколения биллинга — три модуля: копировать панель было быстрее, чем придумывать общий слой. Старые два теперь музейные.
  • AidaSessions — журнал ИИ-диалогов прямо внутри helpdesk: оператор видит, что бот уже говорил клиенту, до того как тот пришёл к человеку.
  • KnowledgeBase — внутренняя база знаний оператора: карточки сценариев (нет интернета, горит LOS, медиаконвертер, низкая скорость, роутер, оплата, подключение, расторжение), дерево решений, шаблоны диалогов и поиск.

3. ИИ

  • ClaudeAI — помощник на Claude API: подсказки оператору и черновики ответов клиенту (отправляет всегда человек). Промпты лежат в файлах (customer.txt для клиента, operator.txt для оператора), модель, температура и лимиты — в настройках. В промпт подставляются данные клиента из биллинга, поэтому ассистент не переспрашивает то, что система и так знает.
  • SatRatingsChat — просьба оценить ответ в Telegram и ВКонтакте после ответа оператора; работает поверх платного модуля Satisfaction Ratings.

4. Гигиена и удобство

  • SystemFilter — автоудаление мусора: отчёты о недоставке, автоответчики, DMARC-отчёты. Без него очередь поддержки заполняется письмами, которые никто не писал.
  • BalanceMonitor — балансы внешних сервисов (облако, API языковой модели, телефония) в шапке для администраторов, красным — если пора пополнить. Тот же блок попадает в ежедневный отчёт в Telegram.
  • SmitUI — оформление: тёмная тема, мобильная шапка, «режим монтажника» с урезанным интерфейсом, стили для бейджей каналов.
  • UrgencyButton — выбор срочности для нескольких обращений сразу. Честно: это заготовка, серверной части в модуле нет (см. README).
  • AmoCRMSync — события обращений во внешний обработчик для AmoCRM. Устарел: AmoCRM мы больше не используем (в репозиторий не вошёл).

Самое интересное: голосовая почта

Раз она даёт четыре обращения из пяти, здесь автоматика окупилась лучше всего. Цепочка такая:

sequenceDiagram
    participant K as Клиент
    participant A as АТС
    participant FS as FreeScout
    participant VM as Модуль VoiceMail
    participant B as Биллинг
    participant CRM as CRM

    K->>A: звонит, слушает меню, оставляет сообщение
    A->>FS: письмо с записью и расшифровкой
    FS->>VM: новое обращение в ящике «Звонки»
    VM->>VM: отсеять «пустые» записи
    VM->>VM: ИИ приводит текст в порядок, придумывает тему
    VM->>VM: определить тип: поддержка или подключение
    VM->>B: найти абонента по номеру телефона
    VM->>FS: обращение в нужном ящике + теги по номеру и теме
    VM->>CRM: для подключения — лид и задача «связаться»
    VM->>K: SMS: обращение принято (с номером)
    VM->>FS: исходная карточка голосовой почты закрывается

От звонка до обращения: звонок, расшифровка, отсев пустых, тема и тип, абонент по номеру, SMS клиенту — оператор получает готовую карточку

Что здесь стоит скопировать в любой helpdesk, даже без наших модулей:

  1. Отсев мусора до человека. Часть голосовых — это молчание, гудки и обрывки. Модуль проверяет текст и закрывает такие карточки сам.
  2. ИИ — редактор, а не решатель. Он только приводит расшифровку в читаемый вид и формулирует тему; решение «поддержка это или подключение» принимает набор простых правил по ключевым словам, а теги и воронка зависят от номера, на который позвонили.
  3. Абонент находится по номеру телефона. Оператор открывает обращение, а в нём уже панель с балансом и тарифом.
  4. Клиент получает подтверждение. Одна SMS с номером обращения снимает половину повторных звонков.
🔎 Найти, где утекают заявкиБесплатно, в Telegram-боте @uspeshnyybot

Как это выглядит

Снимки сделаны на отдельной копии FreeScout с выдуманными клиентами и вымышленной базой: боевые данные в публикацию не попадают.

Список обращений: плашки каналов — ВКонтакте, чат, форма, голосовая почта — и метки по темам

Обращение с боковой панелью абонента из биллинга: договор, статус, баланс, тариф, адрес, услуги и операции

Обращение из голосовой почты: метка 55-35-59, расшифровка и панель абонента — здесь клиент заблокирован за долг

Обращение из ВКонтакте с той же панелью абонента

Шапка FreeScout с балансами сервера, API языковой модели и телефонии

Настройки ClaudeAI: модель, подсказка оператору, черновик ответа с обязательной проверкой человеком, слова эскалации

Журнал ИИ-диалогов внутри helpdesk: статистика, фильтры, ссылки на тикеты и лиды

Внутренняя база знаний оператора: сценарии решения проблем, фильтры по аудитории и приоритету

Страница модуля SystemFilter: какие системные письма он удаляет до создания обращения и как это работает

Исходники

Двенадцать модулей — в одном репозитории, у каждого свой README: что делает, где настраивается, что заменить под себя. Лицензия — AGPL-3.0, как и у самого FreeScout. Четыре остальных мы не публикуем: оба прежних биллинга и AmoCRM (ими давно никто не пользуется) и заготовку метки голосовой почты, которая так и не заработала.

Модуль Что делает Статус
SmitBilling данные абонента из биллинга в карточке рабочий
ClaudeAI подсказки оператору и черновики ответов на Claude рабочий
KnowledgeBase база знаний оператора: сценарии и деревья решений рабочий
AidaSessions журнал ИИ-диалогов в helpdesk рабочий, под нашу базу
VkIntegration канал ВКонтакте с мостом на Python рабочий
VoiceMail голосовая почта → обращение и лид рабочий, под нашу установку
SatRatingsChat оценки ответа в Telegram и ВКонтакте рабочий
BalanceMonitor балансы сервисов в шапке рабочий
SystemFilter автоудаление системных писем рабочий
SmitUI оформление, режим монтажника рабочий, без картинок
UrgencyButton срочность для нескольких обращений заготовка
AIFormLabel метка чата и формы рабочий
Исходники на GitHubircitdev/freescout-smit-modules

Чего в репозитории нет. Платные и чужие модули (Kanban, Reports, CRM, Telegram Integration, White Label, вход через OpenID и другие) мы не публикуем: у них свои лицензии. Нет и картинок оформления. Адреса, внутренние номера телефонов и идентификаторы воронок заменены заглушками, а ключи везде берутся из .env или из настроек FreeScout. Модули написаны под нашу установку: это образцы, а не «поставил и работает».

Что не получилось и чему научились

  • Обновление FreeScout стёрло наши шаблоны. При переходе с 1.8.207 на 1.8.221 встроенный обновлятор молча переписал пять наших blade-шаблонов — страницу входа в нашем оформлении, два экрана восстановления пароля и две кнопки администратора. Теперь правило: перед обновлением снимать архив, после — сравнивать все шаблоны. Заодно оказалось, что лимит памяти вшит в сам скрипт обновления, а production-режим требует флага --force.
  • Три биллинга — три модуля. Копипаст панели абонента для каждого поколения биллинга быстро превратился в три почти одинаковых кода. В следующий раз нужен один адаптер и по драйверу на каждый биллинг.
  • Свои модули живут рядом с чужими. В папке Modules у нас было почти пятьдесят модулей: шестнадцать наших, остальные — платные от FreeScout и общественные. Каждое обновление — гадание, что сломается. Хорошая привычка: отдельный список «наше / не наше» и тест после каждого апдейта.
  • Ключи не место в коде. Перед публикацией мы перебрали каждый файл, вынесли в .env всё, что туда не попало, и отдали код на независимую проверку: она нашла и забытые фамилии сотрудников, и реальные номера, и открытые без авторизации служебные адреса. Если собираетесь выкладывать модули в открытый доступ — делайте такой аудит заранее, а не в день релиза.

Почему ушли

FreeScout отлично справился с главным: помог за несколько месяцев понять, что на самом деле нужно оператору поддержки провайдера. Но к лету 2026 стало видно, что мы строим внутри helpdesk второй биллинг — с данными абонента, балансом, блокировками, обещанным платежом и статусами. Каждый новый канал означал ещё один модуль, ещё один мост, ещё один сервер с базой, которую надо обновлять и бэкапить.

В июне мы перенесли историю в собственную Поддержку внутри СмИТ Биллинга: около 17,7 тысячи обращений и 41 тысячу сообщений, тикеты привязываются к абоненту сразу, без отдельной панели. 8 октября 2026 года FreeScout выключили окончательно. Как устроена новая Поддержка — в документации, а весь биллинг целиком — в обзоре СмИТ Биллинга 3.9.

Для кого FreeScout с самописными модулями остаётся хорошим выбором:

  • вашего продукта нет «рядом» — helpdesk и есть основная система поддержки;
  • каналов немного, а данных о клиенте — на один запрос во внешнюю систему;
  • есть кому поддерживать PHP и следить за обновлениями.

А если ваш продукт — это система, в которой уже лежат данные клиента, поддержка внутри неё выигрывает: нечего синхронизировать.

Читайте также

Сайт провайдера, где клиент оставляет заявку голосом, а маркетолог правит цены из Telegramтот же провайдер с другой стороны: заявку голосом принимает сайт и сам заводит её в биллингеTelegram вместо CRM: когда это работает, а когда вы теряете деньгикогда хватает рабочей группы в мессенджере, а когда пора заводить систему вроде helpdeskБот ответил, а клиент получил ерунду: как следить за AI в работечто проверять, когда ИИ уже отвечает клиентам: тот же принцип, что у черновиков ClaudeAIМост MAX ↔ Telegram: ведём клиентов из MAX прямо внутри Telegramещё один канал в одно окно: клиенты из MAX приходят прямо в Telegram

Хотите понять, где у вас теряются обращения и заявки — между сайтом, мессенджерами и ответом менеджера? Бот разберёт путь клиента по пунктам и покажет дыры.

🔎 Найти, где утекают заявкиБесплатно, в Telegram-боте @uspeshnyybot

Комментарии

Войдите через Telegram, чтобы оставить комментарий:

Пока нет комментариев. Будьте первым.