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

К счастью, многие вопросы с банком можно решить удаленно, например, позвонив в колл-центр или написав письмо. Но апогей удаленности — это чат с оператором службы поддержки: в онлайн-переписке клиент быстро, конфиденциально (разговор никто не подслушает) и даже иногда весело (операторы в чате шутят!) управляет своими финансами. За последние пару лет мобильные мессенджеры стали привычным способом коммуникации, и для современного банковского сервиса чат — абсолютный must have.
Алексей Круглов, старший вице-президент и директор по digital-продуктам банка «Открытие»
«Чат для любого современного сервиса — это трансформация подхода к коммуникациям с клиентом. Люди переехали в мессенджеры, они там живут. И каждый раз, заставляя их вылезать из этого мира, чтобы позвонить в колл-центр или написать email, мы напрягаем их. Вкладываясь в разработку чата сейчас, мы надеемся получить долгосрочный эффект — не столько снижение затрат на другие каналы коммуникации с клиентами, сколько снижение оттока клиентов из банка в принципе, а также приток новых клиентов, которым импонирует сервис, стремящийся быть максимально удобным».
И, конечно, чат — еще и ценный канал сбора обратной связи.
Анастасия Графская, менеджер проектов, “Открытие Digital”
“В основном в чат пишут по двум поводам: либо с запросом на обслуживание (финансовые и информационные вопросы), либо с какой-то претензией. В нашем случае чат сыграл очень важную роль в сборе фидбэка по недавнему редизайну приложения. Люди пишут о том, что им нравится или не нравится, спрашивают, когда добавится та или иная функция. Чат – совершенно новый функционал приложения. Он заставил нас встать с ног на голову и научиться ходить на руках. Помимо внедрения чата в само приложение, потребовалось много времени и сил, чтобы развернуть его в инфраструктуре банка. Многие моменты приходилось долго согласовывать со службой безопасности, коллеги из претензионного департамента тоже проделали колоссальную работу: нужно было нанять и обучить новых сотрудников и научить их общаться с клиентами живым языком”.
Мысль о том, что в мобильном приложении «Открытия» нужен чат, зародилась в банке около года назад. Тогда, еще задолго до старта разработки и появления дизайн-концепции, команда “Открытие Digital” решила провести эксперимент, эдакий “предпредпилот”. До специалистов, которым в будущем предстояло общаться с клиентами через чат, было необходимо донести особенности этого канала коммуникации, в котором операторы — живые люди, которые отвечают живым языком, а не выдержками из уставов, правил и регламентов.
Кирилл Курашев, администратор проектов, “Открытие Digital”
“Я купил симкарту, зарегистрировал аккаунт в Telegram и создал там групповой чат для digital-команды и службы поддержки. Когда выдавался свободный момент, мы всей командой “Открытие Digital” отправляли в этот общий чатик запросы. Операторы отвечали, и потом мы по почте или по телефону (служба поддержки «Открытия» базируется в Саратове) вместе с ними разбирали ответы. Вначале были суперподробные письма-разборы, потом просто небольшие комментарии. Тогда мы задали стандарт общения с клиентами в чате”.
Потом были личные встречи, тренинги и появился специальный гайд, в котором собраны рекомендации для операторов службы поддержки — как обращаться и здороваться, какие слова использовать, а какие нет, уместны ли эмодзи — в зависимости от возраста клиента, а также других факторов.
С точки зрения пользователя чат в мобильном приложении банка не отличается от обычного мессенджера. В нем точно так же можно отправлять текст, ссылки, фотографии и местоположение. В случае, если по какой-то причине чат недоступен, у пользователя остается возможность связаться с банком через один из привычных каналов: по почте или телефону.

Чат доступен только в авторизованной зоне приложения, и это позволяет специалистам поддержки сразу идентифицировать клиента и получить всю необходимую для работы с его обращением информацию (а также выбирать стиль общения). Пользователь при этом избавлен от необходимости проходить дополнительную процедуру идентификации.
Для операторов чат выглядит как привычная им HelpDesk-система: с тикетами, инструментами их маршрутизации, анализом и статистикой обращений.

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

