167 lines
4.3 KiB
TypeScript
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;
|
|
}
|