Поток диалога должен сохранять данные в conv.data
изолированными для одного сеанса, даже сеансов от одного и того же пользователя. Когда вы используете Dialogflow, эти данные хранятся в контексте, который задает сеанс c.
Вы можете убедиться в этом, включив вход в систему StackDriver, что позволит вам изучить точный запрос и ответ, которые Dialogflow использует с вашим выполнением, и это будет включать идентификатор сеанса для отслеживания. (И если вы думаете, что они смешивают эти два, размещение деталей запроса и ответа поможет выяснить, что происходит.)
Очень грубо, похоже, что вы смешиваете что-то с вашим глобальным, или возможно, что-то установлено в одном сеансе, которое не очищается или не перезаписывается другим. Опять же - просмотр точных запросов и ответов должен помочь вам (и / или нам) понять это.
Я считаю, что такой глобальный объект должен рассматриваться как доступный только для чтения. Если вы хотите иметь некоторый объект среды, который содержит соответствующую информацию только для этого сеанса - я бы отделил это, просто от философского замысла.
Конечно, я бы не использовал это глобальное состояние для хранения информации между сессиями. Хотя функция будет вызываться только, я не уверен, как это будет работать с Promises - что вам понадобится, как только вы начнете какие-либо операции asyn c. Кроме того, существует риск того, что последующие вызовы могут происходить в разных случаях.
Короче говоря, мой подход (который я делаю довольно устойчивым в мультивалюте):
- Сохранение всех состояний в Контекст (который
conv.data
должен делать так). - Доступ к нему осуществляется через
request
, conv
или через какой-либо другой объект c, определяемый запросом. - Глобальная информация / конфигурация должна быть доступна только для чтения.