# Диалоговое путешествие (Dialog Journey)
**Название плагина** | Диалоговое путешествие (Dialog Journey) |
**Разработчик** | Официальные плагины от Metabot |
**Авторы** | Гарашко Артем Юрьевич ([artem@metabot.org](mailto:artem@metabot.rg)) |
**Дата создания** | 04 Января 2023 |
**Последняя дата обновления** | 06 Января 2023 |
Плагин работает так, что запоминает один единственный раз, когда пользователь пустился в путешествие. Плагин на текущий момент не поддерживает повторные путешествия по одному и тому же путешествию. Если вам необходимо заново отправить пользователя в повторное путешествие, для этого создайте новое путешествие или очистите старые данные по путешествию в базе данных.
##### Цели Следующим шагом, который на самом деле надо делать одновременно с предыдущим, мы рекомендуем заполнить **Цели** для путешествий. Мы же с вами занимаемся бизнесом и не хотим создавать бесцельные путешествия, верно? Пример целей для онбординга партнеров: - Регистрация в партнерской программе; - Сертификация партнера. Пример целей для обучения стрельбе из луков: - Обучить лучника; - Продать лук и стрелы; - Продать билеты на соревнование по стрельбе. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/uUd9oJr3ecQ3Rcty-image.png)Плагин работает так, что позволяет записать достижения цели по каждому путешествию для каждого пользователя только один единственный раз. Если в чат-боте пользователь несколько раз пройдет по сценарию, то повторные достижения одной и той же цели будут проигнорированы.
##### Фазы путешествия Разбейте каждое путешествие на **Фазы**. Мы сознательно используем слово «фазы», а не «этапы» или «шаги», потому что оно нам больше нравится — ведь переход от фазы к фазе т.е. так называемый «фазовый переход» подразумевает некую качественно новую форму, например, лед при нагревании превращается в воду, а при еще большем нагревании в пар. Мы же с вами хотим строить диалоги с нашей аудиторией так, чтобы каждый раз выходить на новый уровень взаимоотношений, верно? Пример фаз для онбординга нового партнера: - Вовлечение; - Знакомство; - Сертификация; - Первая транзакция. Пример фаз для учебы стрельбе из лука: - Изучает основы по стрельбе и безопасности; - Учится делать DIY лук и стрелы; - Учится стрелять; - Сдать экзамен по стрельбе; - Записать на соревнование по стрельбе. Согласитесь, что каждая из фаз, приведенных в примерах выше, символизирует качественно новое состояние, дойдя до которого, наш пользователь, уже не сможет вернуться назад и забыть все то, что было до этого? Наша цель при проектировании и разработке чат-ботов и авто-воронок заключается в том, чтобы выстраивать диалоговые коммуникации таким образом, чтобы они помогали пользователю двигаться от фазы к фазе, получая пользу, и тем самым доходить до завершения путешествия и помогая нам достигать бизнес-цели. Как именно строить такие коммуникации мы разберем ниже. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/PthMoEOsvxnffnIV-image.png)Плагин работает так, что запоминает один единственный раз, когда пользователь завершал одну фазу путешествия и начинал новую. Плагин запоминает дату и время фазовых переходов, чтобы по ним строить аналитику. Если пользователь пришел в сценарий в чат-боте, в котором в DJ сообщается о смене фазы, то плагин проигнорирует повторные команды.
##### Польза Теперь самое интересное. Мы расписали наши путешествия, фазы и цели. Теперь давайте подумаем о том, как же мы будем влиять на наших пользователей, чтобы они достигали нужных нам целей? Спланируйте **Пользу**, которую будете предоставлять вашей аудитории, на каждой фазе путешествия, чтобы выстраивать доверительные отношения и двигаться вместе с ней к целям. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/Js3bL8UtCGl2GxTO-image.png) Мы предлагаем воспользоваться следующими принципами современной научной теории маркетинга, который на самом деле, если хорошо подумать, представляют из себя обычный здравый смысл из сферы человеческих отношений и житейскую мудрость, а именно: - **Эмпатия** - Давайте мы будем пытаться понять кто перед нами, а не бомбардировать людей не актуальной для них информацией; - Давайте понимать на каком этапе принятий решения о покупке (buyer's journey) находится человек, чтобы давать именно то, что нужно сейчас; - Давайте стараться учитывать чувства и эмоции людей, чтобы отвечать корректно контексту ситуации; - Здорово, что чат-боты помогают все это реализовать, ведь чат-бот это диалог, в котором можно задавать вопросы и запоминать ответы, а благодаря технологии распознавания естественного языка (NLP) можно понять намерение пользователя по свободному вводу и даже распознать эмоции; - Пример для строительной сферы: в самом начале коммуникации с целевой аудиторией, задайте 2-3 квалифицирующих вопроса, которые помогут определить к какому сегменту (классу и подклассу) относится человек. Также, вы можете узнать квалификацию строителя (профессионал или новичок), чтобы в последствии вести каждый сегмент по своему уникальному пути. - Пример для сказочной истории: аналогично, cоздайте квалификационную анкету, в которой будет несколько вопросов, которые помогут вообще понять кто перед нами. Вы не не захотите "впаривать" стрельбу из лука волшебнику 100500 уровня, который обидится и превратит вас в лягушку? =) - **Персонализация** - Раз мы можем говорить с пользователем и задавать интересующие нам вопросы, так давайте использовать полученную информацию для построения персонализированных диалогов. А если интегрировать чат-бот с корпоративными информационными системами, например, с E-Commerce веб-сайтом, где хранится история покупок пользователя, то можно строить еще более полезные персонализированные диалоги и предложения. - Пример: как минимум, можно иногда обращаться по имени. Конечно, это не заставит пользователя прийти в восторг и сделать покупку, на, как минимум, повлияет на общее восприятие вашего бренда и позволит заработать очки доверия. Ведь мы же строим долгосрочные отношения на доверии, а значит должны всегда заботиться о целостности и последовательности наших коммуникаций. - Пример из строительной отрасли: узнав сегмент, опыт строителя и регион, вы можете сделать персональное предложение, например, предложить партнерам присылать заявки на строительный заказы из этого региона, предложить горячие скидки на продукцию любимого бренда, пройти обучение для новичков и так далее. - Пример для сказочной истории: узнав, что перед нами маг, мы можем предложить ему магазин для магов от наших партнеров или просто выпить чашечку кофе. - **Такт и ритм** - Мы настоятельно рекомендуем пользоваться житейским здравым смыслом и бизнес этикой при программировании автоматических коммуникаций. - Также как и в реальных отношениях в нашей жизни, давайте cоблюдать чувство такта и ритма в цифровых отношениях, которые автоматизируем. Людям не понравится, если мы пишем им, как назойливая муха, с поводом или без повода. Также, люди могут про нас начитать забывать и контакт потом восстановить будет сложнее, если мы совсем перестанем общаться. Если же мы будем присылать информацию, которая не релеванта, не принимая обратную связь и не корректируя коммуникацию, то люди могут отправить нас "в баню". И так далее. - Пример из строительной отрасли: когда мы узнаем темп обучения, который удобен коллеге-строителю для повышения своей квалификации, мы можем начать присылать ему обучающие материалы прямо в чат-бот так часто как будет удобно: раз в день, неделю, месяц. - Пример из сказочной отрасли: узнав, что перед нами опытный следопыт, который отправляется в охотничьи вылазки раз в месяц, мы можем отправлять ему информацию о новинках прямо на кануне очередного похода, о котором можем узнать, спросив об этом. - **Доверие** - Доверие клиента или партнера — это самое главное конкурентное преимущество и один из самых главных активов. Никто не свяжет свою жизнь с человеком, в котором не уверен. То же самое происходит в бизнесе. Теряя доверие к бренду или компании, вы уходите к другим, верно? Ваши клиенты делают так же. - Завоевание доверия это сложный и длительный процесс, требующим особого подхода. Большое доверие увеличивает продажи и доходы компании, а потеря доверия увеличивает расходы на рекламу и маркетинг. Доверие зарабатывается по крупицам, а потерять его можно в один момент. - Конечно, доверие к бренду или компании складывается из многих факторов, на которые мы не можем влиять чат-ботом, например, из качества продукции. Если продукция плохая, чат-бот вряд ли сильно поможет в выстраивании доверия, какие бы красиво он не говорил. - Однако, если в компании порядок с продукций и сервисом, то создание захватывающего, полезного и удобного клиентского опыта (CX) в виде бесшовного диалога в чат-боте, интегрированного в бизнес-процессы и информационные системы предприятия, может стать тем самым ключом к конкурентному преимуществу, который изменит баланс весов в пользу вашей компании. - Пример доверия: хорошо понимать своих клиентов, проектировать правильные путешествия, которые дают пользу, помнить о долгосрочности диалогов и отношений, выстроить полезный сервис в чат-боте, которым хочется пользоваться и рассказать другим. - Пример потери доверия: игнорировать запросы клиентов, не решать пожарные ситуации, долго строить отношения по стратегии, а потом начать рассылать спам и прочее. - **Щедрость** - Тоже не менее важный принцип, как и доверие. В эпоху перепроизводства и высокой конкурентности (когда в каждой категории на полке десятки и сотни продуктов), щедрость это то, что позволяет выстраивать доверительные отношения. - Как и в жизни, так и в бизнесе, никто не захочет дружить с теми кто только «берет» и не готов «отдавать». - Что означает щедрость в применении к чат-ботам: полезный контент, которым вы можете делиться; полезные вебинары; выставки; сервисы и так далее.Аналогично целям, предоставление пользы фиксируется один единственный раз и повторные выдачи той же самой пользы не фиксируются в базе данных, поэтому вы можете не опасаться за то, что пользователь несколько раз обратился за одним и тем же контентом — это не собьет статистику. Предоставление пользы будет отслежено только самый первый раз.
##### Показатели Спланируйте **Показатели** (или метрики), которые вам необходимо измерять. Пример из жизни: - Вы можете завести метрику, которая отображает % потребления контента, чтобы оценивать степень "созревания" пользователя; - Индекс NPS (удовлетворенность компанией); - Настроение, например, вы можете периодически опрашивать как у ваших пользователей дела ; - Степень осведомленности о продукции компании (от 0 до 100). Сказочный пример: - Количество купленных стрел; - Количество сломанных луков. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/xS7cTgNxYIH7N3xH-image.png)Показатели, в отличие от Целей и Пользы, можно измерять сколько угодно раз и в любое время. То есть, если с течением времени показатель меняется, у вас будет вся история изменений.
В текущей версии плагина показатели закрепляются за путешествием и фазой во время которых они были собраны. В будущих релизах планируется сделать поддержку сбора общих показателей, не относящихся к конкретному путешествию или фазе.
##### Активности **Активности** — это события, которые происходят в ходе путешествия или действия, которые совершает пользователя, во время путешествия. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/aaeDllQs2ESRs41o-image.png) Существует 7 основных событий, которые позволяют управлять ходом путешествия и отслеживать его хронологию:ID | Код | Название | Пояснение |
1 | journeyStarted | Путешествие начато | Используется в самом начале путешествия, когда стало понятно, что пользователь "отправился в путешествие". |
2 | phaseStarted | Фаза начата | Используется при запуске следующей фазы, а также автоматически в начале путешествия. |
3 | phaseCompleted | Фаза завершена | Используется при запуске следующей фазы, завершая предыдущую, и при завершении всего путешествия. |
4 | phaseInterrupted | Фаза прервана | Используется при прерывании фазы, которое происходит либо при прерывании всего путешествия, либо когда по каким-то причинам в нам нужно будет прервать фазу. |
5 | phaseSkipped | Фаза пропущена | Используется по каким-то причинам когда вам необходимо пропустить целую фазу. |
6 | journeyCancelled | Путешествие отменено | Используется когда путешествие было отменено, например, пользователь передумал. |
7 | journeyCompleted | Путешествие завершено | Путешествие успешно завершено, пользователь дошел до победного конца. |
В одном из будущих релизов планируется возможность добавлять пользовательские активности, чтобы вы могли отслеживать промежуточные шаги во время фазы, если вам это понадобится.
### Журналы Все что происходит в чат-боте сохраняется в несколько **Журналов**, а также сохраняется в **Состоянии пользователей в путешествии**. Это системные таблицы, в которых накапливаются исторические данные, которые вам не нужно трогать. На основе журналов и справочников, формируются аналитические отчеты и визуализации.Ни в коем случае не нарушайте целостность данных, если уже запустили трафик и идет сбор данных о путешествиях пользователей. Если у вас есть журналы с данными, а вы решите удалить или изменить данные в **Справочниках**, отдавайте себе отчет, что это может повлиять на исторические данные, ранее собранные чат-ботом, а значит и на отчеты.
#### Журнал путешествий В этом журнале хранится история фаз и активностей, а также начала и завершения путешествий. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/8KnvxY4wbhriKAQa-image.png) #### Журнал пользы В этом журнале хранится история предоставления пользы пользователям. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/llT4NajiENhoFm9i-image.png) #### Журнал целей В этом журнале хранится история достижения целей. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/4hTDFc35TETwFvRD-image.png) #### Журнал показателей В этом журнале хранятся собранные метрики. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/WGX6xcTZiEFYYItg-image.png) #### Состояние пользователя в путешествии В этой таблице хранится состояние пользователя в конкретном путешествии. [](https://docs.metabot24.ru/uploads/images/gallery/2023-01/gphCiREYGeN217lY-image.png)Ни в коем случае не трогайте эти данные на продакшене, кроме случаев отладки, иначе нарушите ход путешествия для пользователей.
### JS команды Для отправления информации в плагин и фиксации данных в базе необходимо в нужном вам месте в чат-боте подключить плагин, инициализировать менеджер путешествий и выполнить нужную команды. Список команд и примеры кода представлены в таблице ниже.№ | Название метода | Пример кода |
1 | Начать путешествие | ```JavaScript
// Подключаем плагин
snippet("Common.DialogJourney.Manager")
// Создаем менеджер путешествия и передаем ему лид
let jm = new JourneyManager(lead)
// Начинаем новое
let isNewJourneyStarted = jm.startNewJourney("myJourney")
// Пишем результат в память
memory.setAttr("isNewJourneyStarted", isNewJourneyStarted)
```
При инициализации JourneyManager для лида будет создана персона, если она еще не была создана! В текущей версии плагин позволяет отслеживать пути персон и не возможно отслеживание путей лидов. Поэтому персона создается для каждого лида на самой ранней стадии пути, чтобы иметь возможность отслеживать путь как можно раньше - даже когда лид/персона еще не взаимодействовали с бизнесом. В качестве роли персоны будет использована роль по умолчанию, которую необходимо задать в настройках чат-бота. |
2 | Завершить путешествие | ```JavaScript // Подключаем плагин snippet("Common.DialogJourney.Manager") // Создаем менеджер путешествия и передаем ему лид let jm = new JourneyManager(lead) // Выбираем путешествие jm.selectJourney("myJourney") // Завершаем выбранно путешествие let isJourneyCompleted = jm.completeJourney() // Пишем результат в память memory.setAttr("isJourneyCompleted", isJourneyCompleted) ``` |
3 | Следующая фаза | ```JavaScript // Подключаем плагин snippet("Common.DialogJourney.Manager") // Создаем менеджер путешествия и передаем ему лид let jm = new JourneyManager(lead) // Выбираем путешествие jm.selectJourney("myJourney") // Запоминаем название текущей фазы let oldPhaseName = jm.getCurrentPhase().name // Стартуем новыую фазу путешествия let isPhaseStarted = jm.startNextPhase("nextPhaseCode") // Запоминаем название новой фазы (если она установилась, конечно) let newPhaseName = jm.getCurrentPhase().name // Пишем результат в память memory.setAttr("isPhaseStarted", isPhaseStarted) memory.setAttr("oldPhaseName", oldPhaseName) memory.setAttr("newPhaseName", newPhaseName) ``` |
4 | Предоставить пользу | ```JavaScript // Подключаем плагин snippet("Common.DialogJourney.Manager") // Создаем менеджер путешествия и передаем ему лид let jm = new JourneyManager(lead) // Выбираем путешествие jm.selectJourney("myJourney") // Сообщаем менеджеру путешествия, что мы предоставили пользу let isValueGiven = jm.giveValue("valueCode") // Загружаем информацию о метрике из справочника let valueInfo = jm.getValueInfo("valueCode") // Загружаем информацию о собранной метрике let value = jm.getValue("valueCode") // Выводим результат работы memory.setAttr("isValueGiven", isValueGiven) memory.setAttr("valueName", valueInfo.name) memory.setAttr("valueWeight", value.weight) ``` |
5 | Достигнуть цель | ```Java // Подключаем плагин snippet("Common.DialogJourney.Manager") // Создаем менеджер путешествия и передаем ему лид let jm = new JourneyManager(lead) // Выбираем путешествие jm.selectJourney("myJourney") // Сообщаем менеджеру путешествия, что мы достигли цели let isGoalAchieved = jm.achieveGoal("goalCode") // Загружаем информацию о цели let goal = jm.getGoalInfo(goalCode) // Выводим результат работы memory.setAttr("isGoalAchieved", isGoalAchieved) memory.setAttr("goalName", goal.name) ``` |
6 | Записать показатель | ```JavaScript // Подключаем плагин snippet("Common.DialogJourney.Manager") // Создаем менеджер путешествия и передаем ему лид let jm = new JourneyManager(lead) // Выбираем путешествие jm.selectJourney("myJourney") // Считываем значение метрики let metricValue = lead.getAttr("metricValue") // Сохраняем метрику let isMetricSaved = jm.saveJourneyMetric("metricCode", metricValue) // Загружаем информацию о метрике из справочника let metricInfo = jm.getMetricInfo("metricCode") // Загружаем информацию о собранной метрике let metric = jm.getLatestJourneyMetric("metricCode") // Выводим результат работы memory.setAttr("isMetricSaved", isMetricSaved) memory.setAttr("metricName", metricInfo.name) memory.setAttr("metricValue", metric.value) ``` |