Идея создания собственного банкомата звучала несколько безумно. Но мы сознательно пошли на риск, чтобы наделить свой банкомат новыми возможностями, которых нет у конкурентов. В этом посте мы хотим рассказать, чему научилась наша команда в процессе разработки, тестирования и развертывания собственной сети банкоматов, и объяснить, почему изобретать велосипед заново отнюдь не бесполезное занятие.
Идея автоматизировать процесс выдачи наличных пришла в голову Джону Шеперду-Бэррону (John Shepherd-Barron). В 1967 году этому шотландскому изобретателю удалось убедить руководство лондонского Barclays Bank в том, что пока банк закрыт на выходные, обслуживать клиентов может машина. С тех пор эта идея прижилась повсеместно, а функциональность банкоматов расширилась с простой выдачи денег до большинства банковских операций.
Современный банкомат способен принимать наличные и безналичные платежи, работать с банковскими счетами, подключаться к системе банковского обслуживания и выполнять в ней различные операции.
Для нашего банка, не имеющего розничных отделений, и наших клиентов эти возможности чрезвычайно полезны, но с момента основания и до недавнего времени Тинькофф использовал инфраструктуру банков-партнеров. Так что все предпосылки для создания собственных банкоматов у нас налицо.
Несмотря на спешку, мы не хотели использовать стандартные решения, поскольку все они были зажаты рамками протоколов и давно состарившейся ОС Windows XP, которая являлась ядром абсолютного большинства из них.
Итак, мы начали с поиска подходящего «железа».
Аппаратная основа банкомата
Детище Шеперда-Бэррона по конструкции было не многим сложнее, чем торговый автомат, которым вдохновлялся изобретатель. Но современные банкоматы представляют собой компьютерные терминалы, объединяющие в себе самое разное оборудование.
Необходимый для любого банкомата минимум — это управляющий компьютер, устройство чтения карт, пин-пад – клавиатура, служащая для ввода пин-кода и сумм платежей, устройство, выдающее и принимающее банкноты, чековый принтер, а также набор датчиков, следящих за правильностью работы подсистем банкомата.
Основным требованием к «железной» части будущего банкомата Тинькофф была поддержка функции кеш-ресайклинга. Банкомат с этой опцией работает по замкнутому циклу, принимает и выдает денежные средства из одной кассеты и благодаря этому дольше работает без инкассаторского обслуживания. Кроме того, это устройство должно полноценно поддерживать NFC, считывать QR-коды и обладать большим сенсорным экраном.
Программное обеспечение банкомата
Одновременно с поиском аппаратного решения мы занялись вопросами софта.
С точки зрения программиста банкомат представляет собой клиентский терминал, который самостоятельно управляет лишь подключенным к нему оборудованием, а обработкой операций занимается сервер.
Для взаимодействия компьютера банкомата с картридером, пин-падом, ресайклером и прочей периферией, а также для организации «общения» с сервером существуют давно разработанные стандарты и протоколы. Они сильно ограничивают гибкость разработки и внедрение новых фич.
Идея создания банкоматного ПО с нуля могла бы показаться сомнительной, но иначе реализовать многое из задуманного командой Тинькофф было попросту невозможно.
Первоначально мы планировали отказаться от стандарта eXtension For Financial Services (XFS), описывающего логику управления оборудованием банкомата, в пользу собственного решения на основе Linux. С ним можно было бы добиться мультиплатформенности. Но эту идею пришлось отбросить, поскольку ни один производитель банкоматов не хотел соглашаться на вмешательство в драйвера банкоматного оборудования на столь глубоком уровне.
Поэтому к работам по созданию управляющего программного обеспечения, интеграции банкомата с сервером и написания API для создания различных сценариев работы банкомата мы привлекли подрядчика — компанию, у которой был опыт разработки программного обеспечения на .NET для платежных терминалов.
Вместо Windows XP, установленной в решениях конкурентов, банкомат получил 64-битную Windows 10. Свежая ОС давала больше возможностей по реализации визуально привлекательного и отзывчивого интерфейса, который напоминает тот, что реализован в нашем мобильном приложении, как внешне, так и по сценариям использования.
Всем, кто регулярно пользуется банкоматами, знакомы стандартные меню, которые предлагают выбрать язык, счет и т.д. Эти сценарии и алгоритмы во многом неинтуитивны и неудобны. Они жестко зашиты в стандартных протоколах NDC/DDC, предназначенных для общения банкомата и сервера (хоста).
Чтобы избавиться от этих атавизмов, пришлось сменить протоколы на оригинальное гибкое и современное решение, которое бы связало банкомат с серверной частью, целиком написанной на Java.
В самом начале коллеги из других компаний говорили нам, что мы сошли с ума, как только мы заикались о том, что хотим уйти от стандартных протоколов NDC/DDC. Но время нас уже рассудило.
Что нового для клиентов
Конечно, почти все эти изменения в недрах ПО клиенту незаметны, однако он легко отличит банкомат Тинькофф от других не только по экрану и меню — переработка программного обеспечения позволила реализовать новые сценарии использования банкомата.
Прежде всего, речь об авторизации в личном кабинете при помощи NFC. Каждый клиент, чей смартфон или карта поддерживает бесконтактную оплату, может воспользоваться банкоматом, просто приложив свое устройство или карту к считывателю. Стараниями наших программистов NFC полноценно работает с платежными системами Google Pay, Apple Pay и Samsung Pay, поддерживает пополнение и снятие денежных средств.
Еще один, прежде невозможный способ взаимодействия с банкоматом — quick cash. Так мы называем выдачу денег при помощи QR-кода, сгенерированного в личном кабинете через мобильное приложение банка. Достаточно просканировать экран смартфона и забрать нужную сумму без всяких очередей и проволочек с поиском карты, вводом PIN-кода и навигацией по меню.
Кроме того, нашей команде удалось устранить еще одно виртуальное препятствие, ограничивающее пользователей банкоматов. Теперь, авторизовавшись в банкомате любым удобным ему способом, клиент Тинькофф Банка из единого личного кабинета получает доступ ко всем своим картам и счетам. Так, например, вставив в банкомат дебетовую карту и обнаружив, что на ней недостаточно средств, можно сразу снять деньги с кредитки, оставшейся дома.
Оптимизация бэк-офисных процессов
При создании новых банкоматов мы уделили много внимания оптимизации бэк-офисных процессов: менеджменту, мониторингу, системе распространения обновлений, сервисному обслуживанию и инкассации.
Конечно, для всех этих операций существуют стандартные решения, но в них заложены те же недостатки, что и в протоколах NDC/DDC. Эти решения не поддаются кастомизации и тонкой настройке. Они попросту неудобны.
Инкассация
Инкассация — это отдельный пользовательский сценарий, запускаемый на банкомате. И он сложнее, чем те, что отвечают за выдачу денежных средств или пополнение счетов.
В решениях Тинькофф Банка взаимодействие инкассатора с банкоматом сведено к минимуму. От него больше не требуется делать подсчетов, вводить в банкомат дополнительные данные. Процесс управляется с хоста, а на экране банкомата отображаются инструкции для работника, осуществляющего замену кассет с деньгами. Уменьшив число действий, выполняемых инкассатором, мы сократили количество человеческих ошибок и ускорили процесс инкассации.
Сервера отслеживают счетчики кассет с деньгами, что в будущем позволит автоматизировать отправку заявок на обслуживание банкоматов и даже предсказывать необходимость в ней.
В теории Recycle-банкомат может не инкассироваться вовсе, но на деле в зависимости от местоположения банкомата, времени года и праздников из него могут забирать больше наличности или, напротив, пополнять кассеты быстрее, чем они опустошаются. Рано или поздно возникает необходимость в инкассации.
Собирая информацию о том, как различные факторы влияют на поведение клиентов, и отслеживая динамику использования банкоматов сети Тинькофф, мы разрабатываем технологию, позволяющую предсказать, как скоро потребуется дозаполнить или опустошить банкомат. Таким образом можно не только экономить на регулярных выездах инкасаторов, но и повысить доступность услуг, исключив ситуацию, в которой банкомат простаивает в ожидании обслуживания.
В перспективе предсказание инкассации позволит частично переложить эту задачу на клиентов банка путем управления клиентскими потоками. Эти схемы сейчас прорабатываются. Суть идеи заключается в том, чтобы стимулировать наших клиентов забирать денежные средства из переполненных банкоматов и, напротив, осуществлять пополнения счетов в банкоматах, где наличных осталось совсем мало.
Регулярное обновление ПО
Еще мы решили проблему с обновлением внутреннего ПО. Релизы выходят у нас раз в две недели и накатываются автоматически, в то время как у большинства банков на рынке обновление ПО происходит в лучшем случае раз в год. А сам процесс достаточно хлопотный.
Обработка запросов клиентов
Еще один момент. Нам удалось сильно сократить время, которое уходит на разбор претензий от клиентов. Работа с проблемой начинается сразу после обращения.
Вся необходимая информация передается банкоматом на сервер, автоматически, приводится в читабельный вид и отправляется в службу поддержки вместе с записями с камер. В итоге большинство проблем можно решить буквально за пару часов.
Тестирование прототипа: первые шишки
Для получения сертификатов от платежных систем VISA и MasterCard пришлось выделить отдельную команду, и все же в июне 2017 года прототип нашего банкомата был готов. С учетом того, что начали мы в январе, получилось весьма оперативно.
В тестовую доводку активно включилась команда тестировщиков. Затем банкомат был установлен в бизнес-центре, и доступ к нему получили все наши сотрудники. Хотя тестировщики проделали важную работу, выловив большинство критических багов, некоторые ошибки начали всплывать лишь на этапе внутреннего тестирования. Причем заранее предугадать появление тех или иных проблем было практически невозможно.
Так, в одном случае не срабатывал сценарий внесения в банкомат наличных. Просмотр логов операций ничего не дал, баг не воспроизводился. Выяснить в чем дело удалось лишь после просмотра записей с камер видеонаблюдения.
Оказалось, что клиент авторизовавшись в личном кабинете и достав купюры из кошелька, положил его на NFC-ридер. Внутри кошелька банкомат обнаружил другие карты, и сценарий внесения наличных, в котором не было учтено такого развития событий, сломался.
И если с этой проблемой справится было несложно (путем обновления ПО), то случаи, в которых играет роль человеческий фактор, так легко не исправляются. Например выяснилось, что люди имеют обыкновение игнорировать инструкции и действовать машинально. В качестве примера приведем случай, в котором клиент, желающий пополнить счет Тинькофф Банка без карты по номеру договора, вместо того, чтобы нажать кнопку «пополнить», выбирает «оплатить». Так он попадает в диалог, где предлагается выбрать в какую из популярных систем электронных переводов или на счет какого сотового оператора следует перевести средства. Клиент выбирает пункт Qiwi и вводит в поле, предназначенное для телефона, номер счета в Тинькофф банке. Причем Qiwi такой перевод принимает и кладет деньги на какие-то свои технические счета для дальнейших разбирательств.
Конечно, такую ошибочную операцию можно отозвать и вернуть клиенту деньги, но когда подобное происходит несколько раз в неделю, совершенно очевидно, что с интерфейсом что-то не так. Решить проблему помогло введение маски, которая не позволяет указывать в злополучном поле ввода что-либо кроме мобильного телефона.
Сказка будет впереди
Сами мы считаем, что наша история с банкоматами только началась. По сути у нас получился абсолютно уникальный продукт только благодаря тому, что мы не стали слушать возгласов типа «да как вы вообще будете жить без стандартных протоколов NDC/DDC». Хотя всевозможные трудности, конечно, были.
Карта банкоматов
Пока в нашей сети немногим более 200 банкоматов, которые позволили нам быстро отточить все узлы этого сложного «организма», включая центр управления. В ближайшее время их количество удвоится, причем далее мы планируем наращивать темп. И если вам интересны технические детали или кейсы по этому направлению, в последующих постах мы с радостью поделимся тем опытом, который нам удалось накопить.
Автор: sergey_belyakov