Юлия Белоногова, руководитель управления претензионной работы, банк «Открытие»
“В общей сложности за месяц в банк поступает 17-18 тысяч обращений по всем каналам: телефон, электронная почта, социальные сети, чат. Через соцсети приходит порядка 200 обращений. Чат у нас заработал 6 июля, и за первые сутки через него задали более полутора тысяч вопросов, это много. Мы запустились во второй половине дня и не ожидали такого отклика. В первую ночь все операторы были заняты тем, что усердно поддерживали клиентов. Сейчас у нас шесть операторов, и они ежедневно обрабатывают около 150 тикетов. Тикет — это не единичный запрос, а диалог, в котором может содержаться от одного до 20-30 вопросов клиента. Закрытым тикет считается, когда клиент говорит, что у него больше нет вопросов”.
Для ответа на первое обращение через чат оператору отводится одна минута. За это время клиенту надо дать понять, что он не один, и банк уже начал вникать в суть вопроса и поднимать информацию. Время решения вопроса варьируется в зависимости от его сути. Если это стандартный информационный запрос — например, как начисляются проценты по карте или когда надо внести минимальный платеж, скорость ответа, как правило, не превышает трех минут. Если речь идет о финансовом возмещении, то это может занять от 20 минут до суток.
Администратор может выполнять как роль управляющего с возможностью просмотра и выгрузки всех диалогов и статистики, так и роль оператора, отвечая на переадресованные ему тикеты. Также администратор может создавать новых операторов и приостанавливать доступ существующих.

Статистика, собираемая на сервере, включает:
Все это дает возможность оценивать эффективность работы как отдельного оператора, так и команды в целом. График распределения обращений по часам и дням недели позволяет администраторам лучше планировать работу отдела.
Рынок решений для мгновенного обмена сообщениями сейчас бурлит и, казалось бы, найти подходящий компонент и встроить его в свой продукт не составит труда. Но когда на основе чата требуется выстроить канал поддержки клиентов, приходится учитывать много нюансов, в том числе:
В целях безопасности решение должно быть развернуто во внутренней IT-инфраструктуре банка. Чат должен иметь возможность интеграции с системами банка для получения информации о клиентах, просмотра истории их операций, включения тикетов в общий контур для измерения эффективности работы всей службы поддержки. Метрики и отчетность должны соответствовать корпоративным стандартам HelpDesk-подразделения.
Мы анализировали доступные на рынке opensource-продукты, и по различным причинам нам не подошел ни один из них. Либо они не проходили по критериям безопасности, либо не устраивал язык реализации, либо требовалось сделать большое количество доработок к коду, так как существующие решения в большей степени ориентированы на функциональность обычных мессенджеров — переписка клиента с клиентом. Надо оговориться, что этот анализ был проведен ровно год назад, и за это время функциональность некоторых решений могла претерпеть изменения. В итоге приняли решение писать чат самостоятельно.
Мы не стали завязываться на существующие протоколы для передачи сообщений, такие как XMPP или WAMP, ввиду их громоздкости, избыточности и высокой сложности. Большинство сторонних решений перегружено лишними подробностями на все случаи жизни, нам пришлось бы это все поддерживать и еще объяснять службе безопасности, зачем передаются лишние параметры. Качество библиотек под все нужные нам языки также было под вопросом. Поэтому мы реализовали чат через WebSocket на собственной JSON-спецификации.
Чат состоит из трех блоков:

