發表文章

目前顯示的是有「line」標籤的文章

[Solved] Bot 同意資料取得的網頁一直跳出

圖片
5/31 Line 全面更新 7.5.0 之後,透過 Messaging API 在 Group 裡,總算可以取得發言人的 User Id。 我一直很好奇,在這之前 Bot 在 Group 裡誰說話都分不清楚的情形下,能發展出什麼應用,因為對 Bot 來說都是同一 Group Id 在說話,那跟對單一 User 對話有什麼不同? 在 7.5.0 版本上路之後,一切都有了新的開始;不過當你加入群組之前,可能已經有 Bot 在裡面,而你在不知情的情形下,加入了有 Bot 的群組裡,而這個 Bot 可以取得你的 User Id,這對於注重隱私的我們來說,這可是大忌,所以眼尖的各位一定發現了,Line 會自動跳出網頁,要求你同意將帳號資訊分享給 Bot,如果你不同意,Line 就會一直跳針似的,在你每次與 Bot 相遇的時候,一直問你一直問你。 好啦!其實我沒有不同意,但是 Line 就是一直跳出來問我,按了同意也還是再問!開了幾十個網頁都在問同不同意,煩死了。 花了點時間了解一下原因,原來是因為預設瀏覽器是 Firefox 的關係,有在使用 Firefox 的各位,一定有發現,當你在其他 app 點選開啟網頁的時候,Firefox 會開在後台 (background),不會帶到前景 (foreground),再按一次網頁連結,才會把 Firefox 叫出來。 就是因為這個原因,導致 Line 同意頁面的功能失效。 怎麼辦呢?請到應用程式裡,把預設瀏覽器改成其他瀏覽器吧!填完同意書再改回預設瀏覽器吧!我還以為是 Line 出包了,大家的同意書都是寫假的。 給跟我有一樣情形的朋友,參考參考。 Line Messaging API: Obtaining user consent

migrate line bot webhook from python2 to python3

總算把原本用 python2 寫的 line bot 改成 python3 了。 有鑑於 python3 的成熟度越來越高,加上許多 library support; 以及目前正悄悄進行的 line bot 新功能 (先賣個關子)。 索性把整個平台轉到 python3 上, 這邊標注一下遇到那一些 python2、python3不同的地方(一小部份) Python2.7 Python3.4 備註 / / → int / → float; // → int urllib urllib.quota urllib.parse.quota urllib urllib.urlopen urllib.request.urlopen urllib urllib.urlencode urllib.parse.urlencode sys sys.maxint sys.maxsize The sys.maxint constant was removed, since there is no longer a limit to the value of integers. However, sys.maxsize can be used as an integer larger than any practical list or string index. It conforms to the implementation’s “natural” integer size and is typically the same as sys.maxint in previous releases on the same platform (assuming the same build options). https://docs.python.org/3.1/whatsnew/3.0.html#integers range xrange range python2 xrange = python3 range,pytho...

nodemcu 開發篇(三) - 畫面

圖片
來看看 Line 收到訊息的畫面 落落長,不過也就兩種訊息,一個是開發版接上電源並且連上wifi後,會自動發送的初始化訊息,訊息內容展示 IP 位置,可以透過瀏覽器連上此位置做開發版設定,當然初始化訊息是可以客製的,等會會展示設定的頁面。 另一個訊息是當開關被觸發時,發送出來的訊息,罐頭訊息一多起來,連最後一點美感都蕩然無存了,有人有好想法美化罐頭訊息嗎?歡迎跟我分享。 接下來就是設定頁面的展示 首頁 Sensor Behavior 設定門窗開關感測器的行為 AP Configuration 開發版到一個新的wifi環境時,提供 AP 功能用以設定 wifi 環境使用的 SSID、Password、IP 位置 WIFI Configuration 設定接上電源後連接的 wifi 帳號密碼 Line Notification 設定要通知的 Line ID、客製化訊息內容 Chart Display 記得前面一篇架構圖裡有畫到 firebase 的部份嗎?運用資料然後透過 HighChart 做資料的展示 About 就是關於我啦! Sensor Behavior Name 這個裝置的名字,放在大門口所以叫做 Front Door,可以視放置位置命名,用來辨識哪個裝置發出的訊息 Trigger 門窗開關感測器觸發動作可以有關閉時觸發或是打開時觸發 Power Save 省電設定,裝置作用的過程,最耗電的就是wifi連線,為了省電,可以設定每次觸發Line通知後,隨即斷開wifi。 但是一旦開啟之後會有兩個問題: 一是因為沒有一直連接wifi,所以無法使用頁面設定的功能,如果有設定的需求,必須重啟電源,設計在電源接上的初始階段,會連著wifi,此時就可以使用頁面設定功能。  二是當開關被觸發時,無法隨即送出訊息,必須重新連上wifi再發送訊息,測試會有1~5秒不等的延遲,視當時的網路狀況而定。 Sensitivity 觸發幾次才發送訊息,最左邊的High表示觸發1次就發送訊息 Reset Timer 設定觸發過後一段時間內,不再觸發,以免過多重複訊息的發送,影響體驗(原本在家使用,設定10秒,但是開關門還是各被觸發一次,因為開門之後會摸來摸去,就超過10秒了) AP Co...

