组合音频的技能模板分享

官方教程

(大发) #1

组合音频的技能模板分享

1、登陆Rokid开放平台

登陆 :登陆 Rokid 开放平台

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

47

2、填写技能信息

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

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

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

3、语音交互

用JSON格式定义意图,模板如下:

{
	"intents": [
		{
			"intent": "pause",
			"slots": [],
			"user_says": [
				"暂停播放",
				"暂停",
				"暂停一下"
			]
		},
		{
			"intent": "resume",
			"slots": [],
			"user_says": [
				"继续",
				"继续播放"
			]
		},
		{
			"intent": "use_say",
			"slots": [
				{
					"name": "userSay",
					"type": "userSays"
				}
			],
			"user_says": [
				"$userSay"
			]
		},
		{
			"intent": "play",
			"slots": [],
			"user_says": [
				"下一首",
				"切歌",
				"开始播放",
				"下一个",
				"下一曲"
			]
		},
		{
			"intent": "pre",
			"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 = [
    'https://rokidstorycdn.rokid.com/story/track/2000001481/b53b954a-773d-11e7-bff5-00163e0e8605.mp3',
    'https://rokidstorycdn.rokid.com/story/track/2000001478/30067372-771a-11e7-bff5-00163e0e8605.mp3',
    'https://rokidstorycdn.rokid.com/story/track/2000001475/8ca91194-76ba-11e7-bff5-00163e0e8605.mp3'
];

// start 配置预制的url mp3信息
//中国歌曲
var play_China = [
    'china1',
    'yyyy'
];
//美国歌曲
var play_USA = [
    'usa'
];
//日本地区歌曲
var play_Jepan = [
    'japan'
];
var play_Jxxx = [
    'jjj'
];
// end

//这个地方的配置要和intent里面配置的slot的 要一直
var mapObj = new Map();
mapObj.set('中国',play_China);
mapObj.set('美国',play_USA);
mapObj.set('小日本',play_Jpean);
mapObj.set('澳大',play_Jxxx);

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

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);
        }
    },
    'use_say': function () {
        try {
            //获得用户输入的 国家
            var userSay = Rokid.param.request.content.sentence;
            //去mapObj里面 根据用户输入的内容,匹配到需要适配的播放源列表。后续的play等意图都去play_list的集合做播放
            play_list = mapObj.get(userSay);
            console.log(play_list);
            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);
        }
    }
};

5、测试设备

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

6、发布

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


(xqbumu) #2

mp3借用下下


(大发) #3

随便拿~


(大发) #4

:stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye: