Files
wechat-gggithub--wechat-cla…/src/wechat/types.ts
T
2026-07-13 12:33:50 +08:00

167 lines
4.3 KiB
TypeScript

// WeChat Work (企业微信) protocol type definitions
// Extracted from the ClawBot WeChat plugin API
// ── Enums ──────────────────────────────────────────────────────────────────
export enum MessageType {
USER = 1,
BOT = 2,
}
export enum MessageItemType {
TEXT = 1,
IMAGE = 2,
VOICE = 3,
FILE = 4,
VIDEO = 5,
}
export enum MessageState {
NEW = 0,
GENERATING = 1,
FINISH = 2,
}
// ── Media ──────────────────────────────────────────────────────────────────
export interface CDNMedia {
aes_key: string;
encrypt_query_param: string;
cdn_url?: string;
}
// ── Message Items ───────────────────────────────────────────────────────────
export interface TextItem {
text: string;
}
export interface ImageItem {
cdn_media?: CDNMedia;
/** Alternative field name used by some API versions */
aeskey?: string;
media?: { encrypt_query_param: string; aes_key?: string; encrypt_type?: number };
url?: string;
mid_size?: number;
hd_size?: number;
}
export interface VoiceItem {
media?: CDNMedia;
/** 语音转文字内容 */
text?: string;
}
export interface FileItem {
cdn_media?: CDNMedia;
media?: { encrypt_query_param: string; aes_key?: string; encrypt_type?: number };
file_name?: string;
len?: string;
}
export interface VideoItem {
cdn_media: CDNMedia;
}
export interface MessageItem {
type: MessageItemType;
text_item?: TextItem;
image_item?: ImageItem;
voice_item?: VoiceItem;
file_item?: FileItem;
video_item?: VideoItem;
}
// ── Weixin Message ──────────────────────────────────────────────────────────
export interface WeixinMessage {
seq?: number;
message_id?: number;
from_user_id?: string;
to_user_id?: string;
create_time_ms?: number;
message_type?: MessageType;
message_state?: MessageState;
item_list?: MessageItem[];
context_token?: string;
}
// ── GetUpdates API ──────────────────────────────────────────────────────────
export interface GetUpdatesReq {
get_updates_buf?: string;
}
export interface GetUpdatesResp {
ret?: number;
retmsg?: string;
sync_buf: string;
get_updates_buf: string;
msgs?: WeixinMessage[];
}
// ── SendMessage API ─────────────────────────────────────────────────────────
export interface OutboundMessage {
from_user_id: string;
to_user_id: string;
client_id: string;
message_type: MessageType;
message_state: MessageState;
context_token: string;
item_list: MessageItem[];
}
export interface SendMessageReq {
msg: OutboundMessage;
}
// ── Typing API ──────────────────────────────────────────────────────────────
export const TypingStatus = {
TYPING: 1,
CANCEL: 2,
} as const;
export interface SendTypingReq {
ilink_user_id: string;
typing_ticket: string;
status: number;
}
export interface GetConfigResp {
ret?: number;
errmsg?: string;
typing_ticket?: string;
}
// ── GetUploadUrl API ────────────────────────────────────────────────────────
export const UploadMediaType = {
IMAGE: 1,
VIDEO: 2,
FILE: 3,
VOICE: 4,
} as const;
export interface GetUploadUrlReq {
filekey: string;
media_type: number;
to_user_id: string;
rawsize: number;
rawfilemd5: string;
filesize: number;
no_need_thumb: boolean;
aeskey: string;
base_info: {
channel_version: string;
bot_agent: string;
};
}
export interface GetUploadUrlResp {
ret?: number;
upload_param?: string;
upload_full_url?: string;
}