#教學 用 LINE 來控制智慧家電吧

megapx
大家覺得 LINE 是什麼類型的 app? 通訊軟體? 垃圾廣告軟體? 嗯絕對是垃圾廣告軟體XD 那如果我說 LINE 也可以控制你家的家電呢? 當然是在有架設 HA 的情況下 不只有 LINE,甚至 Facebook Messenger、Twitter、Telegram、Skype 都可以 AI、NLP、Chatbot、ML、DL 可以說是近年來很火紅的幾個關鍵字 為什麼 Google Assistant 自從問世以來一直都是最強大的語音助理,因為在上述那些關鍵字的領域中 Google 都是佼佼者 今天要來介紹一下 Google 的自然語言平台 - Dialogflow
megapx
Dialogflow 最早的前身為 Speaktoit,後來在 2014 年改名為 api.ai,在 2016 年被 Google 買下,2016 年 GA 問世了,api.ai 作為其後盾之一用來開發 GA 的 Actions,而在 2017 年再改名為現在的 Dialogflow Dialogflow 與 Actions on Google 深度的結合,就算你從沒寫過程式,你也可以在半小時內完成你自己的 Google Assistant 語音小程式/遊戲 Dialogflow 可以說是 GA 最強大的外掛了 那這 Google 的平台又跟 LINE 有什麼關係? 其實只要建好一個 Dialogflow 的專案,再連結到 LINE Bot,完全不用修改就可以直接用同一個專案 好了,正式進入教學~ 我估計有些人會因為標題說 LINE 可以控制家電所以就點進來了 這邊我要先說明清楚不是單單一個 Dialogflow 跟 LINE Bot 就能讓你控制家電,這是利用 HA 整合 Dialogflow 得以使 LINE Bot 透過 Dialogflow 去取用 HA 上的所有功能 然後本篇教學真的很長很長...打到很想死,所以我先提一下在本篇教學涵蓋了基礎使用教學、進階玩法還有如何把作品分享給別人使用 (貼心提醒,因為 Dcard 會壓縮圖片畫質,所以如果在 Dcard 網站上看圖片很模糊,可以將圖片在新頁面開啟後將網址前綴 imgur.dcard.tw 改成 imgur.com,這樣才是沒有壓縮過的原圖) *****注意***** 你的 HA 版本要更新至 0.98 *****注意***** 首先,要讓 HA 串接 Dialogflow,跟我上一篇串接 GA 的前提一樣,需要有自己的網域或者是使用 DuckDNS,再不然就是花錢買 Home Assistant Cloud 這邊就不重複教學了,有需要的人可以到上一篇看
能從外網連到你的 HA 後,點選側邊欄的設定
megapx
點選 "整合"
megapx
點擊右下 +
megapx
點選 "Dialogflow"
megapx
點擊 "SUBMIT"
megapx
HA 會給你一組 URL,請把它複製起來後貼到記事本,因為在按下 FINISH 後你再也無法在這個頁面看到這組 URL 了,你只能刪除整合再重來
megapx
點下 FINISH 後在整合頁面就能看到 Dialogflow: Dialogflow Webhook
megapx
接下來我們需要在 configuration.yaml 中新增 intent_script 來讓 Dialogflow 接收命令 假設我要讓 Dialogflow 呼叫名為 LightsOn 的 intent,呼叫後回覆我 Roger that! (這個 intent 名字很重要,等等會用到)
megapx
以上只是基本的對話而已 那如果我要呼叫這個 intent 的同時也控制 HA 中的家電,如電燈,那就要加上 action,可以發現 action 的寫法跟自動化一模一樣,也可以執行多個 action
megapx
重開 HA 後,HA 設定的部分結束了,接下來換 Dialogflow 的設定 進入
然後用 Google 帳號登入
megapx
megapx
點選 "允許"
megapx
1. 自動會帶入 Taiwan 2. 勾選同意服務條款 3. ACCEPT
megapx
點擊 CREATE AGENT
megapx
選擇預設語言與時區,這邊先以英文做為示範,之後可以選擇副語言 而 Dialogflow 是支援中文的如果你只想用中文,你可以選擇 Chinese (Tranditional) – zh-tw
megapx
點選側邊欄 "Fulfillment"
megapx
1. 啟用 Webhook 2. URL 中填入剛剛請大家貼在記事本的 URL
megapx
網頁拉到最下方點擊 SAVE
megapx
點選側邊欄 Intent 的+
megapx
在上方輸入這個 Intent 的名字,建議可以跟剛剛在 intent_script 中設定的 intent 名字一樣
megapx
Training phrases 中填入當使用者說了什麼關鍵詞或句子會觸發這個 Intent,輸入完按 enter 可以新增多個詞或句子 這邊我用開燈來示範,所以就是 Turn on the lights
megapx
Action and parameters 這邊最重要,須填入剛剛在 intent_script 中設定的 intent 名字,不然 Dialogflow 會不知道要找哪個 intent 去觸發動作
megapx
Response 中填入當 Dialogflow 接收到使用者命令後卻無法跟 HA 溝通時要回覆的句子,你可以輸入 Cannot connect to Home Assistant 或是任何句子
megapx
最後這裡也是重點,點開 "Fulfillment",開啟 Enable webhook call for this intent 凡事要跟 HA 溝通的 Intent 都必須要開啟此選項,不然 Dialogflow 不知道要去呼叫 HA 然後點擊右上方 SAVE
megapx
這時你可以在右上方的 Try it now 中輸入你設定的觸發句子,以我剛剛的例子就是 "Turn on the lights",按下 enter 後如果沒有設定錯誤,Dialogflow 會連結至 HA 去執行 intent_script 中的 LightsOn 這個 intent,然後我所設定的燈會被打開
megapx
以上是在 Dialogflow 中測試,點選 See how it works in Google Assistant. 後會開啟 Actions Console,在這裡你可以在網頁上模擬你寫的 GA Action 點擊 Talk to xxxxx,這邊你會顯示 my first app 還是什麼東西,不要緊,等等會告訴你怎麼改名稱
megapx
按下麥克風圖示
megapx
允許網頁存取麥克風,然後說出觸發句子,比如說 Turn on the lights
megapx
模擬的 GA 也可以執行正確的 intent
megapx
當然,在手機或 Google Home 上的 GA 同樣也可以透過 Talk to xxxx 來執行你設定的 Action
megapx
Intent 的觸發沒問題後點選上方 Develop 頁籤 在 Invocation 底下可以修改這個 Action 的名稱,還有語音包,要注意命名時不要用到 GA 的保留字詞,比如像 "Google" 或 "Assistant" (我命名 Home Assistant 時也有跳出警告不能用保留字 Assistant,但他還是讓我過了)
megapx
在 Theme customization 中可以設定該 Action 執行後介面的主題配色
megapx
Action 測試完後再回到 Dialogflow 網頁 我在前面有說可以選擇副語言,用多種語言都能跟你的 Action 溝通 點選你的 Agent 的設定齒輪圖示
megapx
點選 Languages 頁籤,Select Additional Language 下拉選單中選擇 "Chinese (Tranditional) – zh-tw"
megapx
但我個人不是很喜歡在同一個 Agent 中設定多種語言,因為 intent 會變成兩種語言 "共用",當你預設是英文並已經設定好觸發詞為 "Turn on the lights" 的 intent,切中文後修改觸發詞成 "開燈",這時切回去英文會發現英文的 intent 觸發詞也被改成中文了 所以有兩種解決方法,一種是中英文的 intent 切開,中文版的歸中文版,英文版的歸英文版 向下圖這樣,GetTemperature 為英文的 intent,GetTemperature_zh 為中文的 intent,所對應的 Action 也分別為 GetTemperature跟GetTemperature_zh
megapx
另一種是我個人使用的方法,乾脆切成不同的 Agent,HomeAssistant 是純英文的 Agent,HomeAssistantZH 是純中文的 Agent 但後續會要維護兩個 Agent,所以要考慮清楚
megapx
接下來整合 LINE 點選側邊欄 "Integrations" 後點選 LINE
megapx
網頁先不要關,點擊下面 LINE Dev 網址
點擊 "Log in"
megapx
使用LINE帳號登入
megapx
megapx
登入後點擊 "Create New Provider"
megapx
Provider name 中輸入任意名稱後點 "Confirm"
megapx
點擊 "Create"
megapx
點選 Messaging API 的 "Create Channel"
megapx
App icon 中點擊 Register 幫你的 LINE Bot 添加圖示
megapx
1. App name 給予你的 LINE Bot 一個名字 2. App description 可隨意輸入 3. Category 與 Subcategory可任意選擇 4. Email address 填入你的信箱
megapx
網頁往下拉後 Privacy Policy URL 與 Terms Of Use URL 可以填任意網址,也可以填 HA 的外部網址,然後點 "Comfirm"
megapx
點擊 "同意"
megapx
勾選同意兩個使用條款後按 "Create"
megapx
你已經成功建立了一個 LINE Bot,接下來要將它連結至 Dialogflow 點選剛剛建立的 LINE Bot
megapx
網頁往下拉後點擊 Use webhooks 的 "Edit"
megapx
選取 "Enabled" 後按下 "Update"
megapx
點擊 Webhook URL 的 "Edit"
megapx
將 Dialogflow 網頁上的 Webhook URL 貼至 LINE 網頁上的 Webhook URL,記得把多餘的 https:// 給移除
megapx
先將 Dialogflow 網頁上的 LINE 給開啟 再將 LINE Dev 網頁往上拉,把 Channel ID 跟 Channel secret 貼至 Dialogflow 的 Channel ID 跟 Channel secret
megapx
將 LINE Dev 網頁往下拉,點擊 Channel access token (long-lived) 的 "Issue"
megapx
可以設定24小時隨你高興,再按下 "Issue"
megapx
將產生的 token 貼至 Dialogflow 的 Channel Access Token 再點擊下方的 Start
megapx
他會開始檢查連線,這樣 Dialogflow 這邊的設定就大功告成
megapx
我們再回到 LINE Dev 的網頁,將網頁往下拉,點擊 Auto-reply messages 的 "Set message"
megapx
網頁會跳至官方帳號的管理頁面,此時應該會自動選擇你剛剛建立的 LINE Bot,如果沒有,點左上方的下拉選單 "所有帳號" 來選擇你剛剛建立的 LINE Bot 點擊右上方的 "設定"
megapx
在回應設定中啟用 Webhook
megapx
點擊 "自動回應訊息設定"
megapx
將狀態設定成 "關閉"
megapx
點擊 "停用"
megapx
再回到 LINE Dev 網頁,將網頁往下拉會有個 QR code,使用此 QR code 或下方的 Basic ID 都可以加入你製作的 LINE Bot
megapx
使用手機將你製作的 LINE Bot 加入好友後他會先傳一個歡迎訊息給你 接下來你可以輸入你在 Dialogflow 上設定的觸發句子,送出後看看是否有正確的執行 intent
megapx
你可能曾經看過別人的官方帳號有精美的六格圖文選單,那我們能不能建立圖文選單捷徑可以直接控制家電? 當然可以 點擊 LINE 官方帳號管理網址
選擇你的 LINE Bot
megapx
側邊欄點選 "圖文選單",再點擊 "建立"
megapx
1. 給他一個標題 2. 給他使用期間,記得日期與時間都要選擇
megapx
點擊 "選擇版型"
megapx
這邊示範六宮格的圖文選單,所以選取大型的六格選單,然後按套用
megapx
接下來我們要上傳選單的背景圖片,但我們怎麼知道要上傳什麼要的背景圖? 大小尺寸呢? 別擔心,LINE 官方都有幫你準備好範例尺寸 點擊 "設計規範"
megapx
點擊 "下載版型規範" 後就可關閉此彈跳視窗
megapx
將下載回來的檔案解壓縮後會看到官方都有提供所有尺寸的版型
megapx
看你想要用什麼工具加工範例版型
megapx
加工好背景圖後回到 LINE 官方帳號管理網站上傳背景圖片 選擇你的背景圖片後上傳
megapx
上傳完成後依照 A、B、C、D、E、F、G 各個區域設定按下去後要傳送什麼文字 類型選 "文字",底下的文字輸入框就填入 Dialogflow 的觸發句子
megapx
全都設定完後按下儲存
megapx
你的精美圖文選單就已經上線了!
megapx
我們到 LINE 裡看看,點擊圖示可以直接代入 Dialogflow 的觸發句子,省去了打字的時間
megapx
先前有寫教學如何串接 LINE Notify 作為 HA 的通知管道
那現在我們做了一個 LINE Bot,來把他們兩個放到同一個群組吧,同時可以收通知又可以控制家電 點擊 LINE 官方帳號管理網址
選擇你的 LINE Bot
megapx
點選右上方設定齒輪
megapx
將網頁往下拉,選取 "接受邀請加入群組或多人聊天室"
megapx
點選 "變更"
megapx
接下來你就可以邀請這個控制家電的 LINE Bot 到你現有的 LINE Notify 群組中了 你也可以把家人加進來,像這是我跟女友的智慧家庭群組
megapx
以上基礎教學結束 ====================================== 以下進階玩法開始 好了,你已經可以用 LINE 來控制家電了 但是... 只有這樣嗎? 當然不是 Dialogflow 能取用的是 HA 上所有的東西,也就是說誰在不在家、窗戶有沒有關、室溫幾度、95 油價多少、天氣狀況如何、空氣品質好嗎,諸如此類都可以透過 GA 跟 LINE 來查詢 而 HA 又能跟 IFTTT 串聯,所以進階案例是你可以用自己做的 LINE Bot 記帳,然後透過 IFTTT 將帳務資料存在 Google 表單中 別人的寫的 LINE Bot 只有單一功能,如 "記帳雞" 他就只有記帳的功能,但你的 LINE Bot 是全能的XD 還有一種使用案例,GA 有提供 Routine 的功能,藉由設定好的 Routine,一句指令就可以同時完成很多事情,很方便沒錯,但不是每次都那麼方便 試想設定了一個 "到家" 的 Routine,可以同時打開電燈、電扇、冷氣、電腦,但我不一定回家後都要打開電腦,這時候就麻煩了,GA 不會問你是否要執行某個動作,他只是照著 Routine 裡設定的東西走 透過 Dialogflow 我們可以製作一個 "會詢問你" 的語音助理,就像鋼鐵人的 Jarvis 一樣,但這就是進階使用方法了 我們從簡單的如何取用 HA 上裝置狀態開始,intent_script 中的 text 不只可以使用一般文字,也可以使用 template 將數值自動帶入 比如說我想要知道房間溫度幾度, intent_script 可以這樣寫
megapx
如果不確定 template 有沒有寫對,可以到 Developer Tools 的 TEMPLATE 中去驗證,在左方輸入你的 template,右方會顯示該 template 所回傳的值,如果有錯誤紅字就代表寫錯了
megapx
可以使用 template 就代表可以玩 if ... else 以及迴圈,官方就有一個 "尋找家人" 的範例 我們就拿官方範例來說明 在 Dialogflow 中新增一個名為 Locate 的 Intent
megapx
先設定 Action and parameters,Action 名稱取作 LocateIntent PARAMETER NAME 填入 User ENTITY 先輸入一個 @ 然後選擇 "@sys.given-name" VALUE 填入$User 輸入這些參數是為了讓 HA 知道我們究竟是要問 "哪個人",User 這參數之後會丟給 intent_script 去判斷
megapx
Training phrases 中填入觸發詞 這邊要注意,當你輸入完一句話後,在人名的地方點兩下,會跳出選擇列表,選擇@sys.given-name:User
megapx
最後別忘了要給他一個無法跟 HA 溝通時要回覆的句子,還有要開啟 Enable webhook call for this intent,然後 SAVE
megapx
回到 configuration.yaml 設定 intent_script 這邊使用到迴圈,將 HA 上每個人的位置先找出來後,再根據我們提問的人名挑選出來,如果提問的人名有在 HA 上,就回答 "xxx is at xxx",如果提問的人名沒有在 HA 上,就回答 "I am sorry, I do not know where xxx is." 如果 HA 上都沒有任何人,那就回答 Sorry, I don't have any trackers registered.
megapx
之所以可以挑選出人名就是因為我們剛剛在 Dialogflow 上新增 Intent 時已經告訴他要拋 User 這個變數過來給 HA 了 把 template 中迴圈部分放到 Developer Tools 中去執行,可以看到 HA 上所有人的狀態都會顯示出來
megapx
這個尋找家人的 Action 實際執行起來結果就如下圖
megapx
會玩變數後,我們再來玩 Dialogflow 的物件與同義詞代換 (Entities) 這官方剛好也有舉例,比如說今天下一個命令是 "開燈",但我並沒有明確的說要開哪個燈或是開哪個區域的燈,這時我們可以讓語音助理主動來問我們 "要開什麼燈?" 如果我另外下的命令是 "廚房燈",但是沒有說要開還是關,這時我們也可以讓語音助理主動來問我們 "開還是關?" 好,知道情境就來動手做吧 這次要先從側邊欄的 Entities 開始,按下 Entities 的 + 上方輸入這個物件的名字
megapx
左邊紅框中輸入燈的狀態,有開跟關,右邊紅框中各別輸入他們的同義詞(可替換的詞) 英文小教室: 這邊的官方的範例文法是錯的,英文中開關燈只有 "turn on" 跟 "turn off",on 跟 off 指的是 "持續有電" 跟 "沒電" 的狀態,而 "turn up" 跟 "turn down" 是指 "增加" 及 "減少",像是要減少燈的亮度時我們會說 "Turn down the light"
megapx
再來新增一個 Room 的物件 左邊輸入區域的名稱,右邊輸入同義詞,比如說家中浴室跟廁所都是同一間,所以要開燈時我們可能會有兩種情況 "開廁所燈" 跟 "開浴室燈",這兩者其實是同一件事 當然也可以很不正經的填入 "我的耍廢小天地"
megapx
有了這兩個物件後就可以來新增 Intent 了 新增一個 LightsOnOff 的 Intent
megapx
一樣先定義好變數再來填上方的觸發句子 REQUIRED 先打勾,讓系統知道這個變數是必須的,不然當你沒說哪個房間要開燈時系統不會主動詢問你 PARAMETER NAME 輸入參數名,各為 Room 以及 OnOff ENTITY 先輸入一個 @ 讓他自動帶出候選項目,分別選取剛剛新增的物件 VALUE 輸入變數,各為 $Room 以及 $OnOff PROMPTS 點選 "Define prompts" 輸入當你的命令中沒有必需的關鍵字時,系統會怎麼問你,比如說你沒說哪間房間,系統就會問你 "In which room?"
megapx
megapx
回到 Training phrases 中填入觸發詞 輸入完觸發句子後,在開、關的單字上點兩下選擇 @OnOff:OnOff,然後在區域的單字上點兩下選擇 @Room:Room
megapx
megapx
megapx
最後別忘了要給他一個無法跟 HA 溝通時要回覆的句子,還有要開啟 Enable webhook call for this intent,然後 SAVE
megapx
再回到 configuration.yaml 設定 intent_script,以下是官方的設定方式,我會一一解釋
megapx
1. 第4行中使用了 {{ Room }}、{{ OnOff }} 這兩個從 Dialogflow 拋過來的變數,當你的命令是 Turn the living room lights on,那 {{ Room }}、{{ OnOff }} 分別會代換成 living room 跟 on 2. 第6~8行是執行通知的動作,當接收命令後第一個動作是發 Pushbullet 通知有人開關燈,一樣的可以用 Dialogflow 拋過來的變數,但是必須用 data_template 的形式 data_template 我在先前 HA 串接 LINE 通知時有提過,可以過去看看
3. 第9~16行是一組 action,但我們拆開來看 第9~14行使用 if else 的 service_template,這種用法相當自由,因為一般我們在使用 HA 的 service 時不是 light.turn_on,不然就是 light.turn_off,都是單一 service 使用 service_template 可以依據拋過來的變數來決定要用哪個 service 如果 OnOff 這變數拋過來的值是 on,service 就用 switch.turn_on 第15、16行使用 data_template 可以將拋過來的變數自由代換,但是後面又用了一個 {{ Room | replace(' ', '_') }},這是因為在 HA 上所有的 entity_id 不可能會出現空白,所以當你的區域名有空白,拋過來的變數會自動把空白替換成底線 _ 當你的命令是 Turn the living room lights on,那 living room 會變成 living_room 至於這個 Action 實際執行起來結果如下圖,但因為我沒實際寫 intent_script,所以會出現 This intent is not yet configured within Home Assistant,大家可以玩玩看
megapx
那我說的記帳~ 該怎麼做呢 很多記帳軟體都會讓你選擇該筆錢是屬於食衣住行育樂中哪個類別的消費, 我當初的規劃是只要輸入 "看電影",就會把該筆消費歸到 "樂" 的類別中,這種聰明的記帳助理,而且可以用自然語言做命令,所以不必用制式的命令 "早餐35元",可以說 "今天早上我吃了35元",甚至可以記錄消費了什麼,比如說 "我今天晚上吃了牛排花了250",對,就是這麼的彈性 要做到以上情境,食衣住行育樂的物件都要分開設定,我們先做食就好 先來建立 "食" 的物件,因為操作跟上方範例都相同,所以我就不多加解釋了
megapx
建立好物件後來建立 Intent
megapx
先設定 Action and parameters,Action 名稱取作 FoodSpending 這邊設定的邏輯是分成三種類型 1. 哪一餐 2. 花多少 3. 吃什麼 第1跟2為必須,第3可不紀錄,所以只有前兩項需要勾選 REQUIRED 1. 哪一餐: PARAMETER NAME 填入 FoodSpending ENTITY 先輸入一個 @ 然後選擇剛剛建立的物件 @FoodSpending VALUE 填入 $FoodSpending PROMPTS 填入 "哪一餐?" 2. 花多少: PARAMETER NAME 填入 Money ENTITY 先輸入一個 @ 然後選擇 @sys.number VALUE 填入 $Money PROMPTS 填入 "多少錢?" 2. 吃什麼: PARAMETER NAME 填入 FoodDetail ENTITY 先輸入一個 @ 然後選擇 @sys.any VALUE 填入 $FoodDetail
megapx
回到 Training phrases 中填入觸發詞 輸入完觸發句子後 1. 在 "哪一餐" 的詞上點兩下選擇 @FoodSpending:FoodSpending 2. 在 "吃什麼" 的詞上點兩下選擇 @sys.any:FoodDetail 3. 在 "花多少" 的詞上點兩下選擇 @sys.number:Money
megapx
megapx
megapx
megapx
最後別忘了要給他一個無法跟 HA 溝通時要回覆的句子,還有要開啟 Enable webhook call for this intent,然後 SAVE
megapx
再回到 configuration.yaml 設定 intent_script 所有的消費資料都會存在 Google 表單上,那要怎麼讓 HA 跟 Google 表單互動? 雖然 Google Sheets 有 API,也有人在 HA 論壇上分享要怎麼用 API 來串接,但那太麻煩了,我們改用 IFTTT 的方案 我們先來解決 IFTTT 的問題,如果你的 HA 已經有設定 IFTTT 的 API Key 了,那這步驟你可以跳過了,但這步驟後的新增 IFTTT Applet 還是要做 先到
新增 Webhooks 到你的帳戶,然後點右上方的 Documentation
megapx
紅框中是你的 API Key,將他複製起來
megapx
在 configuration.yaml 中新增 ifttt: 跟你的 API Key
megapx
回到 IFTTT,點選你頭像並選取 "Create",我們要新增 Applet 讓 IFTTT 能接收 HA 來的事件,然後去 Google 表單中新增我們的記帳資料
megapx
點選+This
megapx
搜尋框內打上 "web" 後選取篩選結果中的 Webhooks
megapx
選取唯一的 "Receive a web request"
megapx
Event Name 填入 "食",可替換成其他類別的消費
megapx
點選+That
megapx
搜尋框內打上 "google" 後選取篩選結果中的 Google Sheets
megapx
選取 "Add row to spreadsheet"
megapx
1. Spreadsheet name 填入 Google 表單的名稱 2. Formatted row 將 {{OccurredAt}} ||| 給刪除,只留下圖中的 EventName、Value1、Value2、Value3 3. Drive folder path 可以讓他自動帶預設值 然後按下 Create action
megapx
將 Receive notifications when this Applet runs 給關閉後按 Finish
megapx
megapx
新增完 IFTTT 後就可以繼續寫 intent_script 了 text 的部分我就不解釋了,就是代換拋過來的變數 action 部分比較特別,剛剛在新增 IFTTT 的 applet 時 Google Sheets 中可以自由帶入 value1 ~ value3 三個值,包括 Webhooks 事件本身就有四個欄位可以使用 第 8 行為事件名稱,就是剛剛在 IFTTT 上的 Event Name 第 9 行為第一個可以自行運用的值,我們使用 Dialogflow 拋過來的值,{{ FoodSpending }}:{{ FoodDetail }} 就是代表 "哪一餐" : "吃什麼" 第 10 行為第二個可以自行運用的值,填入 {{ Money }} 代表 "花多少" 第 11 行為第三個可以自行運用的值,這裡我們帶入 HA 的日期時間感應器的 "日期感應器",你需要在 sensor 中新增 time_date
megapx
time_date sensor 的設置:
megapx
Dialogflow、IFTTT、intent_script 都設置好了,可以來測試了
megapx
而在 Google 表單中的紀錄會像下圖這樣
megapx
最後一個範例,在上方我有提到 GA 提供 Routine 的功能不是那麼的彈性,他只能按照你設定的走,執行 Routine 時開就是開關就是關,不能讓你選擇 那我們就來做一個能選擇的 Routine 如何? 假設今天情境是我回到家後固定會開燈、開冷氣,但是不一定要開電腦,要不要開電腦需經過我同意後才執行 來建立一個回到家了的 Intent,文字說明會越來越少,因為跟上方範例一樣
megapx
megapx
建立好 Intent 後,這邊要介紹 Dialogflow 的一個重要功能 "follow-up intent" 一般來說每個 Intent 都是獨立的互不相干,但 Follow-up intent 是一個階層式的 intent,下層的 Intent 跟 上層的 Intent 是有關係的,上層的 Intent 甚至可以輸出值給下層的 Intent 使用,利用 follow-up intent,你就可以做出一個可以互動交談的 Bot 滑鼠游標移到剛剛新增的到家 Intent 點選 "Add follow-up intent"
megapx
在下拉選單中選擇 yes
megapx
這樣就成功建立了一個 "是" 的回答 intent
megapx
同樣的在到家 Intent 點選 "Add follow-up intent" 這次要新增 no 的回答 intent
megapx
是跟否都新增完成 我們先來編輯 "是" 的回答,點擊 "IAmHome - yes"
megapx
可以看到上方 Intent 名稱跟 Training phrases 都幫你設定好了 Training phrases 中光是 "是" 的回答就有5頁,這些都是同義的句子
megapx
Action and parameters 也幫你設定好了,等等 intent_script 就直接用這個名稱就好
megapx
最後別忘了要給他一個無法跟 HA 溝通時要回覆的句子,還有要開啟 Enable webhook call for this intent,然後 SAVE
megapx
再來編輯 "否" 的回答 跟 "是" 的回答一樣有5頁的同義句子
megapx
這邊的 Responses 就不是要輸入無法跟 HA 溝通時要回覆的句子,因為在我們要達成的情境中,如果我說不要開電腦,那 Dialogflow 就不用拋令另過去給 HA 了,所以這邊要填的是單純的語音回覆,比如說 "好的,我知道了" 之類的 然後開啟下方的 Set this intent as end of conversation,每一個 Actions 都是 GA 上的 "應用程式",跟電腦手機一樣,有 "進入" 應用程式,就有 "離開" 應用程式,當開啟了這選項,執行完這個 Intent 後,GA 就會離開當前的 Action 最後記得 SAVE
megapx
快完成了,來建立 intent_script,這邊只有兩個 intent_script,一個是到家的 IAmHome,另一個是 "是" 回答的 IAmHome.IAmHome-yes 我們剛剛說的情境是到家會開燈、開冷氣,是否開電腦需詢問,所以在到家的語音詞句中就要填入詢問句 Do you want me to turn on your computer?
megapx
那成果如何呢?
megapx
以上進階玩法結束 ====================================== 最後的最後,大家可能會問,那這只能自己用嗎? 其他人能不能使用? 畢竟家裡的智慧家電是全家人都會用到的東西,答案是可以的! LINE 的部分比較簡單,你只需要將你官方帳號的 QR code 給你家人掃,或請他們搜尋 ID,他們將你的官方帳號加入好友就可以直接使用了 但是 GA 就比較麻煩些,有限制人數 20 人而且需要等待 3 小時 開始佈署 GA 給其他使用者吧 先回到 Dialogflow 的頁面,然後點選 "See how it works in Google Assistant."
megapx
在 Action 測試頁面上方點選 Deploy 頁籤
megapx
進入佈署前置作業,我們一項一項來
megapx
Short description 跟 Full description 都可以隨便填
megapx
Sample invocations 是讓別人知道該怎麼呼叫你的 Action,可以新增多個呼叫方法
megapx
Images 中需要幫你的 Action 上傳一個小圖示,注意尺寸為 192*192
megapx
Developer email 填入你的 E-mail
megapx
Privacy Policy 網址可以隨便填,也可以填你的 HA 外部網址
megapx
點開 Additional Information Category 選擇 Home control For Families 跟 Alcohol and Tobacco 都選 No
megapx
設定完後拉回最上方儲存
megapx
點選側邊欄 "Surface capabilities" 全部都選擇 No,然後儲存
megapx
點選側邊欄 "Release" 點開 Alpha 的部分,然後點擊 "Manage Alpha Testers",我們要將家人的 Google 帳號加入測試白名單
megapx
上方的 Opt-in link 你可以先複製起來,等到你的 Action 正式上線後,家人需要透過此連結才能連結你的 Action,這 Opt-in link 就等同於 LINE 官方帳號的 QR code 下方文字輸入框中要輸入家人的 Google 帳號,在最下方會顯示已經被加入白名單的 Google 帳號
megapx
白名單設定好後就可以回到 Release 頁面按下 "Submit for alpha"
megapx
勾選兩個確認項後按下 Submit 這對話框中也有提及佈署需要幾個小時才能完成
megapx
提交佈署後狀態會是 Deploying 佈署中,就慢慢等他佈署吧
megapx
這邊順便說明 Alpha、Beta、Production 的差別 .Alpha 佈署不需要經過 Google 審核,人數限制 20 人 .Beta 佈署需要經過 Google 審核,人數限制 200 人 .Production 佈署需要經過 Google 審核,審核過後視為正式上架且沒有人數限制 另外,我們自己在用 Action 時都會聽到 "Here's the test version of xxxx",中文版則是 "下面是xxx的試用版",對,很煩我知道,但是很不幸的這是不能改的,你一定會聽到 "test version" 或 "試用版",然而身為 Alpha 使用者的家人們在使用時是不會出現這個詞的
megapx
這次的教學文到這裡,希望有人能看到這一行腦袋還是清醒的XD
愛心
跪
74
19
全部留言