嗯,來聊聊怎麼做一個 LINE 機器人吧
最近好像很多人想自己做 LINE Bot,但網路上教學感覺... 有點跳躍。 不是寫給工程師看、太深,就是只講行銷概念,中間那塊「到底怎麼從零開始」好像沒人想碰。我來試著整理一下好了,從頭開始,一步一步來。
目標是,就算你不是本科系的,也能大概聽懂整個流程。至少知道發生了什麼事。
重點一句話
簡單說,就是去 LINE 官方開發者後台申請一個「門牌」(API Channel),拿到兩把「鑰匙」(Token 跟 Secret),然後告訴 LINE 你家的「地址」(Webhook URL),這樣 LINE 就能把訊息送到你家給你處理了。
整個流程長怎樣?
在我們動手之前,先搞懂角色關係很重要。不然你會不知道現在到底在哪一步。
基本上就是這幾個角色在互動:
- 你 (使用者):傳訊息給機器人。
- LINE Platform:LINE 的伺服器,像個總機,收到你的訊息。
- 你的程式 (Your Server / Webhook):你寫的程式,放在某個地方等著。LINE 的總機會把訊息轉送到這裡。
- 機器人回覆:你的程式處理完訊息後,再透過 LINE 的總機回覆訊息給你。
所以,使用者不是直接跟你的程式溝通,中間都隔著 LINE Platform。這也是為什麼我們需要設定一堆東西,就是要讓他們兩個能互相認得、順利溝通。
怎麼做:從申請帳號到串接實作
好,理論講完了,來實際操作。一步一步跟著做,應該不會太難。
第一步:準備好 LINE 開發者帳號
首先,你要有個地方放你的機器人設定。那個地方就叫 LINE Developers Console。
- 登入開發者後台:先去 LINE Developers 網站,用你自己的 LINE 帳號登入就行。
- 建立 Provider:登入後,你會看到建立 Provider 的按鈕。 Provider... 你可以想像成是「開發商」或「公司」的感覺,一個開發商底下可以有很多個不同的機器人 (Channel)。 就填個你喜歡的名字,例如你的名字或公司名。
- 建立 Channel:有了 Provider 之後,就可以在底下建立 Channel。Channel 才是機器人的本體。我們要選的是「Messaging API」。 這裡會要你填一些機器人的基本資料,像是頭像、名稱、介紹等等,就照實填。比較重要的是,你會被要求連結一個 LINE 官方帳號 (LINE Official Account),如果沒有的話,它會引導你建立一個新的。
完成這步,你就等於在 LINE 的世界裡,幫你的機器人報好戶口了。
第二步:拿到重要的兩把鑰匙
戶口報好了,接下來要拿鑰匙,才能跟 LINE 的系統溝通。這兩把鑰匙都在你剛剛建立好的 Channel 設定頁裡。
- Channel access token (long-lived):這就像一把萬能鑰匙,你的程式要主動傳訊息給使用者(例如推播),或是回覆訊息時,都要靠它。 在 "Messaging API" 的頁籤裡,往下滑應該就能找到,如果沒有就按「issue」或「發行」。
- Channel secret:這比較像一把... 確認身份用的私鑰。主要是用來驗證從 LINE 伺服器傳來的請求是不是真的,而不是別人偽造的。
這兩個東西非常重要,尤其是 Channel secret,絕對不能外洩。通常我們會把它們存在環境變數裡,而不是直接寫在程式碼中。
第三步:架設伺服器並設定 Webhook
這是最關鍵,也是最多人卡關的一步。前面說過,LINE 收到訊息後,會把訊息「轉送」到你指定的地址,這個地址就是 Webhook URL。
這代表你需要有一個公開的網址,而且必須是 `https` 開頭的安全連線。 對新手來說,自己搞一個有 https 的伺服器太麻煩了。所以我們用一個很方便的工具來解決這個問題:ngrok。
什麼是 ngrok?
簡單說,ngrok 能幫你在你的電腦(localhost)和網際網路之間,挖一條安全的隧道。它會給你一個公開的 `https` 網址,然後把所有送到這個網址的請求,都轉發到你電腦上的特定連接埠(port)。 這讓我們可以在自己的電腦上開發和測試,超級方便。
操作流程:
- 安裝並執行 Python 程式:首先,你要有一段簡單的程式碼,用來接收 LINE 的訊息。這邊用 Python 的 Flask 框架當例子,因為它很輕巧。你需要先安裝 `flask` 跟 `line-bot-sdk`。
然後寫一個簡單的 `app.py` 檔案。pip install flask line-bot-sdk
記得把 `YOUR_CHANNEL_ACCESS_TOKEN` 和 `YOUR_CHANNEL_SECRET` 換成你自己的。然後在終端機執行 `python app.py`,你的 Flask 伺服器就會跑在 `http://127.0.0.1:5000`。from flask import Flask, request, abort from linebot.v3 import WebhookHandler from linebot.v3.exceptions import InvalidSignatureError from linebot.v3.messaging import Configuration, ApiClient, MessagingApi, ReplyMessageRequest, TextMessage from linebot.v3.webhooks import MessageEvent, TextMessageContent app = Flask(__name__) # 你的 Channel Access Token configuration = Configuration(access_token='YOUR_CHANNEL_ACCESS_TOKEN') # 你的 Channel Secret handler = WebhookHandler('YOUR_CHANNEL_SECRET') @app.route("/callback", methods=['POST']) def callback(): # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessageContent) def handle_message(event): with ApiClient(configuration) as api_client: line_bot_api = MessagingApi(api_client) line_bot_api.reply_message( ReplyMessageRequest( reply_token=event.reply_token, messages=[TextMessage(text=event.message.text)] # 鸚鵡機器人,回覆一樣的訊息 ) ) if __name__ == "__main__": app.run() - 啟動 ngrok:下載 ngrok 後,在另一個終端機視窗執行指令,把流量導到 5000 port。
執行後,ngrok 會給你一個 `Forwarding` 網址,長得像 `https://xxxx-xxxx-xxxx.ngrok-free.app`。這個就是我們需要的公開網址。ngrok http 5000 - 設定 Webhook URL:回到 LINE Developers Console,在 "Messaging API" 頁籤找到 "Webhook settings"。 把剛剛 ngrok 給你的網址貼上去,並在後面加上 `/callback` (因為我們程式碼裡的路徑是 `/callback`)。所以完整的 Webhook URL 會是 `https://xxxx-xxxx-xxxx.ngrok-free.app/callback`。 填好後,打開 "Use webhook" 的開關。
做到這裡,整個串接就完成了。你可以試著用手機傳個訊息給你的機器人,如果一切順利,它應該會回傳一模一樣的訊息給你。
本機測試 vs. 正式部署
用 ngrok 在自己電腦上測試很方便,但它有個問題:每次重啟 ngrok,那個轉發網址都會變,而且只要你電腦關機或網路斷了,服務就停了。 所以,當你的機器人開發到一個段落,準備要正式上線時,就必須把它「部署」到一台 24 小時運作的雲端伺服器上。
這部分選擇很多,我簡單列幾個比較一下,但深入的教學又是另一個故事了。
| 部署方式 | 優點 | 缺點 | 適合誰 |
|---|---|---|---|
| Ngrok (本機開發) | 設定超簡單,改完程式碼馬上看到結果,免費。 | 網址會一直變,電腦要一直開著,不穩定。 | 開發跟測試階段,強烈推薦。 |
| Google Apps Script | 完全免費,不用管伺服器,跟 Google Sheets 整合很方便。 | 有一些執行時間限制,功能比較受限,適合簡單的應用。像是做個記帳機器人就還不錯。 | 想做點小工具、不想碰伺服器的人。 |
| 雲端平台 (如 Render, Heroku) | 穩定,有免費方案可以用,擴充性好,是比較正規的做法。 | 設定比前兩者複雜一點,需要了解一點 Git 跟部署的觀念。 | 準備好要讓機器人正式上線的人。 |
一些補充與提醒
日本的 LINE 文件(畢竟是他們家的產品)寫得非常詳細,但有時候很生硬。 像是速率限制 (rate limits) 這種東西,官方文件會直接給你數字,但通常要等到你真的發訊息發到被擋下來,你才會知道它的重要性。 反觀台灣一些開發者的部落格或分享,雖然不見得最即時,但通常會用比較白話的方式,或結合本地應用情境來解釋,讀起來親切很多。 建議可以兩邊對照著看。
另外,你可能會在設定時看到 LINE Login 或 LIFF 這些詞,這些是跟在 LINE 裡面開網頁、做登入驗證有關的功能,跟單純的訊息一來一回的 Messaging API 不太一樣,先不要搞混了。
好了,差不多就是這樣。這條路坑不少,但第一個機器人能成功回覆訊息時,真的會蠻有成就感的。試試看吧。
你第一個想做的 LINE 機器人是什麼功能呢?是簡單的問候、自動回覆,還是想串接更複雜的服務?在下面分享你的想法吧!