智能家庭-前言

先破題,這篇文章主要在說我跟物聯網開發版的邂逅。 早在兩年前就知道有 arduino、raspberry pi,甚至還買了 arduino 教學套件,對於純軟體的工程師來說,讓一個硬體動起來是很吸引人的,但是最後只讓 led 閃爍,敗在溫度感測器的練習上 (這是另一個故事,就不要佔版面了),接著中斷了一年多都沒理會躲在櫃子裡的套件組。 中間出現 webduino,直接掛上 wifi 模組,解決當初想從開發版將資料傳出來的問題,於是又重新燃起興趣,可惜在價錢考量跟通路不方便上就又擱著了。 話說物聯網的設備沒有網路功能,那要連什麼呢?還是要有無線傳輸的解決方案才能叫做物聯網吧! 把時間軸拉到前幾個月,玩起了 Line、Telegram bot,想著這個通訊平台可以取代傳統簡訊、工作排程回報、服務通知,而且只要簡單的 https request 就可以發送了。 再往後推一點,偶然間看到了網路上教程,關於做門窗感應器並結合IFTTT,想著自己也要做,家中陽春的網路監視器沒有儲存影像功能,只能看爽的,但是加上門窗感應器及 Line 通知平台,把這一切都串起來了。 這時候才注意到 nodemcu 這塊開發版,綁上 ESP8266 wifi 模組,在台灣買也要 NT300 左右,然後只接出一條線,總覺得有點浪費開發版上的那幾塊晶片。 所以首先要 cost down,然後除了網路教程的感應器偵測功能外,加上自己發想的功能,才能好好發揮這塊板子的價值。(好吧!我承認自己是金牛座的) 偶爾會去對岸淘寶,nodemcu 只要 NT100 左右,根本是便當錢!太便宜了! (我承認台北居大不易) 一口氣買了四塊板子,順便買了開關感測器,這樣算下來一組加上運費,還不到 NT150。 於是乎,開始了我的智能家庭計劃之路...... 親手打造自己的智能家庭系統,接著就看自己能持續到什麼地步囉。

訊息通知平台

最近在玩聊天機器人,機器人除了在聊天過程中解決前端使用者的需求或問題,沒看到多少人寫主動通知這部份的文章。 還記得幾年前如果要通知前端使用者,大多採用簡訊通知的方案,在 server 端綁個 cgi 程式呼叫電信公司提供的 dll。 這些聊天平台開放了機器人的 api,間接取代傳統的簡訊通知方案,傳統簡訊方案依簡訊量計價,聊天平台訊息卻是幾乎免費,電信公司簡訊業務或是提供簡訊發送平台的未來是可以想像的慘呀! 目前試了兩個平台,分別是 line 跟 telegram,先不論 webhook server 的建置,單論直接下指令發送訊息就好,兩個平台都可以作到,當然 telegram 方便的多了,telegram 有提供 web api 直接用 http Get method 呼叫,網址打一打就可以了, 如果不考慮台灣聊天平台的使用率 (Line 的台灣使用者很大量呀!),telegram 真的是滿推薦的。 -- 2017/1/25 補充 Line 透過命令列發送訊息如下 curl -X POST -d '{"to":"<USER ID>", \ "messages":[{"type":"text","text":"<MESSAGE 1>"}, \ {"type":"text","text":"<MESSAGE 2>"}]}'  \ -H 'Content-Type:application/json'  \ -H 'Authorization:Bearer <LINE ACCESS TOKEN>' \ https://api.line.me/v2/bot/message/push Telegram 透過 http url 發送訊息如下 https://api.telegram.org/bot<ACCESS TOKEN>/sendMessage?chat_id=<CHAT ID>&te...

Line bot 開發狀況

