joytalk 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,316 @@
1
+ import { FaqListResponse } from './request';
2
+ /**
3
+ * 消息类型
4
+ * 1.发送 2.撤回 3.编辑 4.系统通知 5.转接 6.进线 7.回复 8.解绑
5
+ */
6
+ export declare enum MessageType {
7
+ /** 发送 */
8
+ SEND = "1",
9
+ /** 撤回 */
10
+ WITHDRAW = "2",
11
+ /** 编辑 */
12
+ EDIT = "3",
13
+ /** 系统通知 */
14
+ SYSTEM_NOTICE = "4",
15
+ /** 转接 */
16
+ TRANSFER = "5",
17
+ /** 进线 */
18
+ INBOUND = "6",
19
+ /** 回复 */
20
+ REPLY = "7",
21
+ /** 解绑 */
22
+ UNBIND = "8"
23
+ }
24
+ /**
25
+ * 聊天类型
26
+ * 1.文字 2.图片 3.视频 4.文件 5.faq
27
+ */
28
+ export declare enum ChatType {
29
+ /** 文字 */
30
+ TEXT = "1",
31
+ /** 图片 */
32
+ IMAGE = "2",
33
+ /** 视频 */
34
+ VIDEO = "3",
35
+ /** 文件 */
36
+ FILE = "4",
37
+ /** faq */
38
+ FAQ = "5"
39
+ }
40
+ export declare enum MessageCode {
41
+ /** 连接成功 */
42
+ CONNECT_SUCCESS = 200,
43
+ /** 连接失败 */
44
+ CONNECT_FAILED = 40001,
45
+ /** 转接成功通知原客服 */
46
+ TRANSFER_CUSTOMER_SUCCESS = 201,
47
+ /** 转接成功通知转接客服 */
48
+ TRANSFER_TO_CUSTOMER_SUCCESS = 202,
49
+ /** 转接成功通知用户 */
50
+ TRANSFER_USER_SUCCESS = 203,
51
+ /** 转接失败 */
52
+ TRANSFER_FAIL = 50001,
53
+ /** 匹配失败 */
54
+ MATCH_FAIL = 50002,
55
+ /** 匹配成功,返回信息 */
56
+ MATCH_INFO = 50005,
57
+ /** 分配成功 */
58
+ MATCH_SUCCESS = 50006,
59
+ /** 撤回 */
60
+ RETRACT = 204,
61
+ /** 撤回失败 */
62
+ RETRACT_FAIL = 50003,
63
+ /** 编辑 */
64
+ EDIT = 205,
65
+ /** 编辑失败 */
66
+ EDIT_FAIL = 50004,
67
+ /** 通用错误码 */
68
+ COMMON_FAIL = 50000,
69
+ /** 发送成功 */
70
+ SEND_SUCCESS = 206,
71
+ /** 发送回调 */
72
+ SEND_CALLBACK = 207,
73
+ /** 变更会话状态 */
74
+ CHANGE_CHAT_STATUS = 208
75
+ }
76
+ export declare enum SendUserType {
77
+ /** 客服 */
78
+ CUSTOMER = "1",
79
+ /** 用户 */
80
+ USER = "2",
81
+ /** 匿名 */
82
+ ANONYMOUS = "3"
83
+ }
84
+ /**
85
+ * 消息对象基础字段
86
+ */
87
+ interface MessageBase {
88
+ /** 消息 */
89
+ msg?: string;
90
+ /** 消息类型 */
91
+ msgType: MessageType;
92
+ /** 接收者ID */
93
+ toUid: string;
94
+ /** 聊天类型 */
95
+ chatType?: ChatType;
96
+ /** 撤回或编辑的记录ID */
97
+ editId?: string;
98
+ }
99
+ /**
100
+ * 连接成功消息
101
+ */
102
+ export interface ConnectSuccessMessage extends MessageBase {
103
+ /** 状态码 */
104
+ code: MessageCode.CONNECT_SUCCESS;
105
+ /** 消息内容 */
106
+ data: string;
107
+ }
108
+ /**
109
+ * 匹配成功消息
110
+ */
111
+ export interface MatchSuccessMessage extends MessageBase {
112
+ /** 状态码 */
113
+ code: MessageCode.MATCH_INFO | MessageCode.MATCH_SUCCESS;
114
+ /** 消息内容 */
115
+ data: string | SessionData;
116
+ }
117
+ /**
118
+ * 发送成功消息
119
+ */
120
+ export interface SendSuccessMessage extends MessageBase {
121
+ /** 状态码 */
122
+ code: MessageCode.SEND_SUCCESS;
123
+ /** 消息内容 */
124
+ data: string | MessageData | Partial<MessageData>;
125
+ }
126
+ /**
127
+ * 转接成功消息
128
+ */
129
+ export interface TransferSuccessMessage extends MessageBase {
130
+ /** 状态码 */
131
+ code: MessageCode.TRANSFER_CUSTOMER_SUCCESS | MessageCode.TRANSFER_TO_CUSTOMER_SUCCESS | MessageCode.TRANSFER_USER_SUCCESS;
132
+ /** 消息内容 */
133
+ data: any;
134
+ }
135
+ /**
136
+ * 错误消息
137
+ */
138
+ export interface ErrorMessage extends MessageBase {
139
+ /** 状态码 */
140
+ code: MessageCode.CONNECT_FAILED | MessageCode.TRANSFER_FAIL | MessageCode.MATCH_FAIL | MessageCode.RETRACT_FAIL | MessageCode.EDIT_FAIL | MessageCode.COMMON_FAIL;
141
+ /** 消息内容 */
142
+ data: any;
143
+ }
144
+ /**
145
+ * 其他消息
146
+ */
147
+ export interface OtherMessage extends MessageBase {
148
+ /** 状态码 */
149
+ code?: MessageCode.RETRACT | MessageCode.EDIT | MessageCode.SEND_CALLBACK | undefined;
150
+ /** 消息内容 */
151
+ data: any;
152
+ }
153
+ /**
154
+ * 消息对象(根据 code 类型化的联合类型)
155
+ */
156
+ export type Message = ConnectSuccessMessage | MatchSuccessMessage | SendSuccessMessage | TransferSuccessMessage | ErrorMessage | OtherMessage;
157
+ /**
158
+ * 消息对象基础字段
159
+ */
160
+ interface MessageDataBase {
161
+ messageId?: string;
162
+ sendId?: string;
163
+ sendName?: string;
164
+ /** 发送者类型 1: 客服 2: 用户 3: 匿名 */
165
+ sendUserType?: SendUserType;
166
+ /** 客服昵称 */
167
+ customerServiceName?: string;
168
+ /** 客服账号 */
169
+ customerServiceAccount?: string;
170
+ /** 客服ID */
171
+ customerServiceId?: string;
172
+ /** 客服头像 */
173
+ customerServiceAvatar?: string;
174
+ /** 用户昵称 */
175
+ userName?: string;
176
+ /** 用户头像 */
177
+ userAvatar?: string;
178
+ /** 接收者ID */
179
+ toUid?: string;
180
+ /** 接收者昵称 */
181
+ toUserName?: string;
182
+ /** 消息类型 */
183
+ msgType: MessageType;
184
+ /** 创建时间 */
185
+ createTime: number;
186
+ /** 发送IP */
187
+ sendIp?: string;
188
+ /** 编辑ID */
189
+ editId?: string;
190
+ /** 是否编辑 */
191
+ isEdit?: boolean;
192
+ /** 是否撤回 */
193
+ isCancel?: boolean;
194
+ /** 会话ID */
195
+ sessionId?: string;
196
+ /** 客服是否已读 */
197
+ isRead?: boolean;
198
+ /** 商户ID */
199
+ merchantId?: string;
200
+ /** 是否回复 */
201
+ isReply?: boolean;
202
+ }
203
+ /**
204
+ * 文本消息
205
+ */
206
+ export interface TextMessageData extends MessageDataBase {
207
+ /** 内容类型 */
208
+ contentType: ChatType.TEXT;
209
+ /** 内容 */
210
+ content?: string;
211
+ }
212
+ /**
213
+ * 文件消息(图片、视频、文件)的联合类型
214
+ */
215
+ export interface FileMessageData extends MessageDataBase {
216
+ /** 内容类型 */
217
+ contentType: ChatType.IMAGE | ChatType.VIDEO | ChatType.FILE;
218
+ /** 内容 */
219
+ content?: FileMessageContent;
220
+ }
221
+ export interface FaqItem {
222
+ /** FAQ ID */
223
+ faqId: number;
224
+ /** FAQ 项 ID */
225
+ faqItemId?: number;
226
+ /** ID */
227
+ id: number;
228
+ /** 图片URL列表 */
229
+ imageUrl?: string[];
230
+ /** 问题 */
231
+ question: string;
232
+ /** 答案 */
233
+ answer?: string;
234
+ /** 排序 */
235
+ sortOrder?: number;
236
+ /** 是否多选 */
237
+ isMulti?: boolean;
238
+ /** 子项 */
239
+ item?: Array<FaqItem>;
240
+ }
241
+ /**
242
+ * FAQ 消息内容(简化版,用于实际消息传输)
243
+ */
244
+ export interface FaqMessageContent {
245
+ /** 引导文案 */
246
+ guideText: string;
247
+ /** FAQ 列表 */
248
+ list: Array<FaqItem>;
249
+ }
250
+ /**
251
+ * FAQ 消息
252
+ */
253
+ export interface FaqMessageData extends MessageDataBase {
254
+ /** 内容类型 */
255
+ contentType: ChatType.FAQ;
256
+ /** 内容(可以是完整的 FaqListResponse 或简化的 FaqMessageContent) */
257
+ content?: FaqListResponse | FaqMessageContent;
258
+ }
259
+ /**
260
+ * 消息对象(根据 contentType 类型化的联合类型)
261
+ */
262
+ export type MessageData = TextMessageData | FileMessageData | FaqMessageData;
263
+ /**
264
+ * 类型守卫:判断是否为文本消息
265
+ */
266
+ export declare function isTextMessage(message: MessageData): message is TextMessageData;
267
+ /** 文件消息内容 */
268
+ export interface FileMessageContent {
269
+ /** 文件名称 */
270
+ fileName: string;
271
+ /** 文件URL */
272
+ fileUrl: string;
273
+ /** 缩略图URL */
274
+ thumbnailUrl?: string;
275
+ /** 文件大小 */
276
+ fileSize?: number;
277
+ }
278
+ /**
279
+ * 聊天记录响应
280
+ */
281
+ export interface ChatHistoryResponse {
282
+ /** 消息列表 */
283
+ messages: MessageData[];
284
+ /** 总数量 */
285
+ total: number;
286
+ /** 当前页码 */
287
+ page: number;
288
+ /** 每页数量 */
289
+ pageSize: number;
290
+ /** 是否有更多数据 */
291
+ hasMore: boolean;
292
+ }
293
+ /**
294
+ * 会话数据
295
+ */
296
+ export interface SessionData {
297
+ /** 聊天ID */
298
+ chatId: number;
299
+ /** 客服ID(字符串格式) */
300
+ cid: string;
301
+ /** 客服ID(数字格式) */
302
+ id: number;
303
+ /** 客服头像 */
304
+ customerAvatar: string;
305
+ /** 客服名称 */
306
+ customerName: string;
307
+ /** 分组ID */
308
+ groupId: number;
309
+ /** 分组ID(段ID) */
310
+ segmentId: number;
311
+ /** 会话ID */
312
+ sessionId: string;
313
+ /** 用户ID */
314
+ uid: string;
315
+ }
316
+ export {};
@@ -0,0 +1,91 @@
1
+ export interface RequestResponse<T> {
2
+ code: number;
3
+ message: string;
4
+ data: T;
5
+ }
6
+ declare module "axios" {
7
+ interface AxiosRequestConfig {
8
+ noAuth?: boolean;
9
+ }
10
+ interface InternalAxiosRequestConfig {
11
+ noAuth?: boolean;
12
+ }
13
+ }
14
+ export declare const TOKEN_KEY: "JOYTALK_TOKEN";
15
+ export interface ObsAuthInfo {
16
+ accessKeyId: string;
17
+ signature: string;
18
+ policy: string;
19
+ key: string;
20
+ }
21
+ export interface ConsultationItem {
22
+ /** 客服组ID */
23
+ customerGroupId: string;
24
+ /** 是否默认 */
25
+ isDefault: boolean;
26
+ /** 引导文案 */
27
+ guideText: string;
28
+ /** 咨询类型名称 */
29
+ name: string;
30
+ }
31
+ export interface ConsultationListResponse {
32
+ list: ConsultationItem[];
33
+ /** 秒数 */
34
+ second: number;
35
+ }
36
+ export interface UserAuthParams {
37
+ /** 商户AppKey */
38
+ appKey: string;
39
+ /** 商户系统内的用户ID */
40
+ externalUserId: string;
41
+ /** 用户来源 */
42
+ userSource: "web" | "H5" | "App";
43
+ /** 入口ID */
44
+ entranceId: string;
45
+ /** 用户昵称 */
46
+ nickname?: string;
47
+ /** 用户头像 */
48
+ avatar?: string;
49
+ }
50
+ export interface AnonymousAuthParams {
51
+ /** 商户AppKey */
52
+ appKey: string;
53
+ /** 入口ID */
54
+ entranceId: string;
55
+ /** 用户来源 */
56
+ userSource: "web" | "H5" | "App";
57
+ }
58
+ export interface TopicItem {
59
+ answer: string;
60
+ faqId: number;
61
+ faqItemId: number;
62
+ id: number;
63
+ imageUrl: string[];
64
+ question: string;
65
+ sortOrder: number;
66
+ }
67
+ export interface Topic {
68
+ faqId: number;
69
+ id: number;
70
+ isMulti: boolean;
71
+ question: string;
72
+ item: TopicItem[];
73
+ }
74
+ export interface FaqListResponse {
75
+ faqName: string;
76
+ guideText: string;
77
+ id: number;
78
+ /** 转默认类型时 单位秒 */
79
+ showDelaySeconds: number;
80
+ topic: Topic[];
81
+ }
82
+ export interface UserInfo {
83
+ uuid: string;
84
+ merchantId: number;
85
+ nickname: string;
86
+ avatar: string;
87
+ userSource: string;
88
+ userIp: string;
89
+ externalUserId: string;
90
+ isAnonymous: boolean;
91
+ }
@@ -0,0 +1,30 @@
1
+ import { EventType, EventCallback } from '../types';
2
+ /**
3
+ * 简单的事件发射器实现
4
+ */
5
+ export declare class EventEmitter {
6
+ private events;
7
+ /**
8
+ * 监听事件
9
+ * @param event - 事件类型
10
+ * @param callback - 事件回调函数
11
+ */
12
+ on(event: EventType, callback: EventCallback): void;
13
+ /**
14
+ * 取消监听事件
15
+ * @param event - 事件类型
16
+ * @param callback - 事件回调函数
17
+ */
18
+ off(event: EventType, callback: EventCallback): void;
19
+ /**
20
+ * 触发事件
21
+ * @param event - 事件类型
22
+ * @param data - 事件数据
23
+ */
24
+ emit(event: EventType, data?: unknown): void;
25
+ /**
26
+ * 移除所有事件监听器
27
+ * @param event - 事件类型
28
+ */
29
+ removeAllListeners(event?: EventType): void;
30
+ }
@@ -0,0 +1,2 @@
1
+ export declare class HttpHandler {
2
+ }
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "joytalk",
3
+ "version": "0.0.1",
4
+ "description": "JoyTalk SDK - 用于集成客服功能的 JavaScript SDK",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite build --watch --mode development",
8
+ "build": "tsc && vite build",
9
+ "preview": "vite preview",
10
+ "serve": "vite"
11
+ },
12
+ "devDependencies": {
13
+ "@types/node": "^25.0.3",
14
+ "typescript": "~5.9.3",
15
+ "vite": "^7.2.4",
16
+ "vite-plugin-dts": "^4.5.4"
17
+ },
18
+ "main": "./dist/index.es.js",
19
+ "module": "./dist/index.es.js",
20
+ "types": "./dist/index.d.ts",
21
+ "browser": "./dist/index.umd.js",
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "dependencies": {
26
+ "axios": "^1.13.2"
27
+ }
28
+ }