Node.js
ifttt
RaspberryPi
AmazonEcho
Alexa

Amazon Echo の沢山ある面白スキルを気軽に遊ぶ方法

■はじめに

Amazon Echo には小粒で楽しそうなスキルが沢山ありますが、一つ一つの呼び出しコマンドを覚えるのが面倒だったり、そもそもどれを有効にしているかも覚えていない。
でも折角 Echo 買ったので家族で色々なスキルを楽しんでみたいということで作ってみました。
この方法なら興味のあるスキルを全部有効にして、忘れる・埋もれることなく末永く楽しめます♪

背景

Google Home や Amazon Echo は家電の音声制御、Raspberry Pi はその補助・拡張で、ホームオートメーション主目的で導入しました。基本的な家電操作の実装は完了して便利に使っているので、最近は応用編ということで今まで手動やリモコン操作ではできなかった楽しい使い方を色々考えています。

全体概要

今回やる事の全体像は以下のような感じです。
alexa-skill-hack.png

Google Home - IFTTT 経由でトリガーとなる音声コマンド認識(うちでは「OK Google、なんかしゃべって」)。Raspberry Pi 上に立ち上げた Node の 簡易 HTTP サーバーで IFTTT の webhook を受けて、Alexa スキルの起動コマンド文字列をランダムに選択して、Google Home で発話してスキル発動という流れです。

まだ公式に対応していない外部からの Amazon Echo スキル発動を他のスピーカーから無理やり実行している点と、Raspberry Pi でいろんなスキルをランダムに選んでいる点が特徴で、冗談のような組み合わせですが結構実用的です。

Home が音声で Echo にスキル発動を依頼している光景はロボット同士が会話しているようで未来的・・というかなかなかシュールで(笑) 来客時などにも活躍しそうです :D

必要な物

・Amazon Echo
・気になる Alexa スキルいくつでも

※以下は他のものでも代用可能です
・Raspberry Pi
・Google Home
・IFTTT
・Node.js

☆Raspberry Pi や GoogleHome を持っていない場合・・・

要は沢山あるスキルを一言でランダムに呼び出すところが肝なのでやり方は工夫次第です♪

例えば・・・

※Node-RED Alexa Home Skill Bridge 使って Echo 自身でトリガーコマンド認識して、手元の PC で Node-RED 動かしてスキル発動コマンドを録音した MP3 をランダムで再生する。
[Link]

※お古の Android スマホを Echo の隣において Tasker みたいな簡易マクロ・アプリ動かして IFTTT アプリの通知を監視してランダムにテキストしゃべらせる。(Taskerは有料ですがあとは標準の機能だけで可能です)
[Link]

など色々な方法があると思います。

コード

殆どアイデアだけの投稿で、コードもシンプルなのでいきなり貼っちゃいます♪

randam-skill.js
// ここには Alexa Skill の発動コマンドを列挙(スキルを有効にするのをお忘れなく)
var array = [
"クイズタイムをひらいて",
"魚の豆知識をひらいて",
"なぞなぞ先生をはじめて",
//"・・・・・・色々お好きなものを追加",
"ぽいもんの森をひらいて",
"ニャーニャーをスタート",
"お祭りの音をスタートして"
];

// SHELL コマンド実行用
const exec = require('child_process').exec;
var commandLine = function( cmdLine ) {
   exec( cmdLine , function(err, stdout, stderr) {
      if (!err) {
         console.log('stdout: ' + stdout);
         console.log('stderr: ' + stderr);
      } else {
         console.log(err);
      }
   });
   return this;
};

// スキルをランダムに選択
var selectedSkill = array[Math.floor(Math.random() * array.length)]

// 以下はお使いの TTS API &音声出力コマンドに書き換えて☆
commandLine( 'echo "アレクサ。。。。。。' + selectedSkill + '"' );

このコードを Raspberry Pi のコマンドラインで走らせると、Alexa の音声コマンドを画面に表示しますので、その箇所を皆さんの環境に合わせて(google-home-notifier 呼ぶとかどっかの TTS API叩いて音声ファイル作って再生するとか)書き換えてください。

IFTTT からの通知は私は独自の webhook サーバー書いて、ルーターのポート空けて受信していますが、他にもポートを空けなくても良い Slack 経由とか Firebase 経由など色々な方法があるのでお好みでどうぞ☆

※google-home-notifier [Link]
※Firebase [Link]
※Slack [Link1] [Link2]
※Node で HTTP サーバ構築 [Link]

導入してみた感想

Google Home と IFTTT の組合せなので、呼び出しコマンドも「なんかしゃべって」とシンプルで小学生の子供も気軽に遊んでいるようです。
※なんで Amazon Echo の音声コマンドは「・・・をトリガー」とか面倒な仕様なのか不思議ですね・・汗

今後も面白いスキルがリリースされたらどんどん追加していこうと思います。
ランダム実行ですが、気に入ったものが見つかったら Echo へ直接呼びかけるなり、専用の簡単コマンド別途作るなりすれば良いので、まずは沢山あるスキルのショーケースとしては我ながら良い方法だと思っています。

Amazon Echo 持っておられる方は是非お試しを :D

今後

今回は Qiita 初投稿だったので簡単なものにしましたが、逆のパターンで Google Home 側の機能・スキルの勝手発動機能も作ってみたいなと思っています。
また他にも色々凝ったものをシコシコ作っているので、今後少しずつご紹介できたらなと思っています。

※投稿記事一覧

・GoogleHome/AmazonEcho とラズパイでやった事・やりたい事一覧[LINK]
・Google Home でちょっと未来風のスマート TV を作ってみたよ☆[LINK]
・黒豆 (Broadlink RM Mini 3) の IR 信号解析してみたよ♪ [LINK]
・スマートロック SESAME の WEB API が便利だった![LINK]
・Amazon Echo の沢山ある面白スキルを気軽に遊ぶ方法[LINK]