【技能开发分享】摇骰子小游戏---“摇一摇”


(ayan.wu) #1

##摇一摇
哈哈哈,终于,我自己开发的技能上线啦!我在若琪上可以体验到自己开发的技能啦!
整个过程还是十分有趣的,而且从阅读文档开始到开发完成只花了一个小时左右的时间。
嗯嗯,简单介绍一下自己的技能,希望可以带给大家一些帮助。

玩法:

与若琪进行如下游戏对话

  • 你: “若琪,打开摇一摇”
  • 若琪: “欢迎进入摇数字游戏。我会摇一个1-6之间的数字,现在你可以跟我说,来个数字”
  • 你:“来个数字”
  • 若琪:“我刚摇了一个5”
  • 你:“若琪,再来一次”
  • 若琪:“我刚摇了一个1”
  • 你:“我不想玩了”
  • 若琪:“拜拜,下次再玩”

###流程图

语音交互的设计:

{
	"intents": [
		{
			"intent": "Play_Dice",
			"slots": [
				{
					"name": "play",
					"type": "PLAY_LIST"
				}
			],
			"user_says": []
		},
		{
			"intent": "Exit_Dice",
			"user_says": []
		}
	]
}

####启动应用intent:ROKID.INTENT.WELCOME(系统级, 不需要明文配置,系统自带的)
####使用应用intent:Play_Dice(自定义)
user_says覆盖到如下语句:

[
"(若琪)?(,)?再(丢|来)一次",
“我?$play摇一摇”,
“来个数字”
]

$play 词表值可以是以下内容:

还要玩
还想玩
继续玩
接着玩
要玩
要玩一下
想要玩一玩
想要玩
想玩
现在想玩
现在想
现在玩
现在要玩
玩一下
玩一玩
玩玩
想玩玩
想玩一下
想玩一玩

结束应用intent:Exit_Dice(自定义)

user_says覆盖到如下语句:

[
"(若琪)?(,)?退出(摇一摇)?(技能)",
“我?(现在)?不(想)?玩了”
]

###JS Engine设计:


const TEXT_WELCOME = "欢迎进入摇数字游戏。我会摇一个1-6之间的数字,现在你可以跟我说,来个数字";
const TEXT_SAY_BAY = "拜拜,下次再玩";
const MAX_NUMBER = 6;
    
var handlers = {
    // 命中入口词时使用系统intent,对应系统intent => ROKID.INTENT.WELCOME
    'ROKID.INTENT.WELCOME':function() {
        this.emit(':tts', { tts: TEXT_WELCOME, shouldEndSession: false });
        this.callback(null);
    },
    
    // 命中自定义游戏语句时的intent,对应语音交互中的 Play_Dice
    'Play_Dice': function() {
        let number = Math.floor(Math.random() * MAX_NUMBER);
        this.emit(':tts', { tts: '我刚摇了一个' + number, shouldEndSession: false });
        this.callback(null);
    },
    // 退出应用时的intent,对应语音交互中的 Exit_Dice
    'Exit_Dice': function() {
        this.emit(':tts', { tts: TEXT_SAY_BAY, shouldEndSession: true });
        this.callback(null);
    }
    
};

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

遇到的问题

asr识别问题

一开始技能入口词并不是 ‘摇一摇’,是‘丢骰子’。骰子 这个词大部分人会读成shaizi,其实正确拼音是touzi。即时用户读对了,asr对 骰子的识别大概率下并不正确。于是想到了 ‘摇一摇’入口词,实际整个技能就是掷骰子的游戏。

拾音问题

进入技能后,与若琪交互时每次都要加 ‘‘若琪’’激活词。

media播放完后回调问题

本想在播报随机数字前再播放一段丢骰子的声音,但是发现丢完骰子音频后没有回调功能。

单个数字读不出来

tts对单个数字的内容无法播放,需要配合自然语言一起。例如,“40”就读不出来,“数字是40”则可以读出来。


Rokid开发者大赛第一季
开发者社区Pebble(月石)开发测试固件发布
(chao.xuc) #2

赞!


(chao.xuc) #3

(yao.he) #4

每天早上摇个6出来对抗水逆。


(yitang) #5

:cow:


(快乐陀螺人) #6

源码考到新建技能里出错呢, 怎么搞
意图(intent)中引用了未定义的词表类型(PLAY_LIST)


(快乐陀螺人) #7

name跟type搞混了