技能名称:历史上的今天

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

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

  1. {
  2. "intents": [
  3. {
  4. "intent": "PAUSE_HISTORY_DAY",
  5. "slots": [],
  6. "user_says": [
  7. "暂停",
  8. "停下"
  9. ]
  10. },
  11. {
  12. "intent": "EXIT_HISTORY_DAY",
  13. "slots": [],
  14. "user_says": [
  15. "我不想听了",
  16. "我不想听",
  17. "我听够了",
  18. "拜拜",
  19. "取消"
  20. ]
  21. },
  22. {
  23. "intent": "HISTORY_DAY",
  24. "slots": [
  25. {
  26. "name": "month",
  27. "type": "ROKID.NUMBER_ZH"
  28. },
  29. {
  30. "name": "day",
  31. "type": "ROKID.NUMBER_ZH"
  32. },
  33. {
  34. "name": "oneday",
  35. "type": "ROKID.DAY_ZH"
  36. }
  37. ],
  38. "user_says": [
  39. "我要了解$month月$day号",
  40. "历史上的$month月$day日",
  41. "我想听$month月$day号",
  42. "我想听$month月$day日",
  43. "我想了解$oneday",
  44. "我要了解$month月$day日",
  45. "$month月$day日",
  46. "$oneday",
  47. "我要了解$oneday",
  48. "历史上的$month月$day号",
  49. "$month月$day号"
  50. ]
  51. },
  52. {
  53. "intent": "RESUME_HISTORY_DAY",
  54. "slots": [],
  55. "user_says": [
  56. "继续播放",
  57. "继续"
  58. ]
  59. }
  60. ]
  61. }

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

  1. exports.handler = function(event, context, callback) {
  2. var rokid = Rokid.handler(event, context,callback);
  3. rokid.registerHandlers(handlers);
  4. rokid.execute();
  5. };
  6. dictText = {'一':'','二':'','三':'','四':'','五':'','六':'','七':'','八':'','九':'','十':'','十一':'','十二':'','十三':'','十四':'','十五':'','十六':'','十七':'','十八':'','十九':'','二十':'','二十一':'','二十二':'','二十三':'','二十四':'','二十五':'','二十六':'','二十七':'','二十八':'','二十九':'','三十':'','三十一':''};
  7. onedaydictText = {'今天':,'明天':,'后天':,'大后天':,'大大后天':,'大大大后天':,'昨天':-,'前天':-,'大前天':-,'大大前天':-,'大大大前天':-};
  8. //如果是6月,返回06
  9. function formatMonth(monthori){
  10. if (!isNaN(monthori)) {
  11. if (parseInt(monthori) < ) {
  12. monthurl = '' + monthori;
  13. } else {
  14. monthurl = monthori;
  15. }
  16. } else {
  17. monthurl = dictText[monthori];
  18. }
  19. return monthurl;
  20. }
  21. //如果是8号,返回08
  22. function formatDay(dayori){
  23. if (!isNaN(dayori)) {
  24. if (parseInt(dayori) < ) {
  25. dayurl = '' + dayori;
  26. } else {
  27. dayurl = dayori;
  28. }
  29. } else {
  30. dayurl = dictText[dayori];
  31. }
  32. return dayurl;
  33. }
  34.  
  35. var handlers = {
  36. "ROKID.INTENT.WELCOME":function(){
  37. try{
  38. this.emit(":tts",{ tts: "欢迎使用历史上的今天这个技能!你可以对我说想了解几月几号。" });
  39. this.callback(null);
  40. }catch(e){
  41. this.callback(e);
  42. }
  43. },
  44. "PAUSE_HISTORY_DAY":function(){
  45. try{
  46. this.emit(":tts",{ tts: "",action:"PAUSE" });
  47. this.callback(null);
  48. }catch(e){
  49. this.callback(e);
  50. }
  51. },
  52. "RESUME_HISTORY_DAY":function(){
  53. try{
  54. this.emit(":tts",{ tts: "",action:"RESUME" });
  55. this.callback(null);
  56. }catch(e){
  57. this.callback(e);
  58. }
  59. },
  60. "HISTORY_DAY":function(){
  61. try{
  62. var oneday = Rokid.param.request.content.slots.oneday;
  63. var monthori = Rokid.param.request.content.slots.month;
  64. var dayori = Rokid.param.request.content.slots.day;
  65. var monthurl = '';
  66. var dayurl = '';
  67. if (oneday){
  68. var dd = new Date();
  69. dd.setDate(dd.getDate() + onedaydictText[oneday]);
  70. monthori = dd.getMonth()+;
  71. dayori = dd.getDate();
  72.  
  73. monthurl = formatMonth(monthori);
  74. dayurl = formatDay(dayori);
  75. } else{
  76. monthurl = formatMonth(monthori);
  77. dayurl = formatDay(dayori);
  78. }
  79.  
  80. result = Rokid.sync_request('GET','https://baike.baidu.com/cms/home/eventsOnHistory/' + monthurl + '.json');
  81. result = Rokid.resHandler(result);
  82.  
  83. var hdori = result[monthurl][monthurl+dayurl];
  84. var hdorilen = hdori.length;
  85. var res = '好的,为您播报' + monthori + '月' + dayori + '号' + '的历史。';
  86. for (var index = hdorilen-; index >= ; index --){
  87. var yearori = hdori[index].year;
  88. var yearstr = '';
  89. if (parseInt(yearori) >= ) {
  90. yearstr = yearori + '年';
  91. }else{
  92. yearstr = '公元前' + Math.abs(yearori) + '年';
  93. }
  94. var title = hdori[index].title.replace(/<.*?>/ig,"").replace("\n","").replace("。","");
  95. res += yearstr + title + '。';
  96. }
  97. res += monthori + '月' + dayori + '号' + '的历史已为您播报完毕,请问您还想了解几月几号的历史呢?';
  98. this.emit(":tts",{ tts: res });
  99. this.callback(null);
  100. }catch(e){
  101. this.callback(e);
  102. }
  103. },
  104. "EXIT_HISTORY_DAY":function(){
  105. try{
  106. this.emit(":tts",{ tts: "好的,已经退出历史上的今天这个技能,再见!如果需要,您可以直接对我说打开历史上的今天。", action:"STOP" });
  107. this.callback(null);
  108. }catch(e){
  109. this.callback(e);
  110. }
  111. }
  112. };

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

