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

По окончанию урока вы сможете создать бота, который будет:

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

Итак, начнём.

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

Если вы хотите вытащить имя из канала ВК, Telegram, Facebook или из таблицы обзвона

Есть быстрый способ получить имя из этих каналов.

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

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

Ели вы совершаете обзвон, вы можете вытаскивать имя из таблицы обзвонов, это описано здесь.

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

Если имени нет в канале

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

Допустим, нам нужно создать простого бота, который будет собирать у пользователя контактные данные, чтобы затем передать их менеджеру. Для этого нам нужно будет запросить имя пользователя. Всегда интересно, когда бот не принимает в качестве имени что угодно, а понимает, что в предложении "меня зовут Алексей, спасибо" именем является только слово Алексей. Как же это сделать?

Создадим экран приветствия

Добавим блок Текст, в котором напишем:

Здравствуйте! Как можно к вам обращаться?



Добавим распознавание популярных имен

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

Добавьте на экран приветствия блок Интенты,



Нажмите Выбрать готовый интент, найдите готовый интент Имена, выберите его, нажмите Выбрать.




Затем нажмите Сохранить.



Вот что у нас получилось:



Подробнее о том, что такое Интенты, вы можете почитать здесь. А о готовых интентах - здесь.

Посмотреть словарь имён вы можете, если перейдёте на вкладку Сущности, и рядом со словарем $NAME нажмёте скачать.

Теперь бот будет принимать популярные имена, и их сокращенные формы.

Выбранное имя будет попадёт в системную сущность $NAME, которая будет содержать информацию об имени - гендерную принадлежность, уменьшительную и полную форму имени.

Попробуем вывести имя.

Кликните на интент $NAME.



Появится стрелочка. Выберите блок Текст.



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

Скопируйте и вставьте в этот блок:

Приятно познакомиться, $NAME.name!





Если пользователь назовёт популярные имена, например, Анна, Артур и или Роберт, или другую форму популярных имен, например, Машенька, Артурчик, Катька, то бот перейдёт по ветке "Имена". Можете нажать Тестировать, написать какое-нибудь популярное имя и увидеть:




Перезапустим тестирование

Для того, чтобы проверить другое имя, нам нужно будет начать выполнение сценария с начала. Для этого нажмите Остановить тест:



И затем снова нажмите Тестировать:





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

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

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



Чтобы бот не отвечал "Извините, непонятно", свяжем Любая другая фраза с новым блоком Текст и напишем в нём:

Вас правда зовут $queryText?



$queryText - системная переменная, которая будет содержать весь введённый на предыдущем экране текст.

Теперь всё, что не попадёт в наш единственный интент Имена, будет переводить бота по ветке Любая другая фраза. Любая другая фраза будет вести на блок Текст, где мы выводим введённый пользователем текст с помощью системной переменной $queryText.

Нажмите тестировать и введите любой текст, чтобы проверить:



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



Поэтому добавим синтаксис шаблонов, чтобы бот принимал имена в предложении.

Имя в предложении

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

Для этого нажмите на шестеренку блока Интенты:



Нажмите на интент Имена, чтобы раскрыть его:



Кликните Добавить пример:



Скопируйте:

* $NAME *

И вставьте в поле нового примера:



И нажмите Сохранить:



Поясним значение * $NAME * :

Звёздочка, пробел, название словаря, затем пробел и снова звездочка - будет означать, что мы будем принимать любые слова до и после $NAME.

Подробнее о синтаксисе шаблонов вы можете почитать здесь.

Итак, теперь бот будет понимать популярные имена в предложении:



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

Добавим новый интент.

Для этого нажмите на шестеренку блока Интенты:



И выберите Создать интент:



Скопируйте:
* меня * зовут $TEXT::isname

И вставьте в поле интента. Нажмите Добавить пример. Не закрывайте пока это окно, мы добавим ещё несколько примеров.



С помощью этого интента мы принимаем в $TEXT всё, что угодно, что будет написано после фразы "меня зовут".

$TEXT - системная переменная, которая принимает любой текст.

После $TEXT мы ставим две двоеточия - это будет означать, что мы будем записывать всё, что попало в $TEXT в переменную, в нашем случае мы создаем переменную $isname (будем использовать её позже).

Скопируйте и добавьте следующие примеры:

* зови* * меня $TEXT::isname
- этот шаблон будет принимать любые слова + зовите меня [имя] и любые слова + зови меня [имя]

* ну * пусть * будет $TEXT::isname

* наверное $TEXT::isname

* имя $TEXT::isname

* хорошо $TEXT::isname

* зовут $TEXT::isname

* ладно $TEXT::isname

* я $TEXT::isname

Вот что у нас получилось:



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

И, наконец добавим ещё:

$TEXT::isname

$TEXT::isname будет отрабатывать только в случае, если ни один из других примеров не отработал. В неё будет попадать полностью сообщение, введённое пользователем на данном экране (за исключением случаев, когда мы используем синтаксис шаблонов, выше).

Этот $TEXT нам нужен на случай если пользователь необычное имя одним словом.



Нажмите Сохранить.

Теперь, так как у нас есть $TEXT, который будет принимать что угодно, можно удалить экран с Вас правда зовут $queryText? Если в интентах есть $TEXT, то Любая другая фраза отрабатывать не будет.



Далее, нам нужно от интента * меня * зовут $TEXT::isname сделать связь и создать блок Условия:

$name = $NAME ? $NAME.name : $isname



С помощью этого условия мы создаем переменную $name.

= это оператор языка программирования Javascript, с помощью которого мы присваиваем переменной $name значение.
Далее, у нас идёт логическое выражение. Если у нас ранее что-то попало в системную переменную $NAME, то мы будем записывать $NAME.name в переменную $name.
Если же в системную переменную $NAME ничего не попало, то запишем в $name значение $isname.

В итоге, в переменной $name у нас окажется имя - из словаря или принятое необычное имя.

Теперь свяжите интенты Имена и * меня * зовут $TEXT::isname с данным блоком Условия:



Сейчас у нас есть блок Текст, в котором написано Приятно познакомиться, $NAME.name!



В данный момент этот блок использует только имя, которое содержится в системной сущности $NAME. Поэтому нам нужно изменить текст в этом блоке на:

Приятно познакомиться, $name!



И от блока Условия создайте связь с текстом Приятно познакомиться, $name!



Вот и всё!

Теперь бот будет принимать как популярные:



Так и необычные имена:



Имя записывается в переменную $name, чтобы вы в дальнейшем могли её использовать в сценарии.

Что дальше?

Теперь имя клиента у нас записано в переменную $name. Далее, вы можете работать с этой переменной - обращаться к клиенту по имени, а также отправлять эту переменную, содержащую имя клиента, в нужные каналы связи.

Можете пройти урок по сбору других контактных данных (фамилия, телефон, имейл).

Чтобы передавать данные, пройдите один из следующих уроков:

отправлять данные сообщением в телеграм:
отправлять в группу в телеграме;
отправлять личным сообщением в вк;
отправлять в гугл-таблицу (добавлять строчку);
отправлять себе на почту;
делать рассылку по имейлам.
Была ли эта статья полезна?
отменить
Спасибо!