【问题标题】:Pepper Robot - How to launch tablet applications through DialogFlow?Pepper Robot - 如何通过 DialogFlow 启动平板电脑应用程序?
【发布时间】:2020-03-06 19:48:50
【问题描述】:

我正在尝试将 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 应用

有人知道如何做到这一点吗?

【问题讨论】:

    标签: android dialogflow-es pepper


    【解决方案1】:

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

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

    修改 DialogflowDataSource

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

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

    修改 DialogflowChatbot

    this page 的第 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
            }
        }
    }
    

    关于启动应用程序,各种方法在其他问题中详述,例如here。可以将此方法扩展为执行其他操作,例如运行或检索在线数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2021-05-20
      • 2013-06-23
      • 2016-06-26
      相关资源
      最近更新 更多