更新于2017-10-11日下午

  1. exports.handler = function(event, context, callback) {
  2. var rokid = Rokid.handler(event, context,callback);
  3. rokid.registerHandlers(handlers);
  4. rokid.execute();
  5. };
  6. 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'};
  7. onedaydictText = {'今天':0,'明天':1,'后天':2,'大后天':3,'大大后天':4,'大大大后天':5,'昨天':-1,'前天':-2,'大前天':-3,'大大前天':-4,'大大大前天':-5};
  8. //如果是6月,返回06
  9. function formatMonth(monthori){
  10. if (!isNaN(monthori)) {
  11. if (parseInt(monthori) < 10) {
  12. monthurl = '0' + monthori;
  13. } else {
  14. monthurl = monthori;
  15. }
  16. } else {
  17. monthurl = dictText[monthori];
  18. }
  19. return monthurl;
  20. }
  21. //如果是8号,返回08
  22. function formatDay(dayori){
  23. if (!isNaN(dayori)) {
  24. if (parseInt(dayori) < 10) {
  25. dayurl = '0' + dayori;
  26. } else {
  27. dayurl = dayori;
  28. }
  29. } else {
  30. dayurl = dictText[dayori];
  31. }
  32. return dayurl;
  33. }
  34.  
  35. var handlers = {
  36. "ROKID.INTENT.WELCOME":function(){
  37. try{
  38. this.emit(":tts",{ tts: "欢迎使用历史上的今天这个技能!你可以对我说想了解几月几号。" });
  39. this.callback(null);
  40. }catch(e){
  41. this.callback(e);
  42. }
  43. },
  44. "PAUSE_HISTORY_DAY":function(){
  45. try{
  46. this.emit(":tts",{ tts: "",action:"PAUSE" });
  47. this.callback(null);
  48. }catch(e){
  49. this.callback(e);
  50. }
  51. },
  52. "RESUME_HISTORY_DAY":function(){
  53. try{
  54. this.emit(":tts",{ tts: "",action:"RESUME" });
  55. this.callback(null);
  56. }catch(e){
  57. this.callback(e);
  58. }
  59. },
  60. "HISTORY_DAY":function(){
  61. try{
  62. var oneday = Rokid.param.request.content.slots.oneday;
  63. var monthurl = '';
  64. var dayurl = '';
  65. if (oneday){
  66. var dd = new Date();
  67. dd.setDate(dd.getDate() + onedaydictText[oneday]);
  68. monthori = dd.getMonth()+1;
  69. dayori = dd.getDate();
  70.  
  71. monthurl = formatMonth(monthori);
  72. dayurl = formatDay(dayori);
  73. } else{
              var monthori = JSON.parse(Rokid.param.request.content.slots.month).text;
           var dayori = JSON.parse(Rokid.param.request.content.slots.day).text;
  1. monthurl = formatMonth(monthori);
  2. dayurl = formatDay(dayori);
  3. }
  4.  
  5. // result = Rokid.sync_request('GET','https://baike.baidu.com/cms/home/eventsOnHistory/' + monthurl + '.json');
  6. // result = Rokid.resHandler(result);
  7. Rokid.request({
  8. url: 'https://baike.baidu.com/cms/home/eventsOnHistory/' + monthurl + '.json',
  9. method: "GET",
  10. headers: {
  11. 'User-Agent': 'request'
  12. }
  13. }, (err, resssssss, body) => {
  14. if(err) {
  15. this.emit(":error", err);
  16. }
  17. var result = JSON.parse(body);
  18. var hdori = result[monthurl][monthurl+dayurl];
  19. var hdorilen = hdori.length;
  20. var res = '好的,为您播报' + monthori + '月' + dayori + '号' + '的历史。';
  21. for (var index = hdorilen-1; index >= 0; index --){
  22. var yearori = hdori[index].year;
  23. var yearstr = '';
  24. if (parseInt(yearori) >= 0) {
  25. yearstr = yearori + '年';
  26. }else{
  27. yearstr = '公元前' + Math.abs(yearori) + '年';
  28. }
  29. var title = hdori[index].title.replace(/<.*?>/ig,"").replace("\n","").replace("。","");
  30. res += yearstr + title + '。';
  31. }
  32. res += monthori + '月' + dayori + '号' + '的历史已为您播报完毕,请问您还想了解几月几号的历史呢?';
  33. this.emit(":tts",{ tts: res });
  34. this.callback(null);
  35. })
  36.  
  37. }catch(e){
  38. this.callback(e);
  39. }
  40. },
  41. "EXIT_HISTORY_DAY":function(){
  42. try{
  43. this.emit(":tts",{ tts: "好的,已经退出历史上的今天这个技能,再见!如果需要,您可以直接对我说打开历史上的今天。", action:"STOP" });
  44. this.callback(null);
  45. }catch(e){
  46. this.callback(e);
  47. }
  48. }
  49. };

