Бот поддержки в чате клиента: привязка из NetBox, цифры из мониторинга, вопрос понимает модель
Собрали Telegram-бота для клиентских чатов поддержки. Какой чат и какая ветка принадлежат клиенту, теперь записано в одном месте — в NetBox, и оттуда раскладывается в мониторинг и в бота. Вне рабочих часов бот регистрирует обращения и зовёт дежурного, а состояние площадок показывает только своему клиенту.
Привязку клиента к чату знает только учёт. Состояние узлов бот читает учётной записью клиента, а ответ с цифрами собирает код.
Учёт
В NetBox у клиента записаны площадки, чат и ветка для уведомлений.
Мониторинг
Узлы и события — только те, что видит учётная запись этого клиента.
Чат клиента
Вне рабочих часов — номер обращения, сводка по площадкам и дежурный.
С клиентами на сопровождении мы работаем в групповых чатах Telegram. Туда же система мониторинга присылает уведомления — в отдельную ветку чата, чтобы сообщения людей не тонули в сигналах. Удобно для всех, пока клиентов несколько. Когда их становится больше, выясняется, что чат, ветка и права клиента записаны сразу в трёх местах, и каждую запись приходится держать в порядке руками.
Задача
Нужно было сделать две вещи.
Навести порядок в привязке. Какой чат принадлежит клиенту, в какую ветку идут уведомления по каждой его площадке, какие у него рабочие часы по договору. Всё это хранилось в настройках уведомлений мониторинга, в макросах отдельных узлов и в настройках бота. Новый узел нужно было не забыть пометить, а смена чата у клиента означала правку в трёх местах.
Ответить клиенту, когда инженеров нет на месте. В рабочее время в чате отвечают инженеры. Ночью и в выходные клиент должен сразу видеть, что обращение принято и дежурный о нём знает, а при желании — сам посмотреть, что сейчас происходит на его площадках.
Что сделали
Один источник правды — NetBox
NetBox у нас и так главный учёт инфраструктуры: клиенты, площадки, устройства, контакты. Привязку к чату перенесли туда же — в поля клиента, площадки и устройства. Значения наследуются: ветку для уведомлений можно задать клиенту целиком, а для отдельной площадки или узла переопределить.
Синхронизация читает только NetBox и приводит к нему всё остальное: получателей уведомлений в мониторинге, ветку на каждом узле клиента и настройки бота. По умолчанию она показывает план изменений, применяет их только по явной команде. Каждое утро она сама проходит по новым узлам подключённых клиентов и ставит им ветку. Отдельная проверка ловит то, что всё-таки разошлось.
Защита от рассинхрона: если клиент переехал в новый чат, а бота уведомлений там ещё нет, синхронизация этого клиента не трогает. Иначе уведомления ушли бы в чат, куда их некому доставить.
Клиент видит только своё
Бот читает мониторинг не общим ключом, а учётной записью конкретного клиента. Чужих узлов эта запись не видит: ограничение стоит в правах системы мониторинга, а не в проверках кода.
Обращения и ответы
- Вне рабочих часов. Сообщения клиента подряд считаются одним обращением. Если за несколько минут никто из сотрудников не ответил — ни сообщением, ни отметкой «видим» на сообщении клиента, — бот отвечает: «Обращение №N зарегистрировано в ЧЧ:ММ», добавляет короткую сводку по площадкам и передаёт обращение дежурному.
- В рабочее время бот по таймауту не пишет — в чате инженеры. Обращение всё равно попадает в журнал, чтобы считать время реакции.
- Команды. Клиент сам спрашивает состояние площадок, события за период и загрузку каналов.
- Массовые сбои — одной строкой. Если на площадке разом пропало несколько узлов, бот не перечисляет каждую камеру и точку доступа, а пишет «разом пропало N узлов; всё восстановилось за M мин».
- Длинный ответ — файлом. Длинный список не превращается в простыню в чате: бот присылает файл с таблицами, который открывается в браузере в тех же цветах, что и наш сайт. По запросу — Markdown или PDF.
Цифры — из кода, вопрос понимает модель
Клиенты пишут как удобно: «что с камерами во втором офисе», «опять интернет пропал?». Языковая модель нужна, чтобы понять, о чём вопрос и про какую площадку. Дальше работает код: он берёт события и статусы из мониторинга и собирает ответ. Ошибка в цифре в чате клиента обходится дороже, чем неуклюжая фраза, поэтому модели цифры не доверяем. Если модель недоступна, вопрос разбирается по ключевым словам, а цифры в ответе те же.
Результат
| Было | Стало | |
|---|---|---|
| Где записана привязка клиента к чату | в трёх местах | в NetBox |
| Новый узел подключённого клиента | пометить вручную | получает ветку сам на следующее утро |
| Смена чата у клиента | три ручные правки | правка в NetBox и синхронизация |
| Обращение ночью | ждёт утра | номер, время, сводка, дежурный уведомлён |
| Модель недоступна | — | вопрос разбирается по ключевым словам |
Бот работает в чатах наших клиентов на сопровождении. Подключение нового клиента стало пошаговой процедурой: поля в NetBox, учётная запись в мониторинге, синхронизация и проверка.
Чем можем помочь
Мы прошли это сами и знаем, где такая связка ломается: уведомления уходят не в ту ветку, когда учёт и мониторинг расходятся; бот, читающий мониторинг общим ключом, рано или поздно покажет клиенту лишнее; модели нельзя доверять цифры.
Соберём бота поддержки для вашей службы или клиентских чатов: свяжем NetBox или ваш учёт, если у него есть API, с мониторингом и Telegram, настроим регистрацию обращений, рабочие часы и дежурство. Если поддержку ведём мы как ИТ-отдел на абонентке, бот подключается к вашему чату в составе сопровождения.
Ещё по теме
- 3300 контактовТелефонная книга из NetBox в Asterisk: имя на аппарате и карточка контакта в Telegram
- 7 400+ заявокПереход с Яндекс Трекера на OpenProject: 7 400 заявок без потерь
- 1061 пост1061 пост, 9 лет: мы разобрали собственный Telegram-канал как инженерную задачу
- 0Zabbix не переносит историю между СУБД. Перевезли 4.2 → 7.0 с MySQL на PostgreSQL — без потерь и без простоя