0

我正在尝试将 Pepper 的内置 Android 平板电脑更多地融入到 DialogFlow 交互中。特别是,我的目标是打开安装在平板电脑上的应用程序,供人们在与 Pepper 交谈时使用。我知道 Pepper 端安装了一个“j-tablet-browser”应用程序,可以让人们像普通的 Android 设备一样浏览平板电脑,但我想更进一步,直接启动一个 Android 应用程序,就像亚马逊的 Alexa。

我能想到的最佳解决方案是:

  • 用户说出特定的话语(例如“Pepper,请打开 Alexa”)
  • DialogFlow 启动 j-tablet-browser 行为
{
  "speak": "Sure, just a second",
  "action": "startApp",
  "action_parameters": {
    "appId": "j-tablet-browser/."
  }
}
  • 用户手动导航 Android 菜单以点击 Alexa 图标

我的理想目标是使流程无缝:

  • 用户说出特定的话语(例如“Pepper,请打开 Alexa”)
  • DialogFlow 启动安装在 Android 平板电脑上的 Alexa 应用程序

有谁知道如何做到这一点?

4

1 回答 1

1

这是一个相当广泛的问题,因此我将尝试关注使用 Dialogflow 聊天机器人启动应用程序的具体细节。如果您还没有在 Pepper 上运行的 QiSDK Dialogflow 聊天机器人,这里有一个很好的教程详细介绍了整个过程。如果您已经实现了聊天机器人,我希望以下步骤足够通用,您可以将其应用于您的项目。

这个聊天机器人只返回文本结果供 Pepper 说,因此您需要进行一些修改以允许启动特定操作。

修改 DialogflowDataSource

本教程此页面上的第 2 步详细介绍了如何向 Dialogflow 发送文本查询并获取文本响应。您需要修改它以返回完整的响应对象(包括操作),而不仅仅是文本。定义一个名为detectIntentFullResponse例如的新函数。

// Change this
return response.queryResult.fulfillmentText
// to this
return response.queryResult

修改 DialogflowChatbot

本页的第 2 步展示了如何实现 QiSDK 聊天机器人。添加一些逻辑来检查replyTo函数中的操作。

var response: DetectIntentResponse? = null
// ...
response = dataSource.detectIntentFullResponse(input, dialogflowSessionId, language)
// ...
return if (reponse.action != null) {
    StandardReplyReaction(
        ActionReaction(qiContext, response), ReplyPriority.NORMAL
    )
} else if (reponse.answer != null) {
    StandardReplyReaction(
        SimpleSayReaction(qiContext, reponse.answer), ReplyPriority.NORMAL
    )
} else {
    StandardReplyReaction(
        EmptyChatbotReaction(qiContext), ReplyPriority.FALLBACK
    )
}

现在创建一个新类,ActionReaction. 请注意,以下内容不完整,但应作为如何确定要运行的操作的示例(如果您需要其他操作)。查看SimpleSayReaction更多实现细节。

class ActionReaction internal constructor(context: QiContext, private val response: DetectIntentResponse) :
    BaseChatbotReaction(context) {

    override fun runWith(speechEngine: SpeechEngine) {
        if (response.action == "launch-app") {
            var appID = response.parameters.app.toString()
            // launch app at appID
        }
    }
}

至于启动应用程序,其他问题中详细介绍了各种方法,例如此处。可以扩展此方法以执行其他操作,例如运行或检索在线数据。

于 2020-03-08T03:19:05.603 回答