just-ai/jaicf-kotlin

Проблема при использовании buttons toState при подключении mongoDB к JAICF проекту

BytesCrusher opened this issue · 0 comments

Всем привет! Возникла очень странная проблема по JAICF, буду рад любой помощи.
Мы используем стандартный шаблон проекта от jast AI https://github.com/just-ai/jaicf-template, он содержит в себе сценарий и проперти на эндпоинт mongoDB.

Суть проблемы в использовании переходов от стейта к стейту с помощью команд вида: reactions.buttons("текст" toState "state_name").
Проблему мы локализовали, и она связана именно с "toState".

Непонятный момент заключается в том, что проблемы появляются только после подключения базы данных (пробовали только дефолтную mongo). Это происходит из-за того, что после ее подключения на всех юзеров начинает вестись контекст (id, current state, transition history и т.п.). Как раз transition history содержит в себе список всех стейтов по порядку, как по ним переходил пользователь.

Проблема проявляется в том, что при использовании buttons через toState некоторые (не все почему-то) переходы не появляются в transition history, но их бизнес логика отрабатывает, выводятся все сообщения в диалог и т.п., однако current state не меняется в монге. Из-за этого возникает ситуация, когда пользователь видит уже следующий стейт пользователь жмет очередную кнопку чтобы пройти еще дальше, но в монге висит все равно предыдущий стейт, и она не может найти доступный переход (т.к. в предыдущем стейте это не возможно) и jaicf выдает fallback.

При отключении монги все работает отлично и никаких проблем не возникает ни в одном стейте.
Одно из решений сейчас - это убирать buttons toState и заменять их на обычные buttons, а в стейты класть регекс активаторы - это работает, однако по нашей бизнес логике необходимо использовать именно buttons to State.

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

Попытался заснять на видео:
https://www.youtube.com/watch?v=9aKExYql7Uo