Google Homeに漫才させてみた


今日(2017-12-16),ゆるゆるIT勉強会 feat.ReedexにてLTさせてもらいました(はじめてのLTでした).

LTは5分で細かいところまで話せなかったので,もう少し細かいところも含めてメモしておきます.

スライド

Google Homeに漫才させてみた // Speaker Deck

動画

構成

人間が喋ると両方(Google HomeとGoogle Assistant App)が反応してしまうので,google-home-notifierでGoogle Homeに喋らせて,もう片方のアプリを起動する方法を考えました.

Actions on Googleでは2つのアプリを作り,それぞれに次のようなインテントを用意しました.

アプリ1(ツッコミ担当)

  • アプリ名: 相方
  • インテント1(Default Welcome Intent)
    • User Says: ""
    • Text Response: "どうもどうもどうもー。Google Homeブラザーズですー!いやー最近スマートスピーカーが流行ってますねー。"
  • インテント2
    • User Says: "流行ってますねー。うちもひとつ買いましたよ。"
    • Text Response: "おー!何を買ったんですか?"
  • インテント3
    • User Says: "Amazon Echo"
    • Text Response: "いやGoogle Homeじゃないんかーーーい!"
  • インテント4
    • User Says: "どうも、ありがとうございましたー"
    • Text Response: "ありがとうございましたー"

アプリ2(ボケ担当)

  • アプリ名: 漫才
  • インテント1(Default Welcome Intent)
    • User Says: ""
    • Text Response: "OK Google、相方につないで"
  • インテント2
    • User Says: "わかりました。テストバージョンの相方です。"
    • Text Response: "どうもー"
  • インテント3
    • User Says: "Google Homeブラザーズですー!いやー最近スマートスピーカーが流行ってますねー。"
    • Text Response: "流行ってますねー。うちもひとつ買いましたよ。"
  • インテント4
    • User Says: "おー!何を買ったんですか?"
    • Text Response: "Amazon エコー"
  • インテント5
    • User Says: "いやGoogle Homeじゃないんかーい!"
    • Text Response: "どうも、ありがとうございましたー"

アプリ2のインテント2と3は,アプリ1から「はい,テストバージョンの相方です(ピロン♪)」が自動的に入ってしまい,そこで1つの発話と認識されてしまうので,一旦「どうもー」と返しておきながら,アプリ1インテント1の途中からの発話をフックするトリックです.

シーケンスで表すと次のようになります.

node.jsのコード

はじめのトリガをかけるnodes.jsのコードは次のような感じです.

index.js
var googlehome = require('google-home-notifier');

googlehome.device('Google Home', 'ja');
googlehome.ip('192.168.10.xxx');
googlehome.notify('オーケー、グーグル。漫才に繋いで', function(res) {
  console.log(res);
});