
























@@ -16,6 +16,7 @@ import {
1616renderMessagePresentationFallbackText,
1717} from "openclaw/plugin-sdk/interactive-runtime";
1818import type { MessagePresentation } from "openclaw/plugin-sdk/interactive-runtime";
19+import { sendPayloadMediaSequenceOrFallback } from "openclaw/plugin-sdk/reply-payload";
1920import { createTelegramActionGate, resolveTelegramPollActionGateState } from "./accounts.js";
2021import { resolveTelegramInlineButtons } from "./button-types.js";
2122import { notifyTelegramInboundEventOutboundSuccess } from "./inbound-event-delivery.js";
@@ -132,6 +133,48 @@ function readTelegramReplyToMessageId(params: Record<string, unknown>) {
132133);
133134}
134135136+function pushTelegramMediaUrl(mediaUrls: string[], seen: Set<string>, value: unknown): void {
137+if (typeof value !== "string") {
138+return;
139+}
140+const normalized = value.trim();
141+if (!normalized || seen.has(normalized)) {
142+return;
143+}
144+seen.add(normalized);
145+mediaUrls.push(normalized);
146+}
147+148+function readTelegramSendMediaUrls(params: Record<string, unknown>) {
149+const mediaUrls: string[] = [];
150+const seen = new Set<string>();
151+pushTelegramMediaUrl(mediaUrls, seen, params.mediaUrl);
152+pushTelegramMediaUrl(mediaUrls, seen, params.media);
153+pushTelegramMediaUrl(mediaUrls, seen, params.path);
154+pushTelegramMediaUrl(mediaUrls, seen, params.filePath);
155+pushTelegramMediaUrl(mediaUrls, seen, params.fileUrl);
156+if (Array.isArray(params.mediaUrls)) {
157+for (const mediaUrl of params.mediaUrls) {
158+pushTelegramMediaUrl(mediaUrls, seen, mediaUrl);
159+}
160+}
161+if (Array.isArray(params.attachments)) {
162+for (const attachment of params.attachments) {
163+if (!attachment || typeof attachment !== "object" || Array.isArray(attachment)) {
164+continue;
165+}
166+const record = attachment as Record<string, unknown>;
167+pushTelegramMediaUrl(mediaUrls, seen, record.media);
168+pushTelegramMediaUrl(mediaUrls, seen, record.mediaUrl);
169+pushTelegramMediaUrl(mediaUrls, seen, record.path);
170+pushTelegramMediaUrl(mediaUrls, seen, record.filePath);
171+pushTelegramMediaUrl(mediaUrls, seen, record.fileUrl);
172+pushTelegramMediaUrl(mediaUrls, seen, record.url);
173+}
174+}
175+return mediaUrls;
176+}
177+135178function resolveTelegramButtonsFromParams(
136179params: Record<string, unknown>,
137180presentation = normalizeMessagePresentation(params.presentation),
@@ -350,16 +393,13 @@ export async function handleTelegramAction(
350393throw new Error("Telegram sendMessage is disabled.");
351394}
352395const to = readStringParam(params, "to", { required: true });
353-const mediaUrl =
354-readStringParam(params, "mediaUrl") ??
355-readStringParam(params, "media", {
356-trim: false,
357-});
396+const mediaUrls = readTelegramSendMediaUrls(params);
397+const firstMediaUrl = mediaUrls[0];
358398const presentation = normalizeMessagePresentation(params.presentation);
359399const buttons = resolveTelegramButtonsFromParams(params, presentation);
360400const content = readTelegramSendContent({
361401args: params,
362-mediaUrl: mediaUrl ?? undefined,
402+mediaUrl: firstMediaUrl,
363403hasButtons: Array.isArray(buttons) && buttons.length > 0,
364404interactive: params.interactive,
365405 presentation,
@@ -401,15 +441,13 @@ export async function handleTelegramAction(
401441"Telegram bot token missing. Set TELEGRAM_BOT_TOKEN or channels.telegram.botToken.",
402442);
403443}
404-const result = await telegramActionRuntime.sendMessageTelegram(to, content, {
444+const sendOptions = {
405445 cfg,
406446 token,
407447accountId: accountId ?? undefined,
408-mediaUrl: mediaUrl || undefined,
409448mediaLocalRoots: options?.mediaLocalRoots,
410449mediaReadFile: options?.mediaReadFile,
411450gatewayClientScopes: options?.gatewayClientScopes,
412- buttons,
413451replyToMessageId: replyToMessageId ?? undefined,
414452messageThreadId: messageThreadId ?? undefined,
415453quoteText: quoteText ?? undefined,
@@ -419,6 +457,22 @@ export async function handleTelegramAction(
419457readBooleanParam(params, "forceDocument") ??
420458readBooleanParam(params, "asDocument") ??
421459false,
460+};
461+const result = await sendPayloadMediaSequenceOrFallback({
462+text: content,
463+ mediaUrls,
464+fallbackResult: { messageId: "unknown", chatId: to },
465+sendNoMedia: async () =>
466+await telegramActionRuntime.sendMessageTelegram(to, content, {
467+ ...sendOptions,
468+ buttons,
469+}),
470+send: async ({ text, mediaUrl, isFirst }) =>
471+await telegramActionRuntime.sendMessageTelegram(to, text, {
472+ ...sendOptions,
473+ mediaUrl,
474+ ...(isFirst ? { buttons } : {}),
475+}),
422476});
423477notifyVisibleOutboundSuccess(to, messageThreadId);
424478await maybePinTelegramActionSend({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。