Dialogflow es 如何在Dialogflow fullfilment上唯一标识用户?

Dialogflow es 如何在Dialogflow fullfilment上唯一标识用户?,dialogflow-es,actions-on-google,voice-recognition,Dialogflow Es,Actions On Google,Voice Recognition,我需要通过Dialogflow Fulfillment向我的web服务发送一个唯一标识符,这样我就可以识别发出请求的人。 为此,我需要在Dialogflow Fulfillment上唯一地标识一个用户,但我找不到如何在内联编辑器中获取令牌或类似的东西,以便标识发出请求的设备 我试图查看代理变量中有什么。 但是我找不到任何东西可以用来识别向我的web服务发出请求的用户 我还尝试获取userStorage,如中所示,但它返回错误: Cannot read property 'userStorage'

我需要通过Dialogflow Fulfillment向我的web服务发送一个唯一标识符,这样我就可以识别发出请求的人。 为此,我需要在Dialogflow Fulfillment上唯一地标识一个用户,但我找不到如何在内联编辑器中获取令牌或类似的东西,以便标识发出请求的设备

我试图查看代理变量中有什么。 但是我找不到任何东西可以用来识别向我的web服务发出请求的用户

我还尝试获取userStorage,如中所示,但它返回错误:

Cannot read property 'userStorage' of undefined
    at verificarBiologia (/user_code/index.js:37:76)
    at WebhookClient.handleRequest (/user_code/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:273:44)
    at exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/user_code/index.js:52:9)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:26:47)
    at /var/tmp/worker/worker.js:686:7
    at /var/tmp/worker/worker.js:670:9
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickDomainCallback (internal/process/next_tick.js:128:9)
可能是因为变量user未定义

这是我的代码:

// See https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// for Dialogflow fulfillment library docs, samples, and to report issues
'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  function welcome(agent) {
    agent.add(`Welcome to my agent!`);
  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  function verificarBiologia(agent) {

    agent.add('Inicio do metodo');

    console.log('Build 059');

    console.log(agent);

    let payload = request.body.originalDetectIntentRequest.payload;
    console.log(payload);


    let userStorage = request.body.originalDetectIntentRequest.payload.user.userStorage || JSON.stringify({});
    let userId;
    console.log("userStorage", userStorage);
    userStorage = JSON.parse(userStorage);
    console.log("userStorage_after_parsing", userStorage);


    agent.add('Final do metodo');
  }

  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  intentMap.set('VerificarBiologia', verificarBiologia);
  agent.handleRequest(intentMap);
});
编辑

请求正文如下:

{
   "responseId":"f4ce5ff7-ac5f-4fec-b5bd-4e5007e4c2de",
   "queryResult":{
      "queryText":"Quando tenho prova de biologia?",
      "parameters":{
         "disciplinaBiologia":"biologia"
      },
      "allRequiredParamsPresent":true,
      "fulfillmentText":"Voc� tem uma prova de biologia no dia 30. Tire suas d�vidas com o professor.",
      "fulfillmentMessages":[
         {
            "text":{
               "text":[
                  "Voc� tem uma prova de biologia no dia 30. N�o deixe de fazer os exerc�cios."
               ]
            }
         }
      ],
      "intent":{
         "name":"projects/verificadorprovas/agent/intents/020017a0-e3a9-46f0-9a2e-d93009f5ac42",
         "displayName":"VerificarBiologia"
      },
      "intentDetectionConfidence":1,
      "languageCode":"en"
   },
   "originalDetectIntentRequest":{
      "payload":{

      }
   },
   "session":"projects/verificadorprovas/agent/sessions/3700fddf-3572-4221-fffc-a0dc1bf28330"
}
有人能帮我吗?我必须做些什么才能得到我可以用来识别用户的东西


提前感谢

如果您计划在Google上使用Actions搜索Google Assistant,那么识别用户的最佳方法是使用帐户链接。有关获取Google Assistant用户信息的更多信息,请查看以下内容。

在Dialogflow模拟器中使用“立即试用”进行测试不会模拟Google环境中的操作。要做到这一点,你需要使用谷歌模拟器上的操作,你可以点击几行“在谷歌助手中查看它是如何工作的”


您是否可以更新您的问题,以包含行
console.log('Dialogflow Request body:'+JSON.stringify(Request.body))的结果?如果您在Google上使用操作,代码应该可以工作。@谢谢您的回答。我按照您的要求添加了请求正文。您是使用Google助手生成的,还是Dialogflow中的“立即试用”侧栏?我使用了“立即试用”。谢谢您的回答。您链接到我的示例代码需要一个conv对象。你能告诉我如何访问这个conv对象吗?如果你只关心Google上的操作,那么你可以从这里开始,否则如果你还想支持其他平台,那么只需查看Dialogflow控制台中Firebase的内联编辑器代码。有一些代码被注释掉了,你可以试试谷歌助手。非常感谢。通过使用谷歌模拟器和来自谷歌的知识,我成功地让它按照我的需要工作。还有一个简单的问题。。是否可以从Google Assistant访问外部的userStorage?例如,一个Android应用程序在userStorage上保存一个令牌,然后我在Google Assistant上检索该令牌?如果您有单独的问题,请启动一个新的堆栈溢出问题来提问。