Оффтоп Konstantin Panphilov
19 209

Письмо в редакцию: Как мы собрали Telegram-бота для «Рокетбанка» за 24 часа

История от команды AngryDevelopers

В закладки

Одним из победителей 24-часового хакатона «Тинькофф банка», который прошёл в апреле 2016 года, стала команда AngryDevelopers, сделавшая полноценного Telegram-бота для работы с «Рокетбанком». Сейчас банковский сервис поддерживает его официально. Артем Косарев, менеджер по продуктам AngryDevelopers, прислал в редакцию vc.ru письмо о том, какой путь прошли команда и бот, и что их ждет впереди.

В прошедшие выходные на хакатоне, спонсируемом «Тинькофф Банком», команда AngryDevelopers создала первого в мире полноценного банковского бота для Telegram. Правда, он был создан на основе банкинга «Рокетбанка». После проведения первых транзакций бот был заблокирован «Рокетбанком», но спустя несколько часов пережил второе рождение.

Идея

За три дня до хакатона Boosters «Эра ботов» мы нашли в интернете неафишируемый декомпилированный сторонним разработчиком код приложения «Рокетбанка» для Android. Возможность использования API из этого кода уже закрыта, поэтому давать ссылки не будем. Спустя два часа после находки мы смогли авторизоваться в «Рокетбанке», используя лишь Python-консоль. Идея бота была для нас очевидной.

Опыт создания и банковских сервисов, и ботов у нас есть, поэтому вызов представлялся интересным. Новый канал контакта сервиса с аудиторией, ускоренная работа с банкингом по сравнению с приложением и тестирование одного из вариантов развития UX современных сервисов — все это хотелось проверить в работе.

К тому же краткое исследование интернета показало, что до сих пор никто не опубликовал ни одного банковского бота для современных мессенджеров, который бы давал полный контроль над счетом и банковскими услугами. Максимум, что есть — это анонс похожего бота от Bank of America.

Выбор платформы для бота также очевиден — технологически Telegram опережает всех на два шага вперед.

Хакатон

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

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

Вряд ли всем интересны факты об организации самого хакатона, поэтому перейдем сразу к боту.

Бот

Что вы можете сделать, используя «Рокетбота»?

Безопасно авторизоваться. Авторизация происходит аналогично авторизации в любом приложении «Рокетбанка».

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

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

Посмотреть остаток на всех картах. Быстрый и удобный запрос баланса.

Просмотреть историю операций. Бот покажет последние десять и предложит пролистать историю назад.

Перевести деньги. Вы указываете сумму и контакт получателя (можно выбрать из записной книги или ввести вручную). Если получатель — клиент «Рокетбанка», перевод пройдёт автоматически. Если нет, бот сгенерирует ссылку для операции.

Inline-режим работы

Используя inline-режим, вы можете делиться ссылками на свои страницы в «Рокетбанке», а также поделиться транзакцией, используя персонализированный поиск по вашей истории операций. Аналогично поиску в приложении «Рокетбанка».

Архитектура «Рокетбота»

Презентация перед жюри «Тинькофф банка»

Главным призом на хакатоне были 50 тысяч рублей и ускоренное собеседование в «Тинькофф банк». Победителем должен был стать бот, «который с минимумом ручного вмешательства максимально расширит спектр вопросов, на которые он умеет отвечать» — цитата из условий конкурса.

Мы хорошо понимали, что с нашей идеей написать «Рокетбота» выиграть хакатон было сложно, но и призы нас не очень интересовали. Мы считали, что бот для управления финансами намного нужнее и интереснее, чем техподдержка. И решили его показать.

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

К слову, это был первый хакатон, на котором жюри не поверило, что такой продукт можно реализовать за 24 часа — обычно в наших продуктах сомневались только участники.

Во время демонстрации, разумеется, посыпались вопросы в духе «а вы не из "Рокетбанка"?», «почему не сделали бота для "Тинькофф Банка"?» и прочие.

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

В результате номинацию, в которой мы победили, переименовали в «Бунтари» с призом в виде нарезного батона и формулировкой «зрелище было, а хлеба — нет».

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

