前回に続いて Google Home関係となります。
複数の違う場所に置いたセンサを、個別に読み上げる機能を追加しました。
前回は全て1回にまとめて、音声出力していたのですが。
処理 (webhook 自作api):
前回より、複雑になりますが。
dialogFlowから、webhookを呼ぶ時のリクエスト内に
Google Homeに音声入力した情報が含まれてましたので、
チェックして、設置場所を探し、対象デバイスの更新を取得できる外部APIを呼びます。
音声出力の文章の組立て方法は前回と同様。dialogFlowに出力します。
# 動画、 温度センサの読み上げ
リビング
玄関
室内全部(2箇所) 平均値の計算
*) 前回と同様ショートカット機能も活用しています。( スマホ設定 )
# 実行時のJSONのダンプ
homeに音声入力した内容もふくまれています。
result 内
action : Intents action
resolveQuery : User Says / おそらく音声入力した文
Entities 等、
これらをキーにして、どの音声出力パターンを出力すべきか判定。
今回は、action をつかいました。
# Intentsの追加、追加機能分
今回は、Entities は使いませんでしたが、動作できました。
Fulfillment の下の、Use webhook のチェックを ON にします。
リビング:

玄関:

Integrations
追加した、Intents を 選択して追加。

Test > Update Draft
で反映できました。
# code --python27
webhook リクエストのチェック。分岐処理あたり。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# 日本語 | |
from urllib2 import urlopen | |
import webapp2 | |
import json | |
import os | |
import sys | |
import traceback | |
import com_func | |
#define | |
mDnsName="http://your-dns.com" | |
# | |
class WebhookHandler(webapp2.RequestHandler): | |
def get(self): | |
self.response.headers['Content-Type'] = 'text/plain' | |
self.response.write("this is [GET] url" ) | |
def post(self): | |
clsFunc= com_func.funcClass() | |
json_data = self.request.body | |
obj = json.loads(json_data) | |
sAct = obj['result']['action'] | |
text="" | |
if (sAct == "sen3a_inte"): | |
sURL =mDnsName +"/api-device1" | |
result = json.load(urlopen(sURL)) | |
text = "ok, リビングの温度は、" +str(result["temperature"])+ " 度です。" | |
if (sAct == "sen3b_inte"): | |
sURL =mDnsName +"/api-device4" | |
result = json.load(urlopen(sURL)) | |
text = "ok, 玄関の温度は、" +str(result["temperature"])+ " 度です。" | |
if (sAct == "sen2_inte"): | |
text = clsFunc.get_message(mDnsName ) | |
try: | |
dict = {'speech' : text , 'displayText' :text } | |
sDict =json.dumps(dict) | |
self.response.headers['Content-Type'] = 'application/json' | |
self.response.write( sDict ) | |
except: | |
print "--------------------------------------------" | |
print traceback.format_exc(sys.exc_info()[2]) | |
print "--------------------------------------------" | |
app = webapp2.WSGIApplication([ | |
('/webhook', WebhookHandler ) | |
], debug=True) | |
# 参考の記事
GoogleHomeをスプラトゥーンアシスタントにする #2 Twitterからステージ情報の取得
https://qiita.com/kotatu_km/items/c340027914d690095b66
# 関連
Google Home +IoT連携 ,センサー値の読み上げ機能
http://knaka0209.blogspot.jp/2017/10/gHome-1.html