[Alexa] Voiceflowで多言語対応のAlexaスキルを作ってみる #Alexa #Voiceflow

2019.03.05

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

こんにちは、Mr.Moです。

本日はVoiceflowを使って多言語対応のスキルを作れるか試していきたいと思います。

Voiceflowとは

下記の記事をご覧ください。

[Alexa]ノンコーディングでAlexaスキルを作れるサービスVoiceflowが今後にすごく期待できる内容だった #Alexa #Voiceflow

多言語対応考えてみる

ここでは英語(米国)と日本語に対応させたいと思います。

実はVoiceflowはlocaleの情報(国や地域を判断できる値)を持っていますのでコレが使えそうです。 そのまま「locale」という変数名で用意されていて、この変数経由でユーザがどの言語で使おうとしているのかを把握することができます。

(locale変数には、英語(米国)だと「en-US」、日本語だと「ja-JP」の値が入っています。)

あとは実装をどうするかですが、、IF文の機能が使えそうですね。

なお、ユーザ発話に関してはIF文でもどうにもできそうもありません。。 標準ビルトインインテントは自動的に多言語対応されるので、ひとまずこちらを使います。「YesIntent」と「NoIntent」が使いやすそうですかね。

多言語対応実装してみる

今回は2パターンに分けて実装を試してみます。

パターン1

IF文でゴリゴリに切り分けていきましょう

今回は英語(米国)と日本語の2種類しか対応していないのでそこまで複雑になりませんが、対応言語の種類が増えると会話フローの可読性が悪くなりそうなので。。 ちょっと別の手法も考えてみましょう。

パターン2

Googleスプレッドシートを活用します。Googleスプレッドシートにシート単位で各言語のメッセージを管理しておき、ここからメッセージを持ってくるようにします。 下記のようなイメージです。

実はコーディング(プログラムを用いて実装する)で多言語対応する時も上記に近いイメージで実現します。

そしてフローを作成すると、こんな感じで会話フローを共通化できるので少し可読性も維持できそうですかね。

それでは作り方を詳しく説明していきます。

Googleスプレッドシートを活用した多言語対応手順

まず、Googleスプレッドシートにシート単位で各言語のメッセージを保存します。

では、英語(米国)用からGoogleスプレッドシートのメッセージを取得していきましょう。 VoiceflowでGoogleスプレッドシートの取得方法のチュートリアルがあるので下記を参考に進めていきます。

https://university.getvoiceflow.com/api-s-and-integrations/google-sheets/pulling-random-data-from-a-google-spreadsheet" rel="noopener" target="_blank

チュートリアル完了後、APIブロックは下記の用な感じになります。 Googleスプレッドシートのメッセージを複数行取得する場合は、2項目以降も同じ用に変数に格納してください。

(変数名は「意味のわかる名前」+「スプレッドシートの行番号」にひとまずしてます)

次に、日本語用のGoogleスプレッドシートのメッセージを取得します。 さき程作成したAPIブロックをコピーします。

英語(米国)用と日本語用で違うところは赤枠のワークシートIDという名前のみです。

シート単位にワークシートIDを持っており、「URL Endpoint」にあるURLの赤字一箇所を変更するだけで簡単にスプレッドシートで多言語対応できます。

※URLにある「スプレッドシートID」にはご自身で作成したGoogleスプレッドシートのスプレッドシートIDに置き換えてください。

https://spreadsheets.google.com/feeds/list/スプレッドシートID/od6/public/basic?alt=json

では次にそのワークシートIDはどのように取得するのか説明します。

ワークシートIDの取得

下記URLをブラウザにアクセスします。

https://spreadsheets.google.com/feeds/worksheets/ スプレッドシートID /public/basic

表示されたxmlの中から「https://spreadsheets.google.com/feeds/list/」を文字列検索すると、

https://spreadsheets.google.com/feeds/list/ スプレッドシートID / ワークシートID /public/basic

のような形式になっているのでシート名に対するワークシートIDの部分を取得できます。

最後に「URL Endpoint」にあるURLの赤枠に【日本語】用シートのワークシートIDに書き換えて完成です!

取得方法は下記を参考にさせていただきました。 https://xov.jp/e/199/

確認

では実際にアップロードして、多言語に対応できているのか見てみましょう。

【英語(米国)】用

【日本語】用

一応、多言語対応できましたね!

Voiceflowの中の人に聞いてみた

聞いた所やはりIF文とlocale変数を使ってくださいとのこと。(あとGoogleスプレッドシートも使えるね!とのこと) そもそも言語毎にスキルを分けるといった意見もありました。

まとめ

個人的にはですが、現時点では言語毎にスキルを分けるのが良さそうに思いました。(他に良い方法ご存知でしたら教えてください!) 標準機能として多言語対応の機能をVoiceflowに入れてほしいところですが、自分はちょっと優れた案が思いつかず良い提案ができていないので。。

もし多言語対応の良い案を持っている方は是非Voiceflowの中の人にメッセージ送ってみてください! きっと良い方向に向かうと思いますよ!