Alexa for Business(20)プライベートスキルをAlexa-hostedスキルを使って作成する(1)

記事タイトルとURLをコピーする

https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030133.png

 こんにちは、サーバーワークスのこけしの人、坂本(@t_sakam)です。
 
 前回は、「Tableau Desktopで作成したグラフをTableau Serverで共有する」をお届けしました。作成したグラフをTableau Serverできちんと共有できたので、ひとまずTableau関係の番外編はいったん終了です。
 
 今回からは、Alexa for Business用のスキルを「Alexa-hostedスキル」を利用して簡単に作成していきたいと思います。
 
 「Alexa for Businessは英語のスキルしか使えない」というのが現時点での難点です。せめてAlexaからの返事だけでも日本語にしたいと思ったので、今回は「日本語で返事をしてくれる英語のスキル」を作成したいと思います。
 英語のスキルでAlexaに日本語で返事をしてもらうには、あらかじめ日本語の音声データを用意して、そのデータをコードで指定しなければいけません。今回は「Amazon Polly」というAWSのテキスト読み上げサービスを利用して日本語の音声データを作ります。
 
 実は、Alexa for Business用のスキル作成に関しては、すでにこの連載の第13回第14回で取り上げています。ですが、そのときは「Skill Blueprints」を使ってノンコーティングでテンプレートどおりのスキルを作成しただけでした。
 今回は音声データを指定したり、スキルをカスタマイズしたいので「Alexa-hostedスキル」というものを使って、コードの方も少しだけいじりたいと思います。「Alexa-hostedスキル」を使うとAWSのアカウントを持っていなくてもAlexaの開発者コンソールのみで、ちょっとしたスキルの作成ができてしまいます。「Alexa-hostedスキル」は、いわば「Alexaの開発者コンソールにS3やLambdaなど、Alexaのスキル作成に必要な最低限のAWSリソースがセットでくっついている便利なもの」というイメージです。

Alexa-hostedスキルとは、スキルのバックエンドサービスにAWSクラウドリソースを自動的にプロビジョニングして管理する、新しい機能です。 Alexa-hostedスキルでは、スキルの作成、編集、公開がすべてAlexa開発者コンソールで完結します。

1. Amazon Polly

 まずは、AWSのマネジメントコンソールでAmazon Pollyを選択して、画面を開きます。
※Pollyでの音声データの作成のために、AWSのマネジメントコンソールにログインしますが、今回の「Alexa-hostedスキル」を使ったスキル作成に関しては、AWSのアカウントは必要はありません。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712025941.png

2. 読み上げてほしいテキストを入力する

 画面中央の「プレーンテキスト」タブの入力欄に「こんにちは、世界。」と入力します。入力したら、画面右下の「音声を聞く」ボタンを押してどのように読み上げられるのかを確認します。音声をダウンロードする前に画面右下の「ファイル形式を変更」リンクをクリックします。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712025945.png

3. ファイル形式を変更

 音声ファイル作成後、さらにAlexaに適した形式に変換しますが、いったん出力形式「MP3」、サンプルレート「16000Hz」を選択して、右下の「変更」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712025949.png

4. 音声ファイルのダウンロード

 最後に画面右下の「ダウンロード MP3」ボタンを押します。「speech_2020XXXXXXXX55986.mp3」というファイルがダウンロードできました。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712025954.png

5. 他に必要なテキストがあれば、変換しておく

 あとで必要になるので、スキルを起動したときのウェルカム文やヘルプ時の文等を「こんにちは、世界。」のときと同様に日本語の音声データにしておきましょう。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712054443.png

6. 音声データをAlexaに適した形式に変換

 以下は公式のページからの抜粋ですが、「FFmpeg」というコマンドラインツールが紹介されているので、今回はそれを使って音声データを変換します。

必要に応じて、変換ソフトウェアを使用してMP3ファイルを必要なコーデックバージョン(MPEGバージョン2)とビットレート(48 kbps)に変換してください。この用途に使用できるコマンドラインツールの1つに、FFmpegがあります。 次のコマンドにより、指定したをaudioタグで再生できるMP3ファイルに変換できます。このバージョンでは、サンプリングレートを16000に設定しています。

 以下のコマンドでAlexaに適した形式に音声データを変換をしましょう。
 
ffmpeg -i speech_2020XXXXXXXX55986.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 speech_Hello_World.mp3

 「FFmpeg」のインストールは、使っているマシンに合わせて適宜おこなってください。わたしはMacでHomebrewを使っているので、以下のコマンドでインストールしています。
 
brew install ffmpeg

7. 新しいスキルを作成

 それでは、ここからが本題です。「Alexa-hostedスキル」を使ってスキルを作成していきましょう。
 「スキル名」は「Hello World」としておきます。「デフォルトの言語」は「英語(米国)」を選択します。「1.スキルに追加するモデルを選択」は「カスタム」を選択します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030002.png

8. スキルのバックエンドリソースをホスティングする方法

 「2.スキルのバックエンドリソースをホスティングする方法」で「Alexa-Hosted (Node.js)」を選択します。こちらを選択すると「Alexa-hostedスキル」を利用することになります。Pythonを使いたい方は「Alexa-Hosted (Python)」を選択してください。
 選択しおわったら、画面右上の「スキルを作成」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030006.png

