BotBuilder Nodejs示例查看

关于Bot Framework知识,可以参考《Nodejs Bot学习

本文是根据bot framework官方示例《https://github.com/Microsoft/BotBuilder》写出的个人学习资料



示例一:basics-waterfall(最基础的瀑布流)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-waterfall

https://github.com/ChenWes/bot-nodejs-sample/tree/master/1-basics-waterfall

多个方法时,上一个方法的结果,可以在下一个方法提取到,就是所说的瀑布流,运行完一个方法,接着运行下一个方法

将数据保存至userData,但第二次并未取出



示例二:basics-loops(最基础的循环)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-loops

https://github.com/ChenWes/bot-nodejs-sample/tree/master/2-basics-loops

预先定义好问题的数组,bot开始直接进入至dialog,在dialog中,提取数组中的问题,并发送给用户,获取回复

数组没有循环完成,则继续下一个问题(使用replaceDialog替换dialog),循环完成了,则返回至bot开始的方法中(endDialog()和endDialogWithResult()都可以返回)



示例三:basics-menus(基本的菜单选择)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-menus

https://github.com/ChenWes/bot-nodejs-sample/tree/master/3-basics-menus

bot开始进入至主菜单,选择不同的菜单进入不同的dialog,各个dialog完成时,使用endDialog()方法返回到主菜单dialog,此时使用replaceDialog()方法重新获取控制权

在主菜单中,使用endDialog()返回,主动权回到bot中,如果使用endConverstation()方法,则会结束整个对话

在endDialog()方法加入数组参数,则会以bot SDK的默认规则随机选择其中一个元素返回



示例四:basics-naturalLanguage(结合Luis开发“闹钟”应用)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-naturalLanguage

https://github.com/ChenWes/bot-nodejs-sample/tree/master/4-basics-naturalLanguage

结合Luis,在本机一个对象中,加入“闹钟”对象,并设置一个定时器,如果是对应的时间,就直接返回一条消息给用户

增加“闹钟”前获取用户的地址(该地址记录的是用户的地址)

返回消息前设置用户的地址,这样就可以返回至增加“闹钟”的用户了,其他用户并不会有提示,发送完提示后删除“闹钟”

实体识别可以知道返回的时间,并变为日期与时间组合

从Luis实体中找到参数,如果没有,则让用户选择需要删除的“闹钟”



示例五:basics-multiTurn(多轮瀑布流)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-multiTurn

https://github.com/ChenWes/bot-nodejs-sample/tree/master/5-basics-multiTurn

运行例子是失败的,从代码的逻辑看,应该是通过查询不同的问题,不同的问题都是返回到同一个dialog回应(但传入dialog的参数是不同的,回复dialog会根据参数不同从而有不同的回应)



示例六:basics-firstRun(中间件)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-firstRun

https://github.com/ChenWes/bot-nodejs-sample/tree/master/6-basics-firstRun

中间件的作用就是可以设定是否重复运行对话

每发一条消息,都会进入onFindAction方法中,onFindAction即中间件

中间件,首次,userData.version为空,则callback时,score为1.1,则会运行firstRun dialog,userData.version修改为1

以后,userData.version为1,则callback时,score为0,则会跳过firstRun dialog

运行效果:首次(打开模拟器的第一次,关闭后重新计算)会进入至firstRun dialog,无论你是否输入名称,都会保存至userData,然后,以后每次都会运行bot的第二行和第三行代码

在以后的输入中,你如果输入了help,就会一直卡住在help中



示例七:basics-logging(日志中间件)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-logging

https://github.com/ChenWes/bot-nodejs-sample/tree/master/7-basics-logging

日志中间件的方法名称得是botbuilder

在中间件中,如没有运行next()方法,则bot本身的消息不会被发送出去



示例八:basics-localization(多语言支持)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-localization

https://github.com/ChenWes/bot-nodejs-sample/tree/master/8-basics-localization

用户可选择语言,预计在项目中加入JSON文件,并可以让用户进行选择语言,用户选择语言后,可以读取JSON文件对应节点的文本

session.preferredLocale可以选择不同的语言



示例九:basics-customPrompt(自定义对话框)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-customPrompt

https://github.com/ChenWes/bot-nodejs-sample/tree/master/9-basics-customPrompt

主程序等待回复,当子dialog运行endDialogWithResult(),即会重新激活

第一次进入至onBegin(),一定会经过matches()方法,

如果匹配到了,就会结束,没有匹配会运行onDefault(),

也会查看文本是否等于42,等于42则结束,不等于42会发出提示文本,但并不会退出



