技能名称:历史上的今天

入口词:打开历史上的今天

语音交互:(有些是先写上)

{
"intents": [
{
"intent": "PAUSE_HISTORY_DAY",
"slots": [],
"user_says": [
"暂停",
"停下"
]
},
{
"intent": "EXIT_HISTORY_DAY",
"slots": [],
"user_says": [
"我不想听了",
"我不想听",
"我听够了",
"拜拜",
"取消"
]
},
{
"intent": "HISTORY_DAY",
"slots": [
{
"name": "month",
"type": "ROKID.NUMBER_ZH"
},
{
"name": "day",
"type": "ROKID.NUMBER_ZH"
},
{
"name": "oneday",
"type": "ROKID.DAY_ZH"
}
],
"user_says": [
"我要了解$month月$day号",
"历史上的$month月$day日",
"我想听$month月$day号",
"我想听$month月$day日",
"我想了解$oneday",
"我要了解$month月$day日",
"$month月$day日",
"$oneday",
"我要了解$oneday",
"历史上的$month月$day号",
"$month月$day号"
]
},
{
"intent": "RESUME_HISTORY_DAY",
"slots": [],
"user_says": [
"继续播放",
"继续"
]
}
]
}

配置采用JS Engine:--增加暂停,继续播放功能

exports.handler = function(event, context, callback) {
var rokid = Rokid.handler(event, context,callback);
rokid.registerHandlers(handlers);
rokid.execute();
};
dictText = {'一':'','二':'','三':'','四':'','五':'','六':'','七':'','八':'','九':'','十':'','十一':'','十二':'','十三':'','十四':'','十五':'','十六':'','十七':'','十八':'','十九':'','二十':'','二十一':'','二十二':'','二十三':'','二十四':'','二十五':'','二十六':'','二十七':'','二十八':'','二十九':'','三十':'','三十一':''};
onedaydictText = {'今天':,'明天':,'后天':,'大后天':,'大大后天':,'大大大后天':,'昨天':-,'前天':-,'大前天':-,'大大前天':-,'大大大前天':-};
//如果是6月,返回06
function formatMonth(monthori){
if (!isNaN(monthori)) {
if (parseInt(monthori) < ) {
monthurl = '' + monthori;
} else {
monthurl = monthori;
}
} else {
monthurl = dictText[monthori];
}
return monthurl;
}
//如果是8号,返回08
function formatDay(dayori){
if (!isNaN(dayori)) {
if (parseInt(dayori) < ) {
dayurl = '' + dayori;
} else {
dayurl = dayori;
}
} else {
dayurl = dictText[dayori];
}
return dayurl;
} var handlers = {
"ROKID.INTENT.WELCOME":function(){
try{
this.emit(":tts",{ tts: "欢迎使用历史上的今天这个技能!你可以对我说想了解几月几号。" });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"PAUSE_HISTORY_DAY":function(){
try{
this.emit(":tts",{ tts: "",action:"PAUSE" });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"RESUME_HISTORY_DAY":function(){
try{
this.emit(":tts",{ tts: "",action:"RESUME" });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"HISTORY_DAY":function(){
try{
var oneday = Rokid.param.request.content.slots.oneday;
var monthori = Rokid.param.request.content.slots.month;
var dayori = Rokid.param.request.content.slots.day;
var monthurl = '';
var dayurl = '';
if (oneday){
var dd = new Date();
dd.setDate(dd.getDate() + onedaydictText[oneday]);
monthori = dd.getMonth()+;
dayori = dd.getDate(); monthurl = formatMonth(monthori);
dayurl = formatDay(dayori);
} else{
monthurl = formatMonth(monthori);
dayurl = formatDay(dayori);
} result = Rokid.sync_request('GET','https://baike.baidu.com/cms/home/eventsOnHistory/' + monthurl + '.json');
result = Rokid.resHandler(result); var hdori = result[monthurl][monthurl+dayurl];
var hdorilen = hdori.length;
var res = '好的,为您播报' + monthori + '月' + dayori + '号' + '的历史。';
for (var index = hdorilen-; index >= ; index --){
var yearori = hdori[index].year;
var yearstr = '';
if (parseInt(yearori) >= ) {
yearstr = yearori + '年';
}else{
yearstr = '公元前' + Math.abs(yearori) + '年';
}
var title = hdori[index].title.replace(/<.*?>/ig,"").replace("\n","").replace("。","");
res += yearstr + title + '。';
}
res += monthori + '月' + dayori + '号' + '的历史已为您播报完毕,请问您还想了解几月几号的历史呢?';
this.emit(":tts",{ tts: res });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"EXIT_HISTORY_DAY":function(){
try{
this.emit(":tts",{ tts: "好的,已经退出历史上的今天这个技能,再见!如果需要,您可以直接对我说打开历史上的今天。", action:"STOP" });
this.callback(null);
}catch(e){
this.callback(e);
}
}
};

针对上一段的JSEngine2.0实现(主要是数据获取部分的改动,如下):

更新于2017-10-11日下午

exports.handler = function(event, context, callback) {
var rokid = Rokid.handler(event, context,callback);
rokid.registerHandlers(handlers);
rokid.execute();
};
dictText = {'一':'01','二':'02','三':'03','四':'04','五':'05','六':'06','七':'07','八':'08','九':'09','十':'10','十一':'11','十二':'12','十三':'13','十四':'14','十五':'15','十六':'16','十七':'17','十八':'18','十九':'19','二十':'20','二十一':'21','二十二':'22','二十三':'23','二十四':'24','二十五':'25','二十六':'26','二十七':'27','二十八':'28','二十九':'29','三十':'30','三十一':'31'};
onedaydictText = {'今天':0,'明天':1,'后天':2,'大后天':3,'大大后天':4,'大大大后天':5,'昨天':-1,'前天':-2,'大前天':-3,'大大前天':-4,'大大大前天':-5};
//如果是6月,返回06
function formatMonth(monthori){
if (!isNaN(monthori)) {
if (parseInt(monthori) < 10) {
monthurl = '0' + monthori;
} else {
monthurl = monthori;
}
} else {
monthurl = dictText[monthori];
}
return monthurl;
}
//如果是8号,返回08
function formatDay(dayori){
if (!isNaN(dayori)) {
if (parseInt(dayori) < 10) {
dayurl = '0' + dayori;
} else {
dayurl = dayori;
}
} else {
dayurl = dictText[dayori];
}
return dayurl;
} var handlers = {
"ROKID.INTENT.WELCOME":function(){
try{
this.emit(":tts",{ tts: "欢迎使用历史上的今天这个技能!你可以对我说想了解几月几号。" });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"PAUSE_HISTORY_DAY":function(){
try{
this.emit(":tts",{ tts: "",action:"PAUSE" });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"RESUME_HISTORY_DAY":function(){
try{
this.emit(":tts",{ tts: "",action:"RESUME" });
this.callback(null);
}catch(e){
this.callback(e);
}
},
"HISTORY_DAY":function(){
try{
var oneday = Rokid.param.request.content.slots.oneday;
var monthurl = '';
var dayurl = '';
if (oneday){
var dd = new Date();
dd.setDate(dd.getDate() + onedaydictText[oneday]);
monthori = dd.getMonth()+1;
dayori = dd.getDate(); monthurl = formatMonth(monthori);
dayurl = formatDay(dayori);
} else{
          var monthori = JSON.parse(Rokid.param.request.content.slots.month).text;
           var dayori = JSON.parse(Rokid.param.request.content.slots.day).text;
                monthurl = formatMonth(monthori);
dayurl = formatDay(dayori);
} // result = Rokid.sync_request('GET','https://baike.baidu.com/cms/home/eventsOnHistory/' + monthurl + '.json');
// result = Rokid.resHandler(result);
Rokid.request({
url: 'https://baike.baidu.com/cms/home/eventsOnHistory/' + monthurl + '.json',
method: "GET",
headers: {
'User-Agent': 'request'
}
}, (err, resssssss, body) => {
if(err) {
this.emit(":error", err);
}
var result = JSON.parse(body);
var hdori = result[monthurl][monthurl+dayurl];
var hdorilen = hdori.length;
var res = '好的,为您播报' + monthori + '月' + dayori + '号' + '的历史。';
for (var index = hdorilen-1; index >= 0; index --){
var yearori = hdori[index].year;
var yearstr = '';
if (parseInt(yearori) >= 0) {
yearstr = yearori + '年';
}else{
yearstr = '公元前' + Math.abs(yearori) + '年';
}
var title = hdori[index].title.replace(/<.*?>/ig,"").replace("\n","").replace("。","");
res += yearstr + title + '。';
}
res += monthori + '月' + dayori + '号' + '的历史已为您播报完毕,请问您还想了解几月几号的历史呢?';
this.emit(":tts",{ tts: res });
this.callback(null);
}) }catch(e){
this.callback(e);
}
},
"EXIT_HISTORY_DAY":function(){
try{
this.emit(":tts",{ tts: "好的,已经退出历史上的今天这个技能,再见!如果需要,您可以直接对我说打开历史上的今天。", action:"STOP" });
this.callback(null);
}catch(e){
this.callback(e);
}
}
};

集成测试:

输入语句:历史上的6月8号(或者历史上的六月八号)

服务请求:
{
"context": {
"application": {
"applicationId": "RE85B257695B46C1A9AC5BDF2EAF0DC3"
},
"device": {
"basic": {
"locale": "zh-cn",
"timestamp": 0,
"vendor": "F934FCE346C64393BEDBF8ECD9672446"
},
"location": {},
"media": {}
}
},
"request": {
"content": {
"applicationId": "RE85B257695B46C1A9AC5BDF2EAF0DC3",
"intent": "history_day",
"slots": {
"day": "8",
"month": "6"
}
},
"reqId": "C92AF2274A634B11B70AB291A324AA0D",
"reqType": "INTENT"
},
"session": {
"attributes": {},
"newSession": false
},
"version": "2.0.0"
}
服务返回:
{
"appId": "RE85B257695B46C1A9AC5BDF2EAF0DC3",
"response": {
"action": {
"form": "cut",
"shouldEndSession": true,
"type": "NORMAL",
"version": "2.0.0",
"voice": {
"behaviour": "APPEND",
"item": {
"tts": "好的,为您播报6月8号的历史。2012年上海合作组织北京峰会闭幕。2009年加蓬前总统哈吉奥马尔·邦戈·翁丁巴去世。1995年中国研制出高功率氦氖激光器。1955年互联网之父蒂姆·伯纳斯·李出生。1921年印尼前总统苏哈托诞生。1916年DNA双螺旋结构的发现者之一克里克出生。1876年法国女作家乔治·桑逝世。1867年普鲁士军队吞并荷尔斯泰因公国。1867年美国建筑师弗兰克·劳埃德·赖特诞生。1845年美国第七任总统安德鲁·杰克逊逝世。1824年加拿大批准第一个专利。1810年德国作曲家舒曼诞生。1809年英裔美国政治活动家托马斯·潘恩逝世。1529年中世纪的一次重大宗教战争卡佩尔战争爆发。632年伊斯兰教创立者、政治家、宗教领袖穆罕默德逝世。"
},
"needEventCallback": false
}
},
"resType": "INTENT",
"respId": "C92AF2274A634B11B70AB291A324AA0D"
},
"session": {
"attributes": {}
},
"startWithActiveWord": false,
"version": "2.0.0"
}

输入语句:我想了解今天

服务请求:
{
"context": {
"application": {
"applicationId": "RBE99BF67CD644C4BA4E6561833A2ED1"
},
"device": {
"basic": {
"locale": "zh-cn",
"timestamp": ,
"vendor": "7F9EB83B204C42DFB3ABEBA88DAA6237"
},
"location": {},
"media": {}
},
"user": {}
},
"request": {
"content": {
"applicationId": "RBE99BF67CD644C4BA4E6561833A2ED1",
"intent": "HISTORY_DAY",
"slots": {
"oneday": "今天"
}
},
"reqId": "076712871B92414E861831E109206FD5",
"reqType": "INTENT"
},
"session": {
"attributes": {},
"newSession": false,
"sessionId": "F087A392781D409CA8EFBB17CD6FB1ED"
},
"version": "2.0.0"
}
服务返回:
{
"appId": "RBE99BF67CD644C4BA4E6561833A2ED1",
"response": {
"action": {
"form": "cut",
"shouldEndSession": true,
"type": "NORMAL",
"version": "2.0.0",
"voice": {
"action": "PLAY",
"item": {
"tts": "好的,为您播报7月3号的历史。2012年美国著名演员安迪·格里菲斯去世。2005年西班牙正式通过同性婚姻相关法案。1986年美国自由神像矗立纽约100周年。1980年开国上将邓华去世。1969年英国滚石乐队的创始团员布莱恩·琼斯去世。1962年美国电影演员汤姆·克鲁斯出生。1904年同治、光绪皇帝的老师翁同龢去世。1898年有机化学家黄鸣龙去世。1898年京师大学堂成立。1883年奥地利作家卡夫卡出生。1876年中国第一条铁路淞沪铁路正式通车运营。1844年大海雀灭绝。1518年中国明代医学家兼药物学家李时珍出生。1423年法国瓦卢瓦王朝国王路易十一逝世。1062年中国北宋官员包拯去世。7月3号的历史已为您播报完毕,请问您还想了解几月几号的历史呢?"
}
}
},
"resType": "INTENT",
"respId": "076712871B92414E861831E109206FD5"
},
"session": {},
"startWithActiveWord": false,
"version": "2.0.0"
}

PS:强烈感谢大俊俊提供的JS Engine和各种技术支持,大俊俊贡献了百分之八十。

至此大功告成。。。。

还有一些交互方面的事情需要考虑。。。

此技能Rokid开发者社区skill之【历史上的今天】之简介+玩法+设计+实现+心得,参考http://www.cnblogs.com/zhzhang/p/7136583.html

待续

Rokid开发者社区skill之【历史上的今天】的更多相关文章

  1. Rokid开发者社区skill之【历史上的今天】之简介+玩法+设计+实现+心得

    Skill简介: 来源:好奇心.探索欲.趣味性: 资源:百度百科: 方式:实时获取,自动更新: 技能玩法: 想要进入历史上的今天这个skill,则对若琪说:若琪,打开历史上的今天. 想要了解某天的历史 ...

  2. sae-v2ex 一个运行在SAE上的类似v2ex的轻型python论坛 - 技术讨论 - 云计算开发者社区 - Powered by Discuz!

    sae-v2ex 一个运行在SAE上的类似v2ex的轻型python论坛 - 技术讨论 - 云计算开发者社区 - Powered by Discuz! sae-v2ex 一个运行在SAE上的类似v2e ...

  3. 为什么开发者热衷在Stack Overflow上查阅API文档?

    摘要:一项新研究跟踪了Android开发者的访问历史,发现开发者多达二分之一的文档是从Stack Overflow上获取到的,而Stack Overflow上的示例也多于官方指南,开发者通过搜索更多时 ...

  4. 国内首个微信小程序开发者社区www.mntuku.cn

    微信小程序开发者社区-微信小程序开发教程-微信小程序最新资讯 - www.mntuku.cn .本站作为专业的微信小程序开发者社区为大家提供:微信小程序开发者交流平台,微信小程序开发教程,微信小程序定 ...

  5. 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结

    1.前言 本文接上篇<移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”>,关于移动网络的主要特性,在上篇中已进行过详细地阐述,本文将针对上篇中提到的特性,结合我们的实践经 ...

  6. go, iris , nuxt, 服务端渲染等技术在helloworld开发者社区中的应用与实践

    大家好,helloworld.net 上线已经有近半年的时间了,转眼过的好快,在这半年的时间里,迭代了近10多个版本,优化了很多的体验,交互上的不足之处,同时也上线了我们的安卓 app, 苹果的因为还 ...

  7. Linux历史上线程的3种实现模型

    一.概述                                                   这里以Linux为例.Linux历史上,最开始使用的线程是LinuxThreads,但Li ...

  8. UWP Windows历史上最漂亮的UWP框架出炉!!!

    UWP Windows历史上最漂亮的UWP框架出炉!!! 本框架基于微软的开源项目WTS开发,并在其基础上增加了FDS(流畅设计元素,高光.亚克力等).多语言系统.沉浸式体验(扩展内容到标题栏) 同时 ...

  9. 未来-IOT-Aliyun:阿里云 IOT - 开发者社区

    ylbtech-未来-IOT-Aliyun:阿里云 IOT - 开发者社区 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. https://dev.iot. ...

随机推荐

  1. 获取TrustedInstaller

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="获取TrustedInstaller权限& ...

  2. windows 批处理设置环境变量

      windows通过批处理设置环境变量 CreateTime--2017年8月4日11:28:11Author:Marydon 参考链接:https://wenku.baidu.com/view/a ...

  3. eclipse+cdt+cygwin做C++

    eclipse一个很优秀的IDE,使用它做JAVA已经快两年了.最近准备学习C++,虽然是在WINDOWS平台,但是我不想用Visual studio,因为这个IDE只能在WINDOWS下,如果换成L ...

  4. 使用canvas制作一个移动端画板

    概述 使用canvas做一个画板,代码里涵盖了一些canvas绘图的基本思想,各种工具的类也可以分别提出来用 详细 代码下载:http://www.demodashi.com/demo/10503.h ...

  5. MongoDB: 聚集管道

    在MongoDB2.2新出现的. 聚集管道式基于数据处理管道概念建模的数据聚集框架.文档进入一个多阶段能将该文档转化为聚集结果的管道. 聚集管道提供了map-reduce方法了替代物,并在非常多聚集任 ...

  6. HDUOJ----Super Jumping! Jumping! Jumping!

    Super Jumping! Jumping! Jumping! Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K ...

  7. HDUOJ-----Difference Between Primes

    Difference Between Primes Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  8. AR_销售订单收款基本操作(流程)

    2014-06-04 Created By BaoXinjian

  9. PLSQL_统计信息系列02_统计信息的对象

    20150505 Created By BaoXinjian

  10. ADF_ADF基本概要(汇总)

    20150601 Created By BaoXinjian