Conference for DevOps, Software Architects and Engineers. Regular price ends 27/09!
×Закрыть

Автоматизация процессов в Support: сокращаем время первого ответа на 30%

Наша команда поддержки пользователей работает с 10 проектами Plarium Kharkiv, обрабатывает около 1 300 обращений в день и общается с игроками на 9 языках, включая японский и корейский. Чтобы улучшить пользовательский опыт, мы регулярно анализируем работу департамента и по возможности оптимизируем процессы.

Недавно мы внедрили в работу два инструмента, с помощью которых автоматизировали часть ежедневных задач агентов. Первый помогает команде переводить ответы для зарубежных игроков. Второй — задавать вопросы или передавать баг-репорты программистам прямо из тикета в нужный канал Slack.

После их запуска нам удалось сократить время первого ответа на 30% и снизить нагрузку c агентов поддержки. При этом мы не обращались за помощью к разработчикам.

Ответы игрокам на иностранном языке

Все агенты поддержки свободно владеют английским, русским и украинским языками, но для ответов на испанском, итальянском, немецком, французском, японском и корейском нужна помощь переводчиков.

Процесс ответов с переводом включал много рутинных действий, вроде переключения между программами, вкладками и документами. Мы решили избавиться от лишних шагов и начали искать решение, которое могли бы воплотить своими силами.

Довольно быстро я нашел книгу Google Apps Script: Web Application Development Essentials. В ней рассказывается о возможностях автоматизации работы с таблицами, документами и другими сервисами Google.

Затем важно было понять, как Zendesk (программа, которую мы используем для работы с игроками) может обрабатывать данные со своей стороны. Благо, проблем с этим не возникло: у Zendesk довольно широкий API, который позволяет получить доступ практически ко всем функциональностям. Он дает возможность разрабатывать кастомные приложения и интегрировать их в свой софт. И, что немаловажно, на официальном портале можно найти много хороших уроков для начинающих.

Когда мы поняли, что идею вполне реально реализовать, я взялся за техническую часть. На протяжении двух недель после работы я изучал основы JavaScript, чего вполне хватило для наших задач.

Флоу агента до автоматизации

После автоматизации агенту нужно только разобраться в ситуации и написать ответ на английском в Zendesk. Остальное сделает скрипт.

Флоу после автоматизации

В итоге большая часть процесса выполняется программно. Рассмотрим его подробнее.

Для автоматического перевода запросов на английский мы используем Google Translate. На данном этапе нам очень помогает Zendesk с его встроенными функциями.

Каждый раз, когда игрок создает или обновляет тикет в Zendesk, срабатывает триггер, который отправляет соответствующий http-запрос в Google Apps Script с номером тикета и текстом, который нужно перевести. После перевода мы возвращаем сообщение обратно в тикет (через Zendesk API) в виде приватного комментария (доступен для просмотра только агентам). Весь процесс занимает считанные секунды.

Скрипт, который выполняет функцию перевода

function doGet(e) — функция получает URL от Zendesk и парсит его, выделяя ticket ID (e.parameter.id), текст, который необходимо перевести (comment = e.parameter.comment), и язык, с которого нужно переводить (locale = e.parameter.locale).

function translateComment (comment, locale) — функция делает перевод с соответствующего языка на английский, используя Google Language service.

function sendTranslatedComment (ticketId, locale, translated) — функция получает переведенный текст и отправляет его назад в Zendesk с помощью Zendesk API Tickets End Point.

Агент видит сообщение от игрока в Zendesk в таком виде:

Далее агент проверяет ситуацию, готовит ответ на английском и оставляет его заметкой к тикету с хештегом #to translate.

Программа распределяет ответы по таблицам Google в зависимости от языка запроса. То есть ответ агента и сопроводительные данные (например, название игры и автор ответа) автоматически копируются в ту таблицу, с которой работает соответствующий переводчик.

Когда перевод готов, в соответствующей колонке таблицы переводчик меняет статус на Done.

Используя быстрое меню, переводчик отправляет ответ игроку прямо из таблицы.

Игрок получает персонализированный ответ в следующем виде:

В результате мы избегаем шагов, когда агенту нужно использовать дополнительные переводчики, переходить в таблицу и искать там перевод ответа, а потом снова возвращаться в HelpDesk.

Процесс коммуникации (Slack Messenger)

Чат с разработчиками — самый быстрый способ решить вопросы игроков, но с ростом количества проектов чаты перерастают в своеобразных убийц времени. Информация теряет последовательность и структурированность, часто тяжело найти подробности по кейсу, который передал твой коллега. Чатов становится слишком много, чтобы успевать их все отслеживать (у меня самого больше 70).

Мы поставили цель оптимизировать процесс передачи информации разработчикам и структурировать информацию так, чтобы ее легко было отслеживать.

