From b96e333df878287ef165896f65f80db983f5edff Mon Sep 17 00:00:00 2001 From: Mayorz Date: Wed, 4 Mar 2026 15:52:44 +0800 Subject: [PATCH] fix: use mediaId for file reply and improve excel file payload detection --- remote_sync/bot.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/remote_sync/bot.py b/remote_sync/bot.py index 11ca4ec..6f2d474 100755 --- a/remote_sync/bot.py +++ b/remote_sync/bot.py @@ -1488,11 +1488,14 @@ class OpenClawDingTalkBot(ChatbotHandler): return None def _extract_incoming_file_payload(self, callback_data: dict, msg: ChatbotMessage) -> dict: - if str(getattr(msg, "message_type", "")).lower() != "file": - return {} payload = self._find_download_code_payload(callback_data) if not payload: payload = self._find_download_code_payload(getattr(msg, "extensions", {})) + if not payload: + try: + payload = self._find_download_code_payload(msg.to_dict()) + except Exception: + payload = None if not payload: return {} file_name = payload.get("file_name") or "" @@ -1504,6 +1507,8 @@ class OpenClawDingTalkBot(ChatbotHandler): if file_name: break payload["file_name"] = self._normalize_file_name(file_name or "upload.xlsx") + if not self._is_supported_excel_file(payload["file_name"]): + return {} return payload def _guess_image_ext(self, content_type: str, source_url: str) -> str: @@ -2194,7 +2199,7 @@ class OpenClawDingTalkBot(ChatbotHandler): values = { "msgtype": "file", "file": { - "media_id": media_id, + "mediaId": media_id, }, "at": { "atUserIds": [msg.sender_staff_id] if msg.sender_staff_id else [], @@ -2479,6 +2484,13 @@ class OpenClawDingTalkBot(ChatbotHandler): incoming_file_payload = self._extract_incoming_file_payload(callback.data, msg) has_excel_file = bool(incoming_file_payload) conversation_key = re.sub(r"[^A-Za-z0-9_-]+", "-", str(getattr(msg, "conversation_id", "") or "default")) + self.logger.info( + "incoming message: type=%s has_excel_file=%s has_image=%s text_len=%s", + str(getattr(msg, "message_type", "")), + has_excel_file, + bool(incoming_image_codes), + len(text or ""), + ) if not text and not incoming_image_codes and not has_excel_file: return AckMessage.STATUS_OK, "ignored"