LINE App 開發完整指南:從 Messaging API 串接到聊天機器人實作步驟

Published on: | Last updated:

嗯…今天要來聊聊 LINE Bot 開發這件事

最近…嗯…好像很多人想做自己的 LINE 聊天機器人。其實,說真的,這件事沒有想像中那麼…那麼複雜啦。你只要把它想成,你的電腦(或伺服器)跟 LINE 的伺-服-器,兩邊在講話而已。使用者傳個訊息,LINE 的伺服器收到,然後轉頭跟你電腦說:「欸,有人找。」,然後你的電腦再回話給 LINE,LINE 再把話傳回去給使用者。大概…就是這樣一個流程。

所以,重點就是…怎麼讓這兩台電腦可以互相溝通。這就是所謂的 API 串接。今天,我們就一步一步…慢慢來,把這件事搞懂。不用寫很複雜的程式,真的。

所以,一個 LINE Bot 到底是什麼?

你看,像你手機上可能有的…天氣預報機器人,或是預約掛號的,那種都算。你丟個訊息,它會根據你說的,回傳一個制式的答案。最簡單的,就是像一個「迴聲」,你說什麼,它就回什麼。我們等一下就會從這個最簡單的「迴聲機器人」(Echo Bot) 開始動手做。

這整個運作的核心,有幾個關鍵字你得先知道…嗯…我想一下,主要是三個:

  • Channel (通道):這個…你可以把它想像成是你的機器人在 LINE 世界的「身分證」。你得先去 LINE 的開發者後台申請一個,才算是有一個正式的身份。
  • Webhook:這東西最重要。它就像一個…一個專線電話或是一個門鈴。你把這個電話號碼(一個網址)給 LINE,之後只要有使用者傳訊息給你的機器人,LINE 就會透過這個 Webhook 來「通知」你的伺服器。
  • Channel Access Token (通道存取權杖):這是一把鑰匙。你的伺服器要回話給 LINE 的時候,必須要出示這把鑰匙,LINE 才會認得你、相信你,然後把訊息送出去。這個…千萬不能外洩。

只要搞懂這三樣東西的關係,基本上就懂了八成了。

LINE Bot 運作流程示意圖
LINE Bot 運作流程示意圖

怎麼做?來,我們一步一步來

好,理論講完了…我們來實際操作一次。我盡量講慢一點。我這邊會用 Python 當例子,因為…嗯…它的程式碼比較像英文,好懂。

步驟一:先去 LINE Developers Console 辦個帳號

你得先去一個叫「LINE Developers Console」的網站。用你平常的 LINE 帳號登入就可以了。 登入之後,第一件事是建立一個「Provider」(提供者)。你可以把它想成是你這個開發者的名字,或公司的名字。 填好之後,接下來才是重頭戲。

步驟二:建立你的 Messaging API Channel

在 Provider 底下,我們要建立一個「Channel」。LINE 有好幾種 Channel,我們要選的是「Messaging API」這個。 點下去之後,它會請你填一些…嗯…你機器人的基本資料,像是大頭貼、名字、介紹等等。 比較重要的是「Plan」那個選項,選免費的 (Free) 或試用的 (Developer Trial) 都可以,我們只是測試,沒差。

建立好之後,點進你的 Channel,你會看到一堆設定。不要慌…我們只需要裡面的兩樣東西:

  1. 往下找到 Channel access token,按一下 issue,你就會得到一長串的亂碼。這就是我們剛說的「鑰匙」,先把它複製下來存好。
  2. 切換到 "Messaging API" 的分頁,你會看到 Webhook URL 的設定欄。 這個我們先放著,等一下再回來。還有,記得把下面的「Auto-reply messages」關掉,不然 LINE 會一直幫你自動回一些罐頭訊息。
在 LINE Developers Console 取得重要資訊
在 LINE Developers Console 取得重要資訊

步驟三:讓你的電腦能跟 LINE 溝通 (用 ngrok)

這是最多新手卡關的地方。你的 Webhook URL 必須是一個公開的、而且是 HTTPS 的網址。但…我們的程式還在自己的電腦上跑啊,怎麼辦?

這時候就要用一個叫 `ngrok` 的小工具。它很神奇,可以幫你在你自己的電腦上,產生一個…暫時的、公開的網址,通往你電腦裡的某個連接埠。這樣 LINE 就可以透過這個網址找到你。 你去官網下載、安裝,然後在終端機或命令提示字元下 `ngrok http 5000` (假設你的程式跑在 5000 port),它就會給你一個 `https://` 開頭的網址。把這個網址複製下來。

然後,回到剛剛 LINE Console 的 Webhook URL 設定頁,把 `ngrok` 給你的網址貼上去,後面要記得加上 `/callback`。例如:`https://xxxx-xxxx-xxxx.ngrok-free.app/callback`。然後按下 Verify,如果看到 Success,就代表 LINE 成功跟你電腦打招呼了。

