Dialogflow es 在谷歌Dialogflow上的操作中是否有匿名ID?

Dialogflow es 在谷歌Dialogflow上的操作中是否有匿名ID?,dialogflow-es,actions-on-google,Dialogflow Es,Actions On Google,在Google上使用Dialogflow的操作中是否有匿名ID,我可以使用Node.js中的Dialogflow访问该ID 我不需要知道谁在使用该操作的谷歌帐户,但我确实希望有一个唯一的标识符,以便该操作可以知道他们何时回来。谷歌不再为您提供一个。当新用户与您的webhook交互时,您必须生成一个id,并将生成的id存储在他们的用户存储对象中 要识别新用户,只需检查他们的用户存储对象中是否已经有id。要生成id,可以使用uuid之类的库 如果你只需要一个唯一的id来进行简单的标识,那么Uuidv

在Google上使用Dialogflow的操作中是否有匿名ID,我可以使用Node.js中的Dialogflow访问该ID


我不需要知道谁在使用该操作的谷歌帐户,但我确实希望有一个唯一的标识符,以便该操作可以知道他们何时回来。

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

要识别新用户,只需检查他们的用户存储对象中是否已经有id。要生成id,可以使用uuid之类的库


如果你只需要一个唯一的id来进行简单的标识,那么Uuidv4可能就是你所需要的。

谷歌最初的想法是利用一个名为userStorage的字段,但这个功能似乎已经过时了

用户存储文档:

Reddit线程关于以下问题:

除非发生了变化(我一直忙于编写修复程序,所以没有检查userStorage),否则如果没有帐户链接,您可能会运气不佳。请随意尝试userStorage,并让我保持诚实,因为他们可能已经在内部纠正了这种情况


或者,如果您只需要一个会话的标识符或会话,您可以利用会话ID,该ID在会话结束前是唯一的。

我找到了一个可能的选项

(在Node.js中的DialogFlow中工作时,大多数代码都在处理程序中,该参数通常被称为
conv
。以下假设它在这样的处理程序中。)

在每次呼叫中,检查会话数据和用户存储中的“现有”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,以获取他们上次访问的详细信息


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

谢谢,@Jordi。我现在按照建议使用uuidv4,尽管我删除了“-”并预先添加了一个字母,以便能够将其用作firebase id!