[LineBot] #1 如何發送flex message - antqtech/KM GitHub Wiki
如何使用Line發送flex message
環境
-
語言
- python
-
SDK
- linebot.v3
詳情可參考GitHub - line/line-bot-sdk-python: LINE Messaging API SDK for Python以及一大堆網路教學文章。
app.py
套件引入
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,
PushMessageRequest,
ReplyMessageRequest,
TextMessage,
FlexMessage,
FlexBubble,
FlexImage,
FlexMessage,
FlexBox,
FlexText,
FlexIcon,
FlexButton,
FlexSeparator,
FlexContainer,
URIAction
)
from linebot.v3.webhooks import MessageEvent, TextMessageContent
from email_validator import validate_email, EmailNotValidError
import requests
import json
import os
主要是需要
from linebot.v3.messaging import (
Configuration,
ApiClient,
MessagingApi,
PushMessageRequest,
ReplyMessageRequest,
TextMessage,
FlexMessage,
FlexContainer,
)
因為v3的教學不多,找了有點久才找到要在messaging這邊引入這些。
配置
# 初始化 Flask 應用
app = Flask(__name__)
# Line bot 配置
configuration = Configuration(access_token=os.environ.get('CHANNEL_ACCESS_TOKEN'))
handler = WebhookHandler(os.environ.get('CHANNEL_SECRET'))
這部分網路上有一堆教學,基本上去line develop申請後可以拿到CHANNEL_ACCESS_TOKEN、CHANNEL_SECRET,如果有部署在某個平台,會將這兩個Token設定成環境變數,安全性較高。
這裡專注於怎麼發flex message。
收到訊息的處理程序
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
message_text = event.message.text
user_id = event.source.user_id
if message_text == 'flex message':
line_flex_json = {
"type": "bubble",
"header": {
"type": "box",
"layout": "vertical",
"contents": []
},
"hero": {
"type": "box",
"layout": "vertical",
"contents": []
},
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "hello, world"
}
]
},
"footer": {
"type": "box",
"layout": "vertical",
"contents": []
}
}
line_flex_str = json.dumps(line_flex_json)
reply_flex_to_user(event.reply_token, line_flex_str)
return
def reply_flex_to_user(reply_token, line_flex_str):
with ApiClient(configuration) as api_client:
line_bot_api = MessagingApi(api_client)
line_bot_api.reply_message_with_http_info(
ReplyMessageRequest(
reply_token=reply_token,
messages=[FlexMessage(alt_text='flex Message', contents=FlexContainer.from_json(line_flex_str))]
)
)
使用flex message有兩種方式:
-
使用FlexBubble, FlexImage, FlexBox, FlexText, FlexIcon, FlexButton, FlexSeparator等物件自己刻出一個模板。
-
使用FLEX MESSAGE SIMULATOR弄出一個JSON模板
這裡推薦使用第二種方式,文章也是使用第二種方式。
參考
GitHub - line/line-bot-sdk-python: LINE Messaging API SDK for Python