fix: use mediaId for file reply and improve excel file payload detection

This commit is contained in:
Mayorz 2026-03-04 15:52:44 +08:00
parent f7ffdb4233
commit b96e333df8

View File

@ -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"