步驟四:寫一點點 Python 程式

終於要寫程式了。我們用 Python 的 Flask 框架來架一個超簡單的伺服器,然後用 `line-bot-sdk` 這個官方套件來處理 LINE 的訊息。

首先,你要先安裝這幾個東西:

pip install flask line-bot-sdk

然後,這是我們「迴聲機器人」的完整程式碼,很短:

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

import os

app = Flask(__name__)

# 從環境變數取得你的 Channel Access Token 和 Channel Secret
# 比較好的做法是存在環境變數,而不是直接寫在程式碼裡
channel_secret = os.environ.get('LINE_CHANNEL_SECRET')
channel_access_token = os.environ.get('LINE_CHANNEL_ACCESS_TOKEN')

handler = WebhookHandler(channel_secret)
configuration = Configuration(access_token=channel_access_token)

@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:
        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_with_http_info(
            ReplyMessageRequest(
                reply_token=event.reply_token,
                messages=[TextMessage(text=event.message.text)]
            )
        )

if __name__ == "__main__":
    app.run()

在跑這個程式之前…你要先把剛剛複製的 Channel Secret 跟 Channel Access Token 設定成環境變數。然後執行它,它就會在你電腦的 5000 port 上跑起來。這時候,打開你的手機 LINE,掃描你 Channel 後台的 QR code 加好友,然後傳個訊息看看… 是不是它就回你一樣的話了?

不只是文字,玩點不一樣的:Flex Message

只會學人講話,好像…有點無聊。LINE 的 Messaging API 最強大的地方,其實在於它可以傳送各種格式的訊息。其中最有彈性的,叫做「Flex Message」。 它可以讓你用 JSON 格式,自己拼湊出像卡片一樣的版面,裡面可以有圖片、按鈕、文字,排版很自由。

老實說,手寫那個 JSON 蠻痛苦的。不過 LINE 很貼心,有提供一個叫「Flex Message Simulator」的線上工具。 你可以在上面用拖拉點選的方式,設計你想要的卡片樣式,然後它會自動幫你產生對應的 JSON 碼。 你只要把那段 JSON 複製到你的程式碼裡,用 `FlexSendMessage` 物件把它送出去,你的機器人就能回覆漂亮的卡片了。

這功能真的…蠻酷的。很多商業應用,像是商品推薦、訂單確認,都是用 Flex Message 做的。

使用 Flex Message 製作的互動式卡片
使用 Flex Message 製作的互動式卡片

部署到雲端:讓你的 Bot 真正活起來

用 `ngrok` 終究只是暫時的,你電腦一關,機器人就掛了。所以最後一步,是要把你的程式「部署」到雲端伺服器上,讓它 24 小時運作。

以前,很多台灣開發者…包括我自己,很喜歡用一個叫 Heroku 的平台。 它的免費方案很佛心,部署又簡單。 只要把程式碼跟幾個設定檔 (`requirements.txt`, `Procfile`) 推上去,它就自己跑起來了。 不過…嗯…天下沒有白吃的午餐,Heroku 後來免費方案也取消了。所以現在大家可能會改用像是 Google Cloud Run、Fly.io 或其他類似的服務。

部署的細節每家平台不太一樣,但觀念是通的:把你的程式碼、Channel Secret/Token 這些環境變數,都設定到雲端主機上,然後把雲端主機給你的那個…永久的、公開的網址,填回 LINE Console 的 Webhook URL 就行了。

要注意的限制:關於「錢」

最後,得提一下現實面的問題。LINE Bot 不是完全免費的。它的計費方式…嗯…有點繞。

簡單說,訊息分成兩種:

  • Reply Message (回覆訊息):就是使用者先密你,你回覆他。這種是免費的,不限量。 我們剛剛做的 Echo Bot 就全是這種。
  • Push Message (主動推播):你不等使用者密你,就主動發訊息給所有好友,或特定好友。這種就要錢了。

輕用量的免費方案,一個月只有 200 則的「主動推播」額度(2023年9月改的)。 聽起來很少,如果你只是做個小玩具給自己玩,那很夠用。但如果是商業用途,比如說發個優惠券給所有好友,那額度一下就爆了。 這點在規劃你的機器人功能時,要…要特別想清楚。

Related to this topic:

Comments

  1. Guest 2025-07-18 Reply
    超級有感!社群經營真的越來越講究精準行銷了,尤其AI推播這塊好複雜,小團隊要怎麼突圍啊?最近自己也在研究這些,感覺每個平台都有自己的小眉角。
  2. Guest 2025-05-13 Reply
    很有趣的分析!對於Line App未來的創新展望,您認為哪些功能最能吸引用戶?還是說有其他市場動向值得我們關注?
撥打專線 LINE免費通話