Pepper Robot - Как запустить планшетные приложения через DialogFlow? - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь включить встроенный планшет Пеппера Android в диалоги DialogFlow. В частности, моя цель - открыть приложения, установленные на самом планшете, для использования людьми во время разговора с Pepper. Я знаю, что на стороне Pepper установлено приложение «j-tablet-browser», которое позволяет человеку просматривать планшет как обычное устройство Android, но я хотел бы сделать еще один шаг вперед и напрямую запустить * Приложение 1027 *, как Amazon Alexa.

Лучшее решение, которое я могу найти, это:

  • Пользователь говорит конкретное c высказывание (например, «Перец, открой Алексу, пожалуйста»)
  • DialogFlow запускает поведение браузера j-tablet
{
  "speak": "Sure, just a second",
  "action": "startApp",
  "action_parameters": {
    "appId": "j-tablet-browser/."
  }
}
  • Пользователь перемещается по меню Android вручную, чтобы коснуться значка Alexa

Моя идеальная цель - сделать процесс незаметным:

  • Пользователь говорит конкретное c высказывание (например, «Перец, открой Alexa, пожалуйста»)
  • DialogFlow запускает приложение Alexa, установленное на Android планшет

У кого-нибудь есть идеи, как это можно сделать?

1 Ответ

1 голос
/ 08 марта 2020

Это довольно широкий вопрос, поэтому я постараюсь сосредоточиться на особенностях запуска приложения с чат-ботом Dialogflow. Если у вас еще нет чата-робота QiSDK Dialogflow, работающего на Pepper, есть хороший учебник здесь , в котором подробно описан весь процесс. Если у вас уже есть чат-бот, я надеюсь, что приведенные ниже шаги являются достаточно общими, чтобы вы могли применить его к своему проекту.

Этот чат-бот возвращает только текстовые результаты, которые, как сказал Пеппер, вам нужно будет внести некоторые изменения в разрешить запуск определенных действий.

Изменение DialogflowDataSource

Шаг 2 на на этой странице учебного пособия подробно описано, как отправить текстовый запрос в Dialogflow и получить текстовый ответ. Вы захотите изменить его так, чтобы он возвращал объект полного ответа (включая действия), а не только текст. Например, определите новую функцию с именем detectIntentFullResponse.

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

Модификация DialogflowChatbot

Шаг 2 на на этой странице показано, как реализовать чатбот QiSDK. Добавьте логи c для проверки действий в функции 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
        }
    }
}

Что касается запуска приложения, различные подходы подробно описаны в других вопросах, таких как здесь . Можно расширить этот подход, чтобы выполнять другие действия, такие как запуск или извлечение онлайн-данных.

...