圖片
 實做了一些平常會用到的功能,有即時訊息通知平台,互動上更加直覺了。 原本我也期待透過一些語意分析的工具,了解語意後再進行處理,但是經過自己使用習慣上的分析,其實用選單方式表達需求更加明確,使用語意分析工具,建立 pattern、分析 intent,偏離了原始的目的。 這改變讓我不需要為了使用工具,還要輸入自己設計的關鍵字來觸發聊天機器人功能。 透過其他 api 提供的功能實做就不提了,花最多時間的是在聊天互動的操作,在聊天室裡每一個訊息都是獨立的發送著,隨著思緒及關卡會產生下一個對話結果,那在程式設計上要怎麼把好幾個訊息組成一個清楚可執行的指令呢?在我設計的對話路徑上,先表達主要目的,例如我要把youtube影像轉成音樂檔,接著 bot 問第一個問題,請輸入youtube 影像網址,依使用者輸入的內容,決定是否可開啟下一個對話,即資料的檢核,檢核成功則進入下一個對話,檢核失敗則可以跳出該對話,或是重新輸入上一個需求內容;直到最後一個問題的答案收集完畢後,再依據這些問題的答案產生結果,回報使用者。 先決定要執行的功能選項 -> 下一個問題 -> 下一個問題 -> 下一個問題 ... -> 產生結果 這裡我們把"問題"用 intent 這個詞來表達。 上面這個循序圖,每一個階段都是獨立的,只是前一個 intent 仰賴的資料都需要透過其他的方式得到資料,聊天機器人就是透過對話,得到需要的資訊。 資料結構使用 stack,每一個 intent 的生命週期是 啟動對話 -> 檢核答案 -> 續問下一個 intent -> 產生結果 在 續問下一個 intent 的這個階段會堆疊到 stack 裡,最後 intent 問完了,再把 intent 一個一個 pop 出來產生結果。 在 user session 的處理上,使用 redis 紀錄單一使用者的對話過程 (redis 是好物呀!)  

Line bot 主動回報及通知系統

圖片
    標題不知道要怎麼下,意思是說除了下指令給 bot,bot 會回覆相關資訊之外,還可以主動發訊息給指定的 Line 用戶 (當然,前提是這個 Line 用戶需要加入 bot 為好友)。 Line Messenger API 除了提供 reply_message 的方法之外,還有提供 push_message 的方法。     reply_message 顧名思義是當用戶發出訊息給 bot,bot 針對這一個訊息所作的回覆,經測試發現一個 reply token 只能回覆一次,無法針對同樣一個 reply token 一直傳訊息,意思是一個 reply token,只能用一次 reply_message,不過一次 reply_message 可以傳入多個訊息就是了。     另外一個測試發現 reply token 有它的生命週期,bot 在處理用戶訊息如果過久未回覆,reply token 也會失效;那如果真的需要長時間處理的動作該怎麼辦呢?這邊建議可以使用 push_message 的方式,在用戶發出訊息時,可以取得用戶 ID,在處理完畢後,針對這個用戶 ID 傳送訊息,就會很像 bot 針對訊息回覆的情境。     離題了,這次主動通知系統用了 push_message 做了什麼呢?     其實就是 server 排程作業結果回報通知,排程作業各位可以想看看能做什麼,我是用來做小米商店商品開賣通知,因為小米商店常常缺貨,但是又很想要這商品,又不想從大陸買進來(擔心保固、電壓、插座、運送等問題)。在 web server 上實做了傳訊息給 Line 用戶的 push line api,排程作業透過 curl 呼叫 push line api。 示意圖如下

[小聲公告] 寫好玩的Line Bot 帳號公告

圖片
如題,有興趣試用的可加入或加入再封鎖。 ps. 個人電腦充當Server,效能不彰、隨時無回應,如果能接受就加吧!

Build in line bot webhooker web server on docker

請參考我的 github WebServLineBotDocker

Messenger bot framework 之我見

圖片
上次在不清不楚的情況下,實做了 facebook messenger bot,做是作起來了,當下也了解到平台實做不是最大的問題,問題在客戶(使用者)在表達什麼意思,如果是文字對話,就是自然語言的辨識,也就是 AI 的問題,網路上有許多 bot ai 製作工具,我沒用過,倒是這幾天有看到微軟出的 bot framework,似乎也是個方法。 這兩天再接觸了 Line Messenger API,對照之前使用 facebook bot api 的經驗,可以發現各家對於 messenger api 作法都很相近,似乎對於這樣的架構頗有共識。 不多說,從使用 bot api 的經驗去想像整體架構,用一張圖來表達