「筋肉ボイス」を動かしてみる
はじめに
Google Homeを遊びたおす会にいってきました。Google Home の活用のお話や、Dialogflow Tipsなど盛りだくさんで大変勉強になりました。中でもちょまど(@chomado)さんの「Microsoft のサーバーレスのサービス Azure Functions (C#) を使って Google Home 対応アプリ「筋肉ボイス」」は、Azure Functionsとの連携をしていて、ソースも公開されている!というので、さっそく試してみました。
環境について
- Windows10
- Visual Studio 2017
- Azure Functions
- Azure Strage
- Dialogflow
chomado/GoogleHomeHackのダウンロード
ちょまど(@chomado)さんのgithubからダウンロードします。
chomado/GoogleHomeHack
VoiceText Web API
VoiceText Web API を使用しますので、「API無料利用登録」にてAPIキーを入手します。APIキーはメールで送られてきます。
- 「はじめる」ボタンクリック - 「無料利用登録」リンクをクリック
Microsoft Azure 管理ポータル
ストレージアカウントの作成
Microsoft Azure の 管理ポータルから、ストレージアカウントを作成します。
「+ リソースの作成」- 「Storage Account」をクリックします。
「ストレージアカウントの作成」にて、各パラメータを設定し、「作成」ボタンをクリックします。
Visual Studio 2017
APIKeysクラスの追加
Visual Studio 2017 で、ChomadoVoiceプロジェクトを開きます。
GoogleHome.cs を開くと一部エラーになっている個所があります。VoiceTextのWebApiKeyを格納するクラスが外されているので、このクラスを追加します。
ソリューションエクスプローラーで、「keys」フォルダを作成します。
Keysフォルダを選択しながら、新しい項目を追加にて、クラスを選択、名前を「APIKeys.cs」とし、「追加」をクリックします。
作成された「APIKeys.cs」に、public変数VoiceTextWebApiKeyを追加してください。VoiceTextWebApiKeyの値は、VoiceText Web API の「API無料利用登録」にて入手したAPIキーを記載してください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChomadoVoice.Keys
{
class APIKeys
{
public static readonly string VoiceTextWebApiKey = "(WebAPIキーを記入)";
}
}
VoiceTextWebAPIClientの追加
「NuGetパッケージの管理」にて、「VoiceTextWebAPIClient」を追加します。
Azureクラウドサービスへ発行する
Azureクラウドサービスへ作成したFunctionを発行します。
ソリューションエクスプローラーにて「発行」をクリック
発行先を選択にて、「新規作成」を選択、「発行」をクリック
App Serviceの作成にて、「リソースグループ」、「ストレージアカウント」をストレージアカウントの作成にて設定した値に設定します。また、ホスティングプランを新規作成します。
※Microsoftアカウントでログインしていない場合は、「アカウントの追加」にてログインを行ってください。
ホスティングプランの構成のうち、「場所」を「Japan East」にします。
App Serviceの作成にて、ホスティングプランが新規作成したものになっていることを確認し、「作成」ボタンをクリックします。
"Publish completed."と表示されたら成功です。
1回目でエラーになるケースがあるようです。もしエラーになったら「発行」ボタンで再発行してみてください。
Microsoft Azure 管理ポータル
Function URL のコピー
作成したFunction App (この例ではFunctionApp20180403015632)を Microsoft Azure の 管理ポータルで開きます。
「f GoogleHome」をクリックします。
「関数のURLの取得」をクリックします。
ポップアップ画面が開くので、コピーをクリックします。このURLを次のDialogflowのwebhookで使用します。メモ帳などで残しておいてください。
Dialogflow
DialogflowにGoogleHomeを使用しているGoogleアカウントでログインし、Agent、Intent、Fulfillment を以下のように設定します。
項目 | 設定値 | 補足 |
---|---|---|
agent名 | 任意 | 例:chomadvoicetest |
Intents | 説明 |
---|---|
anysay | Azure Functionsと連携する音声トリガー |
Fulfillment | 説明 |
---|---|
Webhook | 「Function URL のコピー」でコピーしたURLを指定します |
Intents 「anysay」
項目 | 設定内容 | 補足 |
---|---|---|
Intents名 | anysay | |
Training phrases | * | * に対して @sys.any を指定します |
Responses | Set this intent as end conversation を設定 | 会話の終了 |
Fulfillment | Enable webhook call for this intent を設定 |
Fulfillment
「Function URL のコピー」でコピーしたURLを指定します
Simulator による動作確認
「Integrations」- 「Google Assistant」をクリックします。
Simulatorでアプリ起動後に、「てすと」と送ると、mp3の音声がエラーになってしまっています。これは、ストレージアカウントに保存したmp3ファイルにアクセス権がないためです。
Microsoft Azure の 管理ポータルに戻り、mp3ファイルへのアクセス権を設定します。
Microsoft Azure 管理ポータル
アクセスポリシーの設定
Microsoft Azure の 管理ポータルにて、作成したストレージアカウント(この例では、googlehomestrage)を開き、「BLOB」をクリックします。
mp3レコードの右端の「...」をクリックし、「アクセスポリシー」をクリックします。
「パブリックアクセスレベル」を「BLOB」にして、「+ポリシーの追加」をクリックします。
以下のように設定し、保存ボタンをクリックします。
項目 | 設定値 | 補足 |
---|---|---|
ID | 任意 | 例:readonly |
アクセス許可 | 読み取り | |
開始時刻 | 任意 | 例:2018/4/1 00:00:00 |
有効期限 | 任意 | 例:2018/4/30 00:00:00 |
Dialogflow
Simulator による動作確認
mp3のエラーがなくなりました。
おわりに
Azure Functions を初めて使いましたが、Visual Studioから発行できるし、C#でも記述できるし、これからいろいろ使ってみようと思います。
おまけ
Postman による動作確認
Postman を使用して Azure Functionsの動作確認をすることもできます。(Chrome ウエブストアの方を使いました)
項目 | 設定値 | 補足 |
---|---|---|
呼び出し | POST | |
URL | 「Function URL のコピー」でコピーしたURL | |
Bodyタブ | row を選択 | |
JSON(application/json)を選択 | ||
下記のJSONを指定 |
{
"result": {
"resolvedQuery": "テスト"
}
}
「Send」ボタンで実行します。
Author And Source
この問題について(「筋肉ボイス」を動かしてみる), 我々は、より多くの情報をここで見つけました https://qiita.com/HiroyukiYasui/items/82b6ce2dd142e3199dfd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .