【卜木|技能进修】张大妈
卜木 发布于2018-01-18 16:37 浏览:1453 回复:12
1
收藏
1
收藏

【技能名称】张大妈

【功能简介】语音阅读张大妈的RSS

【示例对话】

    用户:帮助

    小度:你可以使用的指令为:优惠精选、海淘专区、原创频道、发现频道、资讯专区。并可以通过上一页、下一页进行翻页浏览。

    用户:查看优惠精选|优惠精选

    小度:balabali...

    用户:下一页

    小度:balabali...|没有更多记录了


项目地址:

https://gitee.com/xqbumu/dueros-smzdm


更新记录:

2019/01/19    使用文件缓存,以防止内存缓存在cfc结束后被刷掉

2019/01/22    重新配置rollup,及打包相关操作


下载项目后,替换src/lib/rsaKeys_demo.js中的内容,并重命名为src/lib/rsaKeys.js,然后执行

npm install

npm run pack

随后,自动生成打包文件dist.zip,然后将该上传到CFC即可。

image.png

收藏
点赞
1
个赞
共12条回复 最后由梦在星河回复于2018-03-14 08:34
#2卜木回复于2018-01-18

目录:

    一、交互流程设计

    二、技能平台配置

    三、开发环境准备

    四、配置密钥

    五、关于Demo代码

    六、意图配置

    七、后端开发

    八、测试

    九、成功截屏

    十、技能通过截图



一、交互流程设计

flow.png

0
#3卜木回复于2018-01-18

二、技能平台配置


image.png


技能名称就是展示给用户的名称,调用名称就是通过语音“打开xxx”进行唤起技能的入口语音。





0
#4卜木回复于2018-01-18

三、开发环境准备

在本技能中,直接使用CFC进行作为技能后端的宿主,点击邀请链接,直接进入无服务器函数的开发,不用额外的邀请。

image.png

接着,在CFC平台中,选择从横版创建函数,这样可以省去不少麻烦,里面也只有唯一的dueros-bot模版。

image.png


然后在本机安装nodejs,http://nodejs.org/




0
#5卜木回复于2018-01-18

四、配置密钥

详细的生成的方法参考https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-deploy/authentication.md

同时,如果是window10系统,可以进行bash然后通过apt install openssl安装对应软件,注意命令要更换成

openssl genrsa -out rsa_private_key.pem 1024
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

然后将rsa_public_key.pem中的内容复制到第二步里的配置服务->Public Key。


0
#6卜木回复于2018-01-25

五、关于Demo代码

直接从 https://github.com/dueros/bot-sdk-node.js/tree/master/samples/personal-income-tax 上拉取官方demo,注释掉开启签名认证下面那一行。

然后把这个目录复制出来,作为项目的根目录。

修改index.js中第9行的const Bot = require(./Bot);为const BaseBot = require(bot-sdk);

然后直接npm init初始化项目,其中内容按情况自行填写,或者全都默认值。

在生成的packages.json中的dependencies里,添加

"bot-sdk""^1.1.1",

"express""^4.16.2",

"memory-cache""^0.2.0",

"sync-request""^4.1.0",

"x2js""^3.1.1"

然后运行npm install进行依赖包的安装。

运行node index.js开启本地测试环境。

运行bash ./test.sh ./bot-request/xxx.js 进行本地请求测试。


一定要将测试环境走通。


0
#7卜木回复于2018-01-25

六、意图配置

image.png

中文名不参与后端流程,随意。

意图标识是后端开发对应的handler名,建议以点号分隔不同功能区块。


关键点:

常用表达是用户语音进行对应意图的规则,比如要针对用户说的:查看xxx,进行响应,那么可以先在常用表达的第一个input框中输入对应说句然后回车,就将该语句录入到了意图的匹配里。


image.png


槽位可以理解成正则匹配,一句话可以有多种说法,或者根据不同的说法,在后端响应不同的程序流程,在上上图位置1处,通过鼠标拉动,可以对选定的字符串设置为槽位,每个槽位都要对应到一个词典。