Изначально флоу агентов состоял из таких шагов:

После автоматизации агенты отправляют информацию разработчикам прямо из HelpDesk, не выходя из тикета. После чего пишут игроку, что решением его вопроса уже занимаются. Рассмотрим процесс подробнее.

Мы разработали приложение, которое отображается в виде формы прямо в интерфейсе Zendesk и доступно агенту в любом тикете.

Если игрок задает вопрос, связанный с разработкой, или сообщает о возможном баге, агент вносит текст сообщения в форму, выбирает тип запроса (Question или Bug Report), выбирает из списка канал по проекту и нажимает «Отправить».

После этого происходит несколько параллельных действий.

Первое: скрипт генерирует сообщение, которое включает необходимый разработчикам набор данных по игроку. Для быстрого понимания приоритетности со стороны программистов, мы визуально разделили сообщения.

Так выглядит сообщение в Slack с типом Bug Report:

Так выглядит сообщение в Slack с типом Question:

Второе: в тикете игрока создается примечание с информацией о том, в какой канал Slack мы передали данные и сообщение. Мы сохраняем эту информацию на случай, если к работе с запросом будут подключаться другие агенты — так они будут в курсе того, что уже было сделано.

Третье: программа случайным образом подбирает один из шаблонов ответа для игрока. Агент сначала читает его, при необходимости адаптирует под ситуацию и отправляет.

Результаты

  • Информация в чате имеет структурированный вид (все дополнительные вопросы по ситуации и решения от разработчиков собираются в тред).
  • За счет визуализации разработчики знают, на что реагировать в первую очередь, а что имеет более низкий приоритет.
  • Агент не тратит время на переключение между инструментами.

В будущем мы видим много возможностей для работы приложения и дальнейшей оптимизации процесса. Думаем над тем, чтобы ответы на наши вопросы автоматически попадали из Slack обратно в тикет. Также хотим добавить в сообщения кастомные кнопки для быстрого отображения статуса переданного вопроса или баг-репорта.

Инструменты, о которых я рассказал, не единственные наши нововведения, но они достаточно универсальны, просты в реализации и не требуют финансовых затрат.

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

LinkedIn

18 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

зря вы токен свой опубликовали в «Скрипт, который выполняет функцию перевода»

Согласен, зря)) Но токен, уже давно не рабочий)

Скрипт, который выполняет функцию перевода

Сорян за оффтоп, Map’у нельзя было сделать? :-)

Возможно)) Я не очень знаком в этой темой, если поделитесь какими-то материалами, буду благодарен)

var sources = {“Deutsch”: “de”, ...}
:-)

Идея неплохая, но по-хорошему надо предупреждать каждого клиента при заключении договора, что поддержка использует инструменты автоматизированного перевода.

Спасибо, я не слышал о таком. Проконсультируюсь с нашими юристами))

Просто по факту вы шарите инфу на третью сторону.

Т.е. в Зендеске нет интеграции со Слаком? Ой...

На самом деле у них на Marketplace есть похожее решение, но, к сожалению, оно не гибкое и работает только с одним каналом. В нашем случае, было нужно больше гибкости, так как мы поддерживаем много проектов и взаимодействуем с несколькими командами разработки.

Зендеск то еще днище. Тикеты которые нельзя закрыть, невменяемое потребление памяти, странички которые могут кильнуть сафари. Со слаком нет вроде интеграграции, но если чуть подшаманить и через запиер пушить в слак то должно быть ок. Единственный его плюс, что с ним можно хоть как-то трекать запросы клиентов не давая им затеряться совсем уже с концами плюс обсуждать в тикете без ведома клиента до момента решения его вопроса. Как багтрекер это не лучшая и не удобная система.

Слак ксати зарелизил на днях интеграцию, в.ч. с Джирой

До Zendesk ми пользовались Kayako. И честно говоря, сейчас работать намного проще и удобнее. Каких то критических моментов мы не заметили. Все ребята из команды довольны) Как багтрекер мы используем JIRA. Zendesk только для коммуникации с клиентами.

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

Да, Юрий, вы правы. Решение проблемы, это ключевая миссия службы поддержки. К сожалению, пока нам не удается решать 100% обращений, но мы к этому стремимся ) Мне очень жаль, что у вас остался негативный опыт общения с нами и надеюсь, что когда-нибудь мы изменим ваше мнение о нашей работе

вот чувствуется выдержка бывалого саппортера, хоть в игру играй — выведи из себя Синиор Саппорт Тим Лида))
Вместо того что бы ответить что да посрать обычным работягам сапортерам на единичные случаи чарна, нате —

Мне очень жаль, что у вас остался негативный опыт общения с нами и надеюсь, что когда-нибудь мы изменим ваше мнение о нашей работе

Подписаться на комментарии