Rokid开发者社区skill之【历史上的今天】

2023-06-25,,

技能名称:历史上的今天

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

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

{
"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之【历史上的今天】的相关教程结束。

《Rokid开发者社区skill之【历史上的今天】.doc》

下载本文的Word格式文档,以方便收藏与打印。