[日本語Alexa] Alexaスキル「ビンゴ大会」を公開しました。

オフィスの同僚から「**ビンゴ**ができるスキルがあるといいよね〜」ってお話を頂き、とりあえず作ってみました。土曜日に審査に提出して、今日、月曜日公開となりました。 コードも公開されています。
2018.04.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

オフィスの同僚から「ビンゴができるスキルがあるといいよね〜」ってお話を頂き、とりあえず作ってみました。土曜日に審査に提出して、今日、月曜日公開となりました。

「審査」めっちゃ早いです!

最初に、操作しているようすを御覧ください。かなり寂しいですが一人でもビンゴできます。

2 使用方法

(1) 呼出名

呼出名は「ビンゴ大会」です。

「アレクサ、ビンゴ大会を開いて」「アレクサ、ビンゴ大会をスタート」で起動できます。

(2) インテント

インテントは、以下の3つです。

  • StartIntent(次の数字を出す)
  • PreviousIntent(今まで出た数字を読み上げる)
  • InitIntent(ゲームを初期化する)

使用方法としては、「ビンゴスタート」とか「次行ってみよー」って言って、1つづつ数字を出していきます。必要があれば「出た数を教えて」とか「読み上げて」と言う事で、それまでに出た数字を読み上げてくれます。

ゲームは、スキルが終了しても継続されていますので、セッションが止まってしまったら、「アレクサ、ビンゴ大会で次行ってみよー」とかで、再び起動して続きを行えます。

出た数字を全部クリアして、最初からゲームを始める場合は「初期化して」と言ってください。

3 ドラム音

数が出る前のドラム・シンバルの音は、AMAZONでAlexa用に提供されているサウンドライブラリーです。

ライセンスを気にする必要もなく。 また、Audioタグに指定するための要件(サンプリング周波数、サンプルレートなど)への適合や、ホストするための場所を考える必要が全く無いので、非常に手軽に利用できます。

5種類のAudioデータをランダムに使用しています。

function random(list) {
    const index = Math.floor( Math.random() * list.length);
    return list[index];
}

function drumMessage() {
    const drums = [
        "<audio src='https://s3.amazonaws.com/ask-soundlibrary/musical/amzn_sfx_trumpet_bugle_03.mp3'/>",
        "<audio src='https://s3.amazonaws.com/ask-soundlibrary/musical/amzn_sfx_drum_and_cymbal_01.mp3'/>",
        "<audio src='https://s3.amazonaws.com/ask-soundlibrary/musical/amzn_sfx_drum_and_cymbal_02.mp3'/>",
        "<audio src='https://s3.amazonaws.com/ask-soundlibrary/musical/amzn_sfx_drum_comedy_01.mp3'/>",
        "<audio src='https://s3.amazonaws.com/ask-soundlibrary/musical/amzn_sfx_drum_comedy_02.mp3'/>"
    ];      
    return  random(drums);
}

4 Speechcon

数を出す前の「やっほう」とか「てへ」っていうのは、Speechconを使用しています。


Speechconリファレンス(感嘆詞): 日本語

一番、ボキャブラリが欲しい場面なので、60種類ぐらい定義して、ランダムで使用しています。ちょっと使っただけでば、全部を聴くのは難しいでしょう。

function exclamationMessage() {
    const exclamations = [
        '<say-as interpret-as="interjection">やっほう</say-as>',
        '<say-as interpret-as="interjection">むふふ</say-as>',
        '<say-as interpret-as="interjection">あいたた</say-as>',
        '<say-as interpret-as="interjection">あいたたた</say-as>',
        '<say-as interpret-as="interjection">あちち</say-as>',
// *** 略 ***
        '<say-as interpret-as="interjection">おっと</say-as>',
        '<say-as interpret-as="interjection">おめでとう</say-as>',
        '<say-as interpret-as="interjection">お疲れ様です</say-as>',
        '<say-as interpret-as="interjection">きゃ〜</say-as>',
        '<say-as interpret-as="interjection">わ〜い</say-as>',
        '<say-as interpret-as="interjection">わぁ</say-as>',
        '<say-as interpret-as="interjection">わあーっ</say-as>',
        '<say-as interpret-as="interjection">んーと</say-as>',
    ];
    return  random(exclamations);
}

3 最後に

まだ、非常に限られた機能なので、もう少し機能を追加してみたいと考えています。

  • 「ユーザー: xx番は出てますか?」 <= 出た数の確認
  • 「ユーザー: もう一回お願い」 <= 最後に出た数をもう一度聞く
  • 「アレクサ: まだ、リーチじゃないんですか?」「アレクサ: まだ、揃ってないんですか?」<=Alexaからの煽り

大したものではありませんが、一応コードも置きました。何かの参考になれば幸いです。


github [GitHub] https://github.com/furuya02/bingo