示例十:basics-libraries(dialog封装成Lib)(https://github.com/Microsoft/BotBuilder/tree/master/Node/examples/basics-libraries

https://github.com/ChenWes/bot-nodejs-sample/tree/master/10-basics-libraries

定义一个Library,然后导出

lib的dialog定义事件,调用时,直接使用beginDialog()//参加使用Lib加dialog名称

时间: 2024-12-03 11:50:25

BotBuilder Nodejs示例查看的相关文章

基于nodeJs express 框架的图片上传和编辑(引用美图编辑工具)上传小示例

唉,由于近期工作中对于新知识的运用相对较少,也导致小码哥少有更新鄙人心得的机会.还望路过的基友们不要抱怨,勿喷,,,,, 本篇文章,是基于NodeJs Express框架完成的一个用于项目中图片上传和编辑上传的小示例,当然,由于项目工期不禁,都是在非工作时间慢慢完成的,导致至今该图片上传功能也未能插入项目中真正的验证最终效果.不过就小码哥感觉,基本思路及基本功能算是完成了. 下面便由小码哥来给基友们稍微讲解改功能的实现过程及其中用到的一些技术等等. 首先,说说NodeJs Express框架的搭

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

ubuntu通过tnvm安装Nodejs

第一步,先安装tvm tnvm(Taobao Node Version Manager)淘宝Node版本管理器 安装: 直接输入 wget -O- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh | bash 等待完成后,输入 export METHOD=script 添加环境变量,在输入 source .bashrc 使环境变量生效来安装完成.如果遇到什么问题,可以去git上看.一般是没什么问题的. 第二

ubuntu14.04下nodejs + npm + bower的安装、调试和部署

  1. 简介 本文介绍ubuntu14.04下nodejs+npm+bower的安装.调试和部署 参考文档 https://docs.npmjs.com/getting-started https://github.com/npm/npm/issues/ 另外: Windows nodejs版本https://nodejs.org/download/release/latest/node-v5.5.0-x64.msi Windows下ide可选用WebStorm-10.0.2.exe 2.  

NodeJS的异步编程风格

NodeJS的异步编程风格 http://www.infoq.com/cn/news/2011/09/nodejs-async-code NodeJS运行环境因其支持Javascript语言和异步编程受到开发社区越来越多的关注.从GitHub上的访问量来看,NodeJS项目的关注度在最近几个月已经超过了Ruby及RoR.作为一个新鲜的平台,开发人员开始尝试去接触并运用于实际工作中,比如LinkedIn.Yammer.GitHub.淘宝等企业已经在生产环境中部署了NodeJS应用.不过,在学习No

滑动菜单栏(二)开源项目SlidingMenu的示例

这篇文章会给大家带来7个不同效果的示例,每个示例都包含了最基本的使用方法,从易到难,循序渐进.能够 让初学者可以快速的掌握SlidingMenu的使用方法.下一篇文章会给大家带来三种不同的动画效果来实现滑动菜单栏 的滑动. 关于这些示例,都是SlidingMenu开源项目中自带的一些示例,但是对于初学者来说,要想运行这些示例查看效 果,就必须要导入很多的库,使用起来也是非常的麻烦.博主这里为了能够方便大家更好的学习,就把每个示例都单 独拿了出来,并且添加了一些非常详细的注释,让初学者能够一看就懂

在Linux(ubuntu server)上面安装NodeJS的正确姿势

上一篇文章,我介绍了 在Windows中安装NodeJS的正确姿势,这一篇,我们继续来看一下在Linux上面安装和配置NodeJS. 为了保持一致,这里也列举三个方法 第一个方法:通过官网下载安装 https://nodejs.org/en/download/ 这种方式的问题是我们需要自己去找网页,找到链接,然后下载 第二个方法:使用apt工具进行安装 默认情况下,在apt的源中只有比较老的版本(注意,需要先apt-get update) 例如,如果运行apt-get install nodej

windows下的Nodejs及npm的安装、常用命令,Nodejs开发环境配置

第一步:下载Nodejs并安装 官方下载地址:https://nodejs.org/en/,我选择的是长期支持版本v4.47,安装时只要一直下一步就ok了 安装完成后可以使用cmd(win+r然后输入cmd进入)测试下是否安装成功.方法:在cmd下输入node -v,出现下图版本提示就是完成了Nodejs的安装. 我们打开安装目录: 发现nodejs目录下有一个node.exe,它是干嘛的? 第二步:npm安装 v0.63之前,在Node安装过程中,实际还需要安装npm,到v0.63时Ndejs

理解互联网域名请求实现过程,以及Nodejs的http请求小谈

前提:在学习开发互联网网站程序前,需要了解知道一个客户端请求,如何能展现成一个炫丽的网页的. 一.域名请求实现 这幅图足以说明一个域名请求的过程了吧 二.服务器端的处理(Nodejs示例) 直接上nodejs代码 1 var http = require('http'); 2 3 http.createServer(function(req, res) { 4 if (req.method === 'GET') { 5 var html; 6 switch (req.url) { 7 case