Skip to content

Commit 6091a12

Browse files
authored
Merge pull request #2 from gdsc-ncku/flex-msg
feat: handle text for flex message
2 parents b6529d8 + a187272 commit 6091a12

2 files changed

Lines changed: 40 additions & 8 deletions

File tree

linebot/app/routers/linebot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
@handler.add(MessageEvent, message=TextMessage)
1616
def handle_text_message(event):
1717
print("收到文字訊息")
18-
reply_message = message_service.handle_text_message(event)
19-
message_service.send_message(event.reply_token, [reply_message])
18+
reply_messages = message_service.handle_text_message(event)
19+
message_service.send_message(event.reply_token, reply_messages)
2020

2121

2222
@handler.add(MessageEvent, message=ImageMessage)

linebot/app/services/message_service.py

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import logging
2-
import os
2+
import json
33

44
from linebot.models import (
55
TextSendMessage,
66
QuickReply,
77
QuickReplyButton,
88
MessageAction,
99
SendMessage,
10+
FlexSendMessage,
1011
)
1112
from ..api.vision import process_image
1213
from ..config.line_config import line_bot_api
@@ -37,12 +38,43 @@ def handle_text_message(self, event) -> TextSendMessage:
3738
# 產生回應訊息
3839
quick_reply = None
3940
if user_input in COMMANDS:
40-
quick_reply = self._create_quick_reply()
4141
response_text = COMMANDS[user_input]
42-
else:
43-
response_text = inference(user_input, user_id)
44-
45-
return TextSendMessage(text=response_text, quick_reply=quick_reply)
42+
quick_reply = self._create_quick_reply()
43+
return [TextSendMessage(text=response_text, quick_reply=quick_reply)]
44+
45+
# 處理一般查詢
46+
response_text = inference(user_input, user_id)
47+
quick_reply = self._create_quick_reply()
48+
49+
# 處理可能包含 Flex Message 的回應
50+
if "===FLEX_MESSAGE===" in response_text:
51+
parts = response_text.split("===FLEX_MESSAGE===")
52+
text_content = parts[0].strip()
53+
text_message = TextSendMessage(
54+
text=text_content, quick_reply=quick_reply
55+
)
56+
57+
# 檢查是否有 Flex Message 部分
58+
if len(parts) > 1:
59+
flex_content = (
60+
parts[1].strip().replace("```", "").replace("json", "")
61+
)
62+
if flex_content and flex_content != "False":
63+
try:
64+
flex_json = json.loads(flex_content)
65+
return [
66+
text_message,
67+
FlexSendMessage(
68+
alt_text="詳細資訊", contents=flex_json
69+
),
70+
]
71+
except Exception as e:
72+
logger.error(f"Flex訊息解析錯誤: {str(e)}", exc_info=True)
73+
74+
return [text_message]
75+
76+
# 純文字回應
77+
return [TextSendMessage(text=response_text, quick_reply=quick_reply)]
4678

4779
except Exception as e:
4880
logger.error(f"處理訊息時發生錯誤: {str(e)}", exc_info=True)

0 commit comments

Comments
 (0)