kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

Voiceflow TIPS #7 Googleスプレッドシート連携で作る豆知識スキル

Voiceflow夏休みAdvent Calendarの7日目です。

今日から何回かに分けて、Googleスプレッドシート連携でできることをご紹介します。初回はよくある「豆知識スキル」を作ってみます。

スキルの実行イメージはこんな感じです。


アレクサ、猫の豆知識をひらいて

猫の豆知識です。このスキルでは猫の豆知識を教えるよ。では今回の豆知識。

(♪〜音楽〜)

猫は、1日の約70%を寝て過ごすそうです。

(♪〜音楽〜)

他にも聞きますか?

いいえ

また来てね。ニャーン🐱


豆知識の部分をGoogleスプレッドシートに登録しておいて、ランダムで拾う感じですね。では早速やっていきましょう。

Googleスプレッドシートの準備

最初にGoogleスプレッドシートに豆知識用のスプレッドシートを準備しておきましょう。

Googleスプレッドシートにログインして、スプレッドシートを新規作成します。

f:id:kun432:20190807231326p:plain

新規スプレッドシートで以下の通り変更します。

  • スプレッドシート名を変更
  • シートタブ名を変更(日本語だとVoiceflowでうまく動かない)
  • A1がカラム名になるのでこれを変更(日本語でも大丈夫ですが、念のため)

f:id:kun432:20190807231405p:plain

A2以降に豆知識を追加します。

f:id:kun432:20190807231408p:plain

コピペ用のテキストを以下に貼っときますのでよろしければご利用ください。

猫は1日の約70%を寝て過ごすそうです。
日本で一番人気のある猫の種類は、スコティッシュ・フォールドだそうです。
猫が飛べる高さは、自分の脚の長さの6倍だそうです。
猫が汗を掻くのは、肉球だけだそうです。
猫は犬よりも耳が良い
猫を飼うことで、人間が病気にかかるリスクは3分の1になるそうです。
猫の心拍数は、人間の2倍だそうです。
猫の味覚には「甘味」がないそうです。
猫は起きている時間の50%をグルーミングをして過ごすそうです。
猫の利き腕は、メスが右で、オスが左だそうです。
猫の長期記憶は、犬よりも優れているそうです。
フランスのフェリセットという猫が、世界で初めて宇宙に行った猫だそうです。
猫の鼻の模様は猫ごとに違うので、人間の指紋と同じだそうです。
猫の指の数は、前足が5つで、後ろ脚は4つだそうです。
猫が首を傾げるのは、あいさつだそうです。
ネコの語源は、「よく寝る子」というところから来たと言われているそうです。
ネコの舌がザラザラしているのは、骨についた肉を削ぎ落とすためだそうです。
ラングドシャというお菓子の意味は、「猫の舌」だそうです。
猫がゆっくりとまばたきするのは、信頼できる友人だと思われているそうです。
猫がしっぽを左右にパタパタ振るのは、不機嫌な気持ちを表しているそうです。
猫がしっぽをゆっくり振るのは、嬉しいという気持ちを表しているそうです。
猫がしっぽを垂直にピンとしているのは、安心しているという気持ちを表しているそうです。

はい、これでGoogleスプレッドシートの準備はできましたので、次はVoiceflowです。

スキルの全体図

こんな感じです。たったこれだけで出来ちゃいます。

f:id:kun432:20190807233957p:plain

では順番に見ていきましょう。Speakなどのブロックは詳細を省いて、②のInteraction Blockのところを中心に書きます。

① Speak Block

f:id:kun432:20190807234728p:plain

挨拶となるブロックです。音楽つけて楽しい感じにするのが良いですね。SOUNDEVOTEEさんがDOVA-SYNDROME様で公開されている以下のジングル素材を利用させていただきました。

dova-s.jp

なお、こういった素材等を利用してスキルを作成する場合には、素材提供サイトや素材作成者様の利用規約等を必ず確認の上、ご利用ください。

② Integration Blockで、Googleスプレッドシート連携

今日のキモですね。順にやっていきましょう。

まず最初に変数を作っておきます。Googleスプレッドシートからランダムに取得した1行の豆知識を保存しておいてSpeakブロックで使うための変数です。今回はフロー変数で"factVar"という変数を作りました。この程度だとプロジェクト変数でも全然問題ないと思います。

f:id:kun432:20190808003029p:plain

では、Integration Blockをドラッグアンドドロップします。右のメニューから、"Google Sheets" を選択します。

f:id:kun432:20190808001253p:plain

今回はGoogleスプレッドシートのデータを読み込むだけなので、"Retrieve Data"を選択します。

