Yuanlin Lin

Blog

一起來用 Python 開發 Line 機器人吧!

Yuanlin Lin 林沅霖

2024-02-27

今天寫一篇短文來介紹一下如何用最短的時間搞定用 Python 開發 Line 機器人的基本環境設定以及雲端部署流程,希望能幫助到想要開發 Line Bot 的 Python 開發者們!

基本環境要求

首先,正在看這篇文章的你必須確保你的電腦上已經安裝好 Python 了,你可以用這個指令來檢查看看目前安裝的版本:

python --version

如果你看到他寫 Python 3.11.6 或之類的其他版本,那太好了!但如果你看到的是 zsh: Unknown command: python 之類的錯誤訊息,那請你先回去把 Python 裝好再回來哦!

有了 Python 以後,我們還需要一個用來寫程式碼的編輯器,最多人用的應該是 Visual Studio Code 這個編輯器,不過我個人習慣用 PyCharm,可以根據個人喜好選擇~

專案初始化

環境準備好了以後,首先我們先建立一個用來放 Line Bot 程式碼的資料夾,或是直接建立一個新的也可以:

cd ~ mkdir my-line-bot cd my-line-bot

建立好以後,我們在這個資料夾裡面建立一個虛擬環境:

python -m venv venv

輸入這個指令以後,你應該會發現資料夾裡面多了一個 venv 資料夾,這裡面是我們用來存放關於 Line Bot 專案所需要的各種 Python 套件之類的東西。

初始化完畢以後,我們就可以建立一個叫做 app.py 的檔案,然後把 Line 官方的 Python SDKREADME.md 裡面寫的範例程式碼貼進去:

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__) configuration = Configuration(access_token='YOUR_CHANNEL_ACCESS_TOKEN') 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: app.logger.info("Invalid signature. Please check your channel access token/channel secret.") 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()

貼進來以後你會發現你的程式碼編輯器開始報錯說找不到各種套件,這個時候不要緊張,我們可以開始來安裝這些套件:

# 別忘了先啟動虛擬環境! source bin/activate pip install flask pip install line-bot-sdk

這樣就可以啦~ 然後為了紀錄一下我們的專案用了哪些套件,我們需要用下面這個指令把他們記錄起來:

pip freeze > requirements.txt

執行這個指令以後,你會發現資料夾裡面多了一個 requirements.txt 檔案,裡面寫了所有我們這個專案需要的套件。這樣未來其他人如果接手這包專案,他只要輸入:

pip install -r requirements.txt

就可以把所有需要的套件都安裝進來了,是不是很方便呢?

申請 Line Bot 授權密鑰

初始化完畢以後,我們需要去 Line Developers Console 的網站申請一個 Line Bot 的密鑰,在這個頁面點擊 Providers 旁邊的 Create 按鈕即可:

點擊 Create 以後輸入一個名字:

然後因為我們是要開發一個 Line 機器人,所以選擇 Create a Messaging API Channel:

他會要你填一些基本資料,比如說你所在的國家、你的機器人的名字、類別和介紹等等的,可以簡單填寫一下然後按最下面的 Create 即可:

填寫完了以後,首先我們可以在 Basic Settings 裡面找到一個 Channel Secret:

把這個 Channel Secret 複製起來,貼進去我們的 app.py 裡面有一段 YOUR_CHANNEL_SECRET 把它覆蓋掉。

然後再去 Messaging API 這個分頁,滑到最下面找到 Channel Access Token 然後點擊 Issue:

申請到 Access Token 以後把原本的 YOUR_CHANNEL_ACCESS_TOKEN 覆蓋掉。

大功告成!

部署到雲端平台

寫好了以後,我們可以直接用 Zeabur CLI 超快速部署上去,只需要在 Terminal 輸入 zeabur 即可:

他會問你你要部署到哪一個專案,或是你也可以像我一樣選擇最下面的 Create a new project 建立新的專案。

note:因為 Zeabur 是台灣的雲端部署平台,如果你在部署過程中遇到任何問題,可以不要猶豫直接到 Zeabur 的官方技術支援 Discord 群組 尋求協助,在一個小時之內就會有中文客服回答你的疑問!

如果你和我一樣選擇建立新的專案,他會問你要部署在哪個區域。建議可以選擇 hkg1(香港)或 hnd1(東京)這兩個區域,對於 Line Bot 來說速度非常快!

選好區域以後他就自動開始部署了,稍微等他幾分鐘就可以啦~

建立網域並設定 Webhook

在等待部署的過程中,我們可以先按下面的 Network,幫我們的 Line Bot 申請一個免費網域:

申請好了以後,我們可以回到 Line Developer Console 把這個網域設定成 Webhook:

比如說我申請網域填寫的是 yuanlin-line-bot 這個名字,所以我拿到的網域就是 yuanlin-line-bot.zeabur.app 這個網域,所以我在 Webhook 就要填寫:

https://yuanlin-line-bot.zeabur.app/callback

這個連結,這樣未來只要有人和我的 Line Bot 說話,他都會發一個 POST 請求到上面這個網址!

測試機器人

恭喜你,到這邊我們的機器人已經大功告成了,接下來我們可以用手機掃描 Line Developer Console 上面的 QR Code,加我們的機器人為 Line 好友,然後和他聊天看看:

以上就是這次關於如何用 Python 初始化一個 Line Bot 的教學文章。如果有任何問題,歡迎在文章下面留言讓我知道哦!

分享你的看法

暫無留言,你可以成為第一個留言的人!

author-avatar

關於作者

Yuanlin Lin 林沅霖

台灣桃園人,目前就讀浙江大學,主修計算機科學與技術,同時兼職外包全端開發工程師,熱愛產品設計與軟體開發。