0

在初始调用后,我无法让 getRawInput() 方法捕获用户输入。我希望用户选择并采取行动,然后助手回答一个问题,用户必须回答这个问题才能继续前进。例如,用户想要从支票账户向储蓄账户转账时会说“我想要转账”。助手会问“你想从哪个账户转账”。用户将使用他们想要从中转移的帐户进行响应。问题似乎是助手没有接受第二个输入,并且我收到错误“操作:{我的操作名称}现在没有响应。请稍后再试。” 请让我知道是否有更好的方法或更合适的方法来调用在线对话。

这是我要执行的代码:

else if (assistant.getRawInput() === 'I want to make a transfer') {
    let inputPrompt = assistant.buildInputPrompt(true, 'Sure, which account would you like to transfer from? You can say checking or savings.');
    assistant.ask(inputPrompt);
    if(assistant.getRawInput() === 'checking') {
        let transFrom = 'checking';
        let transTo = 'savings';
        let inputPrompt = assistant.buildInputPrompt(true, 'You are going to make a transfer from your ' + transFrom + ' account to your ' + transTo + ' account. What is the amount you would like to transfer?');
        assistant.ask(inputPrompt);
        let amtInput = assistant.getRawInput();
        let amt = parseInt(amtInput);
        transferMoney(transFrom, transTo, amt);
        inputPrompt = assistant.buildInputPrompt(true, 'Cool, you have transfered ' + amt + ' dollars from your ' + transFrom + ' account to your ' + transTo + ' account. Your new balance is ' + customer1.chkBal + ' dollars in your ' + transFrom + ' account and  ' + customer1.savBal + ' in your ' + transTo + ' account.');
        assistant.ask(inputPrompt);
    } else if (assistant.getRawInput() === 'savings') {
        let transFrom = 'savings';
        let transTo = 'checking';
        let inputPrompt = assistant.buildInputPrompt(true, 'You are going to make a transfer from your ' + transFrom + ' account to your ' + transTo + ' account. What is the amount you would like to transfer?');
        assistant.ask(inputPrompt);
        let amtInput = assistant.getRawInput();
        let amt = parseInt(amtInput);
        transferMoney(transFrom, transTo, amt);
        inputPrompt = assistant.buildInputPrompt(true, 'Cool, you have transfered ' + amt + ' dollars from your ' + transFrom + ' account to your ' + transTo + ' account. Your new balance is ' + customer1.chkBal + ' dollars in your ' + transFrom +' account and  ' + customer1.savBal + ' in your ' + transTo + ' account.');
        assistant.ask(inputPrompt);
    }
4

1 回答 1

1

您没有说明您是直接使用 API.AI 还是 Actions API,但听起来您正在使用 Actions API。看起来您正在线性编写函数 - 好像您希望assistant.ask()停止程序并等待用户的回复。这不是assistant.ask()一般的或 Actions 的工作方式。

将 Google Home 视为网络浏览器,您的操作将在某处的网络服务器上运行。assistant.ask()相当于向浏览器发回消息并关闭连接(但不关闭麦克风)。没有可以完成的额外处理,因此在之后有语句ask()没有意义。

如果您直接使用 Actions API,则需要跟踪您在对话中的位置(状态 - 或到目前为止已提出的问题以及您得到的答案)并适当地执行不同的代码路径.

您可能对 API.AI 更感兴趣,它可以让您以更具交互性的方式构建对话,并仅指示需要哪些命令来向您的 webhook 发送信息。使用 API.AI,您的编程逻辑不需要跟踪您在对话中的位置 - 您可以通过 API.AI 构建状态机和对话路径。

于 2017-03-06T21:37:16.267 回答