Обмен валюты: фиксируем курс для оффлайна в онлайне. Опыт ВТБ24

в 14:32, , рубрики: api, Блог компании ВТБ, втб24, обмен валюты, платежные системы, сервис, чат-бот

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

Обмен валюты: фиксируем курс для оффлайна в онлайне. Опыт ВТБ24 - 1

ВТБ24 придумал новый сервис по обмену валюты – зафиксировав курс обмена в онлайне, можно прийти в офис и обменять валюту. Курс можно фиксировать на сайте банка или в чат-боте в мессенджере Фейсбук. Сервис позволяет клиентам зафиксировать курс обмена валюты на два рабочих дня, не считая день заказа, и совершить обмен наличной валюты, даже если курс на рынке изменится.

Сервис доступен клиентам с картой любого российского банка как для покупки, так и для продажи наличной валюты с фиксированием курса онлайн в режиме 24/7.

Как мы пришли к такой идее

Было несколько предпосылок к формированию идеи и создании нового сервиса.
Это самые распространенные вопросы в сезон отпусков у населения: «Где поменять валюту? Где лучший курс? Как поменять выгодно?», а также динамические изменения курсов валют и желание большей определенности со стороны клиентов.  

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

Когда у клиента возникает потребность обменять наличную валюту, он, как правило, направляется в обменный пункт банка, при этом никто никогда не уверен в том, что в кассе банка есть достаточная сумма валюты — тем более, если она велика.  В лучшем случае продвинутый клиент постарается позвонить в банк и уточнить про наличие валюты. При этом все понимают, что банк может продать валюту другому клиенту, который пришёл раньше, или выдать ее вкладчику, которые для многих банков зачастую в приоритете. Кроме того, в любой момент банк может поменять курс — иногда это бывает по 5-6 раз в день. Все это создает дискомфорт потребителю.

Поэтому было решено реализовать идею интернет-магазина, в котором можно зафиксировать курс в режиме реального времени и при этом обменять наличную валюту.
Таким образом новый сервис решает две проблемы: 

  1. даёт клиенту возможность зафиксировать курс онлайн и прийти с суммой сделки для наличного обмена позднее в удобное время.
  2. гарантирует клиенту наличие необходимой суммы валюты или рублей для обмена в кассе банка.

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

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

ВТБ24 одним из первым из банков реализует это в своих отделениях, а для клиента взаимодействие с известным банковским брендом с госучастием — это удобно и надежно.

Технически процесс выглядит так. Пользователь заходит на сайт obmen.vtb24.ru или в чат-бот в Facebook и видит курс обмена, который он может зафиксировать на 2 дня.

Далее он вводит свои данные – фамилию, имя, при желании отчество и контактный телефон — и обязательно e-mail. Чат-бот сохраняет эти параметры для новых заказов — до момента, пока пользователь не попросит его удалить их. После ввода суммы валюты бот прописывает в чате срок, до которого нужно обменять валюту, и сумму (10% от суммы сделки), зарезервированную на счету клиента в качестве гарантии обмена до момента сделки — в случае отказа или просрочки банк удерживает ее.  Похожее резервирование делают путешественники, бронируя отели в интернете или арендуя автомобиль, предоставляя при этом средства на карте в качестве страхового депозита.

После подтверждения оформления заказа клиент переходит на платежную страницу, вводит реквизиты карты, и в случае, если операция резервирования средств пройдет успешно, на следующей странице получит подтверждение заказа (номер и параметры). Квитанция о заказе будет направлена на e-mail.

Обмен валюты: фиксируем курс для оффлайна в онлайне. Опыт ВТБ24 - 2

Обмен валюты: фиксируем курс для оффлайна в онлайне. Опыт ВТБ24 - 3

С точки зрения обновления курсов бот и сайт связаны с фронт-офисной системой банка, которая в режиме реального времени даёт котировки валюты (режим реального времени – по тикам с биржи, то есть раз в секунду).

Обмен валюты: фиксируем курс для оффлайна в онлайне. Опыт ВТБ24 - 4

Как мы с этим справились?

Для разработки сайта и чат-бота мы привлекли партнёров из EPAM и InspiredGames и
попросили их прокомментировать технические особенности проекта.

