Есть работа для чат-бота: виртуальный помощник службы поддержки
Чат-боты из экзотической фичи интернет-магазинов всё активнее превращаются в полезный инструмент, причём в первую очередь в корпоративном секторе. Недавно мы создали чат-бота, облегчающего нашей службе поддержки работу с заявками одного из крупных клиентов.
Зачем понадобился целый чат-бот при работе всего лишь с одной компанией? Всё дело в размере. Клиент — очень крупный интернет-магазин, которому требуется круглосуточная техподдержка ИТ-инфраструктуры, уведомление о возникающих проблемах, обработка и выполнение входящих заявок в предельно сжатые сроки. Последнее особенно важно, учитывая суточную аудиторию клиента и объёмы торговли.
Однако высокие требования к качеству и скорости обработки заявок специалистами техподдержки конфликтовали со всевозможной рутиной и отвлекающими факторами. Инженерам приходилось постоянно переключаться между совершенно разными контекстами, что повышало вероятность ошибки и снижало продуктивность. А это, в свою очередь, прямой путь к увеличению количества заявок.
Ну и кроме того, заявки нередко можно выполнять гораздо быстрее, если ускорить поступление информации о различных событиях. На практике же дежурную смену Сервисного центра нужно было оповещать о поступлении новой заявки, инженерам приходилось авторизовываться в системе ведения заявок и искать нужную, при этом они были привязаны к своему рабочему месту.
Поэтому желание частично автоматизировать наш рабочий процесс долгое время не давало мне спокойно спать ;). Хотелось придумать способ снять с инженеров часть рутины, снизить количество отвлекающих факторов при выполнении заявок. Ещё желательно было как можно быстрее информировать инженеров и менеджеров, но при этом чтобы им не нужно было безвылазно сидеть за компьютерами и тратить время на авторизацию и поиск. Хотелось объединить систему ведения заявок клиента с нашей системой мониторинга.
В результате решение нашлось — мы задумали создать чат-бот, который бы рассылал уведомления конкретным сотрудникам или в группы. Писать решили на Python, а в качестве среды выбрали Telegram как один из наиболее распространённых мессенджеров, который можно интегрировать куда угодно. К тому же клиенты Telegram есть практически для всех платформ, кроме какой-нибудь Nokia 3110, так что все сотрудники службы поддержки могут сразу же получать уведомления на свои компьютеры/ноутбуки/смартфоны/планшеты.
Чат-бот был «инициативой снизу», на него не выделялось ресурсов и рабочего времени, поэтому делали его во внеурочные часы, что заняло немало времени. Итак, что же было реализовано?
Во-первых, мы интегрировали чат-бот с Assyst — системой ведения заявок у заказчика. Теперь не нужно отдельно уведомлять дежурную смену о появлении новой заявки или инцидента — чат-бот кидает сообщение в соответствующую группу.
В сообщении указывается номер заявки, фамилия и имя инженера, работавшего по ней ранее, срочность и три кнопки действия. Можно сразу посмотреть описание, принять заявку на группу или на себя лично. Если специалист раньше уже работал по заявке и она вернулась обратно на группу, бот уведомит об этом ответственного и пришлет комментарий, с которым вернулась заявка.
Так что инженеры теперь гораздо быстрее разбираются в возвратах, а ответственный всегда известен.
Ещё мы добавили оповещения о заявках, у которых до окончания срока выполнения осталось менее суток. Такие оповещения рассылаются несколько раз в день, чтобы инженерам было удобно планировать свой рабочий день, а заодно не забыть о какой-нибудь задаче. В сообщении указывается номер заявки, ответственный сотрудник и сколько осталось времени до дедлайна.
Чат-бот был интегрирован с системой ведения заявок с помощью двух версий REST API — new и legacy. Технически в этом API ничего сложного нет: POST- и GET-запросы, парсинг и преобразование данных.
Также наш чат-бот умеет управлять некоторыми средствами восстановления работоспособности серверов и уведомляет клиента, когда серверы снова «поднялись».
Чат-бот проверяет работоспособность серверов на основе данных из системы мониторинга, и своевременно сообщает о возникновении проблем с тем или иным сервером.
В этом случае бот предоставляет возможность собрать heap- и thread-дампы, на выходе предоставляя дамп-файлы для их последующей передачи команде разработчиков.
Из ключевых моментов здесь можно отметить автоматическую проверку свободного места, чтобы исключить возможность остановки бизнес-приложения, определение PID процесса и добавление прав на чтение для возможности скачивания файлов.
С помощью чат-бота инженер может запустить сценарий перезагрузки сервера.
Если инженер решает перезагрузить сбойный сервер, то бот отправляет сообщение, которое изменяется в реальном времени, отображая этапы перезагрузки.
В рамках сценария выполняется целый букет автоматических задач.
- В нашей системе мониторинга создаётся режим обслуживания.
- Бизнес-пользователям на стороне клиента запрещается вносить изменения в «витрину» интернет-магазина (реализовано с помощью Selenium Webdriver), о чём этих пользователей уведомляют с помощью Skype-бота. Теперь дежурную смену не отвлекают звонками «У нас ничего не работает, помогите».
- Сервер выводится из балансировки, чтобы пользовательские запросы не шли на неработающий сервер.
- Перезагружается Java-приложение (реализовано с помощью Weblogic Scripting Tool, использующий Jython (это реализация языка Python на языке Java).
- Сервер снова добавляется в балансировку.
- Проверяется работоспособность сервера с помощью проверки основных триггеров из системы мониторинга.
- В системе мониторинга удаляется режим обслуживания.
- Снимается запрет на изменение «витрины» интернет-магазина, а бизнес-пользователям приходит оповещение в Skype-группу (реализовано с помощью Skype-бота), что серверы снова в строю, можно работать. Опять же — это делается автоматически, инженерам не нужно отвлекаться на рутину.
Наконец, ещё одна задача, которую решает наш чат-бот — подготовка отчёта и прогнозирование сроков выполнения задач техподдержки. Что это такое и почему это важно? Допустим, какая-то заявка на техподдержку подразумевает выполнение нескольких подзадач, которые могут выполняться как последовательно, так и параллельно. Сама задача представляет собой XML-файл со списком подзадач. И в разные дни список этих подзадач может быть разным. У инженера спрашивают: «Когда будет готово?», — и что ему на это ответить? Эта ситуация прекрасно описывается диаграммой Гантта:
Как мы отвечали на вопрос о сроке завершения работ до внедрения чат-бота:
- определялось время начала работ и список подзадач,
- затем определялось, какие подзадачи выполнены, а какие выполняются,
- для каждой подзадачи из базы данных подтягивалась примерная длительность,
- на основании всех этих данных инженер мог назвать ориентировочные сроки.
Чат-бот сильно упростил нам жизнь: он сам автоматически определяет время начала работ, список подзадач (реализовано с помощью рекурсии и модуля lxml), определяет статус каждой подзадачи соответствующими запросами к базе данных (реализовано с помощью cx_Oracle) и строит прогноз на основе усреднённых статистических данных по длительности выполнения подзадач за предыдущие дни.
Пожалуй, эта функциональность далась мне труднее всего: пришлось немало повозиться с расчётами и обработкой данных.
* * *
Наш чат-бот работает всего два месяца, но уже можно подвести какие-то итоги его работы.
Во-первых, уменьшилось время реакции техподдержки на инциденты и заявки — на 80% улучшился показатель выполнения OLA (Operational Level Agreement, соглашение об уровнях операционной поддержки).
Во-вторых, каждый инженер в среднем стал выполнять на 5% заявок больше. В месяц по этому клиенту выполняется 1200—1800 заявок, по 20—70 в день.
В-третьих, специалисты стали меньше времени тратить на рутинные процедуры вроде помечания заявок: чтобы в Assyst выставить время реакции, нужно нажать несколько кнопок и дождаться загрузки, а в Telegram жмёшь кнопку — и заявка помечена.
Эксперимент с чат-ботом мы сочли удачным и в будущем планируем клонировать бота для других рабочих групп (уже реализовано для группы SAP BI в части работы с системой ведения заявок), хотим перенести функциональность на другие платформы (Skype, Slack, Whatsapp и Viber) и добавить новые процессы автоматизации.
Алексей Егоров, старший администратор прикладного ПО, «Инфосистемы Джет»