01. Цифровой диалог

Основы цифровых коммуникаций и знакомство с платформой через теорию

Что такое Metabot?

Metabot — это low-code платформа для разработки чат-ботов и диалоговых приложений для веб-сайтов, социальных сетей и мессенджеров. Создан разработчиками для разработчиков.

Платформа включает в себя:

Разработка происходит в среде Web IDE, доступной из веб-браузера. 

Вы можете бесплатно попробовать платформу по адресу: https://app.metabot24.com

Области применения

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

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

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

Разработка

Обслуживание клиентов

Маркетинг и продажи

Опыт клиентов (CX) и сотрудников (EX)

Для кого предназначен Metabot?

Для всех, кто действительно заботится о своих клиентах и ​​сотрудниках и ищет максимально гибкий и мощный инструмент для реализации своих лучших идей.

Для всех, кто заинтересован в освоении востребованных сегодня профессий: low-code разработчик, дизайнер и архитектор ботов, специалист по разговорному опыту, мессенджер-маркетолог, компьютерный лингвист.
 
Мы работаем для наших партнеров — креативных команд со всего мира, которые создают и внедряют digital-решения для малого, среднего и крупного бизнеса: маркетинговые и креативные агентства, разработчики сайтов и мобильных приложений, студии веб-дизайна, консалтинговые агентства, компании-интеграторы, фрилансеры.

Эволюция пользовательского интерфейса

Платформа Metabot развивается в соответствии с концепцией эволюции пользовательских интерфейсов.

Чтобы продемонстрировать, как развивалось взаимодействие человека с миром компьютеров, давайте начнем с цитаты философа Михаила Куртова, который в 2014 году написал в своей книге «Генезис графического пользовательского интерфейса. К теологии кода»:

«Эволюция пользовательского интерфейса в упрощенном виде проходит через три этапа:

I. Пакетный интерфейс (batch interface) как конвергенция первого этапа эволюции внешних средств (перфокарты, перфолента) и первого этапа эволюции внутренних средств (машинный код);

II. Интерфейс командной строки (command line interface, CLI) как конвергенция второго этапа эволюции внешних средств (телетайп) и второго и третьего этапов эволюции внутренних средств (ассемблер, языки высокого уровня); сюда же можно отнести так называемый текстовый пользовательский интерфейс (text user interface);

III. Графический интерфейс (GUI) как конвергенция пятого этапа эволюции внешних средств (клавиатура + графический дисплей + мыши) и третьего этапа эволюции внутренних средств; появлению WIMP предшествует переизобретение полиэкрана и эксперименты с новыми манипуляторами (Sketchpad, NLS, GRAIL, etc.); разработка WIMP в лаборатории Xerox PARC опиралась на исследования в области зрительного восприятия;»

Наберёмся смелости и позволим себе продолжить авторский ряд по аналогии:

IV. Планшет (tablet) как устройство с сенсорным экраном, позволяющее управлять компьютерными программами, через прикосновение пальцами к объектам программы на экране.

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

VI. Разговорные/диалоговые интерфейсы (conversational UI) возникли как конвергенция мессенджеров, платформ для управления разговорными коммуникациями и сервисными узлами в Интернете. Это привело к возникновению асинхронных коммуникаций. Мессенджеры, самые скачиваемые и используемые мобильные приложения, превращаются в суперприложения за счет своей массовой популярности и возможности интегрировать в них бизнес-функции с помощью чат-ботов.

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

Стадия (IV) (планшет), является естественным продолжением направления, обозначенного и подробно проанализированного в работе Куртова. Мышь заменена пальцем, но начиная со стадии (V) (смартфон) мы видим качественно новый этап в коммуникации человека и компьютера. Движение, начавшееся с объединения телефона и персонального компьютера, закончилось превращением смартфона в универсальное средство оперативного доступа к сети Интернет и мгновенного обмена асинхронными сообщениями. Телефонная связь отходит на второй план, а компании, предоставляющие ее, превращаются в провайдеров мобильного интернета.

На VI стадии (диалоговый UI) человечество начало общаться с компьютерами самым естественным образом, используя естественный язык в виде текстовых или голосовых сообщений, которые поступали на вход платформы, управляющей разговорными коммуникациями. Платформа, в свою очередь, используя технологии искусственного интеллекта для распознавания текста (NLP/NLU), определяет намерения пользователя и связывает пользователя с сервисными узлами в сети Интернет. Смартфон всегда под рукой, сервисные узлы постоянно доступны, с ними можно взаимодействовать посредством обычных диалоговых коммуникаций, иначе говоря, посредством разговора — а значит, мы фактически получаем расширение наших человеческих тел. Благодаря свойству асинхронности коммуникаций можно общаться и отвечать в любое удобное время, частично заменяется электронная почта, общение между людьми становится проще и удобнее, интенсивнее и продуктивнее.

Появление современных интерактивных диалоговых коммуникаций вызывает тектонические сдвиги в мире маркетинга и продаж, клиентского опыта и поддержки, а также в разработке веб-сайтов, приложений и сервисов, предъявляя новые требования к их архитектуре: навигация по сайту заменяется функционалом интерактивной коммуникационной платформы, общение становится многоканальным.

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

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

Тур по платформе: Архитектура Metabot

«Людям не нужно еще одно приложение, они хотят лучший способ связи с бизнесом. Создавайте содержательные взаимоотношения с помощью обмена сообщениями».
Шейн Мак, со-основатель XMTP, со-основатель Assit (приобретена Verint). 


В этом подробном гиде мы рассмотрим, как работает платформа Metabot, на примере взаимодействия с чат-ботом. Мы последовательно пройдемся по ключевому функционалу платформы, рассмотрим, как различные компоненты связаны друг с другом, и порассуждаем на тему, как ведется разработка чат-ботов с глубокими интеграциями в бизнес. После того как вы прочтете данный текст, у вас будет полное и всеобъемлющее представление о том, как устроен Metabot и как ведется разработка на этой платформе.

Чтобы создавать решения с помощью платформы Metabot, вам необходимо понимать компоненты, из которых состоит платформа, как они взаимосвязаны и как их использовать. Архитектура ваших чат-ботов и приложений будет опираться на эти компоненты и их взаимосвязь.

Давайте рассмотрим гипотетический пример общения с участием Боба, Алисы и чат-бота. Боб — клиент компании, где Алиса работает в отделе поддержки клиентов, где они только что внедрили нового чат-бота.

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

При нажатии на значок чата в правом нижнем углу экрана сайта открывается диалоговое окно, в котором чат-бот приветствует Боба.

image.png

Чат-бот

Чат-бот — это компьютерная программа или программное обеспечение, способное обрабатывать информацию о пользователе и общаться как человек. Он может быть оснащен искусственным интеллектом и работать на платформе Metabot.

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

С технической точки зрения, чат-бот представляет собой клиент-серверное приложение. Серверная часть — это платформа Metabot, на которой хранятся состояние разговора и пользовательские данные, а также обрабатываются сообщения. Клиентская часть может быть мессенджером или приложением для социальных сетей, установленным на устройстве пользователя, либо окном живого чата на веб-сайте.