9. スキルに追加するテンプレートを選択

 次のページの「スキルに追加するテンプレートを選択」で「Hello Worldスキル」を選択します。選択しおわったら、画面右上の「選択」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030010.png

10. ビルド完了

 実はこれだけの手順で「Hello Worldスキル」のテストが最低限動く状態のビルドまで完了してしまいます。今回はコードの編集が必要なので、このままではおわりません。ビルドが完了したら、画面上メニューから「コードエディタ」をクリックします。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030014.png

11. コードエディタ

 「コードエディタ」の画面が開きました。まずは今回英語のテキストを日本語の音声データに入れ替える箇所を確認しておきます。ウェルカム文と「Hello World」です。赤枠で囲んでおきました。画面では見えませんが、ヘルプ文等も入れ替えます。
 そして、先程作成した音声データをアップロードするために「Alexa-hostedスキル」に付属しているS3へアクセスしたいと思います。画面左下の「メディアストレージ: S3[0.0/5GB]」リンクをクリックします。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030018.png

12. S3に音声ファイルをアップロード

 S3の画面が表示されました。画面左中央の「アップロード」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030023.png

13. ファイルを追加

 画面中央の「ファイルを追加」ボタンを押します。先程作成した音声ファイル「speech_Hello_World.mp3」を選択します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030027.png

14. アップロード

 画面左中央の「アップロード」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030031.png

15. アップロード完了

 音声ファイルをS3にアップロードできました。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030037.png

16. コードの編集

 コードで音声ファイルを指定していきます。S3上の音声ファイルを指定する際に必要なので、最初にutil.jsを読み込みます。Alexaが読み上げる、通常の英文の文言が書かれていた箇所を音声ファイルに変えていきます。ウェルカム文や「Hello World」と答えていた箇所です。画面上は見えていませんが、ヘルプ文等も変更しましょう。 ※以下の画像は細かくて見えにくいため、クリックすると拡大できるようにしました。

17. デプロイ

 コードの編集がおわったら、画面右上の「デプロイ」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030046.png

18. デプロイ完了

 デプロイが完了しました。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030049.png

19. 呼び出し名

 デプロイがおわったら、画面上メニューの「ビルド」をクリックします。画面左メニューから「呼び出し名」をクリックします。「スキルの呼び出し名」欄に「change me」と仮の名称が入っていますので、これを変更します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030053.png

20. 呼び出し名の変更

 「hello world」と呼び出し名を変更します。すべて小文字で入力しているのは、大文字を入力すると「呼び出し名には、アルファベットの大文字は使用できません。」とエラーが表示されるためです。「hello」と「world」の間に半角スペースを入れて2語にしているのは「 呼び出し名は2名詞以上である必要があります。」とエラーが表示されるためです。
 入力しおわったら、画面上の「モデルを保存」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030058.png

21. モデルの保存

 モデルの保存が完了したら、画面上の「モデルをビルド」ボタンを押します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030103.png

22. モデルのビルド

 モデルのビルドが完了しました。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030107.png

23. テスト

 画面上メニューの「テスト」をクリックします。画面左上で「非公開」と書かれている箇所をクリックして、表示されたプルダウンメニューから「開発中」を選択します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030110.png

24. スキルの呼び出し

 先ほど設定したスキルの呼び出し名「hello world」の前に「open」をつけて、スキルを呼び出します。文字を入力したら、Macの(場合は)「Return」ボタンを押して確定します。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030115.png

25. ウェルカム用の音声

 すると、<Short audio>と表示され「こんにちは。ハロー、またはヘルプといってください。」という音声が流れます。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030120.png

26. こんにちは、世界

 次に「hello」と入力すると、また<Short audio>と表示され「こんにちは、世界。」という音声が流れます。  これで「せめて、Alexaからの返事だけでも日本語にする」という今回の目的を果たすことができました。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030125.png

27. 音声データに変更しなかった場合

 ちなみに、「Alexa-hostedスキル」で「Hello Worldスキル」のコードを変更せず、デプロイした場合は以下のようなテスト結果となります。<Short audio>の箇所が英文になっているのがわかります。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200712/20200712030129.png

まとめ

 今回は「プライベートスキルをAlexa-hostedスキルを使って作成する」の第1回をお届けしました。
 日本語の音声データを作成するためにAWSの「Amazon Polly」は使いましたが、純粋に「Alexaスキルの制作」という点では、Alexaの開発者コンソールだけで事が足りてしまいました。  DynamoDB等は「Alexa-hostedスキル」のリソースに含まれていませんので、データベースを絡めるようなスキルは作成できませんが、ちょっとしたスキルの作成であれば「Alexa-hostedスキル」で十分対応できそうですね!
 また、準備もあまりいらないので「はじめてのスキル作成」にも最適な機能だと思いました!  

 いや〜、「Alexa-hostedスキル」って本当にいいものですね!

坂本 知子(記事一覧)

サーバーワークスのこけしの人(@t_sakam)。2020 APN AWS Top Engineers。