185 lines
4.9 KiB
TypeScript
185 lines
4.9 KiB
TypeScript
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' }
|
||
})
|
||
}
|