Files
zyt/admin/src/api/qywx-msg.ts
T
2026-04-21 09:49:44 +08:00

185 lines
4.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<string, any> | 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' }
})
}