# #dialogflow-cx
Вопрос:
Вот подробная информация об ошибке, с которой я сталкиваюсь с dialogflow CX
Мой бот предназначен для перехода к разным потокам со стартовой страницы, и с каждого потока он переходит к любому другому потоку и обратно, чтобы начать поток.
Недавно я заметил, что если мы вызываем поток более 3 раз за одни и те же сеансы, то в 4-й раз мы получаем ошибку ниже:
Обнаружено более 10 вложенных переходов потока
Это также происходит, когда мы переходим к любым 3 потокам, и та же ошибка возникает при выполнении 4-й задачи.
Ответ №1:
Я столкнулся с той же проблемой и, проведя небольшое исследование, нашел обходной путь. Проблема в том, что, переходя от потока к потоку, вы не «закрываете» их, и dialogflow оказывается во вложенной беседе на 10 уровней: чтобы решить ее, вам нужно закрывать потоки каждый раз, когда вы идете куда-либо еще.
По умолчанию Dialogflow будет пытаться придерживаться потока разговоров до тех пор, пока он не достигнет конца. Если во время разговора вы переходите к другому потоку, он следует по страницам до конца потока, а затем возвращается к последнему посещенному потоку и продолжается до тех пор, пока он тоже не завершит этот поток, и так далее до «Завершения сеанса».
Это позволяет вам строить сложные диалоги с отклонениями от «основного пути», но с ними сложнее справиться, когда у вас несколько «основных путей».
Я изначально спроектировал своего бота так, чтобы он вел себя как ваш, и получил ту же ошибку, поэтому мне пришлось изменить стратегию. Я сделал следующее:
- Создал «Основной поток«, в котором были группы маршрутов, идущие ко всем другим потокам, и несколько страниц управления (последующие действия по определенным вопросам, регистрация, обработка ненормативной лексики и так далее). Этот поток был стационарным, что означает, что, когда вы находитесь на данной странице, вы фактически не можете перейти куда-либо еще в потоке, только в другие потоки с помощью групп маршрутов. Если пользователь прощается, я заканчиваю сеанс, и это все.
- Изменил все остальные потоки, чтобы перейти на страницу конечного потока вместо перехода к «основному потоку». Это предотвращает возникновение в dialogflow ошибки, о которой вы упоминаете. У каждого потока теперь есть свои собственные страницы и диалоги, но когда задача завершена, вместо того, чтобы иметь маршрут, идущий в «Основной поток», у вас есть маршрут, идущий в «Конечный поток». Это позволяет dialogflow закрыть поток, который вы используете и которого у вас нет, как вы опубликовали,
Обнаружено более 10 вложенных переходов потока
Так что теперь, каждый раз, когда начинается разговор:
- вы идете в основной поток;
- затем, основываясь на том, что вы говорите боту, вы переходите к другому потоку (обрабатывая это намерение).;
- Когда вы достигнете конца этого потока (возможно, вы завершили и заказали или запросили помощь), появится маршрут, ведущий на страницу «Конечный поток» (встроенный).
- Это возвращает вас к последнему потоку, который вы посетили (в нашем случае «основной поток»).
- Отсюда вы обрабатываете другое намерение и так далее, пока не перейдете на страницу «Завершение сеанса» и бот не закроется.
Единственное, что вам нужно проверить, — это то, что вы не можете переходить от других потоков к другим потокам, но каждый поток доступен только из основного потока (это позволит избежать застревания в разговоре).