Сотрудничество с «Рокетбанком»

Вечером воскресенья к тестированию бота подключились наши друзья. Это не прошло незамеченным для «Рокетбанка», и ближе к полуночи бот был с извинениями заблокирован техническим директором компании Олегом Козыревым.

«Рокетбанк» заблокировал сервер бота от неожиданности и, конечно, в целях безопасности своих пользователей.

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

Пользовательская безопасность и бизнес-логика не вызвала сомнений. Поэтому сейчас бот доступен всем пользователям «Рокетбанка» и Telegram практически в том же состоянии, до которого мы довели его на хакатоне, но уже с официального аккаунта компании.

Мы давно смотрели на ботплатформы как на площадку для реализации прикольных функций, которые можно было бы потестировать, а в случае удачи даже использовать в приложении. Чат и backend в «Рокетбанке» позволяет спокойно внедрять технологии ботов и даже больше. Да и потребность в боте у нас может быть только в развлекательных целях, так как наша поддержка знаменита своей человечностью.

Добавлять роботов в чат и тем самым рвать шаблоны в этом случае мы не планировали. Когда ребята запустили бота, мы быстро отреагировали и заблочили их сервер в целях безопасности. Разобравшись в вопросе, мы решили, что можно объединить усилия и сделать не только «первый банковский бот», но и самый крутой банковский бот. Во вселенной, наверное.

— «Рокетбанк»

Выводы

Все это время мы продолжали тестирование бота. С точки зрения юзабилити перенос сервиса «Рокетбанка» в интерфейс Телеграма показал себя замечательно: стандартные ежедневные операции (переводы друзьям, проверка баланса, запрос денег) занимают всего несколько секунд. Когда мы перенесем в бота возможность общаться с поддержкой, общение клиентов с банком станет еще ближе. И «Рокетбанк» отлично справится с такой «близостью» — их работа с клиентами давно стала образцовой.

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

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

#боты #рокетбанк #Telegram #рокетбот

Статьи по теме
Telegram объявил о первом масштабном обновлении бот-платформы
{ "author_name": "Konstantin Panphilov", "author_type": "editor", "tags": ["\u0440\u043e\u043a\u0435\u0442\u0431\u043e\u0442","\u0440\u043e\u043a\u0435\u0442\u0431\u0430\u043d\u043a","\u0431\u043e\u0442\u044b","telegram"], "comments": 39, "likes": 28, "favorites": 31, "is_advertisement": false, "subsite_label": "flood", "id": 15182, "is_wide": true, "is_ugc": false, "date": "Tue, 03 May 2016 15:53:17 +0300" }
{ "id": 15182, "author_id": 3, "diff_limit": 1000, "urls": {"diff":"\/comments\/15182\/get","add":"\/comments\/15182\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/15182"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

39 комментариев 39 комм.

Популярные

По порядку

Написать комментарий...

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

8

Как мы создали бота

Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Телеграмм Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк Рокетбанк

Ответить
7

Рокетбот

Ответить
9

Наглядная иллюстрация принципа "Выше головы не прыгнешь".

В данном случае - выше головы жюри конкурса ;-)

Плохо, очень плохо быть слишком умным....

Ответить
1

Спасибо, коммент в твоем стиле )))

Ответить
0

А ты мой постоянный читатель что ли ? ;-)

Ответить
8

Попробовал. Секси.

Давно не пользовался картой Рокета. Тут даже вернуться захотелось.

Вот ведь ;)))

Ответить
4

огонь.
в азии и в арабских странах на ура пойдет думаю,там до сих пор смс банкинг на уровне)

Ответить
1

Mmmmm good idea!!! $$$$$$$$$$$$$$

Ответить
3

согласен на 5 процентов от прибыли))за идею))обратите внимание на оман,катар,йемен,египет,алжир

Ответить

Комментарий удален

4

Попробовала бота, он работает и он очень удобный! Спасибо ребятам) только как инлайн не работает, хотя на гифке показано что можно его и так использовать.

