import request from '@/utils/request' /** 企业微信 员工↔客户 消息收发(企业群发 + 会话内容存档) */ /** 会话列表(按最近消息时间倒序) */ export interface QywxMsgSession { id: number staff_userid: string external_userid: string roomid: string session_type: number // 1=单聊 2=群聊 last_msg_id: string last_msg_seq: number last_msg_time: number last_msg_type: string last_msg_summary: string unread_staff: number create_time: number update_time: number customer?: { name?: string avatar?: string type?: number gender?: number corp_name?: string unionid?: string } | null staff?: { id?: number name?: string avatar?: string } | null } export interface QywxMsgArchiveItem { id: number msgid: string seq: number action: 'send' | 'recall' | 'switch' from_user: string from_is_staff: boolean to_list: string[] roomid: string msgtype: string content: string media_id: string md5sum: string file_name: string file_size: number file_ext: string play_length: number send_time: number from_profile?: Record | null media?: Array<{ id: number sdkfileid: string status: number file_path: string file_url: string file_size: number }> } export interface QywxSendTask { id: number admin_id: number sender_userid: string external_userids: string[] chat_type: number msg_payload: any msg_template_id: string fail_list: any[] status: number error: string create_time: number update_time: number } export interface QywxMsgAttachment { msgtype: 'image' | 'video' | 'file' | 'link' | 'miniprogram' image?: { media_id: string } video?: { media_id: string } file?: { media_id: string } link?: { title: string; picurl?: string; desc?: string; url: string } miniprogram?: { title: string; pic_media_id: string; appid: string; page: string } } export interface QywxSendPayload { text?: { content: string } attachments?: QywxMsgAttachment[] } /** 会话列表 */ export function qywxMsgSessionLists(params: { page_no?: number page_size?: number admin_id?: number staff_userid?: string external_userid?: string keyword?: string only_unread?: 0 | 1 }) { return request.get({ url: '/qywx.message/session_list', params }) } /** 单会话消息历史 */ export function qywxMsgArchiveLists(params: { page_no?: number page_size?: number session_id?: number staff_userid?: string external_userid?: string roomid?: string before_time?: number after_time?: number }) { return request.get({ url: '/qywx.message/archive_list', params }) } /** 清零会话未读 */ export function qywxMsgMarkRead(session_id: number) { return request.post({ url: '/qywx.message/mark_read', params: { session_id } }) } /** 创建企业群发任务(员工代发) */ export function qywxMsgSend(params: { sender_userid: string external_userids: string[] msg_payload: QywxSendPayload chat_type?: 'single' | 'group' }) { return request.post({ url: '/qywx.message/send', params }) } /** 群发任务列表 */ export function qywxMsgSendTaskLists(params: { page_no?: number page_size?: number sender_userid?: string status?: number }) { return request.get({ url: '/qywx.message/send_task_list', params }) } /** 群发任务送达详情 */ export function qywxMsgSendTaskDetail(task_id: number, cursor = '') { return request.get({ url: '/qywx.message/send_task_detail', params: { task_id, cursor } }) } /** 可代发员工(已绑定企微 userid) */ export function qywxMsgStaffList(keyword = '') { return request.get({ url: '/qywx.message/staff_list', params: { keyword } }) } /** 某员工的客户 */ export function qywxMsgCustomerOfStaff(params: { staff_userid: string keyword?: string limit?: number }) { return request.get({ url: '/qywx.message/customer_of_staff', params }) } /** 会话存档状态(SDK / 私钥诊断) */ export function qywxMsgArchiveStatus() { return request.get({ url: '/qywx.message/archive_status' }) } /** 手动触发一次会话存档拉取 */ export function qywxMsgPullArchive(max_batches = 5, download = false) { return request.post({ url: '/qywx.message/pull_archive', params: { max_batches, download } }) } /** 上传媒体文件到企微,返回 media_id(用于 attachments) */ export async function qywxMsgUploadMedia(file: File, type: 'image' | 'voice' | 'video' | 'file') { const fd = new FormData() fd.append('file', file) fd.append('type', type) return request.post({ url: '/qywx.message/upload_to_qywx', data: fd, headers: { 'Content-Type': 'multipart/form-data' } }) }