【问题标题】:How can I programmatically end a Chat on Pepper?如何以编程方式结束 Pepper 上的聊天?
【发布时间】:2020-02-05 14:09:24
【问题描述】:

我有一个包含以下主题文件的简单聊天机器人,我想在用户说出关键短语(例如“再见”)时结束聊天(并阻止 Pepper 收听)。

u: (hello) hi

u: (my name is _*) nice to meet you $1

u: (bye) goodbye %endChat

但是我没有找到任何操作(例如 chat.end()),并且文档状态“如果您想在 qiChatbot 停止时停止聊天,您必须跟踪 QiChatbot 的状态并手动停止聊天当 QiChatbot 结束时。”

知道如何/听什么事件来做到这一点吗? 我正在使用基于 Android / Java 的 Pepper 版本。

【问题讨论】:

    标签: chatbot pepper


    【解决方案1】:

    您可以在QiChat中使用^endDiscuss关键字结束当前聊天。

    在 QiChat 中:

    u: (hello) hi
    u: (my name is _*) nice to meet you $1
    u: (bye) goodbye ^endDiscuss(endReason)
    

    然后在您的应用中侦听 QiChatbot 结束事件,例如 this,并在触发时关闭聊天。就像文档说的那样,如果您有多个结束条件并且想要做不同的事情,您可以从 QiChat 传递一个结束原因。

    在 Java 中:

    // Create a QiChatbot
    final QiChatbot qichatbot = QiChatbotBuilder.with(qiContext)
                                                .withTopic(topic)
                                                .build();
    
    // Create a Chat
    final Chat chat = ChatBuilder.with(qiContext)
                                 .withChatbot(qichatbot)
                                 .build();
    
    // Execute the chat asynchronously
    final Future<Void> fchat = chat.async().run();
    
    // Stop the chat when the qichatbot is done
    qichatbot.addOnEndedListener(endReason -> {
        Log.i(TAG, "qichatbot end reason = " + endReason);
        fchat.requestCancellation();
    });
    

    【讨论】:

    • 知道是否可以暂停聊天机器人而不是结束它,然后从中断的地方继续?例如。如果根据人类用户输入,Pepper 调用 API,然后说出结果(动态,而不是预先编写脚本),然后继续执行下一个用户规则? u: (weather) 在哪个城市 %getWeather u: (pet) 你有宠物吗? getWeather 会通过 API 获取天气,然后启动 Say,然后传回聊天机器人?谢谢
    • 您可以使用^execute 标签调用外部定义的函数,然后返回聊天机器人的响应。有一个例子here。我希望这会有所帮助。
    • 谢谢,我试过了,但如果我尝试在函数中启动 Say ,就会得到“机器人在说话时听不见”,除非我终止聊天。我想做的是暂停聊天,运行外部函数并启动 Say 动作,然后返回聊天并恢复对话。再次感谢您的帮助o
    • 不要尝试在您的外部函数中启动 Say,而是在您的 qiChat 文件中设置一个变量,使用 QiChatVariable 类在您的外部函数中设置该变量,然后访问该变量以获取响应奇聊。比如:u:(weather) Let me think. ^execute(myExecutor,weather) The weather is $weather
    • 嗨多米尼克,你说的很有道理,但是我似乎无法找到任何方法来让我终生获得结果。澄清一下 - 我通过主题文件中的 $city 参数捕获用户命令,然后我通过调用 chatbot.variable("city") 在我的 Activity 中解决这个问题,我启动 QiChatExecutor,我运行调用天气 API runWith() 函数,但是我如何将结果从 Executor 对象传递回聊天机器人,以便机器人可以说出结果?非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多