AWSLexVoiceButton 提示和客户履行响应

AWSLexVoiceButton prompting and client fulfillment response

我正在使用 AWS 开发工具包将 AWSLexVoiceButton 添加到我的应用程序。我在我设置的意图中为客户端实现配置了它,因为我想让应用程序根据我的意图在 AWS 控制台中的语音命令在屏幕上显示一些东西:

一切正常,当机器人识别出我的意图时,我在下面的代码中收到回调:

func voiceButton(_ button: AWSLexVoiceButton, on response: AWSLexVoiceButtonResponse) {
    // `inputranscript` is the transcript of the voice input to the operation
    if response.dialogState == .readyForFulfillment {
        print("Ready to fulfill")
        // I want to provide speech output
        say(text: "OK, I will show the train status screen")
        showTrainStatusScreen()
    }
}

两个问题:

  1. 当我点击 AWSLexVoiceButton 时,没有任何音频指示它正在收听,而且您甚至看不到您轻按按钮的迹象,除非您发出足够大的声音以引起其麦克风声音检测动画。我找不到添加像 "How can I help you?" 这样的语音提示的方法,因为最初点击按钮时没有 AWSLexVoiceButtonDelegate 回调。

    问:有什么办法可以在Lex被监听时添加语音提示吗?

  2. 同样,没有音频指示客户端正在实现意图。因为有回调,所以我可以添加自己的响应。但为此,我手动设置了一个 AVAudioPlayer 并与 AWS Polly 集成,以我编写的自定义 say 方法将我的文本转换为语音。我的方法是可行的,但好像一定是方法不对。

    问:是否有任何方法可以触发 Lex 作为客户履行的结果提供自定义音频响应?

  1. 未经用户请求,您无法通过 Lex 提供响应。 我不熟悉 iOS,但是在 Android 您可以在您的应用程序中添加此功能以手动处理这种情况。我猜 iOS 允许类似的功能。如果我错了,请发表评论。不幸的是,这不是 Lex 提供的东西。

  2. Lex 只会在履行 complete. 后响应,因为您不需要服务器端履行,您可以创建一个 lambda 函数,它除了 return 您正在寻找的完成响应外什么都不做。

希望对您有所帮助