11-12 марта прошло Хакатон Яндекс.
Деньги , в котором приняли участие мы, команда Happy Santa из Санкт-Петербурга.
О победителях уже есть отдельная статья .
Нашей команды там нет, поэтому мы решили рассказать сообществу Хабра о нашем проекте и решениях, которые мы использовали.
Как вы выбрали идею?
За 24 часа им пришлось решить не самую простую задачу: организаторы Хакатона попросили предложить интересные идеи и необычные кейсы, выходящие за рамки «продажи» ботов (спойлер: в конце концов, это был именно такой бот, который выиграл).
Мы решили сделать бота-продавца и автоответчик не из-за отсутствия идей, а потому, что сами работаем в электронной коммерции и хорошо знакомы с проблемами и многими неочевидными требованиями к бизнес-логике магазинов.
Оценив свои силы, мы решили сделать бота, который совершает покупки, информирует о статусе заказа, отвечает на популярные вопросы пользователей и собирает отзывы.
Кроме того, необходимо было создать склад с резервированием товаров и CRM для заказов и курьеров в минимальном рабочем состоянии.
Чтобы было еще интереснее, мы решили поддерживать два типа ботов: Проще для Telegram, который реагирует на статические команды.
Сложнее для ВКонтакте, который реагирует на обычный человеческий язык и больше похож на реального человека.
Как мы это сделали? Для нас это не первый хакатон; однажды мы даже заняли второе место на хакатоне ВКонтакте.
А как мы уже знали, самая главная задача на таких мероприятиях — хорошо разложить задачи (на самом деле приятно подать идею и произвести впечатление на судей, но вот кому интереснее).
Прежде всего, мы разбили все задачи и постарались максимально их изолировать, чтобы каждый из нас мог писать код независимо друг от друга.
Подводя итог, можно выделить три категории задач: Веб + интеграция с Яндекс.
Деньгами.
Транспортный уровень – прием и отправка сообщений в мессенджерах.
Мозг – принятие решений о том, как реагировать на сообщение.
Такое разделение позволило реализовать выбранные задачи независимо друг от друга и минимизировать отвлекающие факторы, разве что координировать взаимодействие между этими слоями.
Куча.
Хакатон — это не то место, где есть время узнать что-то новое, поэтому мы выбрали знакомый нам стек: PHP 5, MySQL, RabbitMQ, Redis. Было желание попробовать PHP7, но решил не рисковать.
RabbitMQ был выбран в качестве связующего звена между нашими условными слоями, позволяя нам разделить кодовую базу.
MySQL — хранилище наших заказов и их статусов.
Redis — кеширование, блокировка.
Проблемы, с которыми мы столкнулись.
Основные проблемы были на транспортном уровне.
Ранее мы делали ботов для ВК и Telegram и были знакомы с особенностями, плюсами и минусами каждой платформы.
Сообщения скачивались из мессенджеров через Long Pool, что значительно облегчило разработку; кроме того, ВК и Telegram реализовали это практически одинаково.
Для надежности мы предусмотрели алгоритм автоматического перезапуска процесса получения сообщений от API в случае фатальных ошибок и возобновления сообщений, которые были отправлены, когда бот был оффлайн.
Во ВКонтакте иногда возникает проблема с отправкой сообщений через API: отправить сообщение с первого раза не получается, поэтому отправку приходится повторять.
Здесь RabbitMQ очень помог с поддержкой отложенных сообщений (ttl + недоставленное письмо).
Тот же метод использовал Telegram. У них похожая проблема: периодически на любой запрос начинает выдавать ошибку 502. Это можно вылечить временем или перевыпуском токена бота (но не всегда).
Как мы писали выше, было решено сделать две версии бота.
В Telegram удобная реализация меню бота; система команд там работала хорошо — поэтому бот строго ориентировался на них и взаимодействовал с пользователем строго через команды и меню.
В «умной» версии боту можно было бы задавать стандартные вопросы, которые обычно задают клиенты в службу поддержки: об оплате, способе доставки, размерах, вакансиях.
Но как понять, чего хочет пользователь? Времени было мало, но хотелось сделать что-то крутое, поэтому мы решили повысить точность бота в ущерб полноте.
«Умный» бот отвечал на сообщения, содержащие всего один вопрос, содержащий от трех до десяти слов.
Таким образом мы отфильтровали обычные сообщения от пользователей и сложные наборы вопросов.
Остались только ясные области тем, на которые мы могли дать четкий и правильный ответ. Если бот не знал, что ответить или сообщение удалялось, то мы отправляли один из десяти стандартных ответов о том, что бот умный, но не очень умный.
Мы добавили десять разных вариантов ответа, чтобы случайно не попасть в спам.
Что порадовало, так это то, что такой подход работал хорошо, и если покупатель сознательно не пытался «сломать» бота, то он мог успешно ознакомиться с условиями доставки и оплаты и оформить заказ.
Проблема номер один: как понять, где в сообщении находятся вопросы и как их там найти? Для начала мы разбили текст на предложения, а затем рассмотрели каждое предложение по отдельности.
Знаки вопросительных предложений были довольно простыми: 1. Вопросительный знак, 2. Одно из вопросительных слов («где»/«когда»/…), 3. Союз «а» в начале предложения.
Проблема номер два: исправление слов с ошибками.
Для решения этой проблемы мы использовали пспелл .
Чтобы это исправить, он предлагал слишком много вариантов, поэтому мы отфильтровали их по расстоянию Левенштейна: вес замены = 1, вес удаления/добавления = 2, выбрать любой вариант из вариантов с меньшим весом.
Проблема номер три: как вы все-таки понимаете, о чем мы говорим? Времени на сверхкрутое решение с использованием лингвистического анализа и машинного обучения не было, поэтому мы просто искали ключевые слова.
Но, как известно, в русском языке слова имеют много разных форм.
На помощь пришла еще одна технология от Яндекса — Мистем .
Mystem — отдельная программа для морфологического анализа русского текста.
Он позволяет делать много классных вещей, в том числе определять форму слова, но нас интересовало только одно — приведение слова в нормальную форму.
Интересно, что некоторые люди при общении с ботом пытались под него подстроиться.
Они не пытались задавать ему вопросы, как обычному человеку.
И они старались облегчить ему жизнь и присылали ему конкретные слова «доставка/оплата», а он ждал от них вопросов.
Так что будущее, судя по всему, за комбинированными ботами, которые умеют и общаться, и понимать команды.
Как все это происходило в жизни? Обещали судить по пяти критериям: массовость, реализация, удобство, человекоподобие, оригинальность.
И отдельно было оговорено, что бот действительно должен работать, но как оказалось, это условие не является обязательным для победы.
Нам показалось, что лучшей презентацией было бы дать членам жюри и участникам возможность совершить реальную покупку через бота, пообщаться с ним, оплатить эту покупку, выбрать способ доставки, а затем получить товар курьером прямо на сайте.
Хакатон.
Как оказалось, мы переоценили интерес людей.
Никто из судей не совершил покупку и не узнал, как работает бот или почему мы сделали что-то действительно интересное.
Более того, мы специально подготовили среди товаров деревянные значки с логотипом Яндекс.
Денег, чтобы мотивировать как можно больше людей совершить покупку.
Бот все еще работает, поэтому вы можете попробовать его сами: santa12.tk vk.com/hsstore telegram.me/hsstorebot На скриншоте вы можете увидеть пример того, как был оформлен заказ в ВКонтакте.
Пользователь выбирает понравившийся товар и нажимает «Купить».
В этот момент создается диалог с сообществом, и соответствующий товар резервируется на складе на 5 минут. На этом этапе бот может собрать любую информацию о пользователе: имя, адрес, другие дополнительные поля.
Нам нужно было только имя.
Доставка осуществлялась двумя способами: самовывоз с нашего стола или курьером.
Оплата производилась через Яндекс.
Деньги.
Если оплата прошла, заказу присваивается уникальный код, который отправляется пользователю, чтобы курьер мог передать товар нужному получателю.
Кстати, курьер договорился о встрече на территории Хакатона в том же чате и после передачи товара сменил статус заказа в CRM на доставлен.
В этот момент пользователю пришло сообщение от бота о том, что заказ доставлен и предложение оставить комментарий об услуге.
К сожалению, нам не удалось победить.
Но в любом случае спасибо Яндексу за мероприятие и всем участникам.
И особенно для тех, кто воспользовался ботом и купил значки.
Было приятно увидеть ваше удивление работой бота и нашей службой доставки.
Кстати, если вы из Питера, то у нас осталось еще несколько значков и вы еще можете купить их за рубль.
Послесловие.
Напоследок хотелось бы отметить, что мы были единственной командой на хакатоне, которая работала с API ВКонтакте.
Была еще одна хорошая команда с ботом для Slack, а все остальные работали с Telegram API. Нам даже намекнули, что у судей, скорее всего, нет страниц во «ВКонтакте», и они не смогут оценить работу «умного» бота.
Конечно, у Telegram есть хороший API для ботов, но боты все равно делаются для пользователей.
Но с этим у них до сих пор проблемы.
Так что советуем всем не забывать про ВКонтакте, тем более, что там очень активно начали работать над API сообщений сообщества, продуктов и скоро добавят много новых и крутых функций.
Теги: #Яндекс #хакатон #Яндекс.
деньги #боты #Telegram #vkontakte #API ВКонтакте #Разработка электронной коммерции
-
Эйртаблер – Что Это Такое?
19 Oct, 24 -
Присоединяйтесь К Blogcamp
19 Oct, 24 -
Расширенные Сниппеты Против Входящих Ссылок
19 Oct, 24 -
Режимы Смешивания В Unity
19 Oct, 24 -
Использование Сканера Уязвимостей Openvas
19 Oct, 24