Line 的官方 API 好像在 2016 年四月就已經有了,不過那時候有其他事情要做就沒特別去摸,後來暑假去當兵就更沒時間 QQ
現在開學終於有時間玩玩看了~XDDD
展示
事前準備
- BOT API Trial Account
先去 BOT API Trial Account 的網站註冊一下,前提是你需要有手機版的 Line 才能登入申請,目前是開放免費申請使用,限制為 50 好友。
- Ubuntu
寫 Python 就是要用 Linux,不要問我怎麼在 Windows 上面弄,我的 Windows 只跑 Visual Studio 、 Office 跟 LOL 。
Python
有 Linux 環境後,建議安裝 pyenv 來建立虛擬 Python 環境,而不會影響原本系統上面的 Python 環境,如果覺得沒差的話可以不用裝。
用來和 LINE API 溝通,提交 POST 超級方便!!之前我是用他來寫 Web Bot ,用來自動填單..XD
接收 LINE 的 POST 用,舉個例子,有人傳訊息給你的 BOT 時,LINE 就會發送一個 POST Request 給你(JSON) ,官方文件有解釋JSON的內容。這好像稱為 callback url,我不是很了解,希望有開發 API 經驗的大大可以補充。Flask 的官方文件看不懂可以看這篇:用 Flask 與 SQLite 架抽籤網站,直接看範例學習比較快(我看這篇學的XD),感謝這些大大的經驗分享!
ngrok
開發時我使用 ngork 來作為 callback url 測試,不用獨立IP、不用開Port 就可以有一個網址直通你的電腦,非常方便!
Flask
- 基本架構
@app.route('/')
為網址根目錄,當使用者瀏覽時,就會執行 index()
函式的內容,得到的就是一串文字 「Hello World」,應該滿好理解的~!
- 接收 POST Request
在 Flask 中,接收任何 Request 需要寫出來,不然是不會同意參數輸入的,由於 LINE 會藉由 callback url 傳送東西給你,以取得使用者傳給 Bot 的資訊:

來自 Line 的 Post Request
在寫 callback url 的時候,需要另外定義一個 @app.route('/callback')
,這樣才有辦法進入這個網址,並執行下面的函式,然後隨便 return 一個 str 結束
request.get_json()
:為Line 丟過來的 json 的內容,需要處理一下才能用,這部份我也不是很熟,詳細參考一下這一篇文章「Json概述以及python對json的相關操作」
傳訊息給 Bot 後,Line 丟過來的 Json 如下:
decoded[‘result‘][0][‘content‘][‘from‘]
:要取值所以要把相對應的 key 寫出來,有點像是陣列的概念,這裡我要的是使用者ID跟純文字內容,Python 真的很方便XD
發送訊息
有了那些訊息後就可以把資訊送回去了,這裡我先實做的是原封不動把文字傳回去,所以寫了一個 sendText() 函式:
這裡我用的是 Requests 內的 POST 功能,很方便,直接把資料丟給 Line ~ 用法記得看文件嘿!值得注意的是, "to": [user]
的中括號不能省掉,這是Line 接收的 json 資料格式之一,沒有加的話會錯誤。
完整程式碼就放在 Github 上面了,有興趣的人可以抓下來玩玩,有空的話我再寫成可以部屬在 OpenShift 上面的版本~。
請問你有裝過line-bot-sdk-php-master嗎?我想問如何在win10安裝,因為我會安裝失敗。
現在好像改版了喲,如果你要在 Windows 執行的話建議你還是開一台虛擬機會比較方便,
你所說的檔案需要有LAMP環境才能執行~~
我問錯了,是line-bot-sdk-python-master
想請教一下為什麼你可以不用https呢?
我做的時候都需要一個 callback url
他強制要用https
不過你的code好像不用耶 為什麼呀?
謝謝您
因為我用 ngrok , 他有提供 https 的連結,直接丟到 callback url 即可,
如果要自架實用的話,可以用 nginx 作 proxy 轉發 Port 並配上 SSL 證書~
你好,我已經成功試做echo bot,非常感謝你的大力協助!!
恭喜,之後就可以用 Python 整合更多功能
我知道你為什麼要部屬在OpenShift 上面了,因為每次ngrok重開都會給不同的網址XD
是的,ngrok 開發非常方便!
但是反應很慢,因為還需要經過他們的伺服器
再請教 在註冊BOT API Trial Account 時,可以編輯callback url,不知道需要填什麼網址進去
這就是 Flask 的功能了,用它寫一個頁面,這個網址就是 callback URL。
當使用者傳給你的 bot 訊息時, Line 的 Server 會 Post 相關資訊 (Json Format)給你的 callback url (Flask),取值後即可進行處理,我是用 ngrok 作為 callback URL ,因為在學校沒有獨立IP可以用,所以就需要ngrok 的 forwarding 功能轉送我的資料
這樣聽起來難道要填127.0.0.1:5000/callback 進去? 還是說其實不用編輯這個欄位
請研究一下 ngrok 的功能,這樣才有辦法讓 line 的 server 和你溝通,把127.0.0.1改成 ngrok 給的網址即可
你好,我現在進度是,用ngrok http 80給的網址(https://49894032.ngrok.io),
貼給line 的channel – basic information 的callback url,然後我從自己手機發信息給bot,
可以在自己的localhost:4040 看到line丟過來的result:[… …]。
請問我應該怎麼執行這份python程式碼,
或是下一步要怎麼進行才能發信息給bot 讓他回傳重複的字,
或是我一步有錯要改?
收到結果後請自行處理 Json 資料,並用 requests 傳送一個 post 回去
請問data裡面,”toChannel”:1383378250,這組數字是哪裡來的
官方文件都有寫喔~
hello,我也在台東,我手邊也有一台當初剩下來的網樂通,我想要改機當區網硬碟使用,但看不太懂,似乎要重灌lunix系統,anyway,可不可以請你吃個飯,好好請教一下怎麼弄,因為看你很會寫程式,分享很多電子的資訊。