建立專案
建立專案。
1 2
| mkdir flask-line-bot cd flask-line-bot
|
建立環境。
1 2
| pyenv virtualenv 3.11.4 flask-line-bot pyenv local flask-line-bot
|
建立頻道
登入 LINE Developers 頁面,選擇 Messaging API 產品,建立一個 Channel。
實作
新增 .gitignore
檔。
1 2 3 4
| __pycache__ .vscode .vercel .env
|
新增 requirements.txt
檔
1 2 3
| Flask==2.2.2 line-bot-sdk python-dotenv
|
安裝依賴套件。
1
| pip install -r requirements.txt
|
新增 .env
檔。
1 2
| LINE_CHANNEL_ACCESS_TOKEN= LINE_CHANNEL_SECRET=
|
新增 api/index.py
檔。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| from flask import Flask, request, abort from dotenv import load_dotenv 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
load_dotenv()
app = Flask(__name__)
configuration = Configuration(access_token=os.getenv('LINE_CHANNEL_ACCESS_TOKEN')) webhook_handler = WebhookHandler(os.getenv('LINE_CHANNEL_SECRET'))
@app.route('/') def home(): return 'OK'
@app.route("/webhook", methods=['POST']) def webhook(): signature = request.headers['X-Line-Signature'] body = request.get_data(as_text=True) app.logger.info("Request body: " + body) try: webhook_handler.handle(body, signature) except InvalidSignatureError: app.logger.info("Invalid signature. Please check your channel access token or channel secret.") abort(400) return 'OK'
@webhook_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)] ) )
|
啟動服務。
1
| flask --app api/index run
|
部署
新增 vercel.json
檔。
1 2 3 4 5 6 7 8
| { "rewrites": [ { "source": "/(.*)", "destination": "/api/index" } ] }
|
推送程式碼到儲存庫。
部署
在 Vercel 平台註冊帳號,並且連結儲存庫。
然後在設定頁面,新增相關環境變數。
將 Function 區域改為東京或新加坡。
設定
- 進到「Messaging API」頁面,設置應用程式的「Webhook URL」。
1
| https://line-bot-flask.vercel.app/webhook
|
點選「Verify」按鈕。
將「Use webhook」功能開啟。
將「Auto-reply messages」和「Greeting messages」功能關閉。
程式碼
參考資料