f:id:kun432:20190808004056p:plain

次にGoogleスプレッドシートのアカウントと連携させます。"Add User"をクリックします。

f:id:kun432:20190808002937p:plain

Googleログインのボタンが表示されますので、クリックします。

f:id:kun432:20190808002421p:plain

ログインしてなければ、メールアドレスとパスワードを入力する画面が出るかと思います。ログインしている場合はメールアドレスの選択画面が表示されるので、先程のスプレッドシートを作成したアカウントを選択します。

f:id:kun432:20190808002459p:plain

VoiceflowからGoogleスプレッドシートへのアクセスを許可するかどうかを聞かれますので、「許可」をクリックします。

f:id:kun432:20190808002713p:plain

アカウント連携が完了すると以下の画面が表示されますので「Confirm」をクリックします。

f:id:kun432:20190808004020p:plain

アカウントがリンクされていることがわかりますね。ここで自分のアカウントをクリックします。

f:id:kun432:20190808004714p:plain

スプレッドシートのドロップダウンを選択すると、Googleスプレッドシートに保存してあるスプレッドシートが全部表示されるので、該当のスプレッドシート、ここでは「猫の豆知識」を選択します。

f:id:kun432:20190808004724p:plain

次にシートタブのドロップダウンを選択します。「猫の豆知識」のスプレッドシートには"Sheet1"しかないので、これを選択します。

f:id:kun432:20190808004733p:plain

ここで取得するデータの条件を指定することができます。Row Numberを指定すると何行目のデータ、という感じですね。ただ、今回のスキルでは、条件を指定せずにランダムに引っ張ってきたいだけなので、特に条件指定は不要です。左の方はどちらでもよい(今回はRow Numberを選択)ので選択して、右は空のままでOKです。右を空にすることでランダムに一つだけ取得するという動きになります。

終わったらNextをクリックします。

f:id:kun432:20190808005923j:plain

次に取得したデータと変数のマッピングを行います。左は取得するデータのカラム名を指定します。スプレッドシートのA1に指定していた”Mamechishiki”を選択します。

f:id:kun432:20190808010051j:plain

取得したデータを入れておく変数を指定します。最初に作成したフロー変数"factVar"を選択します。

f:id:kun432:20190808010532j:plain

マッピング完了するとこんな感じになります。Nextをクリックします。

f:id:kun432:20190808010632j:plain

これですべての項目にチェックが入りました。Integration Blockではここで接続テストができます。"Test Integration"をクリックします。

f:id:kun432:20190808010845j:plain

はい、こんな感じで結果が返ってきます。何度繰り返すと値がランダムに取得できているのがわかると思います。

f:id:kun432:20190808010852j:plain

Integration Blockはこれで完了です。ここで取得したデータをAlexaに喋らせます。

③ 取得したデータをSpeak Blockで喋らせる

スプレッドシートから取得した豆知識は"factVar"に入っているので、Speak Blockのテキストに入れて、これをAlexaに喋らせます。

f:id:kun432:20190808011339p:plain

以降の処理

これ以降は説明を割愛して画面キャプチャ貼っておきますのでそれを参考にしてください。流れでいうと、

  • 豆知識を1回言ったあと、もう一度聞くか?を「はい」「いいえ」で確認する。
  • 「はい」なら、「次の豆知識です・・・」みたいなSpeak Blockを挟んで再度Integration Blockに戻してループさせる。
  • 「いいえ」なら終了させる。

って感じですので、難しくないと思います。

④ Interaction Block

f:id:kun432:20190808012403p:plain

⑤ Speak Block

f:id:kun432:20190808012417p:plain

⑥ Speak Block

f:id:kun432:20190808012430p:plain

⑦ Speak Block

f:id:kun432:20190808012450p:plain


Alexaスキル開発の最初のお題でよくある豆知識スキル、Voiceflowでもかんたんですね。実はGoogleスプレッドシートと連携させることなく、Voiceflow単体でもランダム出力を使えばできます。ただ、Googleスプレッドシートと連携することで、

  • ロジックとデータを分けることができる、つまり、スキル公開後でも再審査に提出することなくデータの更新だけが可能。
  • 誰でも使えるExcelライクなGoogleスプレッドシートなので、スキル開発開発を知らない方にデータのメンテナンスをお願いすることができる。開発と運用を分けれる。
  • Integration Blockをもっと使いこなせば、データベースのような使い方も可能。

というメリットがありますので、積極的に活用していきたいですね。

そのあたりの使い方の一例を以下で紹介してますので、よろしければ御覧ください。