使用nodejs或reactjs更新对话流中的实体



所以我在这个项目中工作,我使用一个reactjs面板来创建类别。现在我正试图使机器人使用这个类别作为一个实体,我有一个nodejs服务器,机器人用于webhook调用,现在我有2个选项来添加类别作为一个实体。我可以将restAPI用于dialogflow batchUpdate实体,但这需要身份验证,我只能让它与承载令牌一起工作,但这些需要每小时(最多12小时)重新生成,这对于部署是不可能的。我还试图给我的nodejs服务器发一个电话,在那里我尝试使用谷歌上的操作库,但我再次使用旧的dialogflow- fulfillment库来处理我所有的回复和东西以及2个库冲突。那么我有什么选择呢?是否可以使用dialogflow- fulfillment库顶部更新实体?或者是否有一种方法可以让我拥有一个终身持有者令牌或谷歌api接受的我可以使用的任何其他验证方法?

下面是我使用的api

https://dialogflow.googleapis.com/v2/projects/<project-id>/agent/entityTypes/<entity-id>/entities:batchUpdate

这是我发送的正文


{
"name": "projects/<project-id>/agent/entityTypes/<entity-id>",
"displayName": "cityPanel",
"kind": "KIND_MAP",
"entities": [
{
"value": "Cairo",
"synonyms": [
"Cairo"
]
}
]
}

这工作得很好,但我需要每小时生成一个新的承载令牌,这对我来说是不可能的。

因此我能够以以下方式使其工作,我通过google-auth-library通过这个google jwt引用该文档然后我使用以下代码获得承载令牌

const { JWT, GoogleAuth } = require("google-auth-library");
const keys = require("./dialogflowKey.json");
async function main() {
const client = new JWT({
email: keys.client_email,
key: keys.private_key,
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
});
const url = `https://dialogflow.googleapis.com/v2/projects/${keys.project_id}/agent/entityTypes`;
const res = await client.request({url});
console.log(client.credentials.access_token); // this is the bearer token
}
main().catch(console.error);

您可以使用Google的官方库@google-cloud/dialogflow进行服务帐户认证。

在google cloud platform for project中启用计费和Dialogflow API后,下载服务帐户密钥。

  • 使用服务帐户设置身份验证,以便您可以永久访问它。

使用Entity_types.batch_update_entities进行批量更新。查看文档了解详细信息。

下面是初始化客户端的方法:
const dialogflow = require('@google-cloud/dialogflow');
// Create a new session
const sessionClient = new dialogflow.SessionsClient({
keyFilename: gcpServiceAccountKeyPath,
});

最新更新