在建立好帐号之后,我们可以开始来看看 Line bot SDK,可以从 Line developers ocumentation 中找到 python 的 github,从这边可以找到 Line bot 的最基础架构,我们之后想变化,增加的功能都是从这里开始。
# app.pyfrom flask import Flask, request, abortfrom linebot import ( LineBotApi, WebhookHandler)from linebot.exceptions import ( InvalidSignatureError)from linebot.models import ( MessageEvent, TextMessage, TextSendMessage,)app = Flask(__name__)line_bot_api = LineBotApi('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: 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()
首先,我们可以将整段程式码分为三个区块理解,分别是引入模组、告知 Line bot 的基本资料以及接收 Line 的资讯。
第一个区块的部分,主要引入了为了架设网站用的 Flask 以及整个 Line bot 中最重要的 Line bot API,这边架设网站不一定要使用 Flask,可以根据自己的习惯或是需求去改用其他的网页框架。这两个套件都要记得在 cmd 中进行 install。
pip install
line-bot-sdk
flask
而 Line bot API 的部分,因为最常用到的是讯息事件以及文字的接收与回覆,因此在一开始的架构之中,已经先把MessageEvent
、TextMessage
、TextSendMessage
给先引入完毕,若是后续有要再用到像是图片、音档等其他 API 的时候,就会需要再此处进行引入。
from flask import Flask, request, abortfrom linebot import ( LineBotApi, WebhookHandler)from linebot.exceptions import ( InvalidSignatureError)from linebot.models import ( MessageEvent, TextMessage, TextSendMessage,)app = Flask(__name__)
第二个区块是为了要让程式码知道他该去找到那一个帐号接收与传递资讯,这里需要填入的资料可以在 Line decelopers中进入建立好的 channel,从 Basic settings 的下方找到 channel secret,Messaging API 的下方中点选 issue 取得 channel access token,token 在点选 issue 后会让你设置重置的时间,如果不希望他重置的话,可以将时间设定为 0 hours。
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')handler = WebhookHandler('YOUR_CHANNEL_SECRET')
图一、channel secret
图二、channel access token
图三、设置 token 重置时间
第三个区块是用来接收当 Line bot 被触发各事件时,所得到的资讯,后续我们要对接收到的资讯做判断、归类、处理的时候,都是会在这区块中撰写。
@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: 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()