Dialogflow 在 Google 上的操作中是否有匿名 ID?

Is there an anonymous ID in Actions on Google with Dialogflow?

Actions on Google with Dialogflow 中是否有我可以在 Node.js 中使用 DialogFlow 访问的匿名 ID?

我不需要知道 Google 谁在使用 Action 的帐户,但我确实想要一个唯一的标识符,以便 Action 可以知道他们何时回来。

Google不再为您提供。当新用户与您的 webhook 交互并将生成的 id 存储在他们的用户存储对象中时,您将必须生成一个。

要识别新用户,您只需检查他们的用户存储对象中是否已有 ID。要生成 id,您可以使用像 uuid 这样的库。 https://www.npmjs.com/package/uuid

如果你只需要一个唯一的 id 来进行简单的识别,Uuidv4 可能是你需要的

Google 的最初想法是利用一个名为 userStorage 的字段,但这个功能似乎在 ATM 上很无聊。

userStorage 文档: https://developers.google.com/actions/assistant/save-data

关于问题的 Reddit 主题: https://www.reddit.com/r/GoogleAssistantDev/comments/d88z7e/userstorage_saga_continued/

除非发生了一些变化(我一直忙于围绕它编写修复程序,因此我没有检查过 userStorage),如果没有帐户链接,您可能会倒霉。随意尝试 userStorage 并让我诚实,因为他们可能已经在内部补救了这种情况。

或者,如果您只需要单个对话的标识符或会话,您可以利用 conversationId,它在对话结束之前都是唯一的。

我找到了一个可能的选择...

(在Node.js的DialogFlow中工作时,大部分代码都在一个handler中,参数通常被称为conv。下面假设它在这样一个handler中.)

在每次调用时,检查会话数据和用户存储中的 'existing' id:

var id = conv.data.MyId || conv.user.storage.MyId || '';

if(!id) {
  id = /* make a new Id for this user... a GUID or some other unique id */
  conv.user.storage.MyId = id;
}

一旦我从存储中获取 ID 或创建一个新 ID,将其重新分配给 conv.data 至关重要,因为 conv.user.storage 似乎仅在第一次调用时可靠地提供!

// IMPORTANT
conv.data.MyId = id;

/* use the Id as needed */

我的代码在 firebase 数据库中查找 Id 以获取他们上次访问的详细信息。

这似乎有效,但可能不可靠。