1

我正在创建一个用于告诉引号的 Google 助理应用程序,我目前正在使用Api.aiApiAi NodeJs webhook。我希望我的回应应该是这样的:

Innovation is the only way to win.
By Steve Jobs
Want one more?

请注意,所有三行都是不同的行。我知道如果我只使用没有 webhook 的 api.ai 的 ux(使用多个简单响应)是可能的,但我不知道如何在与 webhook 结合使用时做到这一点。

我试过了:

assistant.ask("Innovation is the only way to win.");
assistant.ask("By Steve Jobs");
assistant.ask("Want one more?");

但它似乎只说了第一句话。我还尝试将其替换为:

assistant.tell("Innovation is the only way to win.");
assistant.tell("By Steve Jobs");
assistant.ask("Want one more?");

但它在第一个语句之后退出。怎么做?

4

2 回答 2

5

两者都ask()获取tell()它们的参数并发送回响应。唯一的区别是ask()保持对话继续进行,期望用户回话,而tell()表示对话结束。如果你把这看作是一个 web 服务器的话,两者都ask()相当于tell()发回一个页面然后关闭连接,但是ask()页面上已经包含了一个表单,而tell()没有。

它们都可以采用RichResponse对象,该对象可能包含一个或两个字符串或SimpleResponse对象,这些对象将呈现为聊天气泡。但是,您不能做三个,至少不是根据文档。所以听起来你最好的选择是SimpleResponse在报价和归属中包含一个,第二个包含另一个提示。

这听起来也像是您希望音频显示的文本不同的情况。在这种情况下,您需要构建SimpleResponse它以使其同时具有speech字段和displayText字段。

这可能看起来像这样(虽然我没有测试过代码):

var simpleResponse = {
  speech: 'Steve Jobs said "Innovation is the only way to win."',
  displayText: '"Innovation is the only way to win." -- Steve Jobs'
};
var richResponse = assistant.buildRichResponse();
richResponse.addSimpleResponse(simpleResponse);
richResponse.addSimpleResponse('Do you want another?');
assistant.ask( richResponse );

这也可以让你做一些事情,比如在这两个简介的中间添加卡片,例如,可以包含相关人员的照片。为此,您将richResponse.addBasicCard()使用对象调用该方法BasicCard。这甚至可能比在第二行包含引用属性在视觉上更好。

至于设计 - 请记住,您正在为各种设备进行设计。当您的显示模式不同(有时不存在)时,试图专注于行格式是有问题的设计。不要试图专注于对话的样子,而应该关注对话在多大程度上就像你的用户与另一个人的对话。请记住,语音是这种对话的主要方式,视觉旨在补充对话,而不是统治它。

于 2017-08-05T18:58:17.807 回答
1

从我可以从文档中收集到的信息,.tell.ask关闭了麦克风。尝试将所有语句放入一个字符串中。据我所知,.ask实际上并不影响讲话的语气;它只是告诉助手等待输入。

assistant.ask("Innovation is the only way to win. By Steve Jobs. Want one more?");
于 2017-08-05T16:26:49.447 回答