为什么 Dialogflow nodejs sdk“使用知识库检测意图”方法响应为 null ?(V2Beta)

Den*_*ohn 5 dialogflow-es

我正在将 集成Dialogflow Nodejs sdk到我的应用程序中,以在以下文档nodejs-dialoglowflow-detect-knowledgebase-intent的帮助下检测知识库意图

以下是我的查询请求

const request = {
session: sessionPath,
queryInput: {
  text: {
    // The query to send to the dialogflow agent
    text: message,
    // The language used by the client (en-US)
    languageCode: 'en-US',
  },
},
queryParams: {
  knowledgeBaseNames: ['projects/my-project-id/knowledgeBases/my-knowledge-base-name'],
},
Run Code Online (Sandbox Code Playgroud)

};

当我在 dialogflow 控制台中测试 FAQ 时它可以工作,但是当我尝试对 执行相同操作时Dialoglflow Nodejs SDKknowledgeAnswers来自 dialogflow 响应的对象为空。

任何帮助表示赞赏。谢谢

Sur*_*raj 5

发生这种情况是因为knowledgeBaseNames属性值不正确。当您创建知识库时,它会返回以下响应:

{
  "name": "projects/project-id/knowledgeBases/NDA4MTM4NzE2MjMwNDUxMjAwMA",
  "displayName": "knowledge-base-display-name"
}
Run Code Online (Sandbox Code Playgroud)

knowledgeBaseNames属性接受 的数组name。它不同于displayName.

如果您已创建 Konwledgebase 表单 Dialogflow 仪表板,您将不会在仪表板中看到此详细信息。但是,Dialogflow SDK 提供 API 来获取代理的知识库列表。Node js V2Beta1 SDK 有一个方法projects.knowledgeBases.list,当给定项目名称时,该方法将列出所有知识库及其显示名称和名称。您可以将名称列表发送到检测意图请求中。

如果您的用例仅需要知道知识库的 ID,那么您可以从 Dialogflow 控制台的“试用”部分获取。输入您在知识库中添加的问题,然后单击diagnostic info。它将显示 JSON 格式的对话流响应。寻找knowledgeAnswers对象。知识库ID是属性的一部分,source如下所述:

"knowledgeAnswers": {
            "answers": [{
                "source": "projects/project-id/knowledgeBases/knowledgebase-id/documents/document-id"
            }]
}
Run Code Online (Sandbox Code Playgroud)

  • 答案并不清楚它指导 OP 实际做什么。我有一个类似的问题,并使用了 Google 在控制台内测试时共享的诊断信息中的“名称”值,但它仍然无法通过 SDK 工作。 (2认同)
  • 对我来说,问题是我使用的是 /v2/ API 版本而不是 /v2beta1/ 版本 (2认同)