Владимир Вялов, разработчик бэкенда, Redmadrobot
“Необходимость написания собственного асинхронного чатсервера выделяла этот проект на фоне других. В самом начале нужно было выбрать фреймворк: основной выбор был между nodejs, asyncio и Tornado. Asyncio доступна только с версии Python 3.4, но мы уже использовали язык последнего поколения в продакшене в других проектах, так что выбрали ее. Было необходимо реализовать асинхронное взаимодействие с PostgreSQL, Redis, RabbitMQ, передачу сообщений через вебсокеты и покрыть асинхронный код тестами. В итоге опыт с asyncio оказался удачным, и я снова выберу ее для следующих проектов”.
Первые полтора месяца все компоненты системы разрабатывались параллельно и не были связаны между собой. Менеджеры нервно ходили по коридорам в ожидании начала интеграции :) Наконец этот момент настал, и после нескольких подпиливаний чат заработал! Вначале появилась возможность писать друг другу, и мы смогли подключить отдел QA. Однако назвать систему в той ее версии стабильной едва ли было можно — сообщения терялись, соединения рвались, сервер падал. Нам потребовалось некоторое время, чтобы стабилизировать систему и найти причины проблем. Между браузером и сервером пришлось сделать ping/pong для определения состояния соединения, за несколько итераций пофиксили баги в связке RabbitMQ/чат-сервер и научились бороться с дублированием сообщений на мобильных устройствах. Но некоторые баги на начальном этапе мы все-таки упустили, потому что они дают о себе знать только тогда, когда операторам начинают одновременно писать сотни человек, а на тестовом окружении полноценно сэмулировать такую активность сложно.
Развернуть чат было непросто, поскольку в банке множество требований по безопасности и свой взгляд на организацию бэкэнда.
Артур Сахаров ( mc_murphy ), технический директор, Redmadrobot
«Разумеется, не все из нашего стека технологий используется в банке. Обычно мы пишем на Python, берем базу данных Postgres, подключаем очереди RabbitMQ, держим кэш на Redis, поднимаем Docker-контейнеры на Linux — для банка вся эта среда по умолчанию считается недоверенной. Там привыкли, что везде стоит MS SQL, приложения написаны на .Net или на Java, и многое развернуто на Windows Server. Для этого стека проработаны все необходимые процедуры, настроены анализаторы, специалисты банка умеют самостоятельно их поддерживать и разворачивать.
В итоге мы нашли компромисс со службой безопасности, заменили небольшую часть наших стандартных компонентов, а по большинству решений (к примеру, мы оставили Python и Postgres) вписались не в текущий стек банка, а в будущие планы по обновлению инфраструктуры IT. Получилось, что этот проект в том числе стал и полигоном для СБ, архитекторов и сопровождения, на котором они поднимали необходимые процедуры. Благодаря выделенной команде и помощи „Открытие Digital“ это удалось сделать в максимально сжатые сроки».
Недавно через чат написал клиент. Он находился в Грузии и не мог получить в банкомате средства из-за превышения лимита на снятие наличных, который установлен в целях безопасности. “Поймите” — говорит — “мне еще пять дней тут быть, а деньги я снять не могу, не на что купить обратный билет, да еще и на телефоне средства закончились”. Увеличить лимит технически было невозможно, поэтому оператору пришлось проявить смекалку:

Все в банке понимают, что общение через чат должно быть простым и человечным, но случаются проколы :) Один из клиентов задал через чат вопрос и получил на него вместо дружелюбного ответа выдержку из банковских условий. Клиент удивился, заскриншотил переписку и отправил в Твиттер. Параллельно он задал вопрос: “А как счет-то закрыть в вашем банке?”. В ответ на это ему выслали полную подробную инструкцию о том, как это сделать. Это был epic fail.
Проблему клиента, который совершенно обоснованно разозлился на Сtrl C + Сtrl V, конечно, решили. А для банка этот случай стал эталонным кейсом того, как следует учиться на своих ошибках.
Кое-что из планов на будущее:
Ну а пока банк продолжает экспериментировать с новым каналом коммуникации и порой приходится разбираться не только в финансовых вопросах…

… и рвать шаблоны :)

Stay tuned!

Зачем банку чат
К счастью, многие вопросы с банком можно решить удаленно, например, позвонив в колл-центр или написав письмо. Но апогей удаленности — это чат с оператором службы поддержки: в онлайн-переписке клиент быстро, конфиденциально (разговор никто не подслушает) и даже иногда весело (операторы в чате шутят!) управляет своими финансами. За последние пару лет мобильные мессенджеры стали привычным способом коммуникации, и для современного банковского сервиса чат — абсолютный must have.

