mirror of https://github.com/openclaw/openclaw.git
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { assertFeishuMessageApiSuccess, toFeishuSendResult } from "./send-result.js";
|
|
|
|
type FeishuMessageClient = {
|
|
im: {
|
|
message: {
|
|
reply: (params: {
|
|
path: { message_id: string };
|
|
data: Record<string, unknown>;
|
|
}) => Promise<{ code?: number; msg?: string; data?: { message_id?: string } }>;
|
|
create: (params: {
|
|
params: { receive_id_type: string };
|
|
data: Record<string, unknown>;
|
|
}) => Promise<{ code?: number; msg?: string; data?: { message_id?: string } }>;
|
|
};
|
|
};
|
|
};
|
|
|
|
export async function sendFeishuMessageWithOptionalReply(params: {
|
|
client: FeishuMessageClient;
|
|
receiveId: string;
|
|
receiveIdType: string;
|
|
content: string;
|
|
msgType: string;
|
|
replyToMessageId?: string;
|
|
replyInThread?: boolean;
|
|
sendErrorPrefix: string;
|
|
replyErrorPrefix: string;
|
|
fallbackSendErrorPrefix?: string;
|
|
shouldFallbackFromReply?: (response: { code?: number; msg?: string }) => boolean;
|
|
}): Promise<{ messageId: string; chatId: string }> {
|
|
const data = {
|
|
content: params.content,
|
|
msg_type: params.msgType,
|
|
};
|
|
|
|
if (params.replyToMessageId) {
|
|
const response = await params.client.im.message.reply({
|
|
path: { message_id: params.replyToMessageId },
|
|
data: {
|
|
...data,
|
|
...(params.replyInThread ? { reply_in_thread: true } : {}),
|
|
},
|
|
});
|
|
if (params.shouldFallbackFromReply?.(response)) {
|
|
const fallback = await params.client.im.message.create({
|
|
params: { receive_id_type: params.receiveIdType },
|
|
data: {
|
|
receive_id: params.receiveId,
|
|
...data,
|
|
},
|
|
});
|
|
assertFeishuMessageApiSuccess(
|
|
fallback,
|
|
params.fallbackSendErrorPrefix ?? params.sendErrorPrefix,
|
|
);
|
|
return toFeishuSendResult(fallback, params.receiveId);
|
|
}
|
|
assertFeishuMessageApiSuccess(response, params.replyErrorPrefix);
|
|
return toFeishuSendResult(response, params.receiveId);
|
|
}
|
|
|
|
const response = await params.client.im.message.create({
|
|
params: { receive_id_type: params.receiveIdType },
|
|
data: {
|
|
receive_id: params.receiveId,
|
|
...data,
|
|
},
|
|
});
|
|
assertFeishuMessageApiSuccess(response, params.sendErrorPrefix);
|
|
return toFeishuSendResult(response, params.receiveId);
|
|
}
|