Слово InspiredGames:

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

Однако

  • банк даёт очень динамичные курсы. В рабочие часы они real-time отражают котировки на бирже, ночью (а сервис, естественно, круглосуточный) они тоже корректные. Банк передает в «движок» бота эти котировки, используя свой уникальный сервис.
  • реализована подготовка резерва и оплата (точнее, блокирование средств) по банковской карте прямо из бота с переходом на только одну web-страницу платежной системы (конечно, мы работаем и над новыми платёжными возможностями в мессенджерах).

При этом хоть бот и является интерфейсом, но реализованы и функции, обычно связываемые с back-end частью (указанное чуть выше получение актуальных курсов из банка, АРМ для его уполномоченных сотрудников, обсчёт данных по заказам, транзакционные действия с платежной системой, напоминания, аудит…)

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

Итак, прежде всего встал выбор – использовать ли какие-то фреймворки или конструкторы? Microsoft Bot Framework – замечательно, но нет коннектора к Viber и уж тем более к ВКонтакте. Другие конструкторы (по крайней мере, те, что мы нашли) не обладали нужной нам гибкостью. Поэтому приняли решение сделать всё самим. Что касается инфраструктурного решения, то посчитали, то лучше всего будет наше обычное и привычное использование RESTful Web API, соответственно – IIS, а для удобства – и MS SQL как СУБД (со всеми представлениями, разделением доступа, парой хранимых процедур и триггеров).

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

Первая: модульность.

Движок («ядро») бота «общается» как с мессенджерами, так и с другими системами (специализированная часть бэк-офиса банка, платежная карточная система) не напрямую, а через специализированные модули – «коннекторы». Кроме того, отделён и сервис данных. Таким образом есть:

  • набор коннекторов к мессенджерам и другим системам;
  • ядро (о нем чуть ниже);
  • сервис данных;
  • некоторые другие сервисы (пример – простой, но важный сервис окончательного подтверждения курса сделки банком).

Взаимодействие модулей, кстати, — тоже посредством REST API.

Когда от пользователя мессенджера, — неважно, какого, — поступает сообщение, соответствующий коннектор передаёт его в ядро, ядро анализирует его, формирует ответное сообщение (для этого нужен и сервис данных, и, часто, иные сервисы) и отправляет его обратно в этот коннектор. Это позволило нам:

  • вынести всю специфику и настройки работы с разными мессенджерами на уровень коннекторов. Viber, в отличие от Facebook Messenger, позволяет менять шрифт и цвета кнопок в клавиатуре? Отлично, «покрасим» их в цвета в соответствии с brand book прямо в настройках коннектора. В Facebook Messenger есть «карусели»? Очень хорошо, настроим коннектор к нему так, чтобы в ответе с показом отделений эти отделения были представлены именно каруселью. А ядру бота «знать» об этих особенностях необязательно;
  • в случае необходимости — распространять бот на другие мессенджеры, только лишь разработав новый (новые) коннектор и добавив его в пул, не трогая ничего другого;
  • -если потребуется, разнести коннекторы и другие модули на разные хосты.

Вторая: концепция «текст-контекст-подтекст».

Если говорить кратко, то в рамках этой концепции ответ ядра бота зависит не только от текста (семиотически, — геолокация, которую передает пользователь, тоже текст) сообщения пользователя, но и от контекста (в каком состоянии _сейчас_ находится пользователь в диалоге с ботом, «о чем пользователь говорит сейчас»), и, далее, — от подтекста (_истории_ диалога, причем не только данного конкретного пользователя, — «о чем шел разговор до этого»).
Наверное, кто-то уже догадался, что такую концепцию можно реализовать в терминах конечного автомата Мили (текст-контекст-> новый контекст-ответ) с бесконечной памятью (подтекст). Но если не вдаваться в детали, то проще всего пояснить на примерах.

Пользователь шлет боту сообщение «заказ». Текст = «заказ», но мало знать текст. Ядро обращается к сервису данных и получает текущий контекст этого пользователя. (Справочно – у нас сейчас чуть более 200 контекстов, и они могут быть настроены без программирования).
Если полученный контекст – «пользователь отправляет сообщение сотруднику банка», то подтекст не нужен, нужно лишь отправить сообщение в банк, ответить пользователю, что всё отправлено и через какое-то время с ним свяжутся, и попасть в новый контекст «главное меню».