«Чат для любого современного сервиса — это трансформация подхода к коммуникациям с клиентом. Люди переехали в мессенджеры, они там живут. И каждый раз, заставляя их вылезать из этого мира, чтобы позвонить в колл-центр или написать email, мы напрягаем их. Вкладываясь в разработку чата сейчас, мы надеемся получить долгосрочный эффект — не столько снижение затрат на другие каналы коммуникации с клиентами, сколько снижение оттока клиентов из банка в принципе, а также приток новых клиентов, которым импонирует сервис, стремящийся быть максимально удобным».
И, конечно, чат — еще и ценный канал сбора обратной связи.

“В основном в чат пишут по двум поводам: либо с запросом на обслуживание (финансовые и информационные вопросы), либо с какой-то претензией. В нашем случае чат сыграл очень важную роль в сборе фидбэка по недавнему редизайну приложения. Люди пишут о том, что им нравится или не нравится, спрашивают, когда добавится та или иная функция. Чат – совершенно новый функционал приложения. Он заставил нас встать с ног на голову и научиться ходить на руках. Помимо внедрения чата в само приложение, потребовалось много времени и сил, чтобы развернуть его в инфраструктуре банка. Многие моменты приходилось долго согласовывать со службой безопасности, коллеги из претензионного департамента тоже проделали колоссальную работу: нужно было нанять и обучить новых сотрудников и научить их общаться с клиентами живым языком”.
Предпредпилот
Мысль о том, что в мобильном приложении «Открытия» нужен чат, зародилась в банке около года назад. Тогда, еще задолго до старта разработки и появления дизайн-концепции, команда “Открытие Digital” решила провести эксперимент, эдакий “предпредпилот”. До специалистов, которым в будущем предстояло общаться с клиентами через чат, было необходимо донести особенности этого канала коммуникации, в котором операторы — живые люди, которые отвечают живым языком, а не выдержками из уставов, правил и регламентов.

“Я купил симкарту, зарегистрировал аккаунт в Telegram и создал там групповой чат для digital-команды и службы поддержки. Когда выдавался свободный момент, мы всей командой “Открытие Digital” отправляли в этот общий чатик запросы. Операторы отвечали, и потом мы по почте или по телефону (служба поддержки «Открытия» базируется в Саратове) вместе с ними разбирали ответы. Вначале были суперподробные письма-разборы, потом просто небольшие комментарии. Тогда мы задали стандарт общения с клиентами в чате”.
Потом были личные встречи, тренинги и появился специальный гайд, в котором собраны рекомендации для операторов службы поддержки — как обращаться и здороваться, какие слова использовать, а какие нет, уместны ли эмодзи — в зависимости от возраста клиента, а также других факторов.
Отличие от обычного мессенджера
С точки зрения пользователя чат в мобильном приложении банка не отличается от обычного мессенджера. В нем точно так же можно отправлять текст, ссылки, фотографии и местоположение. В случае, если по какой-то причине чат недоступен, у пользователя остается возможность связаться с банком через один из привычных каналов: по почте или телефону.

Чат доступен только в авторизованной зоне приложения, и это позволяет специалистам поддержки сразу идентифицировать клиента и получить всю необходимую для работы с его обращением информацию (а также выбирать стиль общения). Пользователь при этом избавлен от необходимости проходить дополнительную процедуру идентификации.
Для операторов чат выглядит как привычная им HelpDesk-система: с тикетами, инструментами их маршрутизации, анализом и статистикой обращений.

В данный момент специалисты поддержки выступают в двух ролях:
- Операторы — те, кто непосредственно ведет переписку с пользователями, решает их проблемы и закрывает тикеты.
- Администраторы — по сути контролеры работы операторов, которые следят за скоростью и качеством работы.
Каждое новое обращение клиента создает в системе тикет, который автоматически назначается одному из свободных операторов. Оператор получает уведомление в браузере и отвечает пользователю. Когда вопрос решен, оператор прощается с пользователем и закрывает тикет.


