Dev,Nodejs

[Bot Framework Tutorial] [episode.1] 数据存储和对话

上期传送门 https://touko.moe/blog/0_environment_configuration_and_hello_world
Github 地址:https://github.com/HoshinoTouko/bot-framework-tutorial

State and Dialogs

Save state

概览

针对不同的用户或是同一个用户的不同对话场景,我们很多时候需要保存一些用户数据。例如用户的名字,用户交流时的上下文信息。Bot-Framework 被设计为"无状态"的,所以它可以非常自如地应对多重对话的情景。它提供了一个用于存储数据的容器,用来应对用户 (User) 、公共会话中 (Conversation) 、私有会话中 (privateConversation) 与对话中 (Dialog) 可能出现的需要进行数据存储的情况。

数据容器

在 Bot-Framework 中,bot 使用 session 对象提供以下四种数据容器。

Property Scoped Description
userData User 包括了在特定 Channel 针对特定用户存放的数据。这部分数据将会被长期保存。
privateConversationData Conversation 包括了在特定 Channel 、特定用户、特定会话中存放的数据。这部分数据仅针对特定用户有效,并且只会在该会话中保存。这部分数据将会在会话结束或者调用 endConversation 后被清除。
conversationData Conversation 类似 privateConversationData ,包括保存的时间、清除的条件。不同的是这部分数据将与所有用户共享。
dialogData Dialog 包括了仅当前对话保存的数据,每个对话仅维护一份各自的数据副本。当当前对话从"对话栈"中清除,该部分数据副本也被清空。

这四种属性分别对应四种数据容器。针对不同的应用场景,我们可以使用不同类型的容器来提高程序开发的效率。

数据容器样例

举例。

当用户表现出对体育新闻的喜好时,bot 可以将用户的喜好存储于userData中。在之后的对话中,bot 可以针对该喜好进行一些特定内容的推送和筛选。
当用户询问天气时,bot 可以将询问天气的行为记录在 PrivateConversationData 下。如果用户在之后的对话询问"明天呢?",bot 就可以明白用户询问的是明天的天气,而非明天的其他信息。

Dialogs

概览

Dialogs 是 Bot-Framework 的一个重要模块,它允许用户模块化地维护对话。bot 与用户的每次交流称作"会话",每次会话由多个对话组成,每次的对话又可以用"对话流"来进行构建。可以将会话理解为对话的父结构。理解对话与会话的关系和相互之间的作用,可以极大方便我们开发聊天机器人,提高聊天机器人的代码可读性和组织结构。

通过对话构建会话

Bot-Framework 使用会话作为使用者和 bot 之间的交流。会话由多个对话组成。会话由用户定义,是一个可以重复使用的模块。在这里,我们定义一个 askName 的对话模块作为示例。

样例代码

对话本体
bot.dialog('askName', [
    function (session) {
        builder.Prompts.text(session, '我想认识你,请问你叫什么名字?');
    },
    function (session, results) {
        session.userData.userName = results.response;
        session.endDialog(`你好呀,${session.userData.userName}!`);
    }
]);
根会话中的跳转指令
if (!session.userData.userName){
    session.beginDialog('askName');
    return;
}

阅读全文»

[Bot Framework Tutorial] [episode.0] 环境配置与 Hello world

Overview

Bot-Framework 是微软推出的一个平台,这个平台将开发、测试、部署 bot 的一系列流程整合起来,极大地方便了开发者。bot 支持使用 Node.js 和 C# 进行开发,这个系列的文章将以 Node.js 平台下的 Bot-framework 开发作为主要介绍内容,目标是完成一个可以进行相对智能的人机交互任务的聊天机器人。

一些特性

Bot-Framework 支持多对话 (Dialogs),用户可以根据需求,定义每个对话的触发条件和对话流程。

Bot-Framework 支持自定义的卡片和按钮形式。用户可以自行制作卡片、表单、选项按钮等组件来丰富 bot 的外观。并且,bot 会自行根据所运行的平台,相对应地调整组件的外观。例如在 telegram 平台上,按钮组件就可以被非常完美地原生支持。

Bot-Framework 支持多数聊天工具和网页界面,用户可以根据需求进行选择。

关于认知服务

文章中将会使用微软的认知服务 (cognitive services) 作为主要的"智能"驱动平台,包括 LUIS(Language Understanding Intelligent Service) 服务,QnAMaker 服务,Custom Vision 服务等,提高 bot 对语言的识别能力和对交互的优化能力。有关微软认知服务的详细的信息请参照
https://azure.microsoft.com/en-us/services/cognitive-services/

环境配置

Node.js 环境

npm install --save botbuilder
npm install --save restify

Bot Framework Emulator

http://emulator.botframework.com/下载对应版本的本地模拟器

Hello world

編碼

首先,将依赖引入程序

// This loads bot-framework requires
const builder = require('botbuilder');
const restify = require('restify');

阅读全文»