У вас есть несколько вопросов, которые вы пытаетесь поднять здесь, в дополнение к той, с которой вы имеете дело.Глядя на каждый:
Как я могу остановить setFollowupEvent()
от переопределения сообщения, которое я установил?
Вы не делаете.Весь смысл setFollowupEvent()
состоит в том, чтобы переключиться на другое намерение вместо того, которое сейчас обрабатывается.
Большую часть времени вы думаете, что хотите setFollowupEvent()
, вы, вероятно, этого не делаете.Не используйте его.
Итак, как мне добавить вопрос в конце того, что я говорю?
Просто задайте его.
Действительно, это так просто.
Вы можете включить его в строку, которую вы отправляете на agent.add()
, или (в зависимости от деталей) вы можете сделать секунду add()
с подсказкой.
Но разве мне не нужно вызывать намерение, чтобы получить ответ?
Нет.Это не то, для чего предназначен Intent.
Intents захватывает то, что пользователь говорит , а не то, что вы спрашиваете или что делает ваш агент.Ваше выполнение делает что-то, основываясь как на инициируемом намерении, так и на остальной части состояния, которое вы знаете о разговоре.Но Намерение - только один бит этой информации.
Вы упомянули состояние пользователя.Как я могу отслеживать состояние пользователя во время разговора?
Поскольку похоже, что вы используете библиотеку dialogflow-fulfillment
, самый простой способ - сохранить ваше состояние в параметрах в Контекст с очень большой продолжительностью жизни (или тем, что вы продолжаете обновлять).
Таким образом, при первом запуске выполнения вы можете проверить Контекст.Если нет контекста или идентификатора, вы должны сгенерировать случайный идентификатор пользователя и сохранить его в контексте.Впоследствии вы будете использовать этот идентификатор для поиска информации о пользователе в базе данных в реальном времени.
Если я выполняю эту работу, нужна ли мне база данных?
Нету!Если вы просто храните немного информации о пользователе, и эта информация просто продлит срок жизни разговора, вы можете сохранить все это непосредственно в параметрах контекста.Вам необходимо убедиться, что имена этих параметров не конфликтуют с какими-либо параметрами, имеющимися в ваших намерениях, но в противном случае они будут длиться дольше, чем это делает контекст.
Если вам нужно хранить информацию об этом человекемежду разговорами, тогда вам нужно будет искать другие методы.Для действий доступен идентификатор пользователя, но он устарел и планируется удалить.Существуют также поля хранения сеансов и хранения пользователей, которые помощник делает доступными, но их немного сложнее использовать с помощью библиотеки диалогового потока выполнения, если они вам не нужны.