嗯...今天要來聊聊怎麼自己做一個 LINE 群組的機器人
最近...很多人在問這個。感覺好像很複雜,要寫很多程式碼。但老實說,嗯,最難的部分其實不是寫程式,而是...把帳號那些東西設定好。
所以...今天我想說,就一步一步來,從頭開始。把怎麼申請帳號,然後...怎麼讓機器人可以在群組裡面回話,都講清楚。對,目標就是...你就算不是很懂程式,也能大概知道是怎麼一回事,然後照著做,做出一個...至少會跟你說哈囉的機器人。
先說結論:到底要準備什麼?
簡單講,你需要三樣東西:一個 LINE 帳號、一個叫做「LINE Developers Console」的開發者後台帳號,還有...一個地方放你的程式碼,這個地方要有一個公開的網址,也就是所謂的 Webhook。
聽起來很複雜嗎?...嗯,沒關係,我們一個一個來。整個流程就像是...你要開一間店。LINE Developers Console 就是去政府登記、申請營業執照。然後,Channel ID 跟 Channel Secret 就像是你的店的統一編號跟鑰匙。最後,那個 Webhook,就是你店面的地址,LINE 才知道要去哪裡找你。
第一步:去 LINE Developers Console 把帳號辦好
這一步...嗯,是最多人卡關的地方。主要是因為 LINE 的介面有時候會變來變去。最近又有一次更新,從 2024 年 9 月開始,建立的方式有點不一樣了。
你得先去一個叫做「LINE Official Account Manager」的地方建立一個官方帳號,然後再從那邊啟用 Messaging API 功能。 以前是可以直接在開發者後台(LINE Developers Console)裡面一次做完的。
我把它拆成幾個小步驟好了:
- 登入 LINE Developers Console:你直接用你自己的 LINE 帳號登入就可以了。 第一次登入,它會要你填一個開發者名稱,就隨便取一個你喜歡的。
- 建立 Provider:這個 Provider...你可以把它想像成一個公司或工作室的名稱,用來管理你旗下的各種機器人。 就...也是取個名字而已。
- 建立 Channel (頻道):這才是重點。現在你點「Create a Messaging API channel」的時候,它會引導你去 LINE Official Account Manager 的頁面。 在那邊把官方帳號的資料填一填,像是帳號名稱、業種之類的。
- 啟用 Messaging API:建立好官方帳號之後,要記得在它的後台「設定」裡面,找到「Messaging API」這個選項,然後按「啟用」。 這個動作才會真的把你的官方帳號跟開發者後台串起來。
- 取得關鍵金鑰:回到 LINE Developers Console,找到你剛剛建立的那個 Channel。點進去之後,你會看到兩個...非常重要的東西:「Channel secret」和「Channel access token」。 這兩串字...就是你程式碼跟 LINE 溝通的鑰匙,要收好。我通常會直接把它們複製出來,貼在記事本上。
對了,有個地方要特別注意。在 Channel 設定裡面的「Messaging API」頁籤,要確認「Webhook」是「使用中」。 然後,在「LINE Official Account Manager」的後台,要把「回應模式」設定成「聊天機器人」,然後關閉「自動回應訊息」。 這樣...你傳訊息給機器人時,LINE 平台才會把訊息轉發到你的程式,而不是用它內建的功能回你。
機器人要怎麼在「群組」裡動起來?
這是一個小細節,但很多人會漏掉。預設情況下,你把機器人拉進群組,它是...不會有反應的。
你必須到官方帳號後台的「帳號設定」,把「加入群組或多人聊天室的功能」切換成「接受邀請」。 這樣一來,別人才能把你的機器人加到群組裡,它也才能讀取裡面的訊息。
怎麼寫程式讓它回話? (一個簡單的 Python 範例)
終於...要寫程式了。不過別怕,我們只是做一個最簡單的「鸚鵡機器人」,你跟它說什麼,它就回什麼。 這樣可以先測試前面帳號設定、Webhook 那些有沒有成功。
現在比較流行的 Python 網站框架大概是 Flask 或 FastAPI。 我們用 Flask 當例子好了,因為它...嗯,比較單純。
你需要先安裝幾個 Python 套件:
pip install flask line-bot-sdk
然後,寫一個叫做 `app.py` 的檔案,內容大概長這樣:
# 引用需要的套件
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
# 這邊要換成你自己的 Channel Access Token 跟 Channel Secret
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
# 這個是 Webhook 的路徑
@app.route("/callback", methods=['POST'])
def callback():
# 取得 X-Line-Signature 標頭的值
signature = request.headers['X-Line-Signature']
# 取得請求的內容
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# 處理 webhook 事件
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
# 處理文字訊息事件
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
# 鸚鵡機器人:回覆一樣的訊息
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run()
你看到了嗎?...程式碼裡面有兩個地方要填上你剛剛記下來的 `YOUR_CHANNEL_ACCESS_TOKEN` 跟 `YOUR_CHANNEL_SECRET`。
這段程式碼做的事情很簡單:它會啟動一個小小的網站伺服器。當 LINE 平台收到使用者傳來的訊息時,它會把訊息內容 POST 到 `/callback` 這個網址。 程式收到後,會先驗證簽章,確認是 LINE 送來的沒錯,然後...就把一樣的文字用 `reply_message` 的方式送回去。
所以,Webhook 網址到底是什麼?
嗯...這是最後一步,也是最關鍵的一步。你剛剛寫的 Python 程式是在你自己的電腦上跑,LINE 根本找不到它。你需要一個工具,幫你在你家電腦跟公開的網際網路之間,挖一條通道。這個工具最常用的就是 `ngrok`。
你下載 `ngrok` 之後,在終端機執行,它就會給你一個公開的 `https` 網址。然後,你把這個網址,加上 `/callback`,例如 `https://xxxxxxxx.ngrok.io/callback`,貼回到 LINE Developers Console 的 Webhook URL 欄位裡。
貼上去之後,記得按一下旁邊的「Verify」按鈕。如果出現「Success」,就代表...恭喜你,你的機器人跟 LINE 平台接上線了! 現在,你把機器人加到群組,然後傳個訊息給它,它應該就會回你一樣的話了。
不過要注意,`ngrok` 每次重啟,網址都會變,所以你每次都要回去 LINE 後台更新 Webhook 網址。 這是在本機測試的作法。如果你要讓它 24 小時運作,就要把程式放到像是 Google Cloud 或 Heroku 這樣的雲端平台上。
要注意的幾個...嗯...小陷阱
免費的,但有限制
很多人以為做這個機器人是完全免費的。帳號申請是免費的沒錯,但...能傳的訊息數量不是無限的。 LINE 官方帳號有分不同的收費方案,免費方案每個月能「主動推送」的訊息數量很少,大概幾百則而已。 所謂主動推送 (Push API),就是沒人理你,你自己主動發訊息,像是發廣告、通知。
不過,我們今天做的這種「使用者傳一句、你回一句」的,叫做 Reply API,它的免費額度是...比較高的,基本上個人玩玩都夠用。 但如果你要做的功能很複雜,需要主動發訊息,那就要注意費用問題了。
OA Manager 跟 Developer Console 到底差在哪?
這個問題...我也困惑過。我自己的理解是這樣:
| LINE Official Account Manager (OA) | Messaging API (我們用的) | |
|---|---|---|
| 適合誰用? | 這個嘛...比較像是給行銷人員、小編用的。就是點一點滑鼠,設定好關鍵字回覆、圖文選單那些。 | 嗯...這個就是給我們這種...想自己寫程式,做一些客製化功能的人用的。 |
| 需要寫程式嗎? | 完全不用。它就是個圖形化介面。 | 對,一定要。所有邏輯都要自己寫。 |
| 客製化程度 | 有限。就是 LINE 給你什麼功能,你就用什麼。 | 幾乎無限。你想得到的、API 有支援的,你都能做。像是串接資料庫、做個投票系統什麼的。 |
| 成本呢? | 帳號本身免費,但訊息費...看你用量。 | 訊息費跟 OA 一樣的規則,但你還要多一個伺服器的費用,就是放你程式碼的地方。雖然很多平台有提供免費方案。 |
結語
呼...大概就是這樣。從申請帳號、設定,到寫一個超簡單的程式,然後讓它在網路上跑起來。每一步都有一些小細節要注意。特別是帳號申請流程,LINE 官方最近的調整,確實讓第一次接觸的人會有點...不知所措。
但只要照著步驟,把 Channel Secret 那些金鑰放對地方,然後 Webhook 網址設定成功,你的第一個 LINE 機器人就誕生了。雖然它只會學你說話,但...這已經是很大的一步了。
接下來,你就可以在 `handle_message` 那個函式裡面,開始寫你自己的邏輯。例如,判斷使用者輸入的文字是不是「+1」,然後把報名人數記錄下來之類的。 這就是好玩的地方了。
那你呢?你想用 LINE Bot 來解決什麼問題?是想做個自動記帳工具、還是定時提醒喝水的助理,或只是單純好玩?可以在下面留言分享你的想法。
