全天都在尝试根据actions-on-google-nodejs的意图创建一个会话实体。不幸的是没有成功。
我相信该库不以任何方式支持实体,这有点令人遗憾。我说的对吗?
在研究过程中,我发现this amazing post解释了如何通过API创建和管理实体,但是它们正在使用nodejs-dialogflow
正在考虑同时使用两个库 google-nodes-actions 和 nodejs-dialogflow ,但是比起使用 actions-on捕获意图-google-nodejs 的第二个库( nodejs-dialogflow )将不会对内容等有所了解。
经过进一步研究,我发现the API documentation for sessions.entityTypes与Google OAuth 2.0一起使用时,“尝试使用此API”效果惊人,但是不知道如何使用Google OAuth 2.0对我的服务器(express.js)进行授权。我尝试使用API密钥,但始终遇到以下错误:
{
"error": {
"code": 401,
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
有人建议如何为自己的意图创建会话实体吗?
之所以尝试使用会话实体,是因为该实体每隔几天就会更改一次,并且不想在dialogflow中更新该实体。我的想法是将其存储在DB(firebase)中,并有意验证它是否与任何值匹配。
答案 0 :(得分:2)
请记住,会话实体必须先设置为想要的值,然后才能在Intent中匹配。在这种情况下,您可能应该在操作开始时正确执行此操作。因此,如果您有“欢迎”意图和“状态选项”意图,而“选项”实体位于“状态选项”意图中,则应在“欢迎”意图中更新“选项”。您无法按照“状态选项”的意图进行操作,因为它必须已经与实体匹配。
这两个库做完全不同的事情,并且可以很好地协同工作。您将需要从原始请求正文获取会话路径(可以使用a-o-g库从conv.request
获取会话路径),以及实体路径(必须以某种方式进行设置)。
nodejs-dialogflow库只是您还发现的REST API的包装(实际上,可能是等效于gRPC的包装,但这并不重要)。但是,它要做的最大的事情就是将您从服务帐户获取的密钥转换为需要随每个请求发送的访问令牌的工作。如果您不熟悉Google的OAuth 2实现,although it is certainly possible to do this yourself可以使事情变得简单得多。
最后,虽然这个想法是可行的并且可行,但是请记住,在Intent期间这将花费一些时间,并且用户正在等待答复。由于此数据很少更新,对于每个人来说,您不妨使用similar API来定期更改Entity。此过程可能是您从计划的(cron)作业中触发的,并可以根据需要手动触发它。