image.png

针对词典方面,本人建议在Key位置使用英文字符,在Value列,使用正常语音内容,以避免转码问题,本人在后端在Key为中文时的处理遇到问题,果断使用英文使用Key。


0
#8卜木回复于2018-01-25

七、后端开发

本人的后端代码结构如下:

image.png

bot-request为测试请求文件夹

lib 技能的根目录

Bot.js 技能的主程序

rsaKeys.js 密钥[需要将之前生成的rsa_private_key.pem的内容替换到对应该位置]

SmzdmRss.js 业务流程

SmzdmRssPromise.js 异步业务流程

index.js cfc程序入口

local_server.js 本地模拟环境

test.sh 测试入口


代码流程:

在SmzdmRss.js中,设计了直接提供给Bot.js使用的的业务代码,将技能流程和一般流程分离。

image.png

image.png


SmzdmRssPromise.js中,添加异步函数,并增加cache,以避免即时请求。

image.png


在index.js中,添加SmzdmRssPromise,执行异步操作,以同步远程数据。在local_server.js的本地测试环境中,也要添加对应的SmzdmRssPromise,以测试异步功能的正常性。

image.png


0
#9卜木回复于2018-01-25

八、测试

CFC自带调试:

image.png

测试事件代码:

{

"version""v2.0",

"session": {

"new"true,

"sessionId""cf477f83-228c-4a11-a266-fd8e934fa182"

},

"context": {

"System": {

"user": {

"userId""60299837",

"userInfo": {

"account": []

}

},

"application": {

"applicationId""20ee081d-4a93-4da5-c0b7-58ce62b549ff"

},

"device": {

"deviceId""dd2c403cb0b0e0b1919911feace27b5a",

"supportedInterfaces": {

"VoiceInput": [],

"VoiceOutput": [],

"AudioPlayer": []

}

}

}

},

"request": {

"query": {

"type""TEXT",

"original""查看优惠精选"

},

"dialogState""COMPLETED",

"intents": [

{

"name""smzdm.channel.pager",

"confirmationStatus""NONE",

"slots": {

"smzdm.rss_channels": {

"name""smzdm.rss_channels",

"value""优惠精选",

"values": [

"优惠精选"

],

"confirmationStatus""NONE"

}

}

}

],

"type""IntentRequest",

"requestId""07f5bc196ce0421196e7e7964644b8fc_0",

"timestamp""1516180484"

}

}


由于cfc的测试方案在某些情况下无法输出全部的想要的内容,本人又在对应的意图中添加

image.png

这样的代码,就能在配置服务的右侧调试到相应的信息。


0
#10卜木回复于2018-01-25

九、成功截屏

模拟测试结果

image.png


0
#11卜木回复于2018-01-25

十、技能通过截图

image.png


0
#12DuerOS-河童回复于2018-03-13

逻辑清晰,已加精鼓励~

麻烦按照审核同学的邮件建议修改下技能,重新上线哟

0
#13梦在星河回复于2018-03-14

楼主好,很高兴看到你的分享,我有几个疑问想咨询一下,还望多多指教:

1. 你的技能能够正常退出吗?就是用户说“退出”后,能够正常退出技能吗?

    之所以问这个,是因为我的技能无法正常退出,我说“退出”后,看打印可知流程已经走到会话退出那里了,可是还是无法正常退出。不知道什么原因。要检测是否真的退出了,可以在退出后再跟技能说“退出”,看看是否还有反应。

2. 你使用CFC部署时,用户数据是如何存储的?

     用户的一些个性化数据,比如“收藏”什么的,这些是存储在文件中的吗?但是CFC好像不提供文件存储功能。session只是暂存,会话结束就没有了。

3. 你的这个技能可以买东西吗?还是仅仅只是聊天?

    比如用户在选择了“优惠精选”,然后再在你的技能返回的那些数据中选择了其中一款产品,那接下来能够做什么呢?

0
TOP