@teamlearners/clawops 0.32.1 → 0.34.0
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.
- package/README.md +192 -0
- package/dist/agent/index.cjs +16 -10
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +2 -2
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +8 -2
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/livekit/index.d.cts +1 -1
- package/dist/agent/livekit/index.d.ts +1 -1
- package/dist/{base-B6S9WQRN.d.cts → base-C3yzF1e0.d.cts} +6 -1
- package/dist/{base-B6S9WQRN.d.ts → base-C3yzF1e0.d.ts} +6 -1
- package/dist/chunk-2IHVQDIP.cjs +20 -0
- package/dist/chunk-2IHVQDIP.cjs.map +1 -0
- package/dist/{chunk-ESYMNP2G.js → chunk-36JABW7P.js} +9 -13
- package/dist/chunk-36JABW7P.js.map +1 -0
- package/dist/chunk-QNWXGJTJ.js +13 -0
- package/dist/chunk-QNWXGJTJ.js.map +1 -0
- package/dist/{chunk-6ABL54D2.cjs → chunk-TVDUOKJD.cjs} +9 -18
- package/dist/chunk-TVDUOKJD.cjs.map +1 -0
- package/dist/client-CKaAfPlF.d.cts +1460 -0
- package/dist/client-CKaAfPlF.d.ts +1460 -0
- package/dist/index.cjs +44 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1444
- package/dist/index.d.ts +2 -1444
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/solapi/index.cjs +662 -0
- package/dist/solapi/index.cjs.map +1 -0
- package/dist/solapi/index.d.cts +269 -0
- package/dist/solapi/index.d.ts +269 -0
- package/dist/solapi/index.js +651 -0
- package/dist/solapi/index.js.map +1 -0
- package/package.json +12 -2
- package/dist/chunk-6ABL54D2.cjs.map +0 -1
- package/dist/chunk-ESYMNP2G.js.map +0 -1
|
@@ -0,0 +1,1460 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
interface APIClientOptions {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
baseURL?: string;
|
|
6
|
+
timeout?: number;
|
|
7
|
+
maxRetries?: number;
|
|
8
|
+
fetch?: typeof globalThis.fetch;
|
|
9
|
+
defaultHeaders?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
declare class APIClient {
|
|
12
|
+
protected _apiKey: string;
|
|
13
|
+
protected _baseURL: string;
|
|
14
|
+
protected _maxRetries: number;
|
|
15
|
+
protected _timeout: number;
|
|
16
|
+
protected _fetch: typeof globalThis.fetch;
|
|
17
|
+
protected _defaultHeaders: Record<string, string>;
|
|
18
|
+
constructor(options: APIClientOptions);
|
|
19
|
+
private _buildHeaders;
|
|
20
|
+
protected _send(method: string, path: string, options?: {
|
|
21
|
+
body?: Record<string, unknown> | null;
|
|
22
|
+
query?: Record<string, unknown> | null;
|
|
23
|
+
extraHeaders?: Record<string, string>;
|
|
24
|
+
extraQuery?: Record<string, unknown>;
|
|
25
|
+
timeout?: number;
|
|
26
|
+
}): Promise<Response>;
|
|
27
|
+
protected _request<T>(method: string, path: string, options?: {
|
|
28
|
+
body?: Record<string, unknown> | null;
|
|
29
|
+
query?: Record<string, unknown> | null;
|
|
30
|
+
castTo?: z.ZodType<T>;
|
|
31
|
+
extraHeaders?: Record<string, string>;
|
|
32
|
+
extraQuery?: Record<string, unknown>;
|
|
33
|
+
timeout?: number;
|
|
34
|
+
}): Promise<T | null>;
|
|
35
|
+
private _shouldRetry;
|
|
36
|
+
private _retryDelay;
|
|
37
|
+
private _sleep;
|
|
38
|
+
_get<T>(path: string, options: {
|
|
39
|
+
castTo: z.ZodType<T>;
|
|
40
|
+
query?: Record<string, unknown> | null;
|
|
41
|
+
extraHeaders?: Record<string, string>;
|
|
42
|
+
extraQuery?: Record<string, unknown>;
|
|
43
|
+
timeout?: number;
|
|
44
|
+
}): Promise<T>;
|
|
45
|
+
_post<T>(path: string, options: {
|
|
46
|
+
body?: Record<string, unknown> | null;
|
|
47
|
+
castTo: z.ZodType<T>;
|
|
48
|
+
extraHeaders?: Record<string, string>;
|
|
49
|
+
extraQuery?: Record<string, unknown>;
|
|
50
|
+
timeout?: number;
|
|
51
|
+
}): Promise<T>;
|
|
52
|
+
_put<T>(path: string, options: {
|
|
53
|
+
body?: Record<string, unknown> | null;
|
|
54
|
+
castTo: z.ZodType<T>;
|
|
55
|
+
extraHeaders?: Record<string, string>;
|
|
56
|
+
extraQuery?: Record<string, unknown>;
|
|
57
|
+
timeout?: number;
|
|
58
|
+
}): Promise<T>;
|
|
59
|
+
_patch<T>(path: string, options: {
|
|
60
|
+
body?: Record<string, unknown> | null;
|
|
61
|
+
castTo: z.ZodType<T>;
|
|
62
|
+
extraHeaders?: Record<string, string>;
|
|
63
|
+
extraQuery?: Record<string, unknown>;
|
|
64
|
+
timeout?: number;
|
|
65
|
+
}): Promise<T>;
|
|
66
|
+
_getRaw(path: string, options?: {
|
|
67
|
+
query?: Record<string, unknown> | null;
|
|
68
|
+
extraHeaders?: Record<string, string>;
|
|
69
|
+
extraQuery?: Record<string, unknown>;
|
|
70
|
+
timeout?: number;
|
|
71
|
+
}): Promise<Response>;
|
|
72
|
+
/**
|
|
73
|
+
* 본문을 돌려주는 DELETE. 기존 `_delete` 는 void 라 응답을 버리는데, soft delete 처럼
|
|
74
|
+
* 삭제 결과 리소스를 그대로 반환하는 endpoint 가 있어서 따로 둔다.
|
|
75
|
+
*/
|
|
76
|
+
_deleteWithResponse<T>(path: string, options: {
|
|
77
|
+
body?: Record<string, unknown> | null;
|
|
78
|
+
castTo: z.ZodType<T>;
|
|
79
|
+
extraHeaders?: Record<string, string>;
|
|
80
|
+
extraQuery?: Record<string, unknown>;
|
|
81
|
+
timeout?: number;
|
|
82
|
+
}): Promise<T>;
|
|
83
|
+
_delete(path: string, options?: {
|
|
84
|
+
extraHeaders?: Record<string, string>;
|
|
85
|
+
timeout?: number;
|
|
86
|
+
}): Promise<void>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare class APIResource {
|
|
90
|
+
protected _client: APIClient;
|
|
91
|
+
protected _accountId: string;
|
|
92
|
+
constructor(client: APIClient, accountId: string);
|
|
93
|
+
protected get _basePath(): string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
declare class Page<T> {
|
|
97
|
+
data: T[];
|
|
98
|
+
meta: {
|
|
99
|
+
total: number;
|
|
100
|
+
page: number;
|
|
101
|
+
pageSize: number;
|
|
102
|
+
};
|
|
103
|
+
private _client;
|
|
104
|
+
private _path;
|
|
105
|
+
private _itemSchema;
|
|
106
|
+
private _query;
|
|
107
|
+
constructor(data: T[], meta: {
|
|
108
|
+
total: number;
|
|
109
|
+
page: number;
|
|
110
|
+
pageSize: number;
|
|
111
|
+
});
|
|
112
|
+
/** @internal */
|
|
113
|
+
_setClient(client: APIClient, path: string, itemSchema: z.ZodType<T>, query: Record<string, unknown>): void;
|
|
114
|
+
hasNextPage(): boolean;
|
|
115
|
+
nextPage(): Promise<Page<T>>;
|
|
116
|
+
[Symbol.iterator](): Iterator<T>;
|
|
117
|
+
autoPagingIter(): AsyncGenerator<T>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
declare const AssignmentLinkAssignmentSchema: z.ZodObject<{
|
|
121
|
+
number: z.ZodString;
|
|
122
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
123
|
+
consumedAt: z.ZodString;
|
|
124
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
125
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
126
|
+
number: z.ZodString;
|
|
127
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
128
|
+
consumedAt: z.ZodString;
|
|
129
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
130
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
131
|
+
number: z.ZodString;
|
|
132
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
133
|
+
consumedAt: z.ZodString;
|
|
134
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
135
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
136
|
+
declare const AssignmentLinkSchema: z.ZodObject<{
|
|
137
|
+
linkId: z.ZodString;
|
|
138
|
+
url: z.ZodString;
|
|
139
|
+
status: z.ZodEnum<["pending", "consumed", "expired", "revoked"]>;
|
|
140
|
+
createdAt: z.ZodString;
|
|
141
|
+
expiresAt: z.ZodString;
|
|
142
|
+
consumedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
143
|
+
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
144
|
+
webhookMethod: z.ZodOptional<z.ZodNullable<z.ZodEnum<["POST", "GET"]>>>;
|
|
145
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
146
|
+
assignment: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
147
|
+
number: z.ZodString;
|
|
148
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
149
|
+
consumedAt: z.ZodString;
|
|
150
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
151
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
152
|
+
number: z.ZodString;
|
|
153
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
154
|
+
consumedAt: z.ZodString;
|
|
155
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
156
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
157
|
+
number: z.ZodString;
|
|
158
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
159
|
+
consumedAt: z.ZodString;
|
|
160
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
161
|
+
}, z.ZodTypeAny, "passthrough">>>>;
|
|
162
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
163
|
+
linkId: z.ZodString;
|
|
164
|
+
url: z.ZodString;
|
|
165
|
+
status: z.ZodEnum<["pending", "consumed", "expired", "revoked"]>;
|
|
166
|
+
createdAt: z.ZodString;
|
|
167
|
+
expiresAt: z.ZodString;
|
|
168
|
+
consumedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
169
|
+
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
170
|
+
webhookMethod: z.ZodOptional<z.ZodNullable<z.ZodEnum<["POST", "GET"]>>>;
|
|
171
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
172
|
+
assignment: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
173
|
+
number: z.ZodString;
|
|
174
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
175
|
+
consumedAt: z.ZodString;
|
|
176
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
177
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
178
|
+
number: z.ZodString;
|
|
179
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
180
|
+
consumedAt: z.ZodString;
|
|
181
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
182
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
183
|
+
number: z.ZodString;
|
|
184
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
185
|
+
consumedAt: z.ZodString;
|
|
186
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
187
|
+
}, z.ZodTypeAny, "passthrough">>>>;
|
|
188
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
189
|
+
linkId: z.ZodString;
|
|
190
|
+
url: z.ZodString;
|
|
191
|
+
status: z.ZodEnum<["pending", "consumed", "expired", "revoked"]>;
|
|
192
|
+
createdAt: z.ZodString;
|
|
193
|
+
expiresAt: z.ZodString;
|
|
194
|
+
consumedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
195
|
+
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
196
|
+
webhookMethod: z.ZodOptional<z.ZodNullable<z.ZodEnum<["POST", "GET"]>>>;
|
|
197
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
198
|
+
assignment: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
199
|
+
number: z.ZodString;
|
|
200
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
201
|
+
consumedAt: z.ZodString;
|
|
202
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
203
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
204
|
+
number: z.ZodString;
|
|
205
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
206
|
+
consumedAt: z.ZodString;
|
|
207
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
208
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
209
|
+
number: z.ZodString;
|
|
210
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
211
|
+
consumedAt: z.ZodString;
|
|
212
|
+
releasedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
213
|
+
}, z.ZodTypeAny, "passthrough">>>>;
|
|
214
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
215
|
+
declare const AssignmentLinkCreateResponseSchema: z.ZodObject<{
|
|
216
|
+
token: z.ZodString;
|
|
217
|
+
url: z.ZodString;
|
|
218
|
+
expiresAt: z.ZodString;
|
|
219
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
220
|
+
token: z.ZodString;
|
|
221
|
+
url: z.ZodString;
|
|
222
|
+
expiresAt: z.ZodString;
|
|
223
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
224
|
+
token: z.ZodString;
|
|
225
|
+
url: z.ZodString;
|
|
226
|
+
expiresAt: z.ZodString;
|
|
227
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
228
|
+
type AssignmentLinkAssignment = z.infer<typeof AssignmentLinkAssignmentSchema>;
|
|
229
|
+
type AssignmentLink = z.infer<typeof AssignmentLinkSchema>;
|
|
230
|
+
type AssignmentLinkCreateResponse = z.infer<typeof AssignmentLinkCreateResponseSchema>;
|
|
231
|
+
type AssignmentLinkStatus = AssignmentLink['status'];
|
|
232
|
+
|
|
233
|
+
type RequestOptions$2 = {
|
|
234
|
+
extraHeaders?: Record<string, string>;
|
|
235
|
+
extraQuery?: Record<string, unknown>;
|
|
236
|
+
timeout?: number;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* 관리번호(External Assignment) 발급 링크 리소스.
|
|
240
|
+
*
|
|
241
|
+
* POST/DELETE는 `external_assignment` 애드온이 활성화된 계정에서만 가능합니다.
|
|
242
|
+
* GET 조회는 애드온 활성 여부와 무관하게 가능합니다.
|
|
243
|
+
*/
|
|
244
|
+
declare class AssignmentLinks extends APIResource {
|
|
245
|
+
create(params?: {
|
|
246
|
+
webhookUrl?: string;
|
|
247
|
+
webhookMethod?: 'POST' | 'GET';
|
|
248
|
+
note?: string;
|
|
249
|
+
}, options?: RequestOptions$2): Promise<AssignmentLinkCreateResponse>;
|
|
250
|
+
list(params?: {
|
|
251
|
+
status?: AssignmentLinkStatus;
|
|
252
|
+
page?: number;
|
|
253
|
+
pageSize?: number;
|
|
254
|
+
}, options?: RequestOptions$2): Promise<Page<AssignmentLink>>;
|
|
255
|
+
retrieve(linkId: string, options?: RequestOptions$2): Promise<AssignmentLink>;
|
|
256
|
+
revoke(linkId: string, options?: {
|
|
257
|
+
extraHeaders?: Record<string, string>;
|
|
258
|
+
timeout?: number;
|
|
259
|
+
}): Promise<void>;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
declare const BlockedRecipientSchema: z.ZodObject<{
|
|
263
|
+
id: z.ZodString;
|
|
264
|
+
/** 국내 표기로 정규화된 번호 (예 '01012345678'). */
|
|
265
|
+
number: z.ZodString;
|
|
266
|
+
channel: z.ZodEnum<["call", "message"]>;
|
|
267
|
+
/** 지금 차단 중인지. 해제분도 이력으로 조회되므로 이 값으로 구분한다. */
|
|
268
|
+
active: z.ZodBoolean;
|
|
269
|
+
source: z.ZodString;
|
|
270
|
+
sourceRef: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
271
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
272
|
+
createdBy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
273
|
+
createdAt: z.ZodString;
|
|
274
|
+
updatedAt: z.ZodString;
|
|
275
|
+
unblockedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
276
|
+
unblockedSource: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
277
|
+
unblockedBy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
278
|
+
unblockedNote: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
279
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
280
|
+
id: z.ZodString;
|
|
281
|
+
/** 국내 표기로 정규화된 번호 (예 '01012345678'). */
|
|
282
|
+
number: z.ZodString;
|
|
283
|
+
channel: z.ZodEnum<["call", "message"]>;
|
|
284
|
+
/** 지금 차단 중인지. 해제분도 이력으로 조회되므로 이 값으로 구분한다. */
|
|
285
|
+
active: z.ZodBoolean;
|
|
286
|
+
source: z.ZodString;
|
|
287
|
+
sourceRef: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
288
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
289
|
+
createdBy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
290
|
+
createdAt: z.ZodString;
|
|
291
|
+
updatedAt: z.ZodString;
|
|
292
|
+
unblockedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
293
|
+
unblockedSource: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
294
|
+
unblockedBy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
295
|
+
unblockedNote: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
296
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
297
|
+
id: z.ZodString;
|
|
298
|
+
/** 국내 표기로 정규화된 번호 (예 '01012345678'). */
|
|
299
|
+
number: z.ZodString;
|
|
300
|
+
channel: z.ZodEnum<["call", "message"]>;
|
|
301
|
+
/** 지금 차단 중인지. 해제분도 이력으로 조회되므로 이 값으로 구분한다. */
|
|
302
|
+
active: z.ZodBoolean;
|
|
303
|
+
source: z.ZodString;
|
|
304
|
+
sourceRef: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
305
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
306
|
+
createdBy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
307
|
+
createdAt: z.ZodString;
|
|
308
|
+
updatedAt: z.ZodString;
|
|
309
|
+
unblockedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
310
|
+
unblockedSource: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
311
|
+
unblockedBy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
312
|
+
unblockedNote: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
313
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
314
|
+
type BlockedRecipient = z.infer<typeof BlockedRecipientSchema>;
|
|
315
|
+
type BlockedChannel = BlockedRecipient['channel'];
|
|
316
|
+
type BlockedRecipientStatus = 'active' | 'released' | 'all';
|
|
317
|
+
type BlockedRecipientSource = 'api' | 'console' | 'import';
|
|
318
|
+
|
|
319
|
+
type RequestOptions$1 = {
|
|
320
|
+
extraHeaders?: Record<string, string>;
|
|
321
|
+
extraQuery?: Record<string, unknown>;
|
|
322
|
+
timeout?: number;
|
|
323
|
+
};
|
|
324
|
+
/**
|
|
325
|
+
* 수신거부(DNC) 명단 리소스.
|
|
326
|
+
*
|
|
327
|
+
* 등록된 번호는 이 계정의 **발신**(전화·문자)에서 제외됩니다. 착신은 막지 않습니다 —
|
|
328
|
+
* 그 번호에서 걸려오는 전화는 그대로 받습니다.
|
|
329
|
+
*
|
|
330
|
+
* 전화와 문자는 각각 따로 차단합니다. 같은 번호라도 채널마다 별개 항목이므로,
|
|
331
|
+
* 둘 다 막으려면 `channel` 을 바꿔 두 번 등록합니다.
|
|
332
|
+
*/
|
|
333
|
+
declare class BlockedRecipients extends APIResource {
|
|
334
|
+
/**
|
|
335
|
+
* 번호를 수신거부 명단에 등록합니다.
|
|
336
|
+
*
|
|
337
|
+
* 하이픈·`+82` 표기 모두 허용되며 국내 표기로 정규화되어 저장됩니다.
|
|
338
|
+
*
|
|
339
|
+
* **멱등입니다** — 이미 차단 중인 (번호, 채널)을 다시 등록해도 에러가 아니라 기존 항목을
|
|
340
|
+
* 돌려줍니다. 같은 사람이 수신거부를 두 번 요청하는 것은 정상 상황이기 때문입니다.
|
|
341
|
+
*/
|
|
342
|
+
create(params: {
|
|
343
|
+
number: string;
|
|
344
|
+
channel: BlockedChannel;
|
|
345
|
+
source?: BlockedRecipientSource;
|
|
346
|
+
sourceRef?: string;
|
|
347
|
+
note?: string;
|
|
348
|
+
}, options?: RequestOptions$1): Promise<BlockedRecipient>;
|
|
349
|
+
/**
|
|
350
|
+
* 수신거부 목록을 조회합니다. 기본은 **현재 차단 중인 항목만** 이며,
|
|
351
|
+
* 해제 이력까지 보려면 `status` 를 `'released'` 또는 `'all'` 로 지정합니다.
|
|
352
|
+
*/
|
|
353
|
+
list(params?: {
|
|
354
|
+
channel?: BlockedChannel;
|
|
355
|
+
number?: string;
|
|
356
|
+
status?: BlockedRecipientStatus;
|
|
357
|
+
page?: number;
|
|
358
|
+
pageSize?: number;
|
|
359
|
+
}, options?: RequestOptions$1): Promise<Page<BlockedRecipient>>;
|
|
360
|
+
/** 항목 상세를 조회합니다. 해제된 항목도 이력으로 남아 조회됩니다(`active: false`). */
|
|
361
|
+
retrieve(blockId: string, options?: RequestOptions$1): Promise<BlockedRecipient>;
|
|
362
|
+
/**
|
|
363
|
+
* 메모를 수정합니다.
|
|
364
|
+
*
|
|
365
|
+
* 번호와 채널은 바꿀 수 없습니다 — 바꾸면 "누가 무엇을 언제 거부했는가"라는 증빙이
|
|
366
|
+
* 뒤틀립니다. 잘못 등록했다면 해제한 뒤 올바른 번호로 새로 등록하세요.
|
|
367
|
+
*/
|
|
368
|
+
update(blockId: string, params?: {
|
|
369
|
+
note?: string | null;
|
|
370
|
+
}, options?: RequestOptions$1): Promise<BlockedRecipient>;
|
|
371
|
+
/**
|
|
372
|
+
* 수신거부를 해제해 다시 발신할 수 있게 합니다.
|
|
373
|
+
*
|
|
374
|
+
* **항목은 삭제되지 않습니다.** `active` 가 false 가 되고 `unblockedAt` 이 기록될 뿐,
|
|
375
|
+
* 행은 이력으로 남습니다 — 언제 거부했고 언제 풀렸는지가 곧 증빙이기 때문입니다.
|
|
376
|
+
* 해제분은 `list({ status: 'released' })` 로 볼 수 있습니다.
|
|
377
|
+
*
|
|
378
|
+
* 이미 해제된 항목에 다시 호출해도 성공하며, 최초 해제 시각은 덮어쓰지 않습니다.
|
|
379
|
+
*/
|
|
380
|
+
release(blockId: string, params?: {
|
|
381
|
+
note?: string;
|
|
382
|
+
}, options?: RequestOptions$1): Promise<BlockedRecipient>;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
declare const CallSchema: z.ZodObject<{
|
|
386
|
+
callId: z.ZodString;
|
|
387
|
+
/**
|
|
388
|
+
* 진행 중: queued / ringing / in-progress.
|
|
389
|
+
* 종료: completed(응답 후 정상 종료) / no-answer(벨은 울렸으나 무응답) / busy(통화중) /
|
|
390
|
+
* rejected(수신 거절) / canceled(응답 전 발신 측 취소) / failed(시스템·망 오류).
|
|
391
|
+
* completed 만이 실제로 연결된 통화를 의미한다.
|
|
392
|
+
*/
|
|
393
|
+
status: z.ZodEnum<["queued", "ringing", "in-progress", "completed", "failed", "busy", "no-answer", "canceled", "rejected"]>;
|
|
394
|
+
to: z.ZodString;
|
|
395
|
+
from: z.ZodString;
|
|
396
|
+
direction: z.ZodEnum<["outbound", "inbound"]>;
|
|
397
|
+
duration: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
398
|
+
recordingUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
399
|
+
/** AMD(machineDetection) 결과 — AMD 켠 발신 통화에만 값 존재. */
|
|
400
|
+
answeredBy: z.ZodOptional<z.ZodNullable<z.ZodEnum<["human", "machine", "unknown"]>>>;
|
|
401
|
+
/**
|
|
402
|
+
* 통화 종료 사유. status 가 왜 그렇게 끝났는지를 구분한다 — 특히 failed 는 결번·망 오류·
|
|
403
|
+
* 시스템 오류를 모두 포함하는 대분류라, 발신 리스트를 정제하려면 status 가 아니라 이 값을 본다.
|
|
404
|
+
*
|
|
405
|
+
* 재시도해도 소용없음: invalid_number(결번) / number_changed / incompatible_destination.
|
|
406
|
+
* 재시도 가치 있음: no_answer / user_busy / temporary_failure / switching_congestion /
|
|
407
|
+
* no_circuit_available / network_out_of_order / destination_out_of_order /
|
|
408
|
+
* recovery_on_timer_expire / resource_unavailable.
|
|
409
|
+
* 그 외: normal_clearing(정상 종료) / caller_canceled / call_rejected / protocol_error /
|
|
410
|
+
* unspecified / app_error·call_stuck(ClawOps 측 오류 — 재시도 권장) / unknown.
|
|
411
|
+
*
|
|
412
|
+
* enum 으로 좁히지 않는다 — 통신망이 새 cause 를 보내면 서버가 값을 넓히는데, 그때마다
|
|
413
|
+
* SDK 릴리즈를 기다려야 파싱되는 구조는 안 된다.
|
|
414
|
+
*/
|
|
415
|
+
hangupCause: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
416
|
+
/** 통신망 Q.850 cause code. 1·5·28=결번, 16=정상해제, 17=통화중, 19=무응답, 38=망장애. */
|
|
417
|
+
hangupCauseQ850: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
418
|
+
/**
|
|
419
|
+
* 종료를 유발한 SIP 응답코드(404=없는 번호, 486=통화중, 500=망 오류 등).
|
|
420
|
+
* 국내 통신망은 실제 사유를 500 으로 감싸 보내기도 하므로 hangupCause 가 더 정확하다.
|
|
421
|
+
*/
|
|
422
|
+
sipResponseCode: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
423
|
+
/**
|
|
424
|
+
* 종료 책임 주체. carrier(통신망) / callee(수신자) / caller(발신자) /
|
|
425
|
+
* app·system(ClawOps 측 오류 — 수신자 번호를 정제 대상에 넣지 말고 재시도할 것).
|
|
426
|
+
*/
|
|
427
|
+
hangupSource: z.ZodOptional<z.ZodNullable<z.ZodEnum<["carrier", "callee", "caller", "app", "system"]>>>;
|
|
428
|
+
accountId: z.ZodString;
|
|
429
|
+
dateCreated: z.ZodString;
|
|
430
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
431
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
432
|
+
callId: z.ZodString;
|
|
433
|
+
/**
|
|
434
|
+
* 진행 중: queued / ringing / in-progress.
|
|
435
|
+
* 종료: completed(응답 후 정상 종료) / no-answer(벨은 울렸으나 무응답) / busy(통화중) /
|
|
436
|
+
* rejected(수신 거절) / canceled(응답 전 발신 측 취소) / failed(시스템·망 오류).
|
|
437
|
+
* completed 만이 실제로 연결된 통화를 의미한다.
|
|
438
|
+
*/
|
|
439
|
+
status: z.ZodEnum<["queued", "ringing", "in-progress", "completed", "failed", "busy", "no-answer", "canceled", "rejected"]>;
|
|
440
|
+
to: z.ZodString;
|
|
441
|
+
from: z.ZodString;
|
|
442
|
+
direction: z.ZodEnum<["outbound", "inbound"]>;
|
|
443
|
+
duration: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
444
|
+
recordingUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
445
|
+
/** AMD(machineDetection) 결과 — AMD 켠 발신 통화에만 값 존재. */
|
|
446
|
+
answeredBy: z.ZodOptional<z.ZodNullable<z.ZodEnum<["human", "machine", "unknown"]>>>;
|
|
447
|
+
/**
|
|
448
|
+
* 통화 종료 사유. status 가 왜 그렇게 끝났는지를 구분한다 — 특히 failed 는 결번·망 오류·
|
|
449
|
+
* 시스템 오류를 모두 포함하는 대분류라, 발신 리스트를 정제하려면 status 가 아니라 이 값을 본다.
|
|
450
|
+
*
|
|
451
|
+
* 재시도해도 소용없음: invalid_number(결번) / number_changed / incompatible_destination.
|
|
452
|
+
* 재시도 가치 있음: no_answer / user_busy / temporary_failure / switching_congestion /
|
|
453
|
+
* no_circuit_available / network_out_of_order / destination_out_of_order /
|
|
454
|
+
* recovery_on_timer_expire / resource_unavailable.
|
|
455
|
+
* 그 외: normal_clearing(정상 종료) / caller_canceled / call_rejected / protocol_error /
|
|
456
|
+
* unspecified / app_error·call_stuck(ClawOps 측 오류 — 재시도 권장) / unknown.
|
|
457
|
+
*
|
|
458
|
+
* enum 으로 좁히지 않는다 — 통신망이 새 cause 를 보내면 서버가 값을 넓히는데, 그때마다
|
|
459
|
+
* SDK 릴리즈를 기다려야 파싱되는 구조는 안 된다.
|
|
460
|
+
*/
|
|
461
|
+
hangupCause: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
462
|
+
/** 통신망 Q.850 cause code. 1·5·28=결번, 16=정상해제, 17=통화중, 19=무응답, 38=망장애. */
|
|
463
|
+
hangupCauseQ850: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
464
|
+
/**
|
|
465
|
+
* 종료를 유발한 SIP 응답코드(404=없는 번호, 486=통화중, 500=망 오류 등).
|
|
466
|
+
* 국내 통신망은 실제 사유를 500 으로 감싸 보내기도 하므로 hangupCause 가 더 정확하다.
|
|
467
|
+
*/
|
|
468
|
+
sipResponseCode: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
469
|
+
/**
|
|
470
|
+
* 종료 책임 주체. carrier(통신망) / callee(수신자) / caller(발신자) /
|
|
471
|
+
* app·system(ClawOps 측 오류 — 수신자 번호를 정제 대상에 넣지 말고 재시도할 것).
|
|
472
|
+
*/
|
|
473
|
+
hangupSource: z.ZodOptional<z.ZodNullable<z.ZodEnum<["carrier", "callee", "caller", "app", "system"]>>>;
|
|
474
|
+
accountId: z.ZodString;
|
|
475
|
+
dateCreated: z.ZodString;
|
|
476
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
477
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
478
|
+
callId: z.ZodString;
|
|
479
|
+
/**
|
|
480
|
+
* 진행 중: queued / ringing / in-progress.
|
|
481
|
+
* 종료: completed(응답 후 정상 종료) / no-answer(벨은 울렸으나 무응답) / busy(통화중) /
|
|
482
|
+
* rejected(수신 거절) / canceled(응답 전 발신 측 취소) / failed(시스템·망 오류).
|
|
483
|
+
* completed 만이 실제로 연결된 통화를 의미한다.
|
|
484
|
+
*/
|
|
485
|
+
status: z.ZodEnum<["queued", "ringing", "in-progress", "completed", "failed", "busy", "no-answer", "canceled", "rejected"]>;
|
|
486
|
+
to: z.ZodString;
|
|
487
|
+
from: z.ZodString;
|
|
488
|
+
direction: z.ZodEnum<["outbound", "inbound"]>;
|
|
489
|
+
duration: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
490
|
+
recordingUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
491
|
+
/** AMD(machineDetection) 결과 — AMD 켠 발신 통화에만 값 존재. */
|
|
492
|
+
answeredBy: z.ZodOptional<z.ZodNullable<z.ZodEnum<["human", "machine", "unknown"]>>>;
|
|
493
|
+
/**
|
|
494
|
+
* 통화 종료 사유. status 가 왜 그렇게 끝났는지를 구분한다 — 특히 failed 는 결번·망 오류·
|
|
495
|
+
* 시스템 오류를 모두 포함하는 대분류라, 발신 리스트를 정제하려면 status 가 아니라 이 값을 본다.
|
|
496
|
+
*
|
|
497
|
+
* 재시도해도 소용없음: invalid_number(결번) / number_changed / incompatible_destination.
|
|
498
|
+
* 재시도 가치 있음: no_answer / user_busy / temporary_failure / switching_congestion /
|
|
499
|
+
* no_circuit_available / network_out_of_order / destination_out_of_order /
|
|
500
|
+
* recovery_on_timer_expire / resource_unavailable.
|
|
501
|
+
* 그 외: normal_clearing(정상 종료) / caller_canceled / call_rejected / protocol_error /
|
|
502
|
+
* unspecified / app_error·call_stuck(ClawOps 측 오류 — 재시도 권장) / unknown.
|
|
503
|
+
*
|
|
504
|
+
* enum 으로 좁히지 않는다 — 통신망이 새 cause 를 보내면 서버가 값을 넓히는데, 그때마다
|
|
505
|
+
* SDK 릴리즈를 기다려야 파싱되는 구조는 안 된다.
|
|
506
|
+
*/
|
|
507
|
+
hangupCause: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
508
|
+
/** 통신망 Q.850 cause code. 1·5·28=결번, 16=정상해제, 17=통화중, 19=무응답, 38=망장애. */
|
|
509
|
+
hangupCauseQ850: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
510
|
+
/**
|
|
511
|
+
* 종료를 유발한 SIP 응답코드(404=없는 번호, 486=통화중, 500=망 오류 등).
|
|
512
|
+
* 국내 통신망은 실제 사유를 500 으로 감싸 보내기도 하므로 hangupCause 가 더 정확하다.
|
|
513
|
+
*/
|
|
514
|
+
sipResponseCode: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
515
|
+
/**
|
|
516
|
+
* 종료 책임 주체. carrier(통신망) / callee(수신자) / caller(발신자) /
|
|
517
|
+
* app·system(ClawOps 측 오류 — 수신자 번호를 정제 대상에 넣지 말고 재시도할 것).
|
|
518
|
+
*/
|
|
519
|
+
hangupSource: z.ZodOptional<z.ZodNullable<z.ZodEnum<["carrier", "callee", "caller", "app", "system"]>>>;
|
|
520
|
+
accountId: z.ZodString;
|
|
521
|
+
dateCreated: z.ZodString;
|
|
522
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
523
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
524
|
+
type Call = z.infer<typeof CallSchema>;
|
|
525
|
+
declare const CallControlResponseSchema: z.ZodObject<{
|
|
526
|
+
callId: z.ZodString;
|
|
527
|
+
status: z.ZodString;
|
|
528
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
529
|
+
callId: z.ZodString;
|
|
530
|
+
status: z.ZodString;
|
|
531
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
532
|
+
callId: z.ZodString;
|
|
533
|
+
status: z.ZodString;
|
|
534
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
535
|
+
type CallControlResponse = z.infer<typeof CallControlResponseSchema>;
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* `agentId` 에이전트의 **이번 통화에만** 적용되는 컨텍스트.
|
|
539
|
+
*
|
|
540
|
+
* 에이전트 자체의 설정은 그대로 두고 이 통화만 다르게 행동시킬 때 사용한다.
|
|
541
|
+
* 같은 에이전트로 동시에 거는 다른 통화에는 영향이 없다.
|
|
542
|
+
*/
|
|
543
|
+
interface CallContextParam {
|
|
544
|
+
/** 이번 통화에서 수행할 실행 요구사항 (최대 4000자). */
|
|
545
|
+
instruction: string;
|
|
546
|
+
/** 요구사항에서 참조할 통화별 구조화 데이터 (최대 50개). */
|
|
547
|
+
variables?: Record<string, string | number | boolean>;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* 발신 전화 생성 요청 파라미터.
|
|
551
|
+
*
|
|
552
|
+
* **4가지 모드** — `url`, `agentId`, `callFlowId` 는 서로 배타적이다.
|
|
553
|
+
*
|
|
554
|
+
* - **VoiceML 모드**: `url` 을 지정하면 VoiceML 로 통화를 제어한다.
|
|
555
|
+
* - **매니지드 에이전트 모드**: `agentId` 를 지정하면 콘솔에서 만든 AI 에이전트가
|
|
556
|
+
* 통화를 처리한다. `callContext` 로 이번 통화만의 지시를 덧붙일 수 있다.
|
|
557
|
+
* - **콜 플로우 모드**: `callFlowId` 를 지정하면 결정적 ARS 플로우가 진행한다.
|
|
558
|
+
* `variables` 로 시작 변수를 넘긴다.
|
|
559
|
+
* - **Agent SDK 모드**: 셋 다 생략하면 From 번호에 연결된 Agent SDK 로 연결된다.
|
|
560
|
+
*/
|
|
561
|
+
interface CallCreateParams {
|
|
562
|
+
to: string;
|
|
563
|
+
from: string;
|
|
564
|
+
/** VoiceML 명령을 반환할 URL. `agentId`·`callFlowId` 와 배타. */
|
|
565
|
+
url?: string;
|
|
566
|
+
/** 콘솔에서 만든 매니지드 에이전트 ID. `url`·`callFlowId` 와 배타. */
|
|
567
|
+
agentId?: string;
|
|
568
|
+
/** `agentId` 에이전트의 이번 통화에만 적용되는 컨텍스트. */
|
|
569
|
+
callContext?: CallContextParam;
|
|
570
|
+
/** 콜 플로우(결정적 ARS) ID. `url`·`agentId` 와 배타. */
|
|
571
|
+
callFlowId?: string;
|
|
572
|
+
/**
|
|
573
|
+
* 콜 플로우 시작 변수. 멘트·URL·본문의 `{{이름}}` 이 이 값으로 치환된다.
|
|
574
|
+
* `callFlowId` 와 함께일 때만 쓸 수 있다(단독 지정 시 400).
|
|
575
|
+
* `caller`·`callee`·`recording_url`·`recording_duration`·`http_status` 는
|
|
576
|
+
* 통화 중 자동으로 채워지는 예약 변수라 지정할 수 없다.
|
|
577
|
+
*/
|
|
578
|
+
variables?: Record<string, string | number | boolean>;
|
|
579
|
+
statusCallback?: string;
|
|
580
|
+
statusCallbackEvent?: string;
|
|
581
|
+
/** 발신 타임아웃 (초). 기본값: 60. */
|
|
582
|
+
timeout?: number;
|
|
583
|
+
/**
|
|
584
|
+
* 자동응답기/음성사서함 감지(AMD). `'Enable'`=감지 후 `AnsweredBy` 통보(통화 계속),
|
|
585
|
+
* `'Hangup'`=음성사서함 감지 시 자동 종료. 미설정 시 비활성.
|
|
586
|
+
*/
|
|
587
|
+
machineDetection?: 'Enable' | 'Hangup';
|
|
588
|
+
}
|
|
589
|
+
interface CallListParams {
|
|
590
|
+
status?: 'queued' | 'ringing' | 'in-progress' | 'completed' | 'failed';
|
|
591
|
+
/** 발신번호로 필터링. 배열 시 IN 조건. */
|
|
592
|
+
from?: string | string[];
|
|
593
|
+
/** 수신번호로 필터링. 배열 시 IN 조건. */
|
|
594
|
+
to?: string | string[];
|
|
595
|
+
/** 관여 번호로 필터링 (from OR to 매칭). 배열 시 IN 조건. */
|
|
596
|
+
number?: string | string[];
|
|
597
|
+
page?: number;
|
|
598
|
+
pageSize?: number;
|
|
599
|
+
}
|
|
600
|
+
interface CallUpdateParams {
|
|
601
|
+
status?: 'completed';
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* 통화 전사 상태. status 에 따라 채워지는 필드가 다름:
|
|
606
|
+
* - "completed": callId, segmentCount, segments
|
|
607
|
+
* - "pending": startedAt
|
|
608
|
+
* - "failed": stage, error. stage="trigger" 는 시스템 실패로 재요청 가능
|
|
609
|
+
* - "not_requested": 이외 필드 비어있음
|
|
610
|
+
*/
|
|
611
|
+
declare const TranscriptStatusSchema: z.ZodObject<{
|
|
612
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
613
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
614
|
+
segmentCount: z.ZodOptional<z.ZodNumber>;
|
|
615
|
+
segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
616
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
617
|
+
start: z.ZodNumber;
|
|
618
|
+
end: z.ZodNumber;
|
|
619
|
+
text: z.ZodString;
|
|
620
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
621
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
622
|
+
start: z.ZodNumber;
|
|
623
|
+
end: z.ZodNumber;
|
|
624
|
+
text: z.ZodString;
|
|
625
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
626
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
627
|
+
start: z.ZodNumber;
|
|
628
|
+
end: z.ZodNumber;
|
|
629
|
+
text: z.ZodString;
|
|
630
|
+
}, z.ZodTypeAny, "passthrough">>, "many">>;
|
|
631
|
+
startedAt: z.ZodOptional<z.ZodString>;
|
|
632
|
+
stage: z.ZodOptional<z.ZodNullable<z.ZodEnum<["download", "runtime", "trigger"]>>>;
|
|
633
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
634
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
635
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
636
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
637
|
+
segmentCount: z.ZodOptional<z.ZodNumber>;
|
|
638
|
+
segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
639
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
640
|
+
start: z.ZodNumber;
|
|
641
|
+
end: z.ZodNumber;
|
|
642
|
+
text: z.ZodString;
|
|
643
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
644
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
645
|
+
start: z.ZodNumber;
|
|
646
|
+
end: z.ZodNumber;
|
|
647
|
+
text: z.ZodString;
|
|
648
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
649
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
650
|
+
start: z.ZodNumber;
|
|
651
|
+
end: z.ZodNumber;
|
|
652
|
+
text: z.ZodString;
|
|
653
|
+
}, z.ZodTypeAny, "passthrough">>, "many">>;
|
|
654
|
+
startedAt: z.ZodOptional<z.ZodString>;
|
|
655
|
+
stage: z.ZodOptional<z.ZodNullable<z.ZodEnum<["download", "runtime", "trigger"]>>>;
|
|
656
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
657
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
658
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
659
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
660
|
+
segmentCount: z.ZodOptional<z.ZodNumber>;
|
|
661
|
+
segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
662
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
663
|
+
start: z.ZodNumber;
|
|
664
|
+
end: z.ZodNumber;
|
|
665
|
+
text: z.ZodString;
|
|
666
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
667
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
668
|
+
start: z.ZodNumber;
|
|
669
|
+
end: z.ZodNumber;
|
|
670
|
+
text: z.ZodString;
|
|
671
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
672
|
+
speaker: z.ZodEnum<["CUSTOMER", "AGENT"]>;
|
|
673
|
+
start: z.ZodNumber;
|
|
674
|
+
end: z.ZodNumber;
|
|
675
|
+
text: z.ZodString;
|
|
676
|
+
}, z.ZodTypeAny, "passthrough">>, "many">>;
|
|
677
|
+
startedAt: z.ZodOptional<z.ZodString>;
|
|
678
|
+
stage: z.ZodOptional<z.ZodNullable<z.ZodEnum<["download", "runtime", "trigger"]>>>;
|
|
679
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
680
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
681
|
+
type TranscriptStatus = z.infer<typeof TranscriptStatusSchema>;
|
|
682
|
+
/** POST 요청이 accept 되어 Job 이 트리거된 상태 (202). */
|
|
683
|
+
declare const TranscriptRequestAcceptedSchema: z.ZodObject<{
|
|
684
|
+
status: z.ZodLiteral<"pending">;
|
|
685
|
+
callId: z.ZodString;
|
|
686
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
687
|
+
status: z.ZodLiteral<"pending">;
|
|
688
|
+
callId: z.ZodString;
|
|
689
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
690
|
+
status: z.ZodLiteral<"pending">;
|
|
691
|
+
callId: z.ZodString;
|
|
692
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
693
|
+
type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* 통화 요약 상태. status 에 따라 채워지는 필드가 다름:
|
|
697
|
+
* - "completed": callId, resultJson, provider, model, promptVersion, schemaVersion, updatedAt
|
|
698
|
+
* - "pending": 이외 필드 비어있음
|
|
699
|
+
* - "failed": failedReason
|
|
700
|
+
* - "not_requested": 통화는 있지만 요약 row 가 아직 없음
|
|
701
|
+
*/
|
|
702
|
+
declare const SummaryStatusSchema: z.ZodObject<{
|
|
703
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
704
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
705
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
706
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
707
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
708
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
709
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
710
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
711
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
712
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
713
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
714
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
715
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
716
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
717
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
718
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
719
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
720
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
721
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
722
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
723
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
724
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
725
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
726
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
727
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
728
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
729
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
730
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
731
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
732
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
733
|
+
type SummaryStatus = z.infer<typeof SummaryStatusSchema>;
|
|
734
|
+
|
|
735
|
+
declare class Calls extends APIResource {
|
|
736
|
+
create(params: CallCreateParams, options?: {
|
|
737
|
+
extraHeaders?: Record<string, string>;
|
|
738
|
+
extraQuery?: Record<string, unknown>;
|
|
739
|
+
timeout?: number;
|
|
740
|
+
}): Promise<Call>;
|
|
741
|
+
list(params?: CallListParams, options?: {
|
|
742
|
+
extraHeaders?: Record<string, string>;
|
|
743
|
+
extraQuery?: Record<string, unknown>;
|
|
744
|
+
timeout?: number;
|
|
745
|
+
}): Promise<Page<Call>>;
|
|
746
|
+
get(callId: string, options?: {
|
|
747
|
+
extraHeaders?: Record<string, string>;
|
|
748
|
+
extraQuery?: Record<string, unknown>;
|
|
749
|
+
timeout?: number;
|
|
750
|
+
}): Promise<Call>;
|
|
751
|
+
update(callId: string, params?: {
|
|
752
|
+
status?: 'completed';
|
|
753
|
+
}, options?: {
|
|
754
|
+
extraHeaders?: Record<string, string>;
|
|
755
|
+
extraQuery?: Record<string, unknown>;
|
|
756
|
+
timeout?: number;
|
|
757
|
+
}): Promise<CallControlResponse>;
|
|
758
|
+
/**
|
|
759
|
+
* 통화 전사 상태 조회. 완료된 경우 segment 배열까지 한 번에 반환합니다.
|
|
760
|
+
*
|
|
761
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
762
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
763
|
+
*/
|
|
764
|
+
getTranscript(callId: string, options?: {
|
|
765
|
+
extraHeaders?: Record<string, string>;
|
|
766
|
+
extraQuery?: Record<string, unknown>;
|
|
767
|
+
timeout?: number;
|
|
768
|
+
}): Promise<TranscriptStatus>;
|
|
769
|
+
/**
|
|
770
|
+
* 특정 통화 1 건에 대해 전사를 명시 요청.
|
|
771
|
+
* 조직 설정 "통화 받아쓰기" 가 꺼져 있어도 해당 통화만 전사됩니다.
|
|
772
|
+
* 재실행 금지 — 이미 요청된 통화는 ConflictError(409) 발생.
|
|
773
|
+
* 시스템 레벨 트리거 실패(stage=trigger) 만 재시도 가능.
|
|
774
|
+
* 전사된 오디오 길이만큼 사용량 기반으로 과금됩니다.
|
|
775
|
+
*
|
|
776
|
+
* @throws BadRequestError (400) — 녹음 없음
|
|
777
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
778
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
779
|
+
* @throws ConflictError (409) — 이미 요청됨
|
|
780
|
+
*/
|
|
781
|
+
requestTranscript(callId: string, options?: {
|
|
782
|
+
extraHeaders?: Record<string, string>;
|
|
783
|
+
extraQuery?: Record<string, unknown>;
|
|
784
|
+
timeout?: number;
|
|
785
|
+
}): Promise<TranscriptRequestAccepted>;
|
|
786
|
+
/**
|
|
787
|
+
* 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된
|
|
788
|
+
* LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.
|
|
789
|
+
*
|
|
790
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
791
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
792
|
+
*/
|
|
793
|
+
getSummary(callId: string, options?: {
|
|
794
|
+
extraHeaders?: Record<string, string>;
|
|
795
|
+
extraQuery?: Record<string, unknown>;
|
|
796
|
+
timeout?: number;
|
|
797
|
+
}): Promise<SummaryStatus>;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
declare const MessageSchema: z.ZodObject<{
|
|
801
|
+
messageId: z.ZodString;
|
|
802
|
+
status: z.ZodEnum<["queued", "sending", "sent", "failed", "received"]>;
|
|
803
|
+
type: z.ZodEnum<["sms", "lms", "mms", "rcs", "kakao"]>;
|
|
804
|
+
to: z.ZodString;
|
|
805
|
+
from: z.ZodString;
|
|
806
|
+
body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
807
|
+
subject: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
808
|
+
numMedia: z.ZodNumber;
|
|
809
|
+
mediaUrl: z.ZodArray<z.ZodString, "many">;
|
|
810
|
+
direction: z.ZodEnum<["outbound", "inbound"]>;
|
|
811
|
+
accountId: z.ZodString;
|
|
812
|
+
dateCreated: z.ZodString;
|
|
813
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
814
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
815
|
+
messageId: z.ZodString;
|
|
816
|
+
status: z.ZodEnum<["queued", "sending", "sent", "failed", "received"]>;
|
|
817
|
+
type: z.ZodEnum<["sms", "lms", "mms", "rcs", "kakao"]>;
|
|
818
|
+
to: z.ZodString;
|
|
819
|
+
from: z.ZodString;
|
|
820
|
+
body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
821
|
+
subject: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
822
|
+
numMedia: z.ZodNumber;
|
|
823
|
+
mediaUrl: z.ZodArray<z.ZodString, "many">;
|
|
824
|
+
direction: z.ZodEnum<["outbound", "inbound"]>;
|
|
825
|
+
accountId: z.ZodString;
|
|
826
|
+
dateCreated: z.ZodString;
|
|
827
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
828
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
829
|
+
messageId: z.ZodString;
|
|
830
|
+
status: z.ZodEnum<["queued", "sending", "sent", "failed", "received"]>;
|
|
831
|
+
type: z.ZodEnum<["sms", "lms", "mms", "rcs", "kakao"]>;
|
|
832
|
+
to: z.ZodString;
|
|
833
|
+
from: z.ZodString;
|
|
834
|
+
body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
835
|
+
subject: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
836
|
+
numMedia: z.ZodNumber;
|
|
837
|
+
mediaUrl: z.ZodArray<z.ZodString, "many">;
|
|
838
|
+
direction: z.ZodEnum<["outbound", "inbound"]>;
|
|
839
|
+
accountId: z.ZodString;
|
|
840
|
+
dateCreated: z.ZodString;
|
|
841
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
842
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
843
|
+
type Message = z.infer<typeof MessageSchema>;
|
|
844
|
+
|
|
845
|
+
interface MessageCreateParams {
|
|
846
|
+
to: string;
|
|
847
|
+
from: string;
|
|
848
|
+
body: string;
|
|
849
|
+
type?: 'sms' | 'lms' | 'mms';
|
|
850
|
+
subject?: string;
|
|
851
|
+
mediaUrl?: string[];
|
|
852
|
+
/**
|
|
853
|
+
* 발송 멱등키. 같은 계정에서 같은 키로 다시 요청하면 발송하지 않고 1회차 결과를 돌려준다.
|
|
854
|
+
* 재시도·재실행 경로가 있는 호출자만 채운다.
|
|
855
|
+
*
|
|
856
|
+
* ⚠️ 순차 재시도를 막는 용도다. 같은 키로 **동시에** 두 요청이 들어오면 둘 다 발송될 수 있다.
|
|
857
|
+
*/
|
|
858
|
+
idempotencyKey?: string;
|
|
859
|
+
}
|
|
860
|
+
interface MessageListParams {
|
|
861
|
+
type?: 'sms' | 'lms' | 'mms';
|
|
862
|
+
status?: 'queued' | 'sending' | 'sent' | 'failed' | 'received';
|
|
863
|
+
page?: number;
|
|
864
|
+
pageSize?: number;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
declare class Messages extends APIResource {
|
|
868
|
+
create(params: MessageCreateParams, options?: {
|
|
869
|
+
extraHeaders?: Record<string, string>;
|
|
870
|
+
extraQuery?: Record<string, unknown>;
|
|
871
|
+
timeout?: number;
|
|
872
|
+
}): Promise<Message>;
|
|
873
|
+
list(params?: MessageListParams, options?: {
|
|
874
|
+
extraHeaders?: Record<string, string>;
|
|
875
|
+
extraQuery?: Record<string, unknown>;
|
|
876
|
+
timeout?: number;
|
|
877
|
+
}): Promise<Page<Message>>;
|
|
878
|
+
get(messageId: string, options?: {
|
|
879
|
+
extraHeaders?: Record<string, string>;
|
|
880
|
+
extraQuery?: Record<string, unknown>;
|
|
881
|
+
timeout?: number;
|
|
882
|
+
}): Promise<Message>;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
/**
|
|
886
|
+
* 착신 라우팅 모드.
|
|
887
|
+
*
|
|
888
|
+
* - `webhook` : webhookUrl 의 VoiceML 이 처리.
|
|
889
|
+
* - `agent` : agentId 의 매니지드 에이전트가 착신.
|
|
890
|
+
* - `callflow` : callFlowId 의 콜 플로우(ARS)가 착신.
|
|
891
|
+
* - `forward` : forwardTo(같은 계정 보유 번호)로 내부 착신전환.
|
|
892
|
+
* - `sip` : sipEndpointId 의 라우트로 외부 PBX 다이얼.
|
|
893
|
+
* - `softphone` : sipCredentialId 의 등록 단말로 착신.
|
|
894
|
+
*/
|
|
895
|
+
declare const ROUTING_TYPES: readonly ["webhook", "sip", "softphone", "forward", "agent", "callflow"];
|
|
896
|
+
type RoutingType = (typeof ROUTING_TYPES)[number];
|
|
897
|
+
declare const PhoneNumberSchema: z.ZodObject<{
|
|
898
|
+
number: z.ZodString;
|
|
899
|
+
numberType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
900
|
+
source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
901
|
+
routingType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
902
|
+
agentId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
903
|
+
callFlowId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
904
|
+
forwardTo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
905
|
+
sipEndpointId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
906
|
+
sipCredentialId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
907
|
+
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
908
|
+
webhookMethod: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
909
|
+
webhookHeaders: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
910
|
+
callContextUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
911
|
+
statusCallback: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
912
|
+
statusCallbackEvents: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
913
|
+
dictionaryId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
914
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
915
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
916
|
+
number: z.ZodString;
|
|
917
|
+
numberType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
918
|
+
source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
919
|
+
routingType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
920
|
+
agentId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
921
|
+
callFlowId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
922
|
+
forwardTo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
923
|
+
sipEndpointId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
924
|
+
sipCredentialId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
925
|
+
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
926
|
+
webhookMethod: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
927
|
+
webhookHeaders: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
928
|
+
callContextUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
929
|
+
statusCallback: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
930
|
+
statusCallbackEvents: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
931
|
+
dictionaryId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
932
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
933
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
934
|
+
number: z.ZodString;
|
|
935
|
+
numberType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
936
|
+
source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
937
|
+
routingType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
938
|
+
agentId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
939
|
+
callFlowId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
940
|
+
forwardTo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
941
|
+
sipEndpointId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
942
|
+
sipCredentialId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
943
|
+
webhookUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
944
|
+
webhookMethod: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
945
|
+
webhookHeaders: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
946
|
+
callContextUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
947
|
+
statusCallback: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
948
|
+
statusCallbackEvents: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
949
|
+
dictionaryId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
950
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
951
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
952
|
+
/**
|
|
953
|
+
* 전화번호. `routingType` 은 알려진 값에 자동완성이 뜨지만, 서버가 새 라우팅을 추가해도
|
|
954
|
+
* 파싱이 깨지지 않도록 임의의 문자열을 허용한다.
|
|
955
|
+
*/
|
|
956
|
+
type PhoneNumber = Omit<z.infer<typeof PhoneNumberSchema>, 'routingType'> & {
|
|
957
|
+
routingType?: RoutingType | (string & {}) | null;
|
|
958
|
+
};
|
|
959
|
+
type NumberListItem = PhoneNumber;
|
|
960
|
+
type NumberUpdateResponse = PhoneNumber;
|
|
961
|
+
|
|
962
|
+
interface NumberCreateParams {
|
|
963
|
+
/** 수신 전화 처리용 Webhook URL. */
|
|
964
|
+
webhookUrl?: string;
|
|
965
|
+
/** Webhook 호출 HTTP 메서드. */
|
|
966
|
+
webhookMethod?: 'POST' | 'GET';
|
|
967
|
+
/** Webhook 호출 시 덧붙일 헤더. 키는 'X-' 로 시작해야 한다. */
|
|
968
|
+
webhookHeaders?: Record<string, string>;
|
|
969
|
+
/** 수신(inbound) 통화 상태 통지 URL. */
|
|
970
|
+
statusCallback?: string;
|
|
971
|
+
/** 구독할 상태 이벤트(공백 구분). 미지정 시 'initiated ringing answered completed'. */
|
|
972
|
+
statusCallbackEvents?: string;
|
|
973
|
+
}
|
|
974
|
+
interface NumberUpdateParams {
|
|
975
|
+
/** 착신 라우팅 모드. */
|
|
976
|
+
routingType?: RoutingType;
|
|
977
|
+
/** routingType='agent' 일 때 필수. 같은 계정의 에이전트 id. */
|
|
978
|
+
agentId?: string | null;
|
|
979
|
+
/** routingType='callflow' 일 때 필수. 같은 계정의 콜 플로우 id. */
|
|
980
|
+
callFlowId?: string | null;
|
|
981
|
+
/** routingType='forward' 일 때 필수. 같은 계정이 보유한 번호. */
|
|
982
|
+
forwardTo?: string | null;
|
|
983
|
+
/** routingType='sip' 일 때 필수. SipEndpoint id. */
|
|
984
|
+
sipEndpointId?: string | null;
|
|
985
|
+
/** routingType='softphone' 일 때 필수. 등록 단말의 SIP credential id. */
|
|
986
|
+
sipCredentialId?: string | null;
|
|
987
|
+
/** 수신 전화 처리용 Webhook URL. */
|
|
988
|
+
webhookUrl?: string;
|
|
989
|
+
/** Webhook 호출 HTTP 메서드. */
|
|
990
|
+
webhookMethod?: 'POST' | 'GET';
|
|
991
|
+
/** Webhook 호출 시 덧붙일 헤더. */
|
|
992
|
+
webhookHeaders?: Record<string, string> | null;
|
|
993
|
+
/** routingType='agent' 에서 통화별 컨텍스트를 조회할 endpoint. */
|
|
994
|
+
callContextUrl?: string | null;
|
|
995
|
+
/** 수신(inbound) 통화 상태 통지 URL. */
|
|
996
|
+
statusCallback?: string | null;
|
|
997
|
+
/** 구독할 상태 이벤트(공백 구분). */
|
|
998
|
+
statusCallbackEvents?: string | null;
|
|
999
|
+
/** 이 번호의 통화 전사에 적용할 받아쓰기 사전 id. */
|
|
1000
|
+
dictionaryId?: string | null;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
interface RequestOptions {
|
|
1004
|
+
extraHeaders?: Record<string, string>;
|
|
1005
|
+
extraQuery?: Record<string, unknown>;
|
|
1006
|
+
timeout?: number;
|
|
1007
|
+
}
|
|
1008
|
+
declare class Numbers extends APIResource {
|
|
1009
|
+
/**
|
|
1010
|
+
* 번호를 발급합니다. 번호 풀에서 자동으로 배정되며 어떤 번호가 나올지는 지정할 수 없습니다.
|
|
1011
|
+
*
|
|
1012
|
+
* 발급 직후 번호는 `routingType: "webhook"` 이고 `webhookUrl` 이 비어 있어, 그대로 두면
|
|
1013
|
+
* 걸려온 전화가 거절됩니다. 이어서 `update()` 로 착신 라우팅을 지정하세요.
|
|
1014
|
+
*/
|
|
1015
|
+
create(params?: NumberCreateParams, options?: RequestOptions): Promise<PhoneNumber>;
|
|
1016
|
+
/**
|
|
1017
|
+
* 등록된 번호 목록을 조회합니다. 페이지네이션과 필터가 없으며 보유한 번호가 한 번에 전부
|
|
1018
|
+
* 반환됩니다.
|
|
1019
|
+
*/
|
|
1020
|
+
list(options?: RequestOptions): Promise<NumberListItem[]>;
|
|
1021
|
+
/**
|
|
1022
|
+
* 번호 설정을 수정합니다. 착신 라우팅(webhook/agent/callflow/forward/sip/softphone)과
|
|
1023
|
+
* webhook, 상태 통지, 받아쓰기 사전을 변경할 수 있습니다. 보낸 필드만 반영되고 생략한
|
|
1024
|
+
* 필드는 유지됩니다.
|
|
1025
|
+
*
|
|
1026
|
+
* 라우팅을 바꾸면 다른 라우팅 필드는 서버에서 자동으로 비워집니다. `agent` 에서
|
|
1027
|
+
* `webhook` 으로 되돌리면 `agentId` 가 null 이 되므로, 다시 `agent` 로 돌아갈 때
|
|
1028
|
+
* `agentId` 를 새로 지정해야 합니다.
|
|
1029
|
+
*/
|
|
1030
|
+
update(number: string, params?: NumberUpdateParams, options?: RequestOptions): Promise<NumberUpdateResponse>;
|
|
1031
|
+
/**
|
|
1032
|
+
* 번호를 반납합니다. 번호는 풀로 복귀하며 되돌릴 수 없습니다. 같은 번호를 다시
|
|
1033
|
+
* 발급받는다는 보장이 없습니다.
|
|
1034
|
+
*/
|
|
1035
|
+
delete(number: string, options?: {
|
|
1036
|
+
extraHeaders?: Record<string, string>;
|
|
1037
|
+
timeout?: number;
|
|
1038
|
+
}): Promise<void>;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
interface RecordingDownload {
|
|
1042
|
+
/** WAV 바이너리 데이터 (PCM 16bit mono 8kHz) */
|
|
1043
|
+
data: ArrayBuffer;
|
|
1044
|
+
/** 응답의 Content-Type (예: 'audio/wav') */
|
|
1045
|
+
contentType: string;
|
|
1046
|
+
/** Content-Disposition 헤더에서 파싱한 파일명 (없으면 null) */
|
|
1047
|
+
filename: string | null;
|
|
1048
|
+
}
|
|
1049
|
+
declare class Recordings extends APIResource {
|
|
1050
|
+
/**
|
|
1051
|
+
* 통화 녹음(WAV)을 다운로드합니다.
|
|
1052
|
+
*
|
|
1053
|
+
* 콘솔과 동일한 서버측 MixMonitor 원본 (PCM 16bit mono 8kHz).
|
|
1054
|
+
*
|
|
1055
|
+
* @throws NotFoundError (404) — 통화가 없거나 녹음이 없음(`recordingUrl: null`).
|
|
1056
|
+
* @throws PermissionDeniedError (403) — accountId 불일치.
|
|
1057
|
+
*/
|
|
1058
|
+
download(callId: string, options?: {
|
|
1059
|
+
extraHeaders?: Record<string, string>;
|
|
1060
|
+
extraQuery?: Record<string, unknown>;
|
|
1061
|
+
timeout?: number;
|
|
1062
|
+
}): Promise<RecordingDownload>;
|
|
1063
|
+
/**
|
|
1064
|
+
* 통화 녹음을 삭제합니다 (포인터 제거, 멱등 — 이미 없어도 성공).
|
|
1065
|
+
*
|
|
1066
|
+
* @throws NotFoundError (404) — 통화가 없음.
|
|
1067
|
+
* @throws PermissionDeniedError (403) — accountId 불일치.
|
|
1068
|
+
*/
|
|
1069
|
+
delete(callId: string, options?: {
|
|
1070
|
+
extraHeaders?: Record<string, string>;
|
|
1071
|
+
timeout?: number;
|
|
1072
|
+
}): Promise<void>;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
/**
|
|
1076
|
+
* SIP 단말(digest credential). 평문 password/ha1 은 조회 응답에 포함되지 않음
|
|
1077
|
+
* (생성 시 1회만 노출). softphone 라우팅 설정 시 이 객체의 id 를
|
|
1078
|
+
* numbers.update(number, { sipCredentialId }) 로 넘긴다.
|
|
1079
|
+
*/
|
|
1080
|
+
declare const SipCredentialSchema: z.ZodObject<{
|
|
1081
|
+
id: z.ZodString;
|
|
1082
|
+
accountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1083
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1084
|
+
username: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1085
|
+
realm: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1086
|
+
enabled: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
1087
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<["active", "disabled", "deleted"]>>>;
|
|
1088
|
+
ipAclId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1089
|
+
allowedNumbers: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
|
|
1090
|
+
lastUsedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1091
|
+
dateCreated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1092
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1093
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1094
|
+
id: z.ZodString;
|
|
1095
|
+
accountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1096
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1097
|
+
username: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1098
|
+
realm: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1099
|
+
enabled: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
1100
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<["active", "disabled", "deleted"]>>>;
|
|
1101
|
+
ipAclId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1102
|
+
allowedNumbers: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
|
|
1103
|
+
lastUsedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1104
|
+
dateCreated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1105
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1106
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1107
|
+
id: z.ZodString;
|
|
1108
|
+
accountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1109
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1110
|
+
username: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1111
|
+
realm: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1112
|
+
enabled: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
1113
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<["active", "disabled", "deleted"]>>>;
|
|
1114
|
+
ipAclId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1115
|
+
allowedNumbers: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
|
|
1116
|
+
lastUsedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1117
|
+
dateCreated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1118
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1119
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1120
|
+
type SipCredential = z.infer<typeof SipCredentialSchema>;
|
|
1121
|
+
/**
|
|
1122
|
+
* SIP 엔드포인트(외부 PBX 트렁크). sip 라우팅 설정 시 이 객체의 id 를
|
|
1123
|
+
* numbers.update(number, { sipEndpointId }) 로 넘긴다.
|
|
1124
|
+
*/
|
|
1125
|
+
declare const SipEndpointSchema: z.ZodObject<{
|
|
1126
|
+
id: z.ZodString;
|
|
1127
|
+
accountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1128
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1129
|
+
maxConcurrent: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1130
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<["active", "disabled"]>>>;
|
|
1131
|
+
routes: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown, "many">>>;
|
|
1132
|
+
dateCreated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1133
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1134
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1135
|
+
id: z.ZodString;
|
|
1136
|
+
accountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1137
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1138
|
+
maxConcurrent: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1139
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<["active", "disabled"]>>>;
|
|
1140
|
+
routes: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown, "many">>>;
|
|
1141
|
+
dateCreated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1142
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1143
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1144
|
+
id: z.ZodString;
|
|
1145
|
+
accountId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1146
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1147
|
+
maxConcurrent: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1148
|
+
status: z.ZodOptional<z.ZodNullable<z.ZodEnum<["active", "disabled"]>>>;
|
|
1149
|
+
routes: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown, "many">>>;
|
|
1150
|
+
dateCreated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1151
|
+
dateUpdated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1152
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1153
|
+
type SipEndpoint = z.infer<typeof SipEndpointSchema>;
|
|
1154
|
+
|
|
1155
|
+
/**
|
|
1156
|
+
* SIP 단말(credential) 리소스 — 조회 전용.
|
|
1157
|
+
* 생성/수정/삭제는 대시보드 또는 REST API 사용. 본 SDK 는 softphone 라우팅 설정에
|
|
1158
|
+
* 필요한 credential id 확인용 list/get 만 제공한다 (password/ha1 미노출).
|
|
1159
|
+
*/
|
|
1160
|
+
declare class SipCredentials extends APIResource {
|
|
1161
|
+
list(params?: {
|
|
1162
|
+
status?: 'active' | 'disabled';
|
|
1163
|
+
page?: number;
|
|
1164
|
+
pageSize?: number;
|
|
1165
|
+
}, options?: {
|
|
1166
|
+
extraHeaders?: Record<string, string>;
|
|
1167
|
+
extraQuery?: Record<string, unknown>;
|
|
1168
|
+
timeout?: number;
|
|
1169
|
+
}): Promise<SipCredential[]>;
|
|
1170
|
+
get(credentialId: string, options?: {
|
|
1171
|
+
extraHeaders?: Record<string, string>;
|
|
1172
|
+
timeout?: number;
|
|
1173
|
+
}): Promise<SipCredential>;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/**
|
|
1177
|
+
* SIP 엔드포인트(외부 PBX 트렁크) 리소스 — 조회 전용.
|
|
1178
|
+
* 생성/수정/삭제는 대시보드 또는 REST API 사용. 본 SDK 는 sip 라우팅 설정에
|
|
1179
|
+
* 필요한 endpoint id 확인용 list/get 만 제공한다.
|
|
1180
|
+
*/
|
|
1181
|
+
declare class SipEndpoints extends APIResource {
|
|
1182
|
+
list(params?: {
|
|
1183
|
+
status?: 'active' | 'disabled';
|
|
1184
|
+
page?: number;
|
|
1185
|
+
pageSize?: number;
|
|
1186
|
+
}, options?: {
|
|
1187
|
+
extraHeaders?: Record<string, string>;
|
|
1188
|
+
extraQuery?: Record<string, unknown>;
|
|
1189
|
+
timeout?: number;
|
|
1190
|
+
}): Promise<SipEndpoint[]>;
|
|
1191
|
+
get(endpointId: string, options?: {
|
|
1192
|
+
extraHeaders?: Record<string, string>;
|
|
1193
|
+
timeout?: number;
|
|
1194
|
+
}): Promise<SipEndpoint>;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
declare const WebhookLogSchema: z.ZodObject<{
|
|
1198
|
+
id: z.ZodString;
|
|
1199
|
+
webhookId: z.ZodString;
|
|
1200
|
+
event: z.ZodString;
|
|
1201
|
+
requestUrl: z.ZodString;
|
|
1202
|
+
requestPayload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
1203
|
+
responseStatus: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1204
|
+
responseBody: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1205
|
+
responseTimeMs: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1206
|
+
status: z.ZodEnum<["pending", "delivered", "failed"]>;
|
|
1207
|
+
attempt: z.ZodNumber;
|
|
1208
|
+
maxAttempts: z.ZodNumber;
|
|
1209
|
+
createdAt: z.ZodString;
|
|
1210
|
+
completedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1211
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1212
|
+
id: z.ZodString;
|
|
1213
|
+
webhookId: z.ZodString;
|
|
1214
|
+
event: z.ZodString;
|
|
1215
|
+
requestUrl: z.ZodString;
|
|
1216
|
+
requestPayload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
1217
|
+
responseStatus: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1218
|
+
responseBody: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1219
|
+
responseTimeMs: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1220
|
+
status: z.ZodEnum<["pending", "delivered", "failed"]>;
|
|
1221
|
+
attempt: z.ZodNumber;
|
|
1222
|
+
maxAttempts: z.ZodNumber;
|
|
1223
|
+
createdAt: z.ZodString;
|
|
1224
|
+
completedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1225
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1226
|
+
id: z.ZodString;
|
|
1227
|
+
webhookId: z.ZodString;
|
|
1228
|
+
event: z.ZodString;
|
|
1229
|
+
requestUrl: z.ZodString;
|
|
1230
|
+
requestPayload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
1231
|
+
responseStatus: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1232
|
+
responseBody: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1233
|
+
responseTimeMs: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
1234
|
+
status: z.ZodEnum<["pending", "delivered", "failed"]>;
|
|
1235
|
+
attempt: z.ZodNumber;
|
|
1236
|
+
maxAttempts: z.ZodNumber;
|
|
1237
|
+
createdAt: z.ZodString;
|
|
1238
|
+
completedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1239
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1240
|
+
type WebhookLog = z.infer<typeof WebhookLogSchema>;
|
|
1241
|
+
|
|
1242
|
+
declare class WebhookLogs extends APIResource {
|
|
1243
|
+
list(webhookId: string, params?: {
|
|
1244
|
+
page?: number;
|
|
1245
|
+
pageSize?: number;
|
|
1246
|
+
}, options?: {
|
|
1247
|
+
extraHeaders?: Record<string, string>;
|
|
1248
|
+
extraQuery?: Record<string, unknown>;
|
|
1249
|
+
timeout?: number;
|
|
1250
|
+
}): Promise<Page<WebhookLog>>;
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
declare class AccountContext {
|
|
1254
|
+
private _client;
|
|
1255
|
+
private _accountId;
|
|
1256
|
+
constructor(client: APIClient, accountId: string);
|
|
1257
|
+
get calls(): Calls;
|
|
1258
|
+
get messages(): Messages;
|
|
1259
|
+
get numbers(): Numbers;
|
|
1260
|
+
get recordings(): Recordings;
|
|
1261
|
+
get webhookLogs(): WebhookLogs;
|
|
1262
|
+
get assignmentLinks(): AssignmentLinks;
|
|
1263
|
+
get blockedRecipients(): BlockedRecipients;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
declare class ClawOpsError extends Error {
|
|
1267
|
+
constructor(message: string);
|
|
1268
|
+
}
|
|
1269
|
+
declare class APIError extends ClawOpsError {
|
|
1270
|
+
readonly request: {
|
|
1271
|
+
method: string;
|
|
1272
|
+
url: string;
|
|
1273
|
+
};
|
|
1274
|
+
constructor(message: string, request: {
|
|
1275
|
+
method: string;
|
|
1276
|
+
url: string;
|
|
1277
|
+
});
|
|
1278
|
+
}
|
|
1279
|
+
declare class APIStatusError extends APIError {
|
|
1280
|
+
readonly status: number;
|
|
1281
|
+
readonly body: unknown;
|
|
1282
|
+
readonly headers: Headers | undefined;
|
|
1283
|
+
constructor(message: string, response: {
|
|
1284
|
+
status: number;
|
|
1285
|
+
headers?: Headers;
|
|
1286
|
+
}, body: unknown, request: {
|
|
1287
|
+
method: string;
|
|
1288
|
+
url: string;
|
|
1289
|
+
});
|
|
1290
|
+
}
|
|
1291
|
+
declare class BadRequestError extends APIStatusError {
|
|
1292
|
+
readonly status: 400;
|
|
1293
|
+
constructor(message: string, response: {
|
|
1294
|
+
status: number;
|
|
1295
|
+
headers?: Headers;
|
|
1296
|
+
}, body: unknown, request: {
|
|
1297
|
+
method: string;
|
|
1298
|
+
url: string;
|
|
1299
|
+
});
|
|
1300
|
+
}
|
|
1301
|
+
declare class AuthenticationError extends APIStatusError {
|
|
1302
|
+
readonly status: 401;
|
|
1303
|
+
constructor(message: string, response: {
|
|
1304
|
+
status: number;
|
|
1305
|
+
headers?: Headers;
|
|
1306
|
+
}, body: unknown, request: {
|
|
1307
|
+
method: string;
|
|
1308
|
+
url: string;
|
|
1309
|
+
});
|
|
1310
|
+
}
|
|
1311
|
+
declare class PermissionDeniedError extends APIStatusError {
|
|
1312
|
+
readonly status: 403;
|
|
1313
|
+
constructor(message: string, response: {
|
|
1314
|
+
status: number;
|
|
1315
|
+
headers?: Headers;
|
|
1316
|
+
}, body: unknown, request: {
|
|
1317
|
+
method: string;
|
|
1318
|
+
url: string;
|
|
1319
|
+
});
|
|
1320
|
+
}
|
|
1321
|
+
declare class NotFoundError extends APIStatusError {
|
|
1322
|
+
readonly status: 404;
|
|
1323
|
+
constructor(message: string, response: {
|
|
1324
|
+
status: number;
|
|
1325
|
+
headers?: Headers;
|
|
1326
|
+
}, body: unknown, request: {
|
|
1327
|
+
method: string;
|
|
1328
|
+
url: string;
|
|
1329
|
+
});
|
|
1330
|
+
}
|
|
1331
|
+
declare class ConflictError extends APIStatusError {
|
|
1332
|
+
readonly status: 409;
|
|
1333
|
+
constructor(message: string, response: {
|
|
1334
|
+
status: number;
|
|
1335
|
+
headers?: Headers;
|
|
1336
|
+
}, body: unknown, request: {
|
|
1337
|
+
method: string;
|
|
1338
|
+
url: string;
|
|
1339
|
+
});
|
|
1340
|
+
}
|
|
1341
|
+
declare class UnprocessableEntityError extends APIStatusError {
|
|
1342
|
+
readonly status: 422;
|
|
1343
|
+
constructor(message: string, response: {
|
|
1344
|
+
status: number;
|
|
1345
|
+
headers?: Headers;
|
|
1346
|
+
}, body: unknown, request: {
|
|
1347
|
+
method: string;
|
|
1348
|
+
url: string;
|
|
1349
|
+
});
|
|
1350
|
+
}
|
|
1351
|
+
/**
|
|
1352
|
+
* HTTP 429 Too Many Requests.
|
|
1353
|
+
*
|
|
1354
|
+
* 동시 통화 한도 초과 등 일시적 제한. SDK는 자동 재시도(최대 2회, 지수 backoff)를 수행한다.
|
|
1355
|
+
* 즉각 피드백이 필요하면 client 생성 시 maxRetries: 0으로 재시도를 비활성화하라.
|
|
1356
|
+
*/
|
|
1357
|
+
declare class RateLimitError extends APIStatusError {
|
|
1358
|
+
readonly status: 429;
|
|
1359
|
+
constructor(message: string, response: {
|
|
1360
|
+
status: number;
|
|
1361
|
+
headers?: Headers;
|
|
1362
|
+
}, body: unknown, request: {
|
|
1363
|
+
method: string;
|
|
1364
|
+
url: string;
|
|
1365
|
+
});
|
|
1366
|
+
}
|
|
1367
|
+
declare class InternalServerError extends APIStatusError {
|
|
1368
|
+
readonly status: 500;
|
|
1369
|
+
constructor(message: string, response: {
|
|
1370
|
+
status: number;
|
|
1371
|
+
headers?: Headers;
|
|
1372
|
+
}, body: unknown, request: {
|
|
1373
|
+
method: string;
|
|
1374
|
+
url: string;
|
|
1375
|
+
});
|
|
1376
|
+
}
|
|
1377
|
+
declare class ServiceUnavailableError extends APIStatusError {
|
|
1378
|
+
readonly status: 503;
|
|
1379
|
+
constructor(message: string, response: {
|
|
1380
|
+
status: number;
|
|
1381
|
+
headers?: Headers;
|
|
1382
|
+
}, body: unknown, request: {
|
|
1383
|
+
method: string;
|
|
1384
|
+
url: string;
|
|
1385
|
+
});
|
|
1386
|
+
}
|
|
1387
|
+
declare class APIConnectionError extends APIError {
|
|
1388
|
+
constructor(request: {
|
|
1389
|
+
method: string;
|
|
1390
|
+
url: string;
|
|
1391
|
+
}, message?: string);
|
|
1392
|
+
}
|
|
1393
|
+
declare class APITimeoutError extends APIConnectionError {
|
|
1394
|
+
constructor(request: {
|
|
1395
|
+
method: string;
|
|
1396
|
+
url: string;
|
|
1397
|
+
});
|
|
1398
|
+
}
|
|
1399
|
+
declare class APIResponseValidationError extends APIError {
|
|
1400
|
+
readonly status: number;
|
|
1401
|
+
constructor(response: {
|
|
1402
|
+
status: number;
|
|
1403
|
+
}, request: {
|
|
1404
|
+
method: string;
|
|
1405
|
+
url: string;
|
|
1406
|
+
});
|
|
1407
|
+
}
|
|
1408
|
+
/**
|
|
1409
|
+
* 솔라피 호환 레이어가 호출을 거절할 때 쓴다.
|
|
1410
|
+
* 조용히 다르게 동작하느니 여기서 멈추는 편이 낫다고 판단한 경우들이다.
|
|
1411
|
+
*/
|
|
1412
|
+
declare class SolapiBridgeError extends ClawOpsError {
|
|
1413
|
+
constructor(message: string);
|
|
1414
|
+
}
|
|
1415
|
+
declare class AgentError extends ClawOpsError {
|
|
1416
|
+
constructor(message: string);
|
|
1417
|
+
}
|
|
1418
|
+
declare class AgentConnectionError extends AgentError {
|
|
1419
|
+
constructor(message?: string);
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
declare class WebhookVerificationError extends ClawOpsError {
|
|
1423
|
+
constructor(message?: string);
|
|
1424
|
+
}
|
|
1425
|
+
declare class Webhooks {
|
|
1426
|
+
verify(options: {
|
|
1427
|
+
url: string;
|
|
1428
|
+
params: Record<string, string>;
|
|
1429
|
+
signature: string;
|
|
1430
|
+
signingKey: string;
|
|
1431
|
+
}): boolean;
|
|
1432
|
+
static _computeSignature(url: string, params: Record<string, string>, signingKey: string): string;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
interface ClawOpsOptions {
|
|
1436
|
+
apiKey?: string;
|
|
1437
|
+
accountId?: string;
|
|
1438
|
+
baseURL?: string;
|
|
1439
|
+
timeout?: number;
|
|
1440
|
+
maxRetries?: number;
|
|
1441
|
+
fetch?: typeof globalThis.fetch;
|
|
1442
|
+
defaultHeaders?: Record<string, string>;
|
|
1443
|
+
}
|
|
1444
|
+
declare class ClawOps extends APIClient {
|
|
1445
|
+
private _defaultAccountId;
|
|
1446
|
+
constructor(options?: ClawOpsOptions);
|
|
1447
|
+
get calls(): Calls;
|
|
1448
|
+
get messages(): Messages;
|
|
1449
|
+
get numbers(): Numbers;
|
|
1450
|
+
get sipCredentials(): SipCredentials;
|
|
1451
|
+
get sipEndpoints(): SipEndpoints;
|
|
1452
|
+
get recordings(): Recordings;
|
|
1453
|
+
get webhookLogs(): WebhookLogs;
|
|
1454
|
+
get assignmentLinks(): AssignmentLinks;
|
|
1455
|
+
get blockedRecipients(): BlockedRecipients;
|
|
1456
|
+
get webhooks(): Webhooks;
|
|
1457
|
+
accounts(accountId: string): AccountContext;
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
export { SipCredentials as $, APIClient as A, BadRequestError as B, type Call as C, ClawOps as D, ClawOpsError as E, type ClawOpsOptions as F, ConflictError as G, type MessageCreateParams as H, InternalServerError as I, type MessageListParams as J, Messages as K, type NumberCreateParams as L, type Message as M, NotFoundError as N, type NumberListItem as O, type NumberUpdateParams as P, type NumberUpdateResponse as Q, Numbers as R, Page as S, PermissionDeniedError as T, type PhoneNumber as U, RateLimitError as V, type RecordingDownload as W, Recordings as X, type RoutingType as Y, ServiceUnavailableError as Z, type SipCredential as _, type APIClientOptions as a, type SipEndpoint as a0, SipEndpoints as a1, SolapiBridgeError as a2, UnprocessableEntityError as a3, type WebhookLog as a4, WebhookLogs as a5, WebhookVerificationError as a6, Webhooks as a7, APIConnectionError as b, APIError as c, APIResponseValidationError as d, APIStatusError as e, APITimeoutError as f, AccountContext as g, AgentConnectionError as h, AgentError as i, type AssignmentLink as j, type AssignmentLinkAssignment as k, type AssignmentLinkCreateResponse as l, type AssignmentLinkStatus as m, AssignmentLinks as n, AuthenticationError as o, type BlockedChannel as p, type BlockedRecipient as q, type BlockedRecipientSource as r, type BlockedRecipientStatus as s, BlockedRecipients as t, type CallContextParam as u, type CallControlResponse as v, type CallCreateParams as w, type CallListParams as x, type CallUpdateParams as y, Calls as z };
|