オンプレ系インフラエンジニアがAzureを勉強する

いつか誰かの何かの役に立つと嬉しいな

Google HomeとAzure Functionsを連携させる

Google HomeとAzure Functionsを連携させて簡単なやり取りができるようにします。

動機

・家に使ってないGoogle Home miniがあったから

成果が目に見えるのでAzureの勉強としてわかりやすく面白そう

 

 今回やること

Azure Functionsと連携させてGoogle Homeに何かをさせようとしたときの土台になりそうなこちらの記事を再現します。

Google アシスタントアプリを開発する時に Fulfillment の先を C# で開発する方法(スマートスピーカーを遊びたおす会での LT 内容) - かずきのBlog@hatena

 

環境

・Windows10

・Azureアカウント(サブスクリプション持ち)

Visual Studio 2017

 

Function APP新規作成(Azureポータル作業部分)

Azureポータルでにログインし、Function APPを新規作成します。

f:id:mitsunooon:20190224200515j:plain

 

必要事項を記入し、作成すると以下のような項目ができます。

稲妻アイコンのものがFunction APPの本体ですね。

f:id:mitsunooon:20190224200641j:plain

 

Function APP新規作成(Visual Studio作業部分)

Function APPの中身を作っていきます。

参考サイトではAzure Functions Core Toolsを使っていますが、

Visual Studio 2017でもできるようなので今回はローカルのVisual Studio 2017で作成します。

 

Visual Studio の新規作成にて、[Azure Functions]>[HTTP trigger]を選択します。

f:id:mitsunooon:20190224201841j:plain

f:id:mitsunooon:20190224201928j:plain

f:id:mitsunooon:20190224203828j:plain


次に各クラスを作成します。

今回必要なのは大きく分けて2種類です。

JSONの送受信部分

GoogleHomeとやり取りをするには、JSON形式で受け取ってJSON形式で返します。

よってその窓口になる部分を作ります。

・メイン関数部分

何を受け取った時に何と返すかを決める動作のメイン部分になります。

JSON送受信部分

基本的には以下のサイトを利用します。

JSONのサンプルが公開されているサイト

Dialogflow Webhook Format  |  Actions on Google  |  Google Developers

JSONを各言語のコードにしてくれるサイト

https://quicktype.io/

<リクエスト側>

上記サイトよりリクエスト側のJSONをコピーしてきます。

f:id:mitsunooon:20190224203114j:plain

 

コピーしたものを変換サイトの左ペインにペーストし、

右ペインで言語とnamespaceを変更します。

今回のnamespaceは「DialogflowWebhook.Requests」です。

f:id:mitsunooon:20190224203306j:plain

 

[Copy Code]でコピーしたら、VisualStudioに戻ります。

クラスを新規追加し、ペーストします。

このときclass名が「Welcome」になっているので「DialogflowRequest」に変更します。

f:id:mitsunooon:20190224203944j:plain

 

<レスポンス側>

リクエスト側と同様です。

コピーしてくるJSONのサンプルだけ異なります。

f:id:mitsunooon:20190224204958j:plain

 

クラス名は「DialogflowResponse」です。

f:id:mitsunooon:20190224205232j:plain

 

 メイン関数部分

参考サイトよりコピーしました。

f:id:mitsunooon:20190224205655j:plain


新規で作成したときデフォルトで「Function1.cs」が作成されていますが、今回は使用しないのでプロジェクトから外しています。

 

発行

Azureポータル上で作成したFunction APPに発行します。

発行先はすでに作成していますので、[既存のものを選択]を選びます。

f:id:mitsunooon:20190224210432j:plain

 

f:id:mitsunooon:20190224210520j:plain

 

発行が完了するとAzureポータル上で関数として表示されます。

f:id:mitsunooon:20190224210733j:plain

 

[関数のURLの取得]にてこのFunction APPを呼び出すためのURLをコピーします。

f:id:mitsunooon:20190224210911j:plain

 

Dialogflowの設定

Dialogflowの基本的な操作は以下を参考にさせていただきました。

Dialogflowでチャットボットをつくってみる - Qiita

Dialogflow入門 - Qiita

 

今回Dialogflowで触る部分は以下です。

<新規Intents作成>

①新規Intentsの名前

 この名前はメイン関数で指定してる名前になります。

②Training phrasesにGoogle Homeに問いかける文言を設定する

③Fulfillmentを[Enable]にする

f:id:mitsunooon:20190224212414j:plain

f:id:mitsunooon:20190224212437j:plain

 

 <Fulfillmentの設定>

FulfillmentにAzureポータル上でコピーしたURLをペーストします。

f:id:mitsunooon:20190224212949j:plain

 

動作確認

Google Assistantに接続し、動作確認します。

f:id:mitsunooon:20190224213141j:plain

 

Intentsで登録した文言を送ると関数で指定した文言が返ってきますね!

f:id:mitsunooon:20190224213454j:plain

 

ちょい足し

Intentsを増やして、返答パターンを増やしてみます。

 

<Dialogflow側>

 新規Intensを作成します。

f:id:mitsunooon:20190224213649j:plain

 

<関数側>

元がif構文なのでelse ifで分岐を増やします。

f:id:mitsunooon:20190224214115j:plain

 

コードを変更したら上書き発行します。

 

動作確認します。

f:id:mitsunooon:20190224214237j:plain

2パターンの返しができるようになりました!

 

 

 以上をベースにもう少し複雑なやり取りができるようにしていきます!