Клиент не хранит никаких данных или состояние разговора. Все, что Боб видит на экране, — это просто ввод и вывод, история разговора. В этом смысле современные чат-боты ничем не отличаются от консольной строки компьютера. Состояние разговора и пользовательские данные хранятся на сервере, хранение и обработку которых обеспечивает платформа Metabot.

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

Диалоговое приложение

Диалоговое приложение (или dialog app) представляет собой специализированный тип чат-бота, который обладает более широким функционалом и возможностями по сравнению с обычными чат-ботами. Оно может работать в мессенджерах или социальных сетях и интегрироваться с корпоративными системами и публичными Интернет-сервисами.

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

Основные характеристики диалогового приложения:

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

Диалоговое приложение также может называться "диалоговым ботом", "разговорным приложением" или "разговорным интерфейсом".

Каналы 

Когда Боб щелкнул значок чата и развернул окно живого чата, его приветствовал чат-бот. Вместо окна живого чата на сайте Боб мог нажать на один из значков мессенджеров или социальных сетей, перейти в их приложение и там начать аналогичный диалог с компанией, например, в Telegram или WhatsApp.

Каналы коммуникации — это посредники, с помощью которых ваша компания общается с целевой аудиторией. Подумайте о «канале» чат-бота как об интерфейсе/системе, используемой конечным пользователем для взаимодействия с вашей компанией. Эти каналы не ограничиваются вашим сайтом; они распространяются на различные платформы, где ваша аудитория проводит время.

Подключение чат-бота к каналам популярных цифровых платформ, чьи приложения установлены или можно установить на мобильные устройства пользователей, позволяет реализовать стратегию подключенного диалогового опыта (connected conversational experience) для вашего бренда или компании. Это обеспечивает бесшовное и последовательное взаимодействие, независимо от того, где происходит разговор.

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

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

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

Скрипты и команды

Когда Боб открыл окно чата, его поприветствовал чат-бот, прислав ему текст приветствия. Сообщил, что говорит бот, а также прислал две быстрых кнопки: "Задать вопрос" и "Отследить мой заказ".

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

image.png

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

Вот список команд, которые можно использовать в Metabot:

Подробнее ознакомиться с командами вы можете в Командах, а узнать как работать со скриптами в Скриптах.

Лиды и диалоги

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

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

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

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

В следующий раз, когда диалог возобновится пользователем (или ботом), он продолжится в зависимости от состояния диалога. Вам не нужно заботиться о состоянии диалога, его возобновлении и тому подобном. Вы проектируете сценарии и управляете состоянием с помощью команд — все остальное за вас сделает платформа.

На платформе есть специальная команда для остановки/сброса диалога. Ее вызов стирает состояние разговора, и когда пользователь снова говорит с ботом, диалог начинается с самого начала, то есть с приветствия. Однако рекомендуется никогда не прерывать диалог и спроектировать бота так, чтобы беседа никогда не достигла точки останова. Сброс диалога рекомендуется использовать только в целях отладки.

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

Рекомендуем ознакомиться с секций Лиды.

Персоны

Допустим, компания подключила чат-бот к Telegram и WhatsApp. Когда Боб, ради любопытства, написал в компанию в оба мессенджера, то платформа создала для него два лида. А как сделать так, чтобы наше приложение знало, что оба лида принадлежат одной персоне, т.е. одному человеку? Правильно — использовать функционал персон!

После того как вы познакомились с концепцией лида, вам необходимо познакомиться с концепцией персоны (persons). Чат-бот — это инструмент персонализации коммуникации, и понятие персоны является важным элементом.

Если лид — это аккаунт пользователя в конкретном канале (например, в Telegram или WhatsApp), то персона — это сам человек. У персоны может быть несколько лидов (аккаунтов в каналах), не так ли?

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

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

У пользователя может поменяться номер, он может создать новый аккаунт в мессенджере — в этом случае вы просто поменяете у персоны лид, через который он работаете, и человек получит доступ к своим данным. Например, вы делали чат-бота для интернет-магазина и использовали ID лида как идентификатор заказчика. У одного заказчика поменялся Телеграм аккаунт и теперь он начал делать заказы под новым лидом. Если бы вы использовали ID персоны для идентификации заказчика, то информация о заказах продолжала накапливаться под тем же самым аккаунтом.

Итак, в терминах платформы Metabot, персона — это запись с данными о человеке. У каждой персоны есть роль (person role). Вы можете создать набор ролей для каждого класса персона, например, гость, пользователь, сотрудник, администратор и другие. 

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

image.png

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

Маршруты

Допустим, Боб впервые заходит в чат-бот и видит приветственное сообщение. Как бот определил, что нужно показать именно это сообщение? Ответ кроется в механизме, называемом маршруты.

Маршруты — это точки входа в сценарий диалога. Маршруты работают за кулисами — слушают ввод пользователя и запускаются при соблюдении условий запуска маршрута. Запуск нового маршрута переключает состояние диалога на новый сценарий.

Существует несколько типов маршрутов:

Маршруты имеют множество параметров, которые определяют, когда они должны сработать и какой скрипт запустить. Например, для примера Боба и Алисы мы создали маршрут с названием Greeting (приветствие), который запускает одноименный скрипт, когда пользователь пишет любой текст в чате. Регулярное выражение ".*" соответствует любому вводу.

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

image.png

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

Рекомендуем ознакомиться с разделом Маршруты.

Тэги и атрибуты

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

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

Тэги — это простые ярлыки, которыми вы можете пометить пользователя. Например, "зарегистрировался", "скачал_файл" и т.д. Тэг либо есть, либо его нет.

Атрибуты — это переменные разных типов, в которых хранятся значения: строка, число, дата, булево, JSON. Например, "возраст", "город", "страна".

JSON — это многосоставное поле, в котором можно хранить массивы данных. JSON — наиболее популярный формат для обмена системами через REST API.