“В общей сложности за месяц в банк поступает 17-18 тысяч обращений по всем каналам: телефон, электронная почта, социальные сети, чат. Через соцсети приходит порядка 200 обращений. Чат у нас заработал 6 июля, и за первые сутки через него задали более полутора тысяч вопросов, это много. Мы запустились во второй половине дня и не ожидали такого отклика. В первую ночь все операторы были заняты тем, что усердно поддерживали клиентов. Сейчас у нас шесть операторов, и они ежедневно обрабатывают около 150 тикетов. Тикет — это не единичный запрос, а диалог, в котором может содержаться от одного до 20-30 вопросов клиента. Закрытым тикет считается, когда клиент говорит, что у него больше нет вопросов”.
Для ответа на первое обращение через чат оператору отводится одна минута. За это время клиенту надо дать понять, что он не один, и банк уже начал вникать в суть вопроса и поднимать информацию. Время решения вопроса варьируется в зависимости от его сути. Если это стандартный информационный запрос — например, как начисляются проценты по карте или когда надо внести минимальный платеж, скорость ответа, как правило, не превышает трех минут. Если речь идет о финансовом возмещении, то это может занять от 20 минут до суток.
Администратор может выполнять как роль управляющего с возможностью просмотра и выгрузки всех диалогов и статистики, так и роль оператора, отвечая на переадресованные ему тикеты. Также администратор может создавать новых операторов и приостанавливать доступ существующих.

Статистика, собираемая на сервере, включает:
- количество обработанных и открытых тикетов
- время первого ответа
- время обработки обращений
Все это дает возможность оценивать эффективность работы как отдельного оператора, так и команды в целом. График распределения обращений по часам и дням недели позволяет администраторам лучше планировать работу отдела.
Готовое решение VS кастомная разработка
Рынок решений для мгновенного обмена сообщениями сейчас бурлит и, казалось бы, найти подходящий компонент и встроить его в свой продукт не составит труда. Но когда на основе чата требуется выстроить канал поддержки клиентов, приходится учитывать много нюансов, в том числе:
В целях безопасности решение должно быть развернуто во внутренней IT-инфраструктуре банка. Чат должен иметь возможность интеграции с системами банка для получения информации о клиентах, просмотра истории их операций, включения тикетов в общий контур для измерения эффективности работы всей службы поддержки. Метрики и отчетность должны соответствовать корпоративным стандартам HelpDesk-подразделения.
Мы анализировали доступные на рынке opensource-продукты, и по различным причинам нам не подошел ни один из них. Либо они не проходили по критериям безопасности, либо не устраивал язык реализации, либо требовалось сделать большое количество доработок к коду, так как существующие решения в большей степени ориентированы на функциональность обычных мессенджеров — переписка клиента с клиентом. Надо оговориться, что этот анализ был проведен ровно год назад, и за это время функциональность некоторых решений могла претерпеть изменения. В итоге приняли решение писать чат самостоятельно.
Мы не стали завязываться на существующие протоколы для передачи сообщений, такие как XMPP или WAMP, ввиду их громоздкости, избыточности и высокой сложности. Большинство сторонних решений перегружено лишними подробностями на все случаи жизни, нам пришлось бы это все поддерживать и еще объяснять службе безопасности, зачем передаются лишние параметры. Качество библиотек под все нужные нам языки также было под вопросом. Поэтому мы реализовали чат через WebSocket на собственной JSON-спецификации.
Реализация и разворачивание чата
Чат состоит из трех блоков:
- Непосредственно сервер, где работает вся логика и маршрутизируются сообщения.
- Клиентская часть — SDK, встраиваемый в мобильные приложения (iOS и Android) и на сайт.
- Рабочие места операторов поддержки и администраторов — веб-панели для ведения переписки с клиентами и просмотра и выгрузки статистики сообщений.


