Actions on google Google Actions SDK assistant在联机对话期间不获取用户输入?

Actions on google Google Actions SDK assistant在联机对话期间不获取用户输入?,actions-on-google,google-home,Actions On Google,Google Home,我在获取getRawInput方法以捕获初始调用后的用户输入时遇到问题。我希望用户选择并采取行动,然后助手回答一个问题,用户必须回答这个问题才能继续。例如,一个用户想把钱从支票账户转到储蓄账户,他会说我想转账。助理将询问您要从哪个帐户转账。用户将使用他们希望从中转账的帐户进行响应。问题似乎是助手没有接受第二个输入,我得到了错误操作:{name of my Action}现在没有响应。请稍后再试。请告诉我是否有更好的方式或更合适的方法来调用在线对话 以下是我试图执行的代码: else if (as

我在获取getRawInput方法以捕获初始调用后的用户输入时遇到问题。我希望用户选择并采取行动,然后助手回答一个问题,用户必须回答这个问题才能继续。例如,一个用户想把钱从支票账户转到储蓄账户,他会说我想转账。助理将询问您要从哪个帐户转账。用户将使用他们希望从中转账的帐户进行响应。问题似乎是助手没有接受第二个输入,我得到了错误操作:{name of my Action}现在没有响应。请稍后再试。请告诉我是否有更好的方式或更合适的方法来调用在线对话

以下是我试图执行的代码:

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);
    }

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

将GoogleHome想象成一个web浏览器,您的操作将在某个web服务器上运行。assistant.ask相当于将消息发送回浏览器并关闭连接,但不关闭麦克风。没有额外的处理可以完成,所以在询问之后有陈述是没有意义的

如果您直接使用Actions API,则需要跟踪您在对话中的状态,或者到目前为止,您提出了哪些问题,得到了哪些答案,并适当地执行不同的代码路径

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