JSON (JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Подробнее: https://ru.wikipedia.org/wiki/JSON  

Пример JSON:

{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}

Еще один пример, где названия полей указаны на русском языке:

{
   "имя": "Иван",
   "фамилия": "Иванов",
   "адрес": {
       "улица": "Московское ш., 101, кв.101",
       "город": "Ленинград",
       "индекс": 101101
   },
   "телефоны": [
       "812 123-1234",
       "916 123-4567"
   ]
}

Для добавления и удаления тэгов используйте команды Добавить тэги и Удалить тэги соответственно.

image.png

Для работы с тэгами лида используйте следующие JS-методы объекта lead:

Название метода

Метод

Проверить существование тэга

lead.isTagExist('some_tag')

Получить список тэгов лида

lead.getAllTags(): array

 Для работы с атрибутами лида используйте следующие команды JS объекта lead:

Название метода

Метод

Установить значение переменной лида

lead.setAttr(string $key, string $value): self

Получить значение переменной лида

lead.getAttr(string $key): string|null

Получить массив всех переменных лида

lead.getAllAttr(): array

Проверить наличие переменной лида

lead.isAttrExist(string $key): bool

Объект lead является ключевым элементом во взаимодействии чат-бота с пользователями и доступен в JS из любого места на платформе, будь то скрипты, триггеры, API эндпоинты или условия. Через lead вы можете обратиться к текущему лиду, с которым ваш бот ведет диалог. 

Ваш чат-бот может одновременно вести диалог с десятками, сотнями или даже тысячами лидов. Платформа Metabot работает асинхронно, обрабатывая каждый диалог в отдельном процессе, называемом воркером (worker, работником). Воркер выполняет для лида различные скрипты, триггеры и прочее. Когда вы используете lead в вашем коде, вы можете быть уверены, что когда процесс дойдет до этого места, ваш код обратится к лиду, с которым идет диалог. Если же вам нужно в ходе диалога с одним лидом обратиться к другому лиду, то такое тоже возможно, но это делается специальным образом, о чем вы узнаете позже.

Атрибуты бота

Если вам необходимо где-то сохранить общие для всех лидов данные, воспользуйтесь хранилищем самого чат-бота. Атрибуты и тэги бота — это глобальное пространство имен, доступное для любого лида в ходе любого диалога.

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

В JavaScript вы также можете работать с атрибутами бота, используя следующие методы:

Название метода

Метод

Установить значение переменной бота

bot.setAttr(string $key, string $value): self

Получить значение переменной бота

bot.getAttr(string $key): string|null

Получить массив всех переменных бота

bot.getAllAttr(): array

Проверить наличие переменной бота

bot.isAttrExist(string $key): bool

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

Условия

Представьте ситуацию, когда Боб пытается второй раз подписаться на новостную ленту. Нужно ли это делать? Конечно, нет. Чат-бот должен проверить, подписан ли Боб уже, и если да, то показать другое меню или как минимум вывести сообщение, что он уже подписан. Для реализации таких проверок в чат-ботах используются условия.

Условия — это код на JavaScript, который вы можете применить к различным объектам (командам, маршрутам, кнопкам, триггерам и т.д.) в качестве критерия выполнения или отображения этих объектов пользователю. Если условие истинно (true), то действие совершается; если ложно (false), объект игнорируется.

Это может быть полезно в различных сценариях. Например:

Примеры кода:

Код условия

Объяснение

return lead.getAttr('some_var')*1 == 100 ? true : false; 

Если some_var равен числу 100, то условие истинно (true), иначе (false).

return !lead.isTagExist('some_tag');

Если у пользователя НЕ стоит some_tag тэг, то условие истинно. Восклицательный знак перед условием в JS означает инверсию булевой переменной.

 return lead.isTagExist('some_tag'); 

Если у пользователя стоит тэг some_var, то будет истинное условие.

 return bot.getAttr('some_var') == "yes"; 

Если в боте в атрибуте some_var записан текст "yes", то условие истинно.

return lead.getAttr('age') >= 18;

Если возраст пользователя больше или равен 18, то условие истинно.

return lead.isAttrExist('email');

Если у пользователя есть атрибут 'email', то условие истинно.

На скриншоте ниже показан пример использования JS кода в условиях вывода команды.

image.png

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

JavaScript Low-Code

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

Представьте следующие ситуации:

Здесь без программирования не обойтись. Поддержка языка JavaScript является одной из ключевых особенностей платформы Metabot, и мы надеемся, что вам понравится наш low-code подход к созданию чат-ботов так же сильно, как он нравится нам!

Что такое Low-Code?

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

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

Преимущества Low-Code

Low-code подход хорош тем, что он позволяет бизнес-пользователям (маркетологам, дизайнерам, специалистам по работе с клиентами) управлять цифровым опытом вместе с технической командой.

Под "цифровым опытом" подразумевается взаимодействие между бизнесом/организацией и клиентом/пользователем с помощью информационных технологий и устройств. Это может включать в себя клиентский опыт (CX), опыт сотрудника (EX), опыт партнера и так далее.

Существуют различные подходы к разработке программного обеспечения: high code, low code, no code, и даже генерация кода с помощью ИИ (AI-generated code).

Metabot Platform — это low-code инструмент для командной работы, обеспечивающий гибкость и скорость создания и запуска коммуникационных проектов и чат-ботов.

Применение JavaScript в Metabot

JavaScript играет ключевую роль в разработке на Metabot. Вы можете использовать его в различных аспектах чат-бота, таких как:

Основной момент, который вам нужно знать, чтобы понимать в чем смысл low code в рамках Metabot, заключается в следующем. Вы выстраиваете архитектуру вашего чат-бота преимущественно с помощью визуальных интерфейсов, но как только вам нужны алгоритмы вы используете вставки JS кода там где это необходимо. 

Пример

После того как мы узнали, что Боб хочет отследить заказ, мы можем выполнить JS код, который обратится к корпоративной системе заказов по API и вернет статус заказа. Эта информация затем может быть выведена в чат-боте.

Ниже приведен пример кода, который выполняет запрос к корпоративной системе учета заказов, используя номер заказа, полученный от пользователя. Если статус заказа найден, он сохраняет информацию о заказе в атрибутах лида (заказчика), таких как статус, дата, имя клиента и общая сумма заказа.

// Выполнение REST запроса для проверки статуса заказа
memory.setAttr('orderStatusFound', 0);
let orderNumber = lead.getAttr('orderNumber'); // Получение номера заказа от пользователя
let url = `https://corporate-system.example.com/api/orders/${orderNumber}`; // URL API корпоративной системы
let jsonResponse = api.getJson(url);

if (jsonResponse) {
  // Сохранение результата запроса в атрибутах лида (заказчика)
  var orderInfo = jsonResponse;
  let orderStatus = orderInfo['status'];
  if (orderStatus) {
    memory.setAttr('orderStatusFound', 1);
    lead.setAttr('orderInfo.status', orderStatus);
    lead.setAttr('orderInfo.date', orderInfo['date']);
    lead.setAttr('orderInfo.customerName', orderInfo['customerName']);
    lead.setAttr('orderInfo.totalAmount', orderInfo['totalAmount']);
  }
  
  // Сохранение информации о последнем HTTP-ответе
  memory.setJsonAttr("lastHttpResponse", api.getLastResponseContent());
  memory.setAttr("lastHttpResponseCode", api.getLastResponseCode());
}

Ниже показаны скриншоты скрипта с JS командой: 

image.png

При редактировании кода открывается редактор с подсветкой синтаксиса:

image.png

Как использовать JavaScript код? Процесс довольно прост. Если вам необходимо реализовать определенную логику, описать условия выполнения различных операций или сделать выборку пользователей, вы обращаетесь к JavaScript.

Как эффективно применять JavaScript? Чтобы максимально эффективно использовать JavaScript, рекомендуется ознакомиться со справочником объектов платформы, доступных для манипуляций из JS, а также изучить их свойства и методы. Также вам всегда доступен справочник по JS функциям.

Могу ли я создавать чат-боты с помощью Metabot без знаний JavaScript? Конечно, это возможно. Многие задачи, такие как автоматизация контакт-центра, могут быть решены практически без JS или с использованием минимального набора базовых JS-операторов. Вы также можете воспользоваться нашими примерами, типовыми конфигурациями ботов, готовыми плагинами и интеграциями. Однако для сложных задач и интеграций потребуется либо умелое владение JS, либо помощь JS-разработчика.

Что такое JavaScript? JavaScript — это популярный язык программирования с огромным сообществом разработчиков по всему миру и множеством доступных примеров в Интернете. Если вы столкнулись с трудностью в написании определенного кода, вы можете воспользоваться поисковыми системами или инструментами, такими как GPT, чтобы найти или сгенерировать нужный код. Затем вы можете адаптировать его под Metabot. Стоит отметить, что платформа Metabot поддерживает урезанную версию JS без Promises, но включает в себя все основные элементы языка JS, такие как переменные, функции, классы, вызов REST API и многое другое.

Кастомные таблицы

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

Если вы уже сталкивались с разработкой программного обеспечения или приложений, вы, возможно, подумали: "Тэги и атрибуты — это здорово, но мне нужны отдельные таблицы, а ещё лучше — полноценная база данных со множеством таблиц!" Не переживайте, мы позаботились об этом.

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

Кастомные таблицы — еще один важный компонент платформы Metabot, который позволяет организовать хранение данных и доступ к ним на уровне алгоритмов чат-бота и API запросов к нему. Вы сможете создавать таблицы с нужным вам полями и затем с помощью JS методов объекта table работать с ними.

Ниже приведен список некоторых функций объекта table для работы с таблицами и объекта item для работы со строками таблицы:

Название метода Метод
Создание записи table.createItem(string $tableName, array|object $data): ScriptCustomTableItem
Поиск записей

table.find(string $tableName, array|object $columns = [], array|object $where = [], array|object $orderBy = [], ?int $limit = null, ?int $offset = null): array

Подсчет количества записей

table.count(string $tableName, array|object $where = []): int 

Подсчет суммы по полю

table.sum(string $tableName, string $column, array|object $where = []): int

Поиск максимального значения по полю

table.max(string $tableName, string $column, array|object $where = []): mixed|null

Обновление записи

item.update(array|object $data): bool

Удаление записи

item.delete(): bool

Получить форматированную дату по названию поля

item.getDateFormatted(string $fieldName, string $format = 'Y-m-d H:i:s', ?string $timeZone = null): string|null

Получить форматированную дату из произвольной строки

item.getDateFormattedFromString(string $date, string $format = 'Y-m-d H:i:s', ?string $timeZone = null): string|null

Перезагрузить данные записи из БД

item.reload(): bool

Когда Боб запросил статус посылки, мы могли бы обратиться к таблице `orders` и с помощью `table.find` найти запись, например, с помощью следующего кода:

let id = lead.getAttr('orderId');
let items = table.find('orders', ['status'], [["orderId", "=", id]]);

Таким образом, мы получаем из таблицы `orders` столбец `status` заказа `id`, который был записан в атрибут `orderId`.

Полный список функций и возможностей кастомных таблиц смотрите в разделе Кастомные таблицы

Интеграции API 

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

Допустим, в предыдущем примере с Бобом, который хотел узнать статус своей посылки, вам нужно было обратиться к внешней системе логистики. Это можно было бы сделать с помощью следующего кода:

let trackingNumber = lead.getAttr('trackingNumber');
let url = `https://external-shipping-system.example.com/api/parcels/${trackingNumber}`;
let jsonResponse = api.getJson(url);
let parcelStatus = jsonResponse['status'];
lead.setAttr('parcelStatus');

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

API (Application Programming Interface) — это набор правил и протоколов, которые позволяют одним программам взаимодействовать с другими. Если вы новичок в этой области, рекомендуем подробно изучить что такое API.

REST (Representational State Transfer) — это архитектурный стиль взаимодействия компонентов в сети. RESTful веб-сервисы используют стандартные HTTP-методы. Если вы не знакомы с REST, рекомендуем ознакомиться с этим руководством по REST.  

В реальности вы часто будете сталкиваться с заказчиками, у которых уже есть ERP, Ecomm или любая другая система для учёта и хранения данных, к которой вам нужно будет обращаться по API запросу. Это может включать работу с системами, такими как 1С:Предприятия, AmoCRM, Bitrix24, Microsoft Dynamics, OTRS и другие.

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

Интеграции с системами делаются с помощью конструктора API. Платформа позволяет создавать точки интеграции, называемые эндпоинтами (endpoints), которые описывают все точки взаимодействия вашего чат-бота с внешними системами и наоборот. 

Интеграция сервисов осуществляется с помощью стандартных REST API интерфейсов. Если вы столкнулись с устаревшими системами и сервисами, вам, возможно, придется организовать обмен данными другим способом или работать с API в два шага  (сперва авторизоваться под конкретным пользователем, а потом выполнять запросы от его имени).

Существует несколько способов вызова API, включая использование настроенных API endpoints и прямые вызовы объекта `api`, как в примере выше.

Подробную информацию о том, как разрабатывать API интеграции с примерами, смотрите в разделе Конструктор API.

Исходящие коммуникации

Представьте себе ситуацию, где ваш чат-бот автоматически отправляет пользователю поздравительное сообщение по его дню рождения или напоминает о предстоящем мероприятии. Как это можно реализовать? Ответ на этот вопрос лежит в понимании триггеров, рассылок и заданий в контексте платформы Metabot.

Боты не только реагируют на команды пользователя, но и могут самостоятельно инициировать диалог, реагируя на определенные события или по расписанию. Давайте разберемся, как на Metabot создаются такие проактивные коммуникации.

Metabot имеет встроенный планировщик (scheduler), позволяющий добавлять отложенные задания (job) для будущего выполнения. Вы можете запланировать отправку контента после приветствия лида с ботом.

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

Массовые рассылки сообщений называются рассылки (broadcast) и позволяют отправлять интерактивные скрипты выборке лидов. Таргетированная выборка осуществляется на JS, и если условие истинно, лид войдет в рассылку.

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

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

Для разработки исходящих коммуникаций вам стоит овладеть следующими понятиями и функционалом:

Платформа поддерживает несколько способов запуска исходящих коммуникаций:

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

Подробную информацию по работе с триггерами с примерами кода смотрите в разделе Триггеры.

Подробную информацию по работе с бродкастами смотрите в разделе Рассылки.

Подробную информацию по работе с эндпоинтами смотрите в разделе Конструктор API.

Процессинг коммуникаций

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

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

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

Все входящие сообщения из канала принимаются сервером Metabot и сохраняются во входящей очереди (incoming queue). Очередь обрабатывается с помощью ядра (core), называемого также процессингом коммуникаций (communication processing) и после обработки исходящего сообщения отправляются обратно в канал к пользователю.

В процессинге коммуникаций одновременно участвует несколько воркеров (workers) — рабочих процессов, которые разбирают входящую очередь, обрабатывают сообщения, выполняют команды и отправляют исходящие коммуникации обратно в канал. На отправку сообщений выделена одна группа воркеров, на рассылки и триггеры — другая. Количество воркеров зависит от конфигурации сервера. Обычно их не более 10.

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

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

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

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

Обработка естественного языка (NLP)

Отлично! Раз вы добрались до этой секции, значит теперь вы имеете хорошее представление об основных компонентах платформы Мetabot и ее уникальной архитектуре. Уверен теперь вы понимает, как можно использовать Metabot и в каких задачах. Теперь давайте рассмотрим расширения платформы обработкой естественного языка, когда пользователь не путешествует по сценарию, а вводит текст в свободной форме.

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

Обработка естественного языка (NLP, от англ. Natural Language Processing) — это область искусственного интеллекта, которая помогает компьютерам понимать, интерпретировать и использовать человеческий язык. В основе этого лежит идея о том, что наши компьютеры, программы и боты должны понимать нас так же легко, как мы понимаем друг друга.

В контексте чат-ботов, NLP помогает боту понимать ввод пользователя, даже если он не соответствует точным командам или фразам, которые были заранее запрограммированы. Например, если Боб спрашивает "Как мне отследить мой заказ?", бот, обученный с помощью NLP, поймет, что пользователь хочет узнать информацию о состоянии его заказа, даже если эта фраза не была заранее запрограммирована.

В Metabot есть готовая интеграция с Google Dialogflow. Dialogflow (сокращенно «DF») — это облачный сервис распознавания естественного языка от Google, который поддерживает различные языки, в том числе русский. У него есть бесплатные лимиты использования.

Мы также планируем подключить DeepPavlov, Rasa и другие популярные NLP. Если у вас есть свой движок и вы хотели бы сотрудничать, напишите нам.

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

Также, с помощью NLP вы сможете извлекать сущности и переменные (entity extraction) из свободного ввода. Сущности — это справочники с набором значений, например, города, блюда, страны. Извлечение сущностей позволяет упростить пользовательский опыт и еще больше автоматизировать коммуникацию.

В качестве примера, вернемся к Бобу, который открыл чат с намерением проверить состояние своего заказа. Если бы в чате мы предусмотрительно не добавили быструю кнопку "Track my order", то вероятнее всего Боб спросил бы об этом в чате, например, написав одну из следующих формулировок:

Все эти вариации выражают одно и того же намерение получить информацию о заказе. Разные вариации вопроса на одну и ту же тему собираются в одну группу, которую называют намерением (intent).

Намерение (intent) — это разные вариации одного и того же запроса, в разных формулировках. Когда и зачем обычно люди пишут или звонят бизнесу? Когда и зачем вы это делаете лично? Разве не когда у вас возникла проблема, возник вопрос или вы хотите, чтобы компания что-то сделала для вас? В любом случае, вы либо намереваетесь получить информацию от компании, либо намереваетесь сделать какое-то действие или намереваетесь побудить компанию на нужное вам действие.

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

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

Вот как работает интеграция NLP на техническом уровне:

  1. Чат-бот отправляет пользовательский ввод в NLP.
  2. Получаем ответ в виде распознанного намерения и извлеченных сущностей. Ответ от NLP сохраняется в атрибутах лида и доступен для работы из любого скрипта в обычном режиме.
  3. Чат-бот ищет скрипт с распознанным именем интента по точному совпадению имени интента или по маске. Если сценарий для намерения не найден, будет использоваться общий скрипт для всех интентов.
  4. Если возникло исключение, будет использовать Fallback скрипт.
  5. Остальное зависит от потребностей вашего проекта. Вы можете либо передать прямой ответ от NLP пользователю, запустить весь сценарий, либо ответить пользователю и снова передать управление NLP.

Создание NLP ботов при помощи платформы Metabot и сервиса Dialogflow вы можете подробнее рассмотреть и опробовать на практике с помощью нашего урока Автоматизируем службу поддержки.

Переключение между чат-ботом и человеком

Представьте ситуацию: Боб, ваш клиент, общается с вашим чат-ботом, но вдруг столкнулся с сложным вопросом, который бот не может решить. В этом случае, бот может перевести разговор в службу поддержки, и тогда к диалогу подключится Алиса, оператор поддержки. Это позволяет обеспечить гибкость и эффективность обслуживания клиентов, сочетая автоматизацию и человеческое взаимодействие.

Чат-боты и автоматизация коммуникации — это замечательно, но полностью оставлять пользователей без заботы людей — это неправильно. Чат-боты могут выступать в роли отличной автоматизации "нулевого" уровня поддержки, помогая с рутиной, но со сложными и эмоциональными проблемами и запросами может справиться только другой человек.

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

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

Первая команда приостанавливает работу бота и переводит диалог в службу поддержки, а вторая возвращает бота обратно. Вторая команда нужна для тех случаев, когда пользователь позвал людей по ошибке, передумал и хочет вернуться обратно — вы можете создать маршрут для таких ситуаций, который будет слушать ввод пользователя и, когда он скажет, например, "бот", "меню" или "/start", вызовет скрипт, в котором будет команда возврата.

Для того чтобы люди могли принять участие в диалоге и обработать запрос, диалоги нужно куда-то передавать. Вы можете воспользоваться Контакт-центром Metadesk от Metabot или подключить стороннюю платформу, например, Livetex, Jivo, Webim, Umnico, Bitrix24, с которыми Metabot имеет готовую интеграцию.

Если вам необходимо подключить чат-бот к другому рабочему месту оператора, напишите нам.

По завершению диалога платформа переведет диалог обратно чат-боту.

image.png

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

Пользовательские маршруты и аналитика

Представьте, что вы создали сложный лабиринт, в котором каждый коридор ведет к новому уровню взаимодействия с вашим бизнесом. Ваш чат-бот — это гид, который помогает пользователям найти правильный путь. Но как вы можете отследить, где именно находится каждый пользователь в этом лабиринте? Как вы можете определить, какие маршруты они выбирают и какие преграды встречают на своем пути? Вот где на помощь приходят пользовательские маршруты и аналитика.

Чат-боты — это мощный инструмент для гиперперсонализации. Они создают уникальный диалоговый интерфейс для каждого пользователя, адаптируясь под его потребности. Диалог постоянно течет и меняется, а диалоговые сценарии и цепочки отложенных исходящих сообщений позволяют вести каждого пользователя от одного сценария к другому автоматически, в том темпе, в котором удобно каждому пользователю.

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

Для визуализации путей пользователей по вашему чат-боту вы можете воспользоваться дополнительным плагином — панелью аналитики Dialog Journey от команды Metabot. Этот плагин позволяет визуализировать пути пользователей по вашему чат-боту, а также позволяет фильтровать данные в таблицах по времени, пользователю, шагу и так далее.

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

Пути или как мы называем их — путешествия (journeys), состоят из фаз/этапов (phases/stages), которые в свою очередь состоят из шагов (steps).

Мы рекомендуем создать отдельную карту для планирования путешествия пользователей. Для этого вы можете воспользоваться популярным у маркетологов фреймворком, который называется карты клиентских путей (customer journey map или CJM). Это готовая и детально описанная методология анализа того, как клиент взаимодействует с бизнесом, которая помогает визуализировать путь клиента и потом командой работать над его улучшением.

Настоятельно рекомендуем освоить этот инструмент, потому что создание чат-ботов с помощью Metabot напрямую с ним связано. Когда вы внедряете чат-бот в бизнес, вы только тем и занимаетесь, что улучшаете клиентские пути. Ниже пример CJM карты, созданный Miro.

image.png

Обычно работа над чат-ботом начинается с вопросов заказчику:

Автоматизацию следует начинать с наиболее популярных путей. А чтобы улучшить пути, сперва их нужно определить — пройти по ним самостоятельно, собрать информацию о них от других и визуализировать в виде карты путей CJM. Тот путь, который проходят ваши пользователи по CJM, называется пользовательским опытом (user experience), о котором мы уже говорили выше.

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

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

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

image.png

Плагины и организация рабочего пространства

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

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

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

Для того, чтобы не запутаться в этом многообразии, мы рекомендуем следовать следующим принципам:

Плагины — это расширения платформы Metabot, создаваемые с помощью языков JS или PHP для повторного и многократного использования в разных местах в одном и том же боте или в абсолютно разных ботах.

Подробнее о плагинах и сниппетах смотрите в разделе Плагины.

ChatGPT и генеративные алгоритмы

Ранее мы говорили о технологии обработки естественного языка (NLP), которая позволяет чат-ботам понимать и интерпретировать ввод пользователя. Однако, несмотря на все преимущества NLP, она имеет свои ограничения. NLP основана на предопределенных шаблонах и правилах, что может привести к ограниченности в ответах и неполному пониманию контекста.

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

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

Однако стоит помнить, что генеративные алгоритмы не всегда являются лучшим решением. Они должны использоваться там, где они могут быть наиболее полезны. Кроме того, за сообщения, которые эти алгоритмы "генерируют", может последовать юридическая ответственность для вас или ваших клиентов.

Если вам нужны нелинейные диалоги или экспертные ИИ-системы для консультирования, воспользуйтесь возможностями ChatGPT на платформе Metabot. Это мощный инструмент, который поможет вам создать более глубокие и персонализированные взаимодействия с вашими пользователями.

Личность бренда: Создание уникального образа в цифровом мире

Вспомните нашего Боба, который взаимодействовал с чат-ботом. Бот помог ему совершить покупку, ответил на все вопросы и даже предложил дополнительные товары. Но что если этот бот мог бы не просто отвечать на вопросы, но и общаться с Бобом, как настоящий сотрудник компании? Что если бы он имел свою уникальную "личность", которая отражала бы ценности и качества бренда?

Технологический прогресс за последние 50-70 лет привел к тому, что интерфейсы компьютера стали все более естественными и привычными для людей. Мы перешли от больших мейнфреймов и перфокарт к персональным компьютерам, мобильным устройствам и сенсорным экранам. Сегодня мы активно осваиваем разговорные интерфейсы, которые являются самыми естественными и привычными для нас.

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

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

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

Создание "личности" бренда включает в себя разработку уникального портрета, определение тона голоса для текстов, характера общения и многого другого. Например, как вы хотите, чтобы бот обращался к вашей аудитории: на "Вы" или "ты"?

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

image.png

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

Для создания личности бренда воспользуйтесь нашим уроком по ссылке: [URL]

Что дальше?

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

Итак, что дальше? Вот несколько шагов, которые вы можете предпринять:

Помните, путь к освоению технологии чат-ботов — это марафон, а не спринт. Не торопитесь, практикуйтесь и не стесняйтесь просить помощи, когда это необходимо. Мы здесь, чтобы поддержать вас на каждом этапе. Удачи вам и приятного создания ботов!

Фреймворк EMPATHY+: Принципы построения успешных диалоговых систем

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

Цель — преобразовать стандартное бизнес-обслуживание в интерактивное, живое взаимодействие, которое будет удовлетворять потребности клиентов и приносить удовольствие от общения. Это искусство требует понимания маркетинга, продаж, психологии и межличностных отношений. 

Чтобы облегчить этот процесс, нами был разработан фреймворк EMPATHY+ (ЭМПАТИЯ+), где каждая буква символизирует ключевой принцип создания эффективных диалоговых систем. Этот фреймворк поможет вам создавать более глубокие и значимые взаимодействия с клиентами через чат-ботов.

 

Основная идея фреймворка EMPATHY+ заключается в построении отношений с клиентами до начала ведения бизнеса. Сначала необходимо завоевать доверие и установить связь, а затем уже переходить к коммерческим взаимодействиям. Это подход, ориентированный на создание взаимовыгодных отношений, где приоритетом является удовлетворение потребностей клиента и предоставление ему максимальной пользы. Такой подход помогает формировать долгосрочные и эффективные связи между бизнесом и его клиентами.

Вот фреймворк EMPATHY+:

  • + - Ethical Use of Data (Этичное использование данных): Уважение частной жизни пользователей и ответственное использование данных. Это включает в себя:
    • практику минимизации данных;
    • предложение ясного обмена ценностями;
    • обеспечение прозрачности;
    • получение согласия и обеспечение безопасности данных.

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

Контакт-центр завтрашнего дня

«Самый простой вопрос, связанный с разочарованием в обслуживании клиентов, звучит так: "Почему это не так важно для вас, как для меня?»
— Сет Годин, бестселлерист, маркетолог


Благодарим Джошуа Марча, автора книги «Напишите мне: Будущее обслуживания клиентов в эпоху социальных сообщений и искусственного интеллекта» и основателя компании Conversocial (приобретена Verint), за его вклад в наше понимание будущего контакт-центров. В этой статье мы опираемся на его идеи и концепции, подробно описанные в его книге.

Как будет работать контакт-центр будущего?

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

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

В этом новом мире человеческие агенты больше не стоят на передовой обслуживания клиентов, но в основном помогают с эскалированными проблемами. Поскольку человеческие затраты на предоставление услуг значительно снижаются, а ИИ значительно повышает эффективность агентов, стоимость решения, хотя и остается важным фактором, становится гораздо менее значимой по сравнению с метриками опыта клиентов, такими как CSAT, NPS и конверсия сентиментов.

Качества команд поддержки будущего

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

Команда социальной поддержки станет моделью для остальной команды обслуживания клиентов. Менеджеры социальной поддержки сегодня станут лидерами колл-центров завтра.

Шесть ключевых качеств отличных агентов поддержки

Существует шесть ключевых качеств, которыми должен обладать каждый агент, и которые вы должны проверять во время собеседования:

  1. Эмпатичные: Понимают ли они разочарования, через которые проходят клиенты, и готовы ли помочь? Агенты должны уметь ставить себя на место клиента и проявлять искреннюю эмпатию. Когда клиент действительно расстроен или разочарован, он должен чувствовать, что агент действительно заботится о помощи.
  2. Устойчивые:  Может ли агент справиться с кризисной ситуацией и оставаться спокойным даже с самым раздраженным и неразумным клиентом? Независимо от контекста, агенты социальной поддержки должны уметь спокойно реагировать, оценивать ситуацию и вежливо отвечать клиенту. Они должны проявлять не только терпение, но и способность «принимать удар», профессионально реагируя на любой сценарий. Во время собеседования задавайте вопросы о том, как агент справлялся с сердитыми клиентами в прошлом.
  3. Артикулированные: Могут ли они эффективно передавать сложные сообщения в коротком тексте? Агенты социальной поддержки должны уметь кратко и эффективно отвечать на потенциально сложные запросы в 140 символах. Правильное написание и выбор слов также важны - незначительные ошибки могут испортить имидж бренда и подорвать доверие клиентов. Во время собеседования дайте кандидатам реальные вопросы, полученные через мессенджер и социальную сеть, и попросите их написать вымышленные ответы.
  4. Любопытные: Имеют ли они желание постоянно совершенствоваться, учиться и исследовать? Будь то внутренний или внешний набор инструментов, важно, чтобы агенты обслуживания клиентов стремились не только изучать новые инструменты, но и понимать отрасль в целом. Поскольку социальные медиа и платформы обмена сообщениями постоянно развиваются и меняются, агенты должны быть в курсе последних культурных и социальных норм. Внутреннее обучение может помочь в некоторой степени, но только если агенты готовы учиться.
  5. Уверенные: Могут ли они доверять своим творческим инстинктам и рады ли они тому, что не следуют сценарию даже публично? Агенты должны быть собранными и способными действовать быстро, даже если в разговоре публично упоминается генеральный директор вашей компании. В Telegram, VK, Twitter и других социальных сетях весь мир наблюдает, и агенты должны уметь работать под высоким давлением.
  6. Представительные: Может ли агент находить правильный тон разговора, независимо от ситуации? Во время собеседования создайте сценарий решения проблемы, в котором агент задает вопросы о ситуации клиента. Обращают ли они обращение дружелюбным и вежливым образом? Соответствует ли их тон голоса тому, как ваш бренд хочет представлять себя?

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

Глубокая интеграция цифрового диалога в бизнес-процессы

Для примера мы разберем интеграцию веб-сайта с чат-ботом для Telegram, но все сказанное ниже справедливо для любого мессенджера.

Зачем это нужно

Представьте, что вам необходимо реализовать один или сразу все из представленных ниже сценариев:

Эти и другие подобные сценарии применения можно реализовать на платформе Metabot с помощью глубокой интеграции мессенджеров и веб-сайта (deep messaging integration). Вам потребуются базовые навыки программирования, умение работать с REST API и немного терпения.

Что это даёт

С помощью глубокой интеграции вы получите следующие возможности:

Как это работает 

Все довольно просто! Хотя нам пришлось много потрудиться, чтобы сделать сложное простым.

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

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

Чтобы связать две разных системы вместе, мы будем на фронте последовательно переводить Алису из одного приложения в другое, а на бэке мы свяжем системы с помощью по REST API. 

Схематично глубокую интеграцию можно изобразить следующим образом:


Теперь разберем логику интеграции подробнее. 

В какой системе хранить ID

Есть три подхода связать чат-бот и веб-сайт вместе:

Нет каких-либо жёстких правил для принятия решения о том, как лучше организовать хранение ID и что лучше использовать для идентификации пользователя при вызове API. Делайте как вам удобно, исходя из реалий конкретной ситуации.

Например, если разработчикам веб-сайта затруднительно внести изменения в базу данных и код веб-сайта, вы можете принять решение хранить ID пользователя сайта у себя в боте, а разработчикам веб-сайта предложить API для отправки сообщений пользователям, используя User Id веб-сайта.

Разница между ID персоны и ID лида

В терминах Metabot лид (lead) — это подписчик на ваш чат-бот (можно сказать bot user), который подключен к конкретному мессенджеру. Лид создается на платформе автоматически в тот момент, когда человек поздоровался с вашим чат-ботом т.е. послал первое сообщение.

image.png

Персона (Person) — это запись о конкретном человеке, которая создается вручную разработчиком чат-бота во время регистрации или авторизации в чат-боте. У персоны теоретически может быть несколько лидов т.е. когда один и тот же человек написал в один и тот же чат-бот, подключенный к разным мессенджерам, но такие проекты не так часто встречается. Обычно у людей есть предпочтительный мессенджер, через который они общаются с компанией.

image.png

Мы обычно всегда рекомендуем во время регистрации и авторизации в чат-боте создавать в Metabot персону, привязывать к этой персоне лид и использовать ID персоны для связки с веб-сайтом, потому что это правильно. У вашего приложения должна быть реляционная структура данных, которая независима от того в каких мессенджерах кто предпочитает общается. 

Но если проект простой и не надо сильно заморачиваться, то можете сделать очень просто: храните ID лида на веб-сайте и используйте ID лида для идентификации API запросов. В таком подходе есть свои плюсы. В Metabot вызов триггеров и API завязан на Lead ID, что означает код на стороне чат-бота существенно упрощается — вам не нужно будет писать прослойку, которая будет по ID персоны в боте или ID пользователя сайта будет искать ID лида, чтобы в этот лид отправить сообщение – вам достаточно вызвать API для отправки сообщения, указав конкретный лид.

Таблица соответствия

Для хранения данных соответствия ID в двух системах мы рекомендуем создать кастомную таблицу. Назовите эту таблицу например, web_users (веб-пользователи).

image.png


Ниже описан технический процесс организации совместной работы веб-сайта и мобильного приложения, которым является мессенджер, с помощью чат-бота:

  1. В таблицу добавляем поле с хэшом ID персоны, чтобы не передавать ID персоны в явном виде в ссылках (для безопасности).
  2. Также в таблицу добавляем поле PIN код, которое будем формировать случайным образом в чат-боте и затем просить ввести PIN на сайте для подтверждения идентификации.

Ссылка в боте для перехода на сайт

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

Сразу же присылайте ссылку на сайт, добавляя в нее GET параметр с хэшом персоны. Хэш персоны позволит  сайту идентифицировать пришедшего пользователя из бота, без необходимости спрашивать логин и пароль, но нужно только проверить, что пользователь ввел именно тот PIN, который получил в чат-боте.

После формирования значений, сохраните данные в таблицу соответствия web_users.

Cсылка для перехода на сайт может выглядеть, например, следующим образом:  https://site.com?buid=ZRvJxYsn6Vr2sQVQ, где BUID — акроним от Bot User ID.

Подтверждение PIN-кода 

В роутере разработчик сайта добавляет код, который при наличии параметра BUID загружает страницу для ввода PIN кода. После ввода, сайт на бэке по REST API проверяет валидность PIN, отправляя в бот три параметра:

Чтобы обработать API запрос на валидацию PIN-кода со стороны чат-бота, в чат-боте создайте внутренний API Endpoint. Metabot поддерживает создание двух видов эндпоинтов: внутренних и внешних. Внутренние предназначены для обращения внешних систем к вашему боту, а внешние, наоборот, для обращения из вашего ботом к внешним системам.

Назовите эндпоинт, например, authorize (авторизация). Напишите код, который в таблице web_users будет искать запись с нужным нам BUID и проверит PIN на правильность. Если запись найдена, то сообщаем сайту об успехе, или в противном случае о провале.

Рассмотрим вероятные сценарии, представленные ранее на упрощенной схеме и дополненные новыми:

Авторизация без ввода PIN

Для простых случаев, например, когда нам нужно показать форму ввода, принять значения, закрыть ее и вернуться в бота, мы можем не спрашивать PIN кода при переходе на сайт. Сайт может доверять хэш токену, который получили в GET, идентифицируя по нему пользователя без проверки PIN кода.

Это менее безопасный вариант, в котором есть риск, что Алиса свою ссылку со своим хэшом может переслать другому пользователю Боту, который откроет ее и будет идентифицирован на сайте под Алисой. Это допустимо в некоторых не критичных случаях, например, вы можете использовать ссылку для ввода данных, которая живет не более 1 часа.

Повышение безопасности авторизации

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

Что дальше?

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

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

Асинхронные коммуникации или зачем чат-боту нужен RESTful интерфейс

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

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

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

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

Что такое API?

API (Application Programming Interface или интерфейс для прикладного программирования) — это набор определений и протоколов для создания и интеграции прикладного программного обеспечения. Иногда его называют контрактом между поставщиком информации и потребителем информации, устанавливающим контент, требуемый от потребителя (вызов), и контент, требуемый поставщиков (ответ). Например, дизайн API для погодной службы может указывать, что потребитель должен предоставить почтовый индекс, а производитель должен ответить двумя частями: первая — высокая температура, а вторая — низкая.

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

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

Еще одно преимущество API заключается в том, что вам не нужно знать особенности кэширования — как извлекается ваш ресурс или откуда он берется. 

Что такое REST?

REST (Representational State Transfer или передача репрезентативного состояния)  — это набор архитектурных ограничений, а не протокол или стандарт. Разработчики API могут реализовать REST различными способами. Для веб-служб, построенных с учётом REST (то есть не нарушающих накладываемых им ограничений), применяют термин «RESTful». 

REST API (также известный как RESTful API) — это интерфейс прикладного программирования, который соответствует ограничениям архитектурного стиля REST и позволяет взаимодействовать с веб-службами. REST означает передачу репрезентативного состояния (Representational State Transfer) и был создан компьютерным ученым Роем Филдингом. 

Когда клиентский запрос выполняется через RESTful API, он передает представление о состоянии ресурса запрашивающей стороне или конечной точке. Эта информация или представление доставляется в одном из нескольких форматов через HTTP: JSON (обозначение объектов Javascript), HTML, XLT, Python, PHP или обычный текст. JSON является наиболее популярным форматом файлов для использования, потому что, несмотря на свое название, он не зависит от языка, а также удобен для чтения как людьми, так и машинами.

Еще кое-что, о чем следует помнить: заголовки и параметры также важны в HTTP-методах HTTP-запроса RESTful API, поскольку они содержат важную информацию об идентификаторе в отношении метаданных запроса, авторизации, универсального идентификатора ресурса (URI), кэширования, файлов cookie и т. д. Существуют заголовки запросов и заголовки ответов, каждый из которых имеет собственную информацию о HTTP-соединении и коды состояния.

Чтобы API считался RESTful, он должен соответствовать следующим критериям:

  • Архитектура клиент-сервер, состоящая из клиентов, серверов и ресурсов, с запросами, управляемыми через HTTP;
  • Связь клиент-сервер без сохранения состояния (stateless), что означает информация о клиенте не сохраняется между запросами на получение, и каждый запрос является отдельным и не связанным;
  • Кэшируемые данные, которые оптимизируют взаимодействие клиент-сервер;
  • Единый интерфейс между компонентами, чтобы информация передавалась в стандартном виде. Это требует, чтобы:
    • Запрашиваемые ресурсы были идентифицируемы и отделены от представлений, отправленных клиенту;
    • Ресурсы могли управляться клиентом через представление, которое они получают, потому что представление содержит достаточно информации для этого;
    • Самоописательные сообщения, возвращаемые клиенту, содержали достаточно информации, чтобы описать, как клиент должен их обрабатывать;
    • Гипертекст/гипермедиа доступны, что означает, что после доступа к ресурсу клиент должен иметь возможность использовать гиперссылки, чтобы найти все другие доступные в настоящее время действия, которые он может предпринять;
  • Многоуровневая система, организующая каждый тип серверов (отвечающих за безопасность, балансировку нагрузки и т. д.), включающая поиск запрашиваемой информации в виде иерархий, невидимых для клиента;
  • Код по запросу (необязательно): возможность отправлять исполняемый код с сервера клиенту по запросу, расширяя функциональные возможности клиента. Metabot поддерживает эту возможность.

Хотя REST API должен соответствовать этим критериям, он по-прежнему считается более простым в использовании, чем предписанный протокол, такой как SOAP (Simple Object Access Protocol или простой протокол доступа к объектам), который имеет особые требования, такие как обмен сообщениями XML, а также встроенную безопасность и соответствие транзакциям, которые делают его медленнее и тяжелее.

REST, напротив, представляет собой набор рекомендаций, которые можно реализовать по мере необходимости, делая REST API более быстрыми и легкими, с повышенной масштабируемостью, что идеально подходит для Интернета вещей (IoT) и разработки диалоговых и мобильных приложений.

В данный момент, платформа Metabot поддерживает только REST интерфейсы с JSON и XML форматами обмена данными. Другие способы интеграции систем, например, SOAP, RPC сейчас не поддерживаются. 

Благодарим Redhat за информацию для этой секции.

Блокировки Что это? и Как работает?

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

Зачем это нужно

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

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

Здесь на помощь приходят блокировки.

Как это работает

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

Если переменная указывает, что ресурс свободен, пользователь "захватывает" блокировку, изменяя ее значение на false для всех остальных пользователей. Это действие символически сообщает системе, что ресурс теперь занят, и другие пользователи или процессы не могут получить к нему доступ до тех пор, пока текущий пользователь не "освободит" блокировку, вернув ей значение true.

Ниже можно посмотреть как данный процесс выглядит в форме кода:

let lockName = 'doctorsRecord' // Имя для вашей блокировки | string
let lockPrefix = '' // Добавляется к lockName, помогает в категоризации блокировок | string
let ttlSec = 30 // Через какое количество секунд блокировка снимется самостоятельно | int
let maxWaitSec = 5 // Сколько секунд бот будет пытаться получить блокировку (Максимум 300) | int
let isOpenRecord = bot.waitForBotLock(lockName, lockPrefix, ttlSec, maxWaitSec) // Метод захвата блокировки

if (isOpenRecord) {
  // Выполянется, если получилось захватить блокировку и isOpenRecord = true
} else{
  // Выполянется, если НЕ получилось захватить блокировку и isOpenRecord = false
}

В скрипте задаются значения переменным, необходимым для захвата блокировки. Затем вызывается метод, возвращающий значение блокировки. И в завершении происходит проверка: если блокировка свободна (её значение равно true), то выполняются одни действия, если блокировка занята (её значение равно false), то выполняются другие действия.

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

Время жизни блокировки

Бывают ситуации, когда пользователь забывает или просто уходит, оставляя блокировку в "захваченном" состоянии, что закрывает доступ других пользователей к ресурсу. Для решения этой проблемы используется "время жизни" блокировки. Это означает, что блокировка автоматически "освобождается" после определенного периода времени (например, 30 секунд), даже если пользователь, изначально захвативший блокировку, не освободил её самостоятельно. Это обеспечивает более справедливый и эффективный доступ к ограниченным ресурсам.

Что это дает

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

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