連載記事
前後関係があるため順番に読んでもらえると分かりやすくなっています。
1. Amazon AlexaとFire TVでHello Worldを試してみる - Qiita
2. Amazon Alexaで音声から引数を受け取る - Qiita
3. Amazon AlexaのCustom Slot Typesを設定する - Qiita
4. Amazon AlexaからHerokuのRailsにつなぐ - Qiita
5. Amazon Alexaで会話を続ける(セッションを引き継ぐ) - Qiita
6. Amazon Alexa のスキルを日本語化する - Qiita
7. 自作した日本語のAlexa SkillをEcho dotで動かす - Qiita
はじめに
先日ついにEchoの国内発売が発表されました。
それに伴いAlexaアプリも日本語化が可能となりました。
ということで前回まで作ったHello worldを日本語化したいと思います。
Amazon Alexaで会話を続ける(セッションを引き継ぐ) - Qiita
スキルを日本語化する
まずは開発者ポータルから日本語化したスキルを選択します。
次にスキル情報を日本語化します。
上のタブから「新しい言語を追加」を選んでJapaneseを追加します。
スキル名、呼び出し名を「こんにちは」に変更します。
アプリの呼び出し名もちゃんと日本語対応していますね。
次に対話モデルを日本語化します。
インテントスキーマは英語と同じものを入力します。
{
"intents": [
{
"intent": "AMAZON.CancelIntent"
},
{
"intent": "AMAZON.HelpIntent"
},
{
"intent": "AMAZON.StopIntent"
},
{
"slots": [
{
"name": "firstName",
"type": "JP_FIRST_NAME"
}
],
"intent": "HelloWorldIntent"
},
{
"intent": "HowAreYouIntent"
}
]
}
カスタムスロットタイプもJP_FIRST_NAME
として適当な値を入力します。
僕は「太郎」「花子」として登録しました。
Amazon AlexaのCustom Slot Typesを設定する - Qiita
実は国内発売に伴いAmazonが準備した日本人の名前に対応したビルトインスロットが追加されました。
これを利用すればより多くの名前に対応することが可能です。
今回は話をシンプルにするために、英語版をそのまま日本語化することにします。
最後にサンプル発話を設定します。
HelloWorldIntent こんにちは私の名前は {firstName} です
HowAreYouIntent 良いよ
注意点
スロットが入る{firstName}
の前後に半角のスペースが必要です。
返答側のRailsを日本語化する
次にAlexaからのリクエストに対して、Rails側で日本語で返答するように修正します。
Alexaのリクエストには言語を判定するlocale
があるのでこれを使って言語を判定するのが良さそうです。
最終的なRails側のコードは下記の通りです。
locale
で言語の判定を行って返答するメッセージを分岐しています。
class TalksController < ApplicationController
protect_from_forgery with: :null_session
def create
request = AlexaRubykit::build_request(params)
response = AlexaRubykit::Response.new
session_end = true
case request.name
when 'HelloWorldIntent'
first_name = request.slots[:firstName][:value]
message = if request.locale == 'ja-JP'
"こんにちは#{first_name}さん。ご機嫌いかがですか?"
else
"Hello world! #{first_name}. How are you?"
end
response.add_speech(message)
response.add_session_attribute :first_name, first_name
session_end = false
when 'HowAreYouIntent'
first_name = request.session.attributes[:first_name]
message = if request.locale == 'ja-JP'
"いいですね!#{first_name}さん。"
else
"That's good, #{first_name}."
end
response.add_speech(message)
end
render json: response.build_response(session_end)
end
end
Alexaから日本語で発話してみる
実は、FireTVはまだ日本語でのAlexaメニューが存在していません。
来週のEchoの配送まではAlexaアプリからしか確認することができなさそうです。
「テスト」から発話のところに「こんにちは私の名前は太郎です」と入力して「こんにちはを呼び出す」を押すと右下に日本語でのレスポンスが返ってきます。
まとめ
Echoが無いので日本語での発話の認識率が高いのか?など気になるところはあるけど、日本語化の設定はとてもシンプルでした。
ベンダーからすでにAlexa対応が数多く発表されているので今後盛り上がってくる事が期待できますね。
Echoが届いたら発話して動画を撮りたいと思います。
Let's enjoy Alexa.