【新技能】越听越聪明 十五分钟发布一个技能

【技能名称】

越听越聪明

【技能描述】

给小朋友《越听越聪明》是世界权威教育专家认可推荐的世界名曲,造就亿万天才宝宝的神奇音符,感召心灵的名曲旋律。

【示例语句】

“若琪,打开越听越聪明”

“若琪,下一首”

“若琪,上一首”

“若琪,暂停”

“若琪,继续”

1赞

发现一个快速做音频 skill 的新功能。

越听越聪明技能开发流程分享

1、登陆Rokid开放平台

登陆 Rokid 开放平台:登陆平台

点击“开始创建”的按钮。

2、填写技能信息

入口词:写用来唤起这个技能的关键词,需要和技能名称一致!

技能名称:技能的名称会在技能商店中向终端用户展示,名字要小而美~ 名称太长大家会记不住啦!

场景化展示:选择非场景化选择非场景化选择非场景化!

3、语音交互

用JSON格式定义“越听越聪明”的意图,模板如下:

{
	"intents": [
		{
			"intent": "pause",
			"slots": [],
			"user_says": [
				"暂停播放",
				"暂停",
				"暂停一下"
			]
		},
		{
			"intent": "resume",
			"slots": [],
			"user_says": [
				"继续",
				"继续播放"
			]
		},
		{
			"intent": "pre",
			"slots": [],
			"user_says": [
				"上一首",
				"上一曲",
				"上一个"
			]
		},
		{
			"intent": "play",
			"slots": [],
			"user_says": [
				"切歌",
				"下一曲",
				"下一首",
				"下一个",
				"开始播放"
			]
		}
	]
}

别忘了加上自定义词表哦

4、配置

需选择后端服务方式,选择是否需要用户授权(建议选否,这样可以拥有更多用户哦)。

exports.handler = function (event, context, callback) {
    var rokid = Rokid.handler(event, context, callback);
    rokid.registerHandlers(handlers);
    rokid.execute();
};

/**====================================================================================用户须编辑区域==============================================================================*/

//播放模式,0:顺序播放,1:随机播放。
var play_mode = 0;
//播放音频的索引。
var play_count = 0;
//tts欢迎词
var WELCOME_TTS = '嗨,宝贝,为你准备了一些大师的作品,祝你新的一年里越听越聪明!';
//播放列表,顺序播放会按照列表顺序播放。
var play_list = [
    'http://****我是马赛克***.mp3',
    'http://****我是马赛克***.mp3'
];

/**====================================================================================用户须编辑区域==============================================================================*/

const dbGet = Rokid.promisify(Rokid.dbServer.get);
const dbSet = Rokid.promisify(Rokid.dbServer.set);

var userId = Rokid.param.context.user.userId || 'test_user_id';
var handlers = {
    'ROKID.INTENT.WELCOME': function () {
        try {
            this.setTts({ tts: WELCOME_TTS, itemId: 'welcome' });
            this.emit(':done');
        } catch (e) {
            this.emit(':error', e);
        }
    },
    /**
     * 开始播放,切换下一首
     */
    'play': function () {
        //查询播放模式
        dbGet(userId + '_mode').then(mode => {
            console.log('mode:' + mode);
            if (mode !== '未查询到相关数据') {
                //查询到有播放模式
                play_mode = mode;
            }
            return mode;
        }).then(mode => {
            dbGet(userId + '_count').then(count => {
                console.log('count:' + count);
                let media_url = '';
                if (count !== '未查询到相关数据') {
                    //查询到有播放记录
                    play_count = count;
                    if (play_count > play_list.length - 1) {
                        play_count = 0;
                    }
                }
                media_url = play_list[play_count];
                if (mode == 1) {
                    //随机播放
                    play_count = Math.floor(Math.random() * play_list.length);
                    media_url = play_list[play_count];
                }
                return media_url;
            }).then(media_url => {
                console.log('media:' + media_url);
                dbSet(userId + '_count', play_count + 1).then(res => {
                    //异步存储不管失败与否
                });
                this.setMedia({ type: 'AUDIO', url: media_url });
                this.emit(':done');
            }).catch(e => {
                this.emit(':error', e);
            })
        }).catch(e => {
            this.emit(':error', e);
        })
    },
    /**
     * 上一首
     */
    'pre': function () {
        dbGet(userId + '_count').then(count => {
            console.log('count:' + count);
            let media_url = '';
            if (count !== '未查询到相关数据') {
                //查询到有播放记录
                play_count = count - 2;
                if (play_count > play_list.length - 1) {
                    play_count = 0;
                } else if (play_count < 0) {
                    play_count = play_list.length - 1;
                }
            }
            media_url = play_list[play_count];
            return media_url;
        }).then(media_url => {
            console.log('media:' + media_url);
            dbSet(userId + '_count', play_count + 1).then(res => {
                //异步存储不管失败与否
            });
            this.setMedia({ type: 'AUDIO', url: media_url });
            this.emit(':done');
        }).catch(e => {
            this.emit(':error', e);
        })
    },
    /**
     * 暂停播放
     */
    'pause': function() {
        this.setMedia({action: 'PAUSE', url: 'xxx'});
        this.emit(':done');
    },
    /**
     * 继续播放
     */
    'resume': function() {
        this.setMedia({action: 'RESUME', url: 'xxx'});
        this.emit(':done');
    },
    /**
     * 循环播放
     */
    'Media.FINISHED': function () {
        this.emit('play');
    },
    /**
     * 为第一个tts接上media
     */
    'Voice.FINISHED': function () {
        if (Rokid.param.request.content.extra.voice.itemId === 'welcome') {
            this.emit('play');
        } else {
            this.emit(':done');
        }
    },
    'ROKID.INTENT.EXIT': function () {
        try {
            console.log('技能退出成功');
            this.emit(':done');
        } catch (e) {
            this.emit(':error', e);
        }
    }
};
1赞

5、测试设备

选择测试设备,通过输入设备TypeID(device_type_id)、设备ID(device_id)添加测试设备或关联您手机账号下绑定的若琪设备(推荐!!),之后就可以在这些设备上测试这个技能。

6、发布

选择技能商店分类,填写技能摘要、示例语句等,接着点击同意隐私合规条款后,就可以正式提交审核啦。

总计花费十五分钟时间,其中五分钟时间用于选歌上传到公有云。

目前已经收到技能上线的邮件!!!

谢谢各位伙伴,谢谢 Rokid,我的第一个技能完美上线。

期待我的下一个技能吧!

恭喜啦!!:kissing_heart:

事不宜迟,什么时候做下一个技能!

就是今天啦!

坐等