Ответить
1

В любом чате @rocketbank_bot и он весь твой )))

Ответить
3

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

Ответить
2

Так, теперь все банки кинулись изучать бот-api телеграма))

Ответить
2

Зачем, если мы это хорошо умеем делать )) Welcome!!!

Ответить
2

А еще месяц назад я ставил эмулятор андроида на Мак, чтобы узнать баланс, пока телефон в ремонте. Бот решает реальную проблему — отсутствия доступа к банкингу при неимении телефона под рукой, спасибо, парни!
[ушел тестировать]

Ответить
0

Ждем результатов тестирования!;)

Ответить
–5

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

Уверен, что бот не взлетит.
Сделали просто потому, что у других нет. Meh
Рокет=дизайн, а уже потом классное обслуживание (с 1 точкой пополнения в пределах моей ветки метро).
Клиенты хотят анимашки.

Ответить
9

Сделали, потому что можем и любим Рокетбанк! ))

Ответить
1

Какой смысл в этих хакатонах, с заранее известным заданием, и заранее сформированной командой (еще куда ни шло)?

- "За три дня до хакатона Boosters «Эра ботов» мы нашли в интернете неафишируемый декомпилированный сторонним разработчиком код приложения «Рокетбанка» для Android. "
Т.е. аж за три дня до хакатона, нашли чужой API, запилили бота, пришли на хакатон, закопипастили. Кто молодец?

Я уж не говорю о том, что и задание то выполнили левое: сами придумали - сами сделали.

Ответить
0

Олег Юрьевич, можно и со своего аккаунта на VC писать )))) Мы все понимаем ))

Ответить
2

Кокой прозорливый! Пойдёшь ко мне на службу?

Ответить
0

Не не ) Спасибо!

Ответить

Комментарий удален

1

Сейчас посмотрим)))

Ответить
0

Вы про теги к транзакциям?

Ответить

Комментарий удален

1

Я не знаю всей истории, начало конечно "быстро поднятое не считается упавшим" - но в-целом ребята молодцы.

Никому не нужны эти дурацкие категории придуманные занудными дядьками - как справедливо замечено - за 3 копейки призовых ставящих задачи на 100 млн долларов и 5 лет работы.

Все это старая пословица прикупить за алтын (3 коп) пятаков (пятикопеечных).

А тут такой перпендикулярный ответ :)

Мол, ребята, все что у Вас работает с тормозами и глюками, и ради чего Вы держите команду разрабов + надсмотрщиков + еще человекочасы охраны/бухов/hr и прочих - оказывается реализуется за 24 часа и работает быстрее. На Вашем же API. Но лучше в разы. И бесплатно :)

Ответить
0

Коллеги из Рокета нам очень помогли и дали жизнь боту, так что #Рокетвсеещетот. Разработки там нету как в больших корпорациях, все тепло и лампово. А вот касательно Хакатонов +1

Ответить
1

Идея - хорошая в целом, но будет ли спрос на неё, я не уверен.
Хотя время покажет. А парни красавцы! Инновации всегда в тренде.

Ответить
0

Спасибо )

Ответить
–7

Лишь бы успеть, лишь бы отхватить кусок свой, состряпать бота на коленке и трубить об этом на каждом углу.

Ответить
2

Кусок чего ?) Писать код могут многие, а делать интересные продукты на коленке не выходит (((

Ответить
–8

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

Ответить
2

Если откусить часть аудитории удалось значит-таки кому-то надо

Ответить
0

А что-то действительно полезное на хакатоне придумал кто-нибудь?

Ответить
0

Они участвовали в этом хакатоне? И что придумали?

Ответить
0

Да не я в целом про хакатоны, а на этом ничего интересного не было (

Ответить
0

Ага, вот мой вопрос-то был - придумал кто-то что-то интересное с ботами или нет.

Ответить
0

Слишком мало упоминаний, что бот для рокетбанк. Нужно больше упоминаний!

Ответить
–1

Рокетбанк!

Просто мы очень любим Рокетбанк!

#рокетвсеещетот

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления