Зачем нужна навигация по торговому центру во Вконтакте, Телеграме и Фейсбуке

10bbc7ea44e44f459256e738addaacd4.png


До сих пор трудно сказать, зачем я пошёл с девушкой в Икею 6 марта. Перед праздником внутри была куча людей. Девушке нужна была какая-то мелочь, по-моему, подсвечник. Что бы не толкаться в очередях, я решил установить приложение Икеи, мол «щас мы эту хреновину как по маслу найдём».

Тяжелое приложение через местный вайфай устанавливалось медленно. Сам вайфай постоянно терялся. Я потел и матерился, а оно всё не ставилось. Эту мелочь мы нашли, но потратил слишком много нервов.

Компания, в которой я работаю, как раз делала навигационные терминалы для Икеи в Химках. Поэтому после праздников пришёл и нажаловался разработчикам на эту сложную и неприятную ситуацию. Надеялся, что есть какой-то простой способ поиска.
Разработчики объяснили, что мобильная навигация в помещениях (индор-навигация) развивается в сторону маячков iBeacon, которые без приложения не работают. Так что, приложение нужно будет скачать всё равно.

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

Идея застопорилась, пока мы не обратили внимание на шум вокруг чатботов. И нам показалось, что вот оно — великое решение! Бот же не нужно устанавливать, и он работает, как одно большое поле поиска. В общем, ешь кокосы — жуй бананы вводи запросы — получай ответы.

Оставался небольшой вопрос — как связать, известный по Яндекс.Картам и 2Гис, интерфейс навигации с текстовым ботом. Все ведь пользуются навигаторами: открыл приложение, определил по GPS своё местоположение, ткнул в нужный дом и следуй маршруту. Если где-то ошибёшься, то программа тебя поправит и подскажет куда повернуть, чтобы вернуться на маршрут. Всё продуманно и удобно. А в боте ничего этого нет.


Мессенджеры, в которых сейчас работает бот

Самым очевидной базой для бота нам показался Вконтакт — у него самая большая аудитория в России и у подавляющего большинства стоит его приложение в телефоне. И то что Вконтакт выкатил Callback API пришлось нам очень кстати. На этом АПИ мы сделали первого бота (сейчас бот работает в Телеграме и вовсю пилится версия для Фейсбука).


Как понимать, где человек находится, если бот не может использовать датчики телефона?

Знакомые интерфейсы навигации довольно точно знают, где находится телефон (и его владелец), благодаря спутникам. Внутри помещений спутники не работают, зато есть маячки iBeacon, которые определяют координаты телефона. Для того чтобы маячки работали нужно подготовленное приложение и Bluetooth 4.0. Но популярные мессенджеры не работают с iBeacon и вряд ли когда-то будут.

Поэтому ни черта мы не знаем о координатах пользователя.

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


7de6ebfe8a5f47148b179bb1531b3665.jpg

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

Тогда мы представили, как бы человек спрашивал маршрут у своего друга в том же мессенджере. У друга же тоже нет доступа к датчикам, поэтому придётся как-то объяснять без координат. Вероятнее всего, человек сказал бы, какие вокруг него магазины. Друг бы ответил: «Встань лицом к %brand_name%. Иди налево до эскалатора и поднимись на нём. Там слева увидишь».

Мы сделали точно так же — то есть мы строим маршруты не между пользователем и объектом, а между объектами. Конечно, бот не может объяснить маршрут неопределённо («Там слева увидишь»), зато может аккуратно проводить мимо известных ему магазинов с подсказками.


35c3db3863654f4797fb37c657c69e3b.png

Я стою у Ашана и мне надо в Кальцедонию (интересно зачем?). В запросе я использую разделительную запятую, чтобы бот понял, что это разные магазины

Такая система формирования маршрута, кстати, тоже ускоряет процесс — координаты магазинов уже в памяти и не нужно вычислять координаты телефона (у обычных систем, типа Яндекс.Карт, на это уходит несколько секунд). Плюс, последний раз, когда я проверял, маячки иногда могли дать погрешность в 10 метров. Для торгового центра это существенно


Как показывать несколько подходящих под запрос помещений? Например, что показывать на запрос «туалет»?

Туалет —альфа и омега индор-навигации. В любом торговом центре, где стоят наши навигаторы, туалет входит в топ-2 поисковых запросов. Потому что:


  1. Они всем нужны. Причём нужны, обычно, быстро и резко.
  2. Их делают в самой тёмной дыре торгового центра, за железной дверью с длинным коридором.
  3. К ним забывают повесить навигационные таблички.
  4. Они не меняют своего местоположения, в отличие от банкоматов, которые тоже суперпопулярны.

Поиск туалета — отличная задача для бота. И по всем признакам, бот справится лучше приложения. Как минимум, потому что в случае крайней нужды, устанавливать приложение совсем не хочется. Как максимум, потому что в тёмных дырах торгового центра может не оказаться маячков.


Являются ли навигационные приложения и бот конкурентами?

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

Но мы считаем, что всё-таки бот не конкурирует с приложением, потому что входные условия у них разные. Приложения (мы говорим о приложениях типа Navigine) просто созданы для вдумчивого шопинга, а бот для спонтанного и быстрого поиска.

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

Обычно в торговом центре не один туалет и на карте они все называются одинаково. Ткнуть в карту и выбрать нужный тоже нельзя — бот отправляет обычные картинки. Тогда как объяснить человеку, где находится нужный ему объект? Сейчас мы полностью перечисляем все подходящие объекты, а первые пять отмечаем на карте крупными значками.


a93c4961ff5c4ffa89eb11f99062b9b1.jpg

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

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


7bdae0af83254de08fe9dcc9e4ebdc0d.jpg

Тот же запрос «Одежда», только в многоэтажном ТРК «Семья». Таких ответов придёт на 4 этажа

Мнения в команде разделились. Одни говорят, что так и надо, пусть пользователи пишут запросы точнее, другие — что так не надо и пусть ответ приходит компактно. Если у вас есть мысли на этот счёт, то расскажите нам в комментариях.

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

Но туалеты бывают мужские, женские, для инвалидов и детские. Иногда разные типы туалетов бывают на разных этажах (да-да). Тогда нам нужно не просто вести человека в ближайший туалет, но ещё и определять его пол, детей и инвалидность.

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

Вконтакт даёт нам определить пол, а Телеграм — нет. Про детей и инвалидность, в контексте туалета, вкусовые предпочтения, мечты и желания пользователя мы вообще можем только догадываться.


Как всему этому научить человека?

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


  1. Показывать одну точку по конкретному запросу.
  2. Показывать маршрут между точками с подсказками.
  3. Показывать кучу точек по категорийному запросу.

Прямо по этим пунктам мы проводим обучение:


3f6710b912d548b2a3d4c71084b20626.png

Главная проблема туториала в текстовом интерфейсе — он длинный и люди не всегда доходят до конца. С другой стороны, если не дать туториал, то пользователь уйдёт еще быстрее. В общем, стандартные проблемы туториалов. Придумать тут какие-то ухищрения трудно, а подходящих примеров для бота нам найти не удалось.


С какими трудностями мы столкнулись походу?


Трудность 1

Люди пишут названия магазинов, как бог на душу положит, с ошибками и описками. Помимо этого, есть устоявшиеся названия некоторых брендов (Макдак, Сбер), транслитерированые названия (Зара, Инсити) и непонятные названия (L«occitane читается «локситан»).

Как решили:
Мы взяли алгоритм подсчёта расстояния Дамерау — Левенштейна. Кто не знает, он позволяет посчитать сколько нужно сделать операций, чтобы превратить одно слово (словосочетание, предложение) в другое.

Мы модифицировали алгоритм и добавили поиск по подстроке и поиск по подпоследовальности из библиотеки FuzzyString. Дополнили поиском по транслитерациям слов, с помощью библиотеки. Получился алгоритм нечёткого поиска.

Понятно, что никакой нечёткий поиск не совместит L«Occitane и Локситан. Для этого мы используем словарь синонимов. Он хранит фольклорные названия: «Мак», «Макдак» для McDonald’s и подобное. Добавляем к базе поиск по ключевому слову, чтобы по БигТейсти найти Макдональдс.

В общем, выглядит это так:


  1. Человек вводит запрос, например, «Лапситан» (услышал, видимо, краем уха).
  2. Дальше бот ищет модифицированым алгоритмом Дамерау — Левенштейна.
    a. По названию.
    b. По синонимам.
    c. По ключевым словам.
  3. В случае провала выполняется поиск по подстроке и/или по подпоследовательности
    a. По названию.
    b. По синонимам.
    c. По ключевым словам.
    В нашем случае бот найдёт L«Occitane уже на этапе 2-b, можете проверить.


Трудность 2

У нас возникли проблемы с ограничениями на количество запросов к АПИ. У Вконтакта — это 3 запроса в секунду. Довольно серьёзно, учитывая, что даже сделать вид, что бот прочитал сообщение — это тоже запрос к АПИ.

Как решили:

Сам Вконтакт предлагает обходить это ограничение методом execute, который позволяет упаковать 25 запросов в один.

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


Трудность 3

Пользователю Вконтакта пришёл текст маршрута, но не пришла картинка. Вконтакт объяснил нам: «Похоже, что Вы просто наткнулись на проблемный сервер».

Как решили:

Техподдрежка предложила нам «в следующий раз добавить к запросу параметр https=1 или передать последнюю версию апи». Следующего раза пока не было, но надеюсь кто-то подует на воду.


Как нас поддержать?

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

Торговых центров пока три: Коламбус в Москве, Питер Радуга в Санкт-Петербурге и Семья в Перми. Обязательно пишите торговые центры, которые хотите увидеть прямо в бот (в выборе торговых центров). Так мы быстрее договоримся с этими ТЦ и добавим их в базу.

© Geektimes