324 lines
8.4 KiB
TypeScript
324 lines
8.4 KiB
TypeScript
import http from "../http";
|
|
import axios from "axios";
|
|
|
|
export interface MeetingVO {
|
|
id: number;
|
|
tenantId: number;
|
|
creatorId: number;
|
|
creatorName?: string;
|
|
hostUserId?: number;
|
|
hostName?: string;
|
|
title: string;
|
|
meetingTime: string;
|
|
participants: string;
|
|
participantIds?: number[];
|
|
tags: string;
|
|
audioUrl: string;
|
|
audioSaveStatus?: "NONE" | "SUCCESS" | "FAILED";
|
|
audioSaveMessage?: string;
|
|
summaryContent: string;
|
|
analysis?: {
|
|
overview?: string;
|
|
keywords?: string[];
|
|
chapters?: Array<{ time?: string; title?: string; summary?: string }>;
|
|
speakerSummaries?: Array<{ speaker?: string; summary?: string }>;
|
|
keyPoints?: Array<{ title?: string; summary?: string; speaker?: string; time?: string }>;
|
|
todos?: string[];
|
|
};
|
|
status: number;
|
|
displayStatus?: number;
|
|
realtimeSessionStatus?: RealtimeMeetingSessionStatus["status"];
|
|
createdAt: string;
|
|
}
|
|
|
|
export interface CreateMeetingCommand {
|
|
id?: number;
|
|
title: string;
|
|
meetingTime: string;
|
|
participants: string;
|
|
tags: string;
|
|
hostUserId?: number;
|
|
hostName?: string;
|
|
audioUrl?: string;
|
|
asrModelId: number;
|
|
summaryModelId?: number;
|
|
promptId: number;
|
|
useSpkId?: number;
|
|
enableTextRefine?: boolean;
|
|
hotWords?: string[];
|
|
}
|
|
|
|
export type MeetingDTO = CreateMeetingCommand;
|
|
|
|
export interface CreateRealtimeMeetingCommand {
|
|
title: string;
|
|
meetingTime: string;
|
|
participants: string;
|
|
tags: string;
|
|
hostUserId?: number;
|
|
hostName?: string;
|
|
asrModelId: number;
|
|
summaryModelId?: number;
|
|
promptId: number;
|
|
mode?: string;
|
|
language?: string;
|
|
useSpkId?: number;
|
|
enablePunctuation?: boolean;
|
|
enableItn?: boolean;
|
|
enableTextRefine?: boolean;
|
|
saveAudio?: boolean;
|
|
hotWords?: string[];
|
|
}
|
|
|
|
export interface UpdateMeetingBasicCommand {
|
|
meetingId: number;
|
|
title?: string;
|
|
meetingTime?: string;
|
|
tags?: string;
|
|
}
|
|
|
|
export type MeetingUpdateBasicDTO = UpdateMeetingBasicCommand;
|
|
|
|
export interface UpdateMeetingSummaryCommand {
|
|
meetingId: number;
|
|
summaryContent: string;
|
|
}
|
|
|
|
export type MeetingUpdateSummaryDTO = UpdateMeetingSummaryCommand;
|
|
|
|
export const getMeetingPage = (params: {
|
|
current: number;
|
|
size: number;
|
|
title?: string;
|
|
viewType?: "all" | "created" | "involved";
|
|
}) => {
|
|
return http.get<{ code: string; data: { records: MeetingVO[]; total: number }; msg: string }>(
|
|
"/api/biz/meeting/page",
|
|
{ params }
|
|
);
|
|
};
|
|
|
|
export const createMeeting = (data: CreateMeetingCommand) => {
|
|
return http.post<{ code: string; data: MeetingVO; msg: string }>(
|
|
"/api/biz/meeting",
|
|
data
|
|
);
|
|
};
|
|
|
|
export interface RealtimeTranscriptItemDTO {
|
|
speakerId?: string;
|
|
speakerName?: string;
|
|
content: string;
|
|
startTime?: number;
|
|
endTime?: number;
|
|
}
|
|
|
|
export interface RealtimeSocketSessionVO {
|
|
sessionToken: string;
|
|
path: string;
|
|
expiresInSeconds: number;
|
|
startMessage: Record<string, any>;
|
|
}
|
|
|
|
export interface RealtimeSocketSessionRequest {
|
|
asrModelId: number;
|
|
mode?: string;
|
|
language?: string;
|
|
useSpkId?: number;
|
|
enablePunctuation?: boolean;
|
|
enableItn?: boolean;
|
|
enableTextRefine?: boolean;
|
|
saveAudio?: boolean;
|
|
hotwords?: Array<{ hotword: string; weight: number }>;
|
|
}
|
|
|
|
export interface RealtimeMeetingSessionStatus {
|
|
meetingId: number;
|
|
status: "IDLE" | "ACTIVE" | "PAUSED_EMPTY" | "PAUSED_RESUMABLE" | "COMPLETING" | "COMPLETED";
|
|
hasTranscript: boolean;
|
|
canResume: boolean;
|
|
remainingSeconds: number;
|
|
resumeExpireAt?: number;
|
|
activeConnection: boolean;
|
|
resumeConfig?: RealtimeSocketSessionRequest;
|
|
}
|
|
|
|
export const createRealtimeMeeting = (data: CreateRealtimeMeetingCommand) => {
|
|
return http.post<{ code: string; data: MeetingVO; msg: string }>(
|
|
"/api/biz/meeting/realtime/start",
|
|
data
|
|
);
|
|
};
|
|
|
|
export const appendRealtimeTranscripts = (meetingId: number, data: RealtimeTranscriptItemDTO[]) => {
|
|
return http.post<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${meetingId}/realtime/transcripts`,
|
|
data
|
|
);
|
|
};
|
|
|
|
export const getRealtimeMeetingSessionStatus = (meetingId: number) => {
|
|
return http.get<{ code: string; data: RealtimeMeetingSessionStatus; msg: string }>(
|
|
`/api/biz/meeting/${meetingId}/realtime/session-status`
|
|
);
|
|
};
|
|
|
|
export const getRealtimeMeetingSessionStatuses = (meetingIds: number[]) => {
|
|
return http.post<{ code: string; data: Record<number, RealtimeMeetingSessionStatus>; msg: string }>(
|
|
"/api/biz/meeting/realtime/session-status/batch",
|
|
meetingIds
|
|
);
|
|
};
|
|
|
|
export const pauseRealtimeMeeting = (meetingId: number) => {
|
|
return http.post<{ code: string; data: RealtimeMeetingSessionStatus; msg: string }>(
|
|
`/api/biz/meeting/${meetingId}/realtime/pause`,
|
|
{}
|
|
);
|
|
};
|
|
|
|
export const openRealtimeMeetingSocketSession = (
|
|
meetingId: number,
|
|
data: RealtimeSocketSessionRequest,
|
|
) => {
|
|
return http.post<{ code: string; data: RealtimeSocketSessionVO; msg: string }>(
|
|
`/api/biz/meeting/${meetingId}/realtime/socket-session`,
|
|
data
|
|
);
|
|
};
|
|
|
|
export const completeRealtimeMeeting = (meetingId: number, data?: { audioUrl?: string; overwriteAudio?: boolean }) => {
|
|
return http.post<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${meetingId}/realtime/complete`,
|
|
data || {}
|
|
);
|
|
};
|
|
|
|
export const deleteMeeting = (id: number) => {
|
|
return http.delete<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${id}`
|
|
);
|
|
};
|
|
|
|
export interface MeetingTranscriptVO {
|
|
id: number;
|
|
speakerId: string;
|
|
speakerName: string;
|
|
speakerLabel: string;
|
|
content: string;
|
|
startTime: number;
|
|
endTime: number;
|
|
}
|
|
|
|
export const getMeetingDetail = (id: number) => {
|
|
return http.get<{ code: string; data: MeetingVO; msg: string }>(
|
|
`/api/biz/meeting/${id}`
|
|
);
|
|
};
|
|
|
|
export const getTranscripts = (id: number) => {
|
|
return http.get<{ code: string; data: MeetingTranscriptVO[]; msg: string }>(
|
|
`/api/biz/meeting/${id}/transcripts`
|
|
);
|
|
};
|
|
|
|
export interface MeetingSpeakerUpdateDTO {
|
|
meetingId: number;
|
|
speakerId: string;
|
|
newName: string;
|
|
label: string;
|
|
}
|
|
|
|
export interface MeetingTranscriptUpdateDTO {
|
|
meetingId: number;
|
|
transcriptId: number;
|
|
content: string;
|
|
}
|
|
|
|
export const updateSpeakerInfo = (params: MeetingSpeakerUpdateDTO) => {
|
|
return http.put<{ code: string; data: boolean; msg: string }>(
|
|
"/api/biz/meeting/speaker",
|
|
params
|
|
);
|
|
};
|
|
|
|
export const updateMeetingTranscript = (params: MeetingTranscriptUpdateDTO) => {
|
|
return http.put<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${params.meetingId}/transcripts/${params.transcriptId}`,
|
|
params
|
|
);
|
|
};
|
|
|
|
export interface MeetingResummaryDTO {
|
|
meetingId: number;
|
|
summaryModelId: number;
|
|
promptId: number;
|
|
}
|
|
|
|
export const reSummary = (params: MeetingResummaryDTO) => {
|
|
return http.post<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${params.meetingId}/summary/regenerate`,
|
|
params
|
|
);
|
|
};
|
|
|
|
export const updateMeetingBasic = (data: UpdateMeetingBasicCommand) => {
|
|
return http.put<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${data.meetingId}/basic`,
|
|
data
|
|
);
|
|
};
|
|
|
|
export const updateMeetingSummary = (data: UpdateMeetingSummaryCommand) => {
|
|
return http.put<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${data.meetingId}/summary`,
|
|
data
|
|
);
|
|
};
|
|
|
|
export interface UpdateMeetingParticipantsCommand {
|
|
meetingId: number;
|
|
participants: string;
|
|
}
|
|
|
|
export type MeetingParticipantsUpdateDTO = UpdateMeetingParticipantsCommand;
|
|
|
|
export const updateMeetingParticipants = (params: UpdateMeetingParticipantsCommand) => {
|
|
return http.put<{ code: string; data: boolean; msg: string }>(
|
|
`/api/biz/meeting/${params.meetingId}/participants`,
|
|
params
|
|
);
|
|
};
|
|
|
|
export const uploadAudio = (file: File) => {
|
|
const formData = new FormData();
|
|
formData.append("file", file);
|
|
return http.post<{ code: string; data: string; msg: string }>(
|
|
"/api/biz/meeting/upload",
|
|
formData,
|
|
{ headers: { "Content-Type": "multipart/form-data" } }
|
|
);
|
|
};
|
|
|
|
export interface MeetingProgress {
|
|
percent: number;
|
|
message: string;
|
|
updateAt: number;
|
|
eta?: number;
|
|
}
|
|
|
|
export const getMeetingProgress = (id: number) => {
|
|
return http.get<{ code: string; data: MeetingProgress; msg: string }>(
|
|
`/api/biz/meeting/${id}/progress`
|
|
);
|
|
};
|
|
|
|
export const downloadMeetingSummary = (id: number, format: "pdf" | "word") => {
|
|
const token = localStorage.getItem("accessToken");
|
|
return axios.get(`/api/biz/meeting/${id}/summary/export`, {
|
|
params: { format },
|
|
responseType: "blob",
|
|
headers: token ? { Authorization: `Bearer ${token}` } : {}
|
|
});
|
|
};
|