Как мы делали бота для банка “Открытие”

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

Что у бота под капотом?
Приступая к работе, мы думали о ситуациях, когда пользователю будет удобнее взаимодействовать с ботом, а не с основным мобильным приложением. Список преимуществ бота получился таким:
  • Доступен для всех клиентов и не-клиентов банка
  • Не нужно ничего устанавливать
  • Легко авторизовываться
  • Можно встраивать на веб-сайт и в терминал самообслуживания
  • Кроссплатформенный

Но естественно, в сравнении с приложением бот имеет и ряд серьезных ограничений:
  • Сторонняя среда
  • Ограниченное качество визуализации
  • Не-realtime система и меньшая отзывчивость, например, при выборе финансового продукта
  • Невозможно работать со сложными данными
  • Не видно всех доступных опций

Проанализировав ситуации взаимодействия бота с пользователем, мы составили список потенциального функционала:

Информационный функционал

  • Курсы валют
  • Банкоматы и офисы
  • Реквизиты и о банке

Операции
  • Авторизация
  • Шаблоны
  • Пополнение телефона
  • Переводы
  • Автоплатежи

Прочее
  • Заказ карты
  • АСВ (это выплаты клиентам других банков через Агентство Страхования Вкладов)
  • Push-нотификации об операциях и других событиях
  • Переключение на живых операторов
  • Запись в очередь в офисах
  • Новости
  • Обратная связь

NLP (Natural language processing) для обработки запросов

Конечно, все это не могло уместиться в первый релиз, и в мы итоге остановились на следующем MVP:

Информационный функционал

  • Курсы валют
  • Банкоматы и офисы
  • Реквизиты и о банке

Операции+баланс
  • Авторизация
  • Пополнение телефона

Прочее
  • Заказ карты
  • АСВ

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

imageАлександр Нестеров, Открытие Digital, product owner
«Конечно, бот не заменит нашу службу поддержки, мобильное приложение или интернет-банк, но некоторые простые вопросы и регулярные задачи проще и удобнее решать в привычном интерфейсе мессенджера. Поэтому бот — это еще один дополнительный канал обслуживания наших клиентов, который делает общение с банком еще более удобным и доступным».

Обработка естественного языка vs. кнопки
Изначально мы планировали сделать бота с NLP, но в итоге отказались от этой идеи. Платформы по лингвистическому процессингу, с которыми мы экспериментировали — WIT.AI (принадлежит Facebook) и API.AI (российский стартап в кремниевой долине, который буквально месяц назад купила Google) — справляются с русским языком откровенно плохо. Живые пользователи задают боту совсем не те вопросы, которые он ожидает услышать, поэтому более чем в 50% случаев система не выдает релевантных ответов, и пользователи расстраиваются.

imageАртур Сахаров, технический директор Redmadrobot
«Пока в этих системах почти не работает определение синонимов и машинное обучение. С теми конкретными фразами, на которые движок обучен, проблем нет. Но шаг в сторону — и ваш бот вообще не понимает, что он него хотят. И еще API.AI безумно дорог за тот функционал, который там есть, а разрабатывать собственную NLP-систему для первого запуска мы не планировали. Несмотря на то, что в итоге мы все-таки сделали выбор в пользу «кнопочного» бота, было запилено два полноценно работающих прототипа c нашим бэкэндом и лингвистическим процессингом — и в Telegram, и в Facebook Messenger».

Вот эти прототипы:

Bot Demo. Инфо.

Bot Demo. Операции 1.

Bot Demo. Операции 2.

Bot Demo. Telegram.

Почему Facebook Messenger
В Telegram реализовано какое-то количество банковских ботов, но все они ограничены в возможностях из-за особенностей системы безопасности этого мессенджера. При выборе платформы для запуска бота банка «Открытие» мы оценивали и безопасность, и популярность мессенджеров. Из мессенджеров, поддерживающих создание полноценных ботов, первое место по популярности в России занимает Facebook Messenger. По данным TNS Russia, он в пять раз популярнее Telegram.
d2b9b2ad566c4dbeb628ac8ba0288ef2.jpg
В Messenger есть много важных элементов для обеспечения безопасности, которые отсутствуют в Telegram: контроль доступа администраторов, двухфакторная аутентификация аккаунтов, авторизация пользователей с отправкой подтверждения на наш сервер по второму каналу. На момент создания системы даже не было надежного способа определить, кто передает сообщения на ваш бэкенд: телеграм или http-клиент злоумышленника. В отличие от Telegram, безопасность аккаунтов, администрирования и сообщений для ботов были сразу заложены в платформу Facebook. В Telegram есть некоторое количество банковских ботов, но ни в одном из них нет авторизации и платежей. Везде это только информационный функционал типа банкоматов и акций: АльфаБанк, Райффайзен, Сбербанк, Промсвязьбанк, АК Барс, Росбанк. Свой платежный бот был у «Рокетбанка» (@rocketbank_bot), но его довольно быстро закрыли, да и бот «Тинькоффа» (@MoneyTalkBot) больше не работает и отправляет пользователя в отдельное приложение.

d236da8761f24f75bc6dfa49a43ffbd9.png

Авторизация и интеграция с банковской инфраструктурой
В Facebook существует несколько способов произвести безопасную авторизацию. Мы использовали такой: когда пользователь хочет авторизоваться, бот просит его ввести код, который надо получить через мобильное приложение.
1780c1a6d51345f2959ba4f006e61b8b.png
Тут уместно замечание, что для авторизации в боте нужно приложение банка, и это может показаться странным: обычно ведь авторизацию делают через интернет-банк. Однако это странно только для тех банков, где web-версией пользуется намного больше клиентов, чем приложением. Сейчас аудитория мессенджеров живет преимущественно в мобайле, поэтому авторизация через мобильное приложение логична.
be2e128ccd24489c91553dc7d24b1511.png
Получение данных о счетах
Пользователь может запросить через бот информацию о своих счетах. Но есть и мобильное приложение, которое обращается к API банка «Открытие» за теми же данными. Чтобы обойтись без доработок на стороне «Открытия», мы просто использовали готовый API и отправляли туда запрос от своего бэкэнда — такой же, каким он был бы от мобильного приложения.Оплата услуг
Фактически система такая же, как и со счетами: когда пользователь хочет положить денег на телефон, за кулисами в «Открытие» прилетает запрос по спецификации API для мобильного приложения. Бэкенд бота сам трансформирует программный интерфейс работы схем оплаты поставщиков в диалоговый интерфейс общения с пользователями.Запись на выплату от АСВ
В CRM-системе «Открытия» хранится информация по выплатам от Агентства страхования вкладов — когда и в каких банках есть свободные слоты для записи на выплату. Когда клиент через Facebook говорит, что ему надо осуществить запись, бэкэнд теоретически мог бы залезть напрямую в сеть банка, но в целях безопасности система реализована иным образом.

Задача решена при помощи очереди, в которую мы кладем запросы. Например, «мне надо получить свободное время для записи для такого-то офиса». Внутренняя система сама проверяет очередь раз в несколько секунд и забирает данные, предварительно валидируя и проверяя их, обрабатывает запросы и кладет данные обратно в очередь, откуда их уже забирает наш бэк. Таким образом мы разносим эти системы и можем обойтись без прямых соединений с локальными БД.

Надо сказать, услуга популярна среди пользователей — в первые дни выплат запись делают по несколько сотен человек.

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

Комментарии (1)

  • 23 ноября 2016 в 18:53

    0

    Планируете ли вы в будущем перейти к полноценному NLP?

© Habrahabr.ru