Если же полученный контекст – «главное меню», то нужен еще и подтекст. А именно, ядро получает от сервиса данных подтекст, состоящий из совокупности формальных (как в паспорте) фамилии, имени, отчества и адреса электронной почты этого пользователя. И теперь ответ бота зависит от подтекста. Если такой подтекст непуст (а это означает, что пользователь ранее его боту сообщил), то бот предложит использовать его (или изменить в случае необходимости) и сделать заказ. Если же такой подтекст пуст, то бот как условие для того, чтобы сделать заказ, выдаст необходимость сообщить эти данные. И когда данные будут получены, появится и нужный подтекст, и заказ можно будет сделать. Следующий контекст – «все данные пользователя получены, продолжаем заказ». Ясно, что при всём этом накапливается история (которая, в свою очередь, будет использована для получения нового подтекста).

Отлично, но где же NLP? Верно, NLP (Natural Language Processing, обработка естественного языка) сейчас очень модная аббревиатура. Но вот только пока даже здесь, на Habrahabr, иногда обработку естественного языка путают с нейролингвистическим программированием. И, как и NLP — «программирование», NLP – обработка русского сейчас работает не так хорошо, как хотелось бы. Вдобавок есть ещё одна тонкость – по нашему мнению (и по мнению других экспертов), пользователь не хочет общаться с ботом как с человеком. Он понимает, что это – программа, и хочет получить UI как с программой – кнопки, цвета, картинки…

Но если у Вас есть лимон, то можно из него сделать лимонад. Именно поэтому мы:
— предпочли сделать «командный» (а не в чистом виде чат-) бот;
— используем сервис NLP как модуль (сервис для ядра, как было описано выше), позволяющий вместе с контекстом и подтекстом разобрать по тексту, чего же хочет пользователь. Этот модуль (в зависимости от контекста!) нам возвращает массив объектов, которые анализируются ядром. Простой пример – если контекст «оформление заказа на стадии выбора основных параметров обмена», то на текст «500 долларов» именно этот сервис выдаст массив

{  
   "deal_candidates":  
   [
 {
"direction": "buy", 
"amount":500,
"ISOCode": "USD"},
{
"direction": "sell", 
"amount":500,
"ISOCode": "USD"}
]
}

А уже по этому массиву ядро бота спросит «выберите, что хотите».

Итог нашего опыта:

  • удобные транзакционные боты для финансовых сервисов делать можно и нужно;
  • есть проверенные подходы, которые такие боты (и, соответственно, сервисы) позволяют создавать быстро, эффективно и, самое главное – масштабируемо и тиражируемо.»

Почему для сервиса была выбрана площадка не только сайта, но также и чат-бота:

  • Мессенджеры использует очень большое количество пользователей, не требуется отдельно искать и устанавливать специализированное мобильное приложение, достаточно просто добавить бота в список контактов и начать диалог с ним.
  • Операции в мессенджере – это работа в привычном интерфейсе – не требуется переучиваться или искать нужные функции, при этом реализован удобный доступ к финансовым транзакциям.
  • Запуская очередной бот, банк учитывает растущий интерес со стороны клиентов к новым каналам коммуникации.

ВТБ24 в дальнейшем планирует выпустить чат-боты во всех доступных мессенджерах (добавим Вайбер и Вконтакте, а также надеемся дождемся открытия API WhatsApp).

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

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

Фиксирование оффлайнового курса в онлайне — это новый важный канал предоставления услуг населению.

Это настоящая инновационная услуга, очередной небольшой шаг в цифровизации банковского сервиса. Новый сервис даёт возможность обменять наличную валюту «здесь и сейчас». При этом банк становится ближе к потребителям массового сегмента: необязательно быть клиентом ВТБ24, чтобы воспользоваться услугой, достаточно иметь карту любого российского банка.

Для ВТБ24 это также отличная возможность поиграть и протестировать новые технологии, чтобы определить вектор дальнейшего развития.

Автор: tashanov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js