技能名称:历史上的今天
入口词:打开历史上的今天
语音交互:(有些是先写上)
{ "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 = {'一':'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 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()+1; 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-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); } } };
针对上一段的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": 0, "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
待续