[Python]如何利用Flask搭建一个Web服务器,并透过Ngrok访问来实现LINE Bot功能?

发布于:2025-03-30 ⋅ 阅读:(30) ⋅ 点赞:(0)

AI ChatBot I How to Build AI LINE Bot with Ollama, Flask and Ngrok?

Flask 是一个轻量级的Web框架,主要用于建立基于Python的Web应用和API。它可搭建webhook本地服务器,同时提供灵活的URL路由和HTTP请求处理方式,允许开发者快速启动并测试应用功能。由于其结构简单,开发者常用其作为建立和测试 MVP(最小可行性产品),同时其也非常适合新手作为入门学习Web开发的工具之一。

本文利用树莓派4B搭建Flask和Ngrok来实现简易的LINE Bot功能,其中Ngrok的安装和建置可参考此篇文章,本篇主要着重在Flask环境建置和程式码的部分。

Flask环境建置:

a.为了避免版本干扰,建置python venv虚拟环境

raspberry@raspberry-desktop:~/python-venv$ python -m venv ngrok_linebot_env raspberry@raspberry-desktop:~/python-venv$ source ngrok_linebot_env/bin/active

b.在该虚拟环境中,安装flask和line-bot-sdk

(ngrok_linebot_env) raspberry@raspberry-desktop:~/python-venv$ pip install flask line-bot-sdk

程式码:

该程式码范例主要是让LINE Bot回应与请求相同的内容,相当于是一只学人说话的鹦鹉。

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 和 Channel Secret
configuration = Configuration(access_token='your Channel Access Token')
handler = WebhookHandler('your Channel Secret')

#根路径 "/" (用于检测flask server是否有顺利运作)
@app.route("/")
def index():
    return "Hello, Flask is running!"

#LINE Bot的Webhook回调路由
@app.route("/callback", methods=['POST'])
def callback():
    #X-Line-Signature headers info
    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:
        app.logger.info("Invalid signature. Please check your channel access 
token/channel secret.")
        abort(400)
    return 'OK'

#讯息处理function
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
    #利用ApiClient建立与LINE Messaging API的串接
    with ApiClient(configuration) as api_client:
        line_bot_api = MessagingApi(api_client)#创建MessagingApi实例
        #ReplyMessageRequest,用于发送回覆讯息
        reply_message_request = ReplyMessageRequest(
            reply_token=event.reply_token,          
            messages=[TextMessage(text=event.message.text)]  #将接收到的讯息作为回覆讯息
        )
        
        #利用MessagingApi的reply_message_with_http_info方法发送回覆讯息
        line_bot_api.reply_message_with_http_info(reply_message_request)

if __name__ == "__main__":
    app.run(port=5000) #port=5000, 须与ngork的port=5000一致

若想让使用者透过LINE与AI模型进行问答,可考虑与OpenAI的API进行串接,若是考量问答数据有隐私或商业机密,则可考虑搭建本地AI服务器并与之串接,如Ollama。本文封面视频即是利用Flask和Ollama串接的LINE Bot测试效果。


网站公告

今日签到

点亮在社区的每一天
去签到