“Необходимость написания собственного асинхронного чатсервера выделяла этот проект на фоне других. В самом начале нужно было выбрать фреймворк: основной выбор был между nodejs, asyncio и Tornado. Asyncio доступна только с версии Python 3.4, но мы уже использовали язык последнего поколения в продакшене в других проектах, так что выбрали ее. Было необходимо реализовать асинхронное взаимодействие с PostgreSQL, Redis, RabbitMQ, передачу сообщений через вебсокеты и покрыть асинхронный код тестами. В итоге опыт с asyncio оказался удачным, и я снова выберу ее для следующих проектов”.
Первые полтора месяца все компоненты системы разрабатывались параллельно и не были связаны между собой. Менеджеры нервно ходили по коридорам в ожидании начала интеграции :) Наконец этот момент настал, и после нескольких подпиливаний чат заработал! Вначале появилась возможность писать друг другу, и мы смогли подключить отдел QA. Однако назвать систему в той ее версии стабильной едва ли было можно — сообщения терялись, соединения рвались, сервер падал. Нам потребовалось некоторое время, чтобы стабилизировать систему и найти причины проблем. Между браузером и сервером пришлось сделать ping/pong для определения состояния соединения, за несколько итераций пофиксили баги в связке RabbitMQ/чат-сервер и научились бороться с дублированием сообщений на мобильных устройствах. Но некоторые баги на начальном этапе мы все-таки упустили, потому что они дают о себе знать только тогда, когда операторам начинают одновременно писать сотни человек, а на тестовом окружении полноценно сэмулировать такую активность сложно.
Развернуть чат было непросто, поскольку в банке множество требований по безопасности и свой взгляд на организацию бэкэнда.

«Разумеется, не все из нашего стека технологий используется в банке. Обычно мы пишем на Python, берем базу данных Postgres, подключаем очереди RabbitMQ, держим кэш на Redis, поднимаем Docker-контейнеры на Linux — для банка вся эта среда по умолчанию считается недоверенной. Там привыкли, что везде стоит MS SQL, приложения написаны на .Net или на Java, и многое развернуто на Windows Server. Для этого стека проработаны все необходимые процедуры, настроены анализаторы, специалисты банка умеют самостоятельно их поддерживать и разворачивать.
В итоге мы нашли компромисс со службой безопасности, заменили небольшую часть наших стандартных компонентов, а по большинству решений (к примеру, мы оставили Python и Postgres) вписались не в текущий стек банка, а в будущие планы по обновлению инфраструктуры IT. Получилось, что этот проект в том числе стал и полигоном для СБ, архитекторов и сопровождения, на котором они поднимали необходимые процедуры. Благодаря выделенной команде и помощи „Открытие Digital“ это удалось сделать в максимально сжатые сроки».
Как это работает
Недавно через чат написал клиент. Он находился в Грузии и не мог получить в банкомате средства из-за превышения лимита на снятие наличных, который установлен в целях безопасности. “Поймите” — говорит — “мне еще пять дней тут быть, а деньги я снять не могу, не на что купить обратный билет, да еще и на телефоне средства закончились”. Увеличить лимит технически было невозможно, поэтому оператору пришлось проявить смекалку:

Все в банке понимают, что общение через чат должно быть простым и человечным, но случаются проколы :) Один из клиентов задал через чат вопрос и получил на него вместо дружелюбного ответа выдержку из банковских условий. Клиент удивился, заскриншотил переписку и отправил в Твиттер. Параллельно он задал вопрос: “А как счет-то закрыть в вашем банке?”. В ответ на это ему выслали полную подробную инструкцию о том, как это сделать. Это был epic fail.
Проблему клиента, который совершенно обоснованно разозлился на Сtrl C + Сtrl V, конечно, решили. А для банка этот случай стал эталонным кейсом того, как следует учиться на своих ошибках.
Итоги и планы
Кое-что из планов на будущее:
- Запуск чата на Android и в прелогин-зоне (в ограниченном режиме);
- Автоматизация ответов с помощью бота;
- Аналитический дашборд администратора, позволяющий в режиме реального времени отслеживать загрузку как конкретного оператора, так и всего отдела, а также скорость обработки обращений;
- Интеграция с различными бэкендами на стороне заказчика. В первую очередь — с банковской CRM;
- Добавление второго уровня поддержки: новых ролей специалистов поддержки и сценариев маршрутизации тикетов (тикеты будут распределяться после оценки их сложности и начнут летать еще быстрее);
- Подключение IP-телефонии: маршрутизация вызовов аналогично телефонным звонкам.
Ну а пока банк продолжает экспериментировать с новым каналом коммуникации и порой приходится разбираться не только в финансовых вопросах…

… и рвать шаблоны :)

Stay tuned!