问题标签 [api-ai]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - Google 上的 API.ai 操作 - 无法解析 JSON 响应字符串并出现“INVALID_ARGUMENT”错误:“:找不到字段。”
这个错误与我在这里问的类似,但这次是 NodeJs 客户端。
我正在尝试查找到某个位置的路线。一旦在我的 webhook 上触发了意图,我就会使用 GoogleMapAPI 计算方向。但在它完成并发送响应之前,我在操作控制台上收到了错误消息。
我检查了总响应时间,它不到 2 秒,Google 的超时时间不到 5 秒。
我哪里错了???
将 express.js 与 Action-on-Google 节点客户端一起使用
处理程序代码
方向提取 --- 错误在完成之前出现在操作控制台上
更新 我正在通过 WebStorm 在本地运行代码,并使用 ngrok 通过端口转发公开 webhook。
Update2
错误请求 400
这看起来像在我的回调完成之前,我的 webhook 正在向 Google Actions 发送空响应。
为什么会发生这种情况以及如何解决????
nlp - 我想下载或至少查看所有 api.ai 系统实体
我想下载或至少查看所有 api.ai 系统实体
目的是了解他们如何制作像 sys.number 和 sys.date 这样的实体
我面临的问题是我正在为我的机器人使用 sys.date 实体,它对于检测为当前日期的“今天”“明天”等临时情况非常有效
但在特殊情况下失败,例如:我想再添加一件事,当用户说“aaj”、“foran”或“abhi”时,它也会检测为当前日期,这些是特定地区使用的“今天”的俚语
session - 如何在 webhook 上获取会话 ID
我正在为 google home 和 Android 移动助手制作助手应用程序
我在 webhook上使用action-on-google库,这是推荐且方便的
在我的具体情况下,我想从需要 Session Id 的 webhook制作userEntity但我无法在 webhook 上获取 sessionid
根据api.ai 文档,它将 Json 发送到 webhook,如下所示:
当然它是正确发送的,但是在 webhook 上,我们将请求对象移交给action-on-google
它,它返回一个带有一堆方法的对象,例如,ask
等(在此处记录)askWithCarousel
askWithList
问题是没有记录对话ID的方法,那么我如何获取该会话ID:
我的源代码供参考:
/index.ts
/actions/index.ts
api-ai - 如何在 API.AI 中添加自定义格式以响应?
使用 Google API AI,我们创建了
- 代理人
- 意图
- 用户说(嗨)
- 回复
- 响应文本(欢迎,你好吗?)
- 用户说(嗨)
我们需要 html 格式的响应,例如
<b>Welcome</b>, How are you?
简而言之,我将如何在响应中应用 HTML 标记
nlp - API.AI 中的请求超时
我有一个 API.ai 代理将请求(来自用户)发送到需要大量处理(超过 5 秒)才能获得答案的 webhook。据我所知,没有办法增加 API.ai 中的响应超时
所以,我创建了 2 个意图。第一个会调用我的 webhook 开始处理结果,同时 webhook 会回复用户,“您的请求正在处理中......”。第二个意图有一个事件和动作。新事件的目的只是向用户显示结果。一旦结果准备好,我的后端应用程序将发送一个 curl 语句以触发第二个意图中的事件,并进行必要的参数修改,如 sessionID、v 和时区等。
我从 API.AI 收到了以下 JSON(我创建了一个示例来简化我的案例):
这是我的后端发送的 curl 语句。
从上面的 JSON 可以看出,API.ai 代理成功接收到触发器。但是,我在“响应部分”中指定的响应不会出现在用户面前。
我附上了 API.ai 代理中第二个意图的屏幕截图。
注意:我在开发者控制台、WebDemo 和 Slack 中尝试了代理。他们都没有向我(作为用户)显示指定的响应。
我不确定我是否做错了什么? 第二个意图的屏幕截图
node.js - Api.Ai 落在 textRequest 上以默认回退意图
我正在使用 Api.Ai(Node.Js SDK 版本 2.0.7 并且还升级到 4.0.3)并向我的代理发出 textRequests。
在我这边没有任何改变的情况下,似乎有一半的意图不再起作用(默认意图出现了)。
这些句子被证明是有效的,ApiAi 应该识别出正确的意图。在 ApiAi 控制台中,这些语句有效!
我无法确定为什么我 50% 的意图不再被识别。一些仍然被识别的是一个句子另一些单词,一些有参数一些没有......
我的代理有很多intents,可能和这个有关(51 Intents)。
有人有类似的问题并且可能找到了解决方案吗?看起来像 Api.Ai 方面的问题,有人知道是否有一个好地方可以在他们这边提交错误吗?
谢谢!
actions-on-google - gactions 测试失败并显示“您的应用程序必须至少有一项针对 locale en 的操作”
当我gactions test
为我的 Actions SDK 项目之一运行时,我收到以下消息:
这在 Google+ 社区中也至少 提出了两次——到目前为止还没有任何正确的答案。
我们能做些什么来摆脱这个问题?它的原因是什么?
如果我在 Google Actions 的控制台中创建一个空项目并使用这个新的项目 ID 上传和测试项目,我不会收到此消息。
另一个有趣的提示:控制台中该项目的所有信息(除了它存在之外)都丢失了。我不得不重新输入所有的东西,比如应用程序图标等等。
控制台一直假装我没有上传任何东西。五步向导的第一步没有复选标记,仅显示“1”,并且突出显示“添加操作”按钮。但gactions update
成功返回。但是,对于新创建的项目,第一步有一个复选标记。
编辑(10 月 10 日 - 16:10 UTC):
现在我在尝试使用时收到一条错误消息gactions update
:
发生这种情况 - 无论我使用action.en.json
(包括"locale": "en"
在文件中)还是action.json
作为文件名(并且不包括locale
文件中的信息)。
与 相同的结果gactions test
。
oauth - 将 Google Assistant 与 Firebase 身份验证相关联
我正在尝试使用 DialogFlow(Api.AI) 将 Google Assistant 应用程序与 Firebase Auth 连接起来。我的应用程序使用 Firebase 身份验证来维护用户帐户和实时数据库来存储数据。我希望能够通过 Google 助理对用户数据进行更改,也许可以使用云功能之类的东西。为了通过 Google Assistant 进行任何用户更改,我需要将用户的 Google Assistant 帐户与其 Firebase Auth 帐户相关联。当前机制似乎正在使用此处记录的 OAuth 流程。
我的问题是,实现这一目标的最佳方法是什么?我需要设置自定义 OAuth 服务器吗?Google 的云网站上有很多关于 OAuth 的文档,但似乎都与使用 OAuth 访问 Google 的 API 有关,而且我真的看不到在 GCP 中托管这种链接机制的简单方法。
有一个非常接近的问题,但我的不同之处在于我没有外部 API,我只想验证我的用户并能够在实时数据库中修改他们的数据。
谢谢您的帮助!
javascript - app.askForSignIn(); 根本不工作
正如文档中明确解释的那样,登录意图目前不起作用,它只是您可以在模拟器中用于测试的东西,但它在生产中不可用。
我的情况是我正在使用帐户链接,并且我的令牌在一天后过期,因此如果用户不与助手交互,令牌将不再有效。然后,如果令牌在 webhook 上被证明是无效的,我想从 webhook 将“请再次链接您的帐户”发回给助手。
有一种方法app.askForSignIn();
似乎与我需要的方法相似,但它似乎不适用于 Dialogflow,仅适用于 SDK。
所以我所做的是:
- 使用名称在 Dialogflow 中创建意图并向其
actions.intent.SIGN_IN
添加actions_intent_SIGN_IN
事件 - 当任何请求到达 webhook 时,我会检查令牌,如果遇到无效令牌,我会调用
app.askForSignIn();
怎么了:
- 该应用程序刚刚离开了对话,例如:测试应用程序离开了对话
- 当我再次说“与测试应用程序交谈”时,它的行为就像帐户已链接并且不要求帐户链接,直到我使用测试控制台中的重置按钮手动重置整个应用程序
更新:
我尝试使用文档中的代码片段(https://developers.google.com/actions/reference/nodejs/AssistantApp#askForSignIn),但效果不佳,这是我打电话时模拟器的app.askForSignIn();
响应网络钩子