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

技能名称:历史上的今天

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

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

 

{
    "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

待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值