在线对话期间,Google Actions SDK助手无法获得用户输入?

时间:2017-03-06 21:09:48

标签: actions-on-google google-home

我无法在初始调用后获取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);
    }

1 个答案:

答案 0 :(得分:1)

您尚未表明您是否直接使用API​​.AI或Actions API,但听起来您正在使用Actions API。看起来你正在线性地编写函数 - 好像你期望assistant.ask()停止程序并等待用户的回复。这不是assistant.ask()或一般行动的方式。

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

如果您直接使用Actions API,则需要跟踪对话中的位置(状态 - 或者到目前为止已经提出了什么问题以及您获得了哪些答案)并执行不同的操作适当的代码路径。

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