集成测试:

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

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

输入语句:我想了解今天

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

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. gulp 常用插件汇总

    2017-07-26更新:图片压缩插件使用gulp-smushit,gulp-smushit压缩率比较大,gulp-imagemin 图片压缩插件压缩率不明显. 见下图压缩率: 1.gulp安装 参照 ...

  2. eclipse tomcat路径更改后启动报错

      eclipse tomcat路径更改后启动报错 CreateTime--2018年5月3日14:48:22 Author:Marydon 1.情景还原 2.原因 本地的tomcat路径修改后,ec ...

  3. spring mvc json的输入输出

    输入 前台代码: var cfg = { type: 'POST', data: JSON.stringify({userName:'winzip',password:'password',mobil ...

  4. 在JQuery中获取URL中的参数值

    添加一个js文件,代码如下 // * jQuery url get parameters function [获取URL的GET参数值] // *character_set UTF-8 // * au ...

  5. iOS-仿支付宝刮刮乐效果

    概述 仿支付宝刮刮乐效果, 可以按照自己需求更改展示刮出来的效果的view(即刮开后刮刮乐效果展示) 详细 代码下载:http://www.demodashi.com/demo/10673.html ...

  6. 小白心目中的Java抽象类(abstract class)

    在java开发中,我们有时会定义了一个父类,这个父类只有对方法的描述,但却没有在父类中写出对方法的实现,这种被定义的方法称为抽象方法.那么理所当然,含有抽象方法的类就称为抽象类.用关键字abstrac ...

  7. js createElement appendChild createTextNode用法

    xml不支持innerHTML 1 <p id="bj">北京</p> <script type="text/javascript" ...

  8. HDUOJ--8球胜负

    8球胜负 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. HTML:减少页面加载时间的方法

    1. 重复的HTTP请求数量应尽量减少 (1)减少调用其他页面.文件的数量. (2)在使用css格式时,常会采用background载入图形文件,而每个background的图像都会产生1次HTTP ...

  10. Android开发之探秘蓝牙隐藏API

    这次讲得深入些,探讨下蓝牙方面的隐藏API.用过Android系统设置(Setting)的人都知道蓝牙搜索之后可以建立配对和解除配对,但是这两项功能的函数没有在SDK中给出,那么如何去使用这两项功能呢 ...