LINE BOT 聊天機器人 Ch3 - 使用 Python 打造第一個 LINE 聊天機器人(上)

Lawrence Yi-Hsuan Chuang
10 min readApr 30, 2021

--

經過了前面幾篇的聊天機器人的設定之後,基本上我們已經具備了 LINE 聊天機器人的雛形了,但是該如何讓聊天機器人在接受到指定的關鍵字時可以自動回覆相對應的訊息或是動作呢?

在這之前,我們先來了解一下 LINE 聊天機器人的運作方式吧!

運作原理

LINE 聊天機器人是如何做到自動回覆的呢?其實是靠背後的 LINE Messaging API 這個功能來實現的

(Photo from: https://developers.line.biz/zh-hant/services/messaging-api/)

透過 LINE Messaging API,訊息可以在使用者、LINE 平台以及 LINE Bot Server 三方之間以 HTTPS 進行資訊的傳遞(如下圖所示)

(Photos from: https://developers.line.biz/zh-hant/docs/messaging-api/overview/#how-messaging-api-works)

使用者發送訊息至 LINE 官方帳號( LINE 聊天機器人), LINE 平台則會將收到的訊息(Webhook Event)傳送到後方的 LINE Bot Server ( Webhook URL ),接著 LINE Bot Server 則會根據定義來對收到的訊息執行動作,最後再透過 LINE 平台傳送回覆至使用者端

Okay!那在瞭解運作原理後,就來著手實作第一個聊天機器人吧!

LINE Bot SDK

開始實作我們的第一個聊天機器人之前,免不了的就是 SDK (Software Development Kit )了! LINE 也很貼心的已經幫大家開發好了 SDK ,基本上我們只需要知道如何去使用即可,截至目前為止, SDK 提供各種不同的程式語言供開發者使用,筆者這裡使用的是 Python 作為開發首選 (更多細節可以參考 Messaging API SDKs)!

接著,我們需要開發工具來進行聊天機器人的開發,筆者這裡使用的是目前很多開發者使用的 Python IDE - PyCharm for Community,這個開發工具完全免費,而且也非常好用,可以直接到官方網站根據作業系統的不同選擇下載即可!

下載完成後,直接打開 PyCharm 點選 [ Create New Project ] 建立一個新專案,這裡筆者命名的專案名稱為 linebot_sigfox_helper

接著我們要下載 LINE Bot SDK , 請在 PyCharm 中點選 [ Preferences ]

進入到 [ Preferences ] 後,在 [ Project ] 下的 [ Project Interpreter ] 中,點選下方的 [ + ] 按鍵來搜尋 line-bot-sdk ,並點選 [ Install Package ]

由於我們是使用 Python 作為開發 LINE 聊天機器人的主要語言,而 LINE Bot SDK for Python 是以 Flask (輕量化的Web開發框架) 作為主要的開發框架,因此若讀者是熟悉 Flask 框架的話則可以更快地上手哦!

統整一下目前我們在開發上會使用到的工具:

Python 3.8
LINE Bot SDK for Python (Flask Web Framwork)
PyCharm Communoty IDE
ngrok Web Server (這個部分會在後續的文章介紹)

好的,在專案建好了之後,也下載好了 LINE Bot SDK ,接下來就讓我們開始實作吧!

首先,我們需要在 PyCharm 中,新建一個 Python file ,並將其命名為 app.py

接著,我們需要開始撰寫程式碼了,首先可以先打上下列程式碼,讀者也可以直接在 Github 上直接複製程式碼

在 PyCharm 上完成程式碼的撰寫之後,會發現第一行的程式碼下方會有紅色的警告波浪線,這是因為我們還沒有安裝 Flask 的函式庫,所以我們需要另外安裝 Flask ,我們只要將滑鼠移到 flask 的文字上旁邊就會出現一個紅色的燈泡,點擊後下拉選擇 [ Install package flask ] ,PyCharm 就會馬上幫我們下載函式庫了!

下載完成後,我們就可以觀察到原本第一行的程式碼下方的紅色警告波浪線就消失了,這代表我們已經成功地引入 flask 函式庫,並且可以使用它!

這部分的程式碼主要目的是:

1. 引入我們在開發聊天機器人時會使用到的函式庫(第 1 行~第 10 行)

2. 驗證是否具有使用聊天機器人的使用權限 (第 15 行~第 16 行,後續會介紹如何取得)

3. 所有從 LINE 平台傳來的事件都會先經過 callback 這個 function,接著才會將事件轉到 handler 進行處理

4. handler 在收到事件後,會根據我們定義的行為做相對應得回覆與處理,例如透過 LINE 的API 去回傳一個文字訊息 ,而回傳訊息之前會需要取得合法的 reply_token 才能使用,並且要加上指定的訊息回傳格式(例如純文字訊息等),所以之後我們會在這個區塊中去撰寫行為的判斷與事件處理的程式碼

取得 LINE Bot 的使用權限

接著我們需要取得使用權限,並將金鑰貼至程式碼中我們才能合法使用 LINE Bot聊天機器人

首先,到 LINE Developers 頁面中,選擇 [ Basic settings ] 這個頁籤,然後將頁面拉到最下方,我們就會看見 [ Channel secret ] 並將其複製起來貼在我們程式碼的相對應的區塊

接著我們再到 [ Messaging API ] 這個頁籤並下拉到最下方,我們接著就會看見 [ Channel access token ] 這串金鑰,也將其複製起來,貼上到我們程式碼相對應的區塊

(將我們的 Channel Secret 跟 Channel Access Token 一起貼到相對應的區塊中)

再來,我們需要啟用 Webhook ,讓 LINE 平台收到事件時能夠傳到我們後方架設的 LINE Bot Server,因此我們要在 [ Messaging API ] 這個頁籤中,尋找到 [ Webhook settings ] 這個區塊 ,並點選 [ Edit ]

進入後,會需要我們輸入 Webhook URL (也就是我們 LINE Bot Server的網址),可是我們還在本機端的驗證階段中,不太可能真的會先去架設 Server 並且還要有 HTTPS 認證的網址

然而就在此時,我們剛剛提到的 ngrok 就可以派上用場了! ngrok 除了是一個很好用的 Web Server 外,它提供了可以讓外部的人透過 HTTP / HTTPS 的方式連線到我們架設的 Server ,因此對於初步的功能驗證上來說,是一個相當方便的工具!

接下來,我們就可以利用 ngrok 來完成這個設定,由於筆者使用的是 Mac 系統,我們需要打開終端機,然後在下載 ngrok 後的路徑中輸入啟用指令:

./ngrok http 5000

這個指令是表示要求 ngrok 啟用 http 的連線,然後 port 設定為 5000 ( Flask 的預設 port ),啟用之後,我們可以看到下方命令提示視窗內容

我們可以看到有兩個 Forwarding ,一個為 HTTP 而另一個則為 HTTPS !而 ngrok 也有提供 Web UI 的管理介面方式,只需要複製 Web Interface 的連結並透過瀏覽器進入即可

( ngrok web console)

請注意, HTTP / HTTPS 的 URL 會再每次結束執行 ngrok 後失效,重新再次啟用時,其 URL 是會變動的,故會需要再次到 LINE Developers 重新設定 Webhook URL !

接下來,我們需要先將我們的 PyCharm 執行 Flask server,直接在 PyCharm 畫面中,點選滑鼠右鍵,執行 [ Run ] 即可

(執行 Flask app )

執行完成後,我們會在下方看到執行完成的相關訊息,並且會知道我們建立的 Flask Web Server 是設定在哪一個 Port

( Flask Server 啟用成功!)

接下來,我們需要將我們剛剛啟用的 ngrok 中的 HTTPS URL 複製起來,並貼到 LINE Developers 中的 Webhook URL 設定,並在這一串 HTTPS URL 後方加入 /callback 這個路徑

Webhook URL => https://96e038461755.ngrok.io/callback

這個就是我們剛剛所提到的,所有的事件都會先傳到 Line Bot 的 callback 這個路徑下,之後才會再轉到 handler 中進行處理

Webhook URL 輸入完成後,請點選 [ Update ] 進行套用,並將下方的 [ Use webhook ] 選項啟用

(設定 HTTPS Webhook URL )
(啟用 Webhook )

接下來,我們需要驗證我們的 Webhook URL 是否可以正確執行

點選 [ Verify ] 按鍵,若成功的話則會跳出成功視窗訊息

(順利完成設定 Webhook 的串接了!)

到這階段為止,我們就完成基本的聊天機器人的開發了!接下來我們只需要做的簡單測試,看看聊天機器人是不是真的會回傳與我們輸入的文字一模一樣!

太好了!聊天機器人的回應就如我們設想的一樣,後續我們會再介紹更多與聊天機器人互動的文章,敬請期待囉!

--

--

Lawrence Yi-Hsuan Chuang
Lawrence Yi-Hsuan Chuang

Written by Lawrence Yi-Hsuan Chuang

擁有超過9年工作經驗的工程師,目前在University of Nevada, Reno就讀Computer Science的碩士生,曾在軟體、銀行顧問和物聯網產業服務並擁有豐富的經驗。在這裡主要分享個人在學習技術方面的心得與知識。此外,我也是攝影愛好者,如果有任何關於技術、職場或攝影的問題,都歡迎一起討論、交流!

No responses yet