# Цепочка диалога

## Создание цепочки

{% hint style="info" %}
**Цепочка** — это последовательность **блоков**, соединенных между собой, как звенья в цепи. Каждый блок — это элемент логики нашего бота. В зависимости от сообщений пользователя или других условий мы можем заставлять бота переходить на тот или иной блок.
{% endhint %}

Перейдите в раздел "цепочки" в левом меню приложения:

![Раздел "цепочки"](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EHOhVtKjqcMhq-dWi%2Fimage.png?alt=media\&token=30562c16-2de9-4f6a-a382-fc103e94f8a4)

Нажмите кнопку **"добавить цепочку"**.

{% hint style="info" %}
У каждой цепочки есть **условие**. По нему бот выбирает, какую цепочку нужно запустить, когда пользователь напишет сообщение.
{% endhint %}

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EHxOWxCyfRi55uNPR%2Fcreation.gif?alt=media\&token=1ee67b47-d2a4-4cce-bdbb-256a6ae4f308)

Все, что нужно, чтобы создать цепочку — это указать ее **название**, добавить **условие** попадания в нее и создать (или выбрать из существующих) **начальный блок**. По умолчанию будет создан новый блок с названием, как у цепочки. Подробнее про [условия](https://docs.smartbot-vk.ru/sozdanie-scenariev/usloviya)

Первым шагом в блоке мы добавили шаг с отправкой сообщения «это первый блок теста». Не забывайте периодически сохранять блок и цепочку) Давайте проверим, что получилось.

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EIJ8sgls63crUhzhQ%2Fimage.png?alt=media\&token=a00e4a5f-705d-48c4-9043-22e0142483e1)

Отлично, бот реагирует на нашу цепочку.\
Кстати, по умолчанию цепочка создается с галочкой **«Цепочка активна только для админов».** Это удобно, чтобы отладить работу цепочки, а потом снять галочку и сделать ее доступной всем пользователям.

## Разветвление логики

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

Давайте спросим у пользователя, в каком году была основана Москва. Для этого мы добавим шаг "**отправить сообщение**" с текстом вопроса:

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EIwSia4rDTCFb315b%2Fquestion1.gif?alt=media\&token=30cbbfc1-0ba0-40c2-bb8a-a12b2a12a7d5)

Обратите внимание, что после текста вопроса мы должны добавить шаг **"Ждать сообщение"**. Это нужно для того, чтобы бот остановился и ждал ответа от пользователя. Если мы этого не сделаем, то бот выйдет из цепочки, так как других шагов в ней нет.

Проверим, как работает наш тест.

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EJHEYGTffiYcroYOm%2Fimage.png?alt=media\&token=46477fb0-ad92-4a18-8e90-87ea7eb5c8c4)

{% hint style="info" %}
**Шаг «Ждать сообщения»** останавливает бота и заставляет его ждать сообщения пользователя.
{% endhint %}

Отлично! Теперь нам нужно проверить, правильно ли пользователь ответил на наш вопрос. Если да, то перенаправим его на следующий вопрос. А если ошибся, то сообщим ему об этом и завершим тест.

Чтобы добавить условие на ответ пользователя, нам нужно добавить новую **группу шагов**.

{% hint style="info" %}
**Группа шагов** — это последовательность шагов, которая может иметь свое собственное условие в рамках блока. Если условие группы шагов выполняется, то бот будет проходить по шагам группы. Если условие не выполняется — группа пропускается.
{% endhint %}

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EJltsp3qWoKVvJPhF%2Fstepsgroup.gif?alt=media\&token=5030f5ec-b2ca-46c0-a0d1-635d0679501e)

Нажмите кнопку **"добавить группу шагов"**, тогда будет создана новая группа. В ней нажмите на кнопку "**добавить условие**", в котором можно проверить, что сообщение подписчика равно 1147. Если условие выполняется, значит подписчик ответил на наш вопрос верно. Подробнее про условия можно прочитать [тут](https://docs.smartbot-vk.ru/sozdanie-scenariev/usloviya).

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

В качестве первого шага мы добавили сообщение о правильном ответе, а вторым шагом будет **шаг «переход»** на следующий блок — завершение теста. Этот блок мы заполним позднее.

![](https://sun9-5.userapi.com/c850036/v850036467/1a9116/LhY_VdQEvCc.jpg)

{% hint style="info" %}
**Шаг «переход»** позволяет боту перейти на следующий элемент логики. Можно перейти на другой блок, группу шагов или конкретный шаг.
{% endhint %}

Осталось добавить сообщение об ошибке, если пользователь написал сообщение отличное от «1147». Условие **группы шагов №1** не выполнится и бот пропустит ее и пойдет дальше. Создадим новую **группу шагов** и добавим туда шаг с отправкой сообщения о неудаче. Условие здесь не нужно, так как если бы пользователь ответил верно, он бы перешел на блок «Тест. Завершение».

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EKiydy6pVtf91bUbt%2Fstepsgroup2.gif?alt=media\&token=461ce7ac-a07e-4167-9acb-6bb7a7420589)

Отлично, наш первый вопрос работает! Теперь мы можем перейти к настройке блока «Тест. Завершение». Для этого нажмите **«редактировать блок»** в шаге **переход.**\
Откроется экран редактирования блока "Тест. Завершение". Это второй блок нашей цепочки, второй логический кусочек. В этом блоке мы можем задать новую часть сценария. Для простоты давайте выведем пользователю какое-нибудь сообщение об успешном завершении теста!

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EKtC-iXWONAcRwc9a%2Ffinal_block.gif?alt=media\&token=9aa73be7-2a5d-4693-aefb-ee2ec260dad0)

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0ELFGGh5Ii9Q3MeEw4%2Fimage.png?alt=media\&token=28bbb1e5-30a9-42ae-9944-6094d69e5c20)

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

Если у вас возникли какие-то трудности при настройке бота — включите **Режим отладки** в Настройках приложения, тогда бот при общении с админом будет комментировать ход своих действий.

Вот как можно представить полученную цепочку в виде блок-схемы:

![](https://463658383-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0DL-As7pQfMiFtgM0k%2F-M0DYQSogTKUZDN7GmeR%2F-M0EON6ecCN29Fe2m3R_%2FUntitled%20Diagram%20\(1\).png?alt=media\&token=0f2b0398-e42b-4554-8bb7-6c2c0d1af257)

Перед созданием сценария мы рекомендуем продумать логику и нарисовать похожую блок схему, например, в бесплатном сервисе [draw.io](https://draw.io)
