retell-sdk 5.22.0 → 5.23.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/CHANGELOG.md +8 -0
- package/client.d.mts +10 -10
- package/client.d.mts.map +1 -1
- package/client.d.ts +10 -10
- package/client.d.ts.map +1 -1
- package/client.js.map +1 -1
- package/client.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/agent.d.mts +14 -1
- package/resources/agent.d.mts.map +1 -1
- package/resources/agent.d.ts +14 -1
- package/resources/agent.d.ts.map +1 -1
- package/resources/agent.js +15 -0
- package/resources/agent.js.map +1 -1
- package/resources/agent.mjs +15 -0
- package/resources/agent.mjs.map +1 -1
- package/resources/call.d.mts +559 -74
- package/resources/call.d.mts.map +1 -1
- package/resources/call.d.ts +559 -74
- package/resources/call.d.ts.map +1 -1
- package/resources/call.js +7 -4
- package/resources/call.js.map +1 -1
- package/resources/call.mjs +7 -4
- package/resources/call.mjs.map +1 -1
- package/resources/chat-agent.d.mts +16 -1
- package/resources/chat-agent.d.mts.map +1 -1
- package/resources/chat-agent.d.ts +16 -1
- package/resources/chat-agent.d.ts.map +1 -1
- package/resources/chat-agent.js +17 -0
- package/resources/chat-agent.js.map +1 -1
- package/resources/chat-agent.mjs +17 -0
- package/resources/chat-agent.mjs.map +1 -1
- package/resources/chat.d.mts +38 -12
- package/resources/chat.d.mts.map +1 -1
- package/resources/chat.d.ts +38 -12
- package/resources/chat.d.ts.map +1 -1
- package/resources/chat.js +8 -5
- package/resources/chat.js.map +1 -1
- package/resources/chat.mjs +8 -5
- package/resources/chat.mjs.map +1 -1
- package/resources/conversation-flow-component.d.mts +33 -5
- package/resources/conversation-flow-component.d.mts.map +1 -1
- package/resources/conversation-flow-component.d.ts +33 -5
- package/resources/conversation-flow-component.d.ts.map +1 -1
- package/resources/conversation-flow-component.js +8 -4
- package/resources/conversation-flow-component.js.map +1 -1
- package/resources/conversation-flow-component.mjs +8 -4
- package/resources/conversation-flow-component.mjs.map +1 -1
- package/resources/conversation-flow.d.mts +21 -14
- package/resources/conversation-flow.d.mts.map +1 -1
- package/resources/conversation-flow.d.ts +21 -14
- package/resources/conversation-flow.d.ts.map +1 -1
- package/resources/conversation-flow.js +7 -3
- package/resources/conversation-flow.js.map +1 -1
- package/resources/conversation-flow.mjs +7 -3
- package/resources/conversation-flow.mjs.map +1 -1
- package/resources/index.d.mts +5 -5
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +5 -5
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs.map +1 -1
- package/resources/llm.d.mts +20 -12
- package/resources/llm.d.mts.map +1 -1
- package/resources/llm.d.ts +20 -12
- package/resources/llm.d.ts.map +1 -1
- package/resources/llm.js +6 -3
- package/resources/llm.js.map +1 -1
- package/resources/llm.mjs +6 -3
- package/resources/llm.mjs.map +1 -1
- package/resources/phone-number.d.mts +32 -5
- package/resources/phone-number.d.mts.map +1 -1
- package/resources/phone-number.d.ts +32 -5
- package/resources/phone-number.d.ts.map +1 -1
- package/resources/phone-number.js +7 -4
- package/resources/phone-number.js.map +1 -1
- package/resources/phone-number.mjs +7 -4
- package/resources/phone-number.mjs.map +1 -1
- package/resources/tests.d.mts +64 -14
- package/resources/tests.d.mts.map +1 -1
- package/resources/tests.d.ts +64 -14
- package/resources/tests.d.ts.map +1 -1
- package/resources/tests.js +7 -13
- package/resources/tests.js.map +1 -1
- package/resources/tests.mjs +7 -13
- package/resources/tests.mjs.map +1 -1
- package/src/client.ts +10 -0
- package/src/resources/agent.ts +23 -0
- package/src/resources/call.ts +766 -104
- package/src/resources/chat-agent.ts +25 -0
- package/src/resources/chat.ts +42 -17
- package/src/resources/conversation-flow-component.ts +42 -5
- package/src/resources/conversation-flow.ts +24 -15
- package/src/resources/index.ts +5 -0
- package/src/resources/llm.ts +23 -13
- package/src/resources/phone-number.ts +41 -5
- package/src/resources/tests.ts +83 -16
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/src/resources/call.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
2
|
|
|
3
3
|
import { APIResource } from '../core/resource';
|
|
4
|
+
import * as CallAPI from './call';
|
|
4
5
|
import { APIPromise } from '../core/api-promise';
|
|
5
6
|
import { buildHeaders } from '../internal/headers';
|
|
6
7
|
import { RequestOptions } from '../internal/request-options';
|
|
@@ -43,12 +44,15 @@ export class Call extends APIResource {
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
|
-
*
|
|
47
|
+
* List calls with unified cursor pagination response.
|
|
47
48
|
*
|
|
48
|
-
* @
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const calls = await client.call.list();
|
|
52
|
+
* ```
|
|
49
53
|
*/
|
|
50
|
-
list(body: CallListParams, options?: RequestOptions): APIPromise<CallListResponse> {
|
|
51
|
-
return this._client.post('/
|
|
54
|
+
list(body: CallListParams | null | undefined = {}, options?: RequestOptions): APIPromise<CallListResponse> {
|
|
55
|
+
return this._client.post('/v3/list-calls', {
|
|
52
56
|
body,
|
|
53
57
|
timeout: (this._client as any)._options.timeout ?? 300000,
|
|
54
58
|
...options,
|
|
@@ -2281,7 +2285,31 @@ export namespace WebCallResponse {
|
|
|
2281
2285
|
}
|
|
2282
2286
|
}
|
|
2283
2287
|
|
|
2284
|
-
export
|
|
2288
|
+
export interface CallListResponse {
|
|
2289
|
+
/**
|
|
2290
|
+
* Whether more results are available.
|
|
2291
|
+
*/
|
|
2292
|
+
has_more?: boolean;
|
|
2293
|
+
|
|
2294
|
+
items?: Array<CallListResponse.CallWebCallResponse | CallListResponse.CallPhoneCallResponse>;
|
|
2295
|
+
|
|
2296
|
+
/**
|
|
2297
|
+
* Pagination key for the next page.
|
|
2298
|
+
*/
|
|
2299
|
+
pagination_key?: string;
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2302
|
+
export namespace CallListResponse {
|
|
2303
|
+
/**
|
|
2304
|
+
* V3 list calls response. Transcript fields are intentionally omitted.
|
|
2305
|
+
*/
|
|
2306
|
+
export interface CallWebCallResponse extends CallAPI.WebCallResponse {}
|
|
2307
|
+
|
|
2308
|
+
/**
|
|
2309
|
+
* V3 list calls response. Transcript fields are intentionally omitted.
|
|
2310
|
+
*/
|
|
2311
|
+
export interface CallPhoneCallResponse extends CallAPI.PhoneCallResponse {}
|
|
2312
|
+
}
|
|
2285
2313
|
|
|
2286
2314
|
export interface CallUpdateParams {
|
|
2287
2315
|
/**
|
|
@@ -2316,196 +2344,830 @@ export interface CallUpdateParams {
|
|
|
2316
2344
|
|
|
2317
2345
|
export interface CallListParams {
|
|
2318
2346
|
/**
|
|
2319
|
-
* Filter criteria for
|
|
2347
|
+
* Filter criteria for calls. All conditions are implicitly connected with AND.
|
|
2320
2348
|
*/
|
|
2321
2349
|
filter_criteria?: CallListParams.FilterCriteria;
|
|
2322
2350
|
|
|
2323
2351
|
/**
|
|
2324
|
-
*
|
|
2325
|
-
* 1000, use pagination_key to continue fetching the next page.
|
|
2352
|
+
* Maximum number of calls to return.
|
|
2326
2353
|
*/
|
|
2327
2354
|
limit?: number;
|
|
2328
2355
|
|
|
2329
2356
|
/**
|
|
2330
|
-
*
|
|
2331
|
-
* is represented by a call id here, and it's exclusive (not included in the
|
|
2332
|
-
* fetched calls). The last call id from the list calls is usually used as
|
|
2333
|
-
* pagination key here. If not set, will start from the beginning.
|
|
2357
|
+
* Opaque pagination cursor from a previous response.
|
|
2334
2358
|
*/
|
|
2335
2359
|
pagination_key?: string;
|
|
2336
2360
|
|
|
2337
2361
|
/**
|
|
2338
|
-
*
|
|
2339
|
-
|
|
2362
|
+
* Number of records to skip for pagination.
|
|
2363
|
+
*/
|
|
2364
|
+
skip?: number;
|
|
2365
|
+
|
|
2366
|
+
/**
|
|
2367
|
+
* Sort calls by `start_timestamp` in ascending or descending order.
|
|
2340
2368
|
*/
|
|
2341
2369
|
sort_order?: 'ascending' | 'descending';
|
|
2342
2370
|
}
|
|
2343
2371
|
|
|
2344
2372
|
export namespace CallListParams {
|
|
2345
2373
|
/**
|
|
2346
|
-
* Filter criteria for
|
|
2374
|
+
* Filter criteria for calls. All conditions are implicitly connected with AND.
|
|
2347
2375
|
*/
|
|
2348
2376
|
export interface FilterCriteria {
|
|
2349
2377
|
/**
|
|
2350
|
-
*
|
|
2378
|
+
* Filter by agent(s). Agent filters are connected by OR.
|
|
2351
2379
|
*/
|
|
2352
|
-
|
|
2380
|
+
agent?: Array<FilterCriteria.Agent>;
|
|
2353
2381
|
|
|
2354
2382
|
/**
|
|
2355
|
-
*
|
|
2383
|
+
* Filter by batch call ID.
|
|
2356
2384
|
*/
|
|
2357
|
-
batch_call_id?:
|
|
2385
|
+
batch_call_id?: FilterCriteria.BatchCallID;
|
|
2358
2386
|
|
|
2359
2387
|
/**
|
|
2360
|
-
*
|
|
2388
|
+
* Filter by call ID.
|
|
2361
2389
|
*/
|
|
2362
|
-
call_id?:
|
|
2390
|
+
call_id?: FilterCriteria.CallID;
|
|
2363
2391
|
|
|
2364
|
-
|
|
2365
|
-
* Only retrieve calls with specific call status(es).
|
|
2366
|
-
*/
|
|
2367
|
-
call_status?: Array<'not_connected' | 'ongoing' | 'ended' | 'error'>;
|
|
2392
|
+
call_status?: FilterCriteria.CallStatus;
|
|
2368
2393
|
|
|
2369
2394
|
/**
|
|
2370
|
-
*
|
|
2395
|
+
* Filter by whether the call was successful.
|
|
2371
2396
|
*/
|
|
2372
|
-
call_successful?:
|
|
2397
|
+
call_successful?: FilterCriteria.CallSuccessful;
|
|
2398
|
+
|
|
2399
|
+
call_type?: FilterCriteria.CallType;
|
|
2373
2400
|
|
|
2374
2401
|
/**
|
|
2375
|
-
*
|
|
2402
|
+
* Filter by combined cost of the call.
|
|
2376
2403
|
*/
|
|
2377
|
-
|
|
2404
|
+
combined_cost?: FilterCriteria.NumberFilter | FilterCriteria.RangeFilter;
|
|
2378
2405
|
|
|
2379
2406
|
/**
|
|
2380
|
-
*
|
|
2407
|
+
* Filter by custom analysis data fields.
|
|
2381
2408
|
*/
|
|
2382
|
-
|
|
2409
|
+
custom_analysis_data?: Array<
|
|
2410
|
+
| FilterCriteria.StringFilter
|
|
2411
|
+
| FilterCriteria.NumberFilter
|
|
2412
|
+
| FilterCriteria.BooleanFilter
|
|
2413
|
+
| FilterCriteria.RangeFilter
|
|
2414
|
+
| FilterCriteria.EnumFilter
|
|
2415
|
+
| FilterCriteria.PresentFilter
|
|
2416
|
+
>;
|
|
2383
2417
|
|
|
2384
2418
|
/**
|
|
2385
|
-
*
|
|
2419
|
+
* Filter by custom attributes fields.
|
|
2386
2420
|
*/
|
|
2387
|
-
|
|
2388
|
-
|
|
|
2389
|
-
|
|
|
2390
|
-
|
|
|
2391
|
-
|
|
|
2392
|
-
|
|
|
2393
|
-
|
|
|
2394
|
-
| 'max_duration_reached'
|
|
2395
|
-
| 'concurrency_limit_reached'
|
|
2396
|
-
| 'no_valid_payment'
|
|
2397
|
-
| 'scam_detected'
|
|
2398
|
-
| 'dial_busy'
|
|
2399
|
-
| 'dial_failed'
|
|
2400
|
-
| 'dial_no_answer'
|
|
2401
|
-
| 'invalid_destination'
|
|
2402
|
-
| 'telephony_provider_permission_denied'
|
|
2403
|
-
| 'telephony_provider_unavailable'
|
|
2404
|
-
| 'sip_routing_error'
|
|
2405
|
-
| 'marked_as_spam'
|
|
2406
|
-
| 'user_declined'
|
|
2407
|
-
| 'error_llm_websocket_open'
|
|
2408
|
-
| 'error_llm_websocket_lost_connection'
|
|
2409
|
-
| 'error_llm_websocket_runtime'
|
|
2410
|
-
| 'error_llm_websocket_corrupt_payload'
|
|
2411
|
-
| 'error_no_audio_received'
|
|
2412
|
-
| 'error_asr'
|
|
2413
|
-
| 'error_retell'
|
|
2414
|
-
| 'error_unknown'
|
|
2415
|
-
| 'error_user_not_joined'
|
|
2416
|
-
| 'registered_call_timeout'
|
|
2417
|
-
| 'transfer_bridged'
|
|
2418
|
-
| 'transfer_cancelled'
|
|
2419
|
-
| 'manual_stopped'
|
|
2421
|
+
custom_attributes?: Array<
|
|
2422
|
+
| FilterCriteria.StringFilter
|
|
2423
|
+
| FilterCriteria.NumberFilter
|
|
2424
|
+
| FilterCriteria.BooleanFilter
|
|
2425
|
+
| FilterCriteria.RangeFilter
|
|
2426
|
+
| FilterCriteria.EnumFilter
|
|
2427
|
+
| FilterCriteria.PresentFilter
|
|
2420
2428
|
>;
|
|
2421
2429
|
|
|
2430
|
+
data_storage_setting?: FilterCriteria.DataStorageSetting;
|
|
2431
|
+
|
|
2432
|
+
direction?: FilterCriteria.Direction;
|
|
2433
|
+
|
|
2434
|
+
disconnection_reason?: FilterCriteria.DisconnectionReason;
|
|
2435
|
+
|
|
2422
2436
|
/**
|
|
2423
|
-
*
|
|
2437
|
+
* Filter by call duration in milliseconds.
|
|
2424
2438
|
*/
|
|
2425
|
-
duration_ms?: FilterCriteria.
|
|
2439
|
+
duration_ms?: FilterCriteria.NumberFilter | FilterCriteria.RangeFilter;
|
|
2426
2440
|
|
|
2427
2441
|
/**
|
|
2428
|
-
* Filter by dynamic variables
|
|
2429
|
-
* Values are matched exactly as strings.
|
|
2442
|
+
* Filter by dynamic variables.
|
|
2430
2443
|
*/
|
|
2431
|
-
dynamic_variables?:
|
|
2432
|
-
|
|
2433
|
-
e2e_latency_p50?: FilterCriteria.E2ELatencyP50;
|
|
2444
|
+
dynamic_variables?: Array<FilterCriteria.DynamicVariable>;
|
|
2434
2445
|
|
|
2435
2446
|
/**
|
|
2436
|
-
*
|
|
2447
|
+
* Filter by end-to-end latency p50.
|
|
2437
2448
|
*/
|
|
2438
|
-
|
|
2449
|
+
e2e_latency_p50?: FilterCriteria.NumberFilter | FilterCriteria.RangeFilter;
|
|
2439
2450
|
|
|
2440
2451
|
/**
|
|
2441
|
-
*
|
|
2452
|
+
* Filter by call end timestamp (epoch ms).
|
|
2442
2453
|
*/
|
|
2443
|
-
|
|
2454
|
+
end_timestamp?: FilterCriteria.NumberFilter | FilterCriteria.RangeFilter;
|
|
2444
2455
|
|
|
2445
2456
|
/**
|
|
2446
|
-
*
|
|
2457
|
+
* Filter by from number.
|
|
2447
2458
|
*/
|
|
2448
|
-
|
|
2459
|
+
from_number?: FilterCriteria.FromNumber;
|
|
2449
2460
|
|
|
2450
2461
|
/**
|
|
2451
|
-
* Filter by
|
|
2452
|
-
* Values are matched exactly as strings.
|
|
2462
|
+
* Filter by whether the call is in voicemail.
|
|
2453
2463
|
*/
|
|
2454
|
-
|
|
2464
|
+
in_voicemail?: FilterCriteria.InVoicemail;
|
|
2455
2465
|
|
|
2456
2466
|
/**
|
|
2457
|
-
*
|
|
2467
|
+
* Filter by metadata fields.
|
|
2458
2468
|
*/
|
|
2459
|
-
|
|
2469
|
+
metadata?: Array<
|
|
2470
|
+
| FilterCriteria.StringFilter
|
|
2471
|
+
| FilterCriteria.NumberFilter
|
|
2472
|
+
| FilterCriteria.BooleanFilter
|
|
2473
|
+
| FilterCriteria.RangeFilter
|
|
2474
|
+
| FilterCriteria.EnumFilter
|
|
2475
|
+
| FilterCriteria.PresentFilter
|
|
2476
|
+
>;
|
|
2460
2477
|
|
|
2461
2478
|
/**
|
|
2462
|
-
*
|
|
2479
|
+
* Filter by call start timestamp (epoch ms).
|
|
2463
2480
|
*/
|
|
2464
|
-
|
|
2481
|
+
start_timestamp?: FilterCriteria.NumberFilter | FilterCriteria.RangeFilter;
|
|
2465
2482
|
|
|
2466
2483
|
/**
|
|
2467
|
-
*
|
|
2484
|
+
* Filter by to number.
|
|
2468
2485
|
*/
|
|
2469
|
-
|
|
2486
|
+
to_number?: FilterCriteria.ToNumber;
|
|
2470
2487
|
|
|
2471
2488
|
/**
|
|
2472
|
-
*
|
|
2489
|
+
* Filter by tool call criteria. Tool call filters are connected by AND.
|
|
2473
2490
|
*/
|
|
2474
|
-
|
|
2491
|
+
tool_calls?: Array<FilterCriteria.ToolCall>;
|
|
2492
|
+
|
|
2493
|
+
user_sentiment?: FilterCriteria.UserSentiment;
|
|
2475
2494
|
}
|
|
2476
2495
|
|
|
2477
2496
|
export namespace FilterCriteria {
|
|
2497
|
+
export interface Agent {
|
|
2498
|
+
/**
|
|
2499
|
+
* The agent ID to filter on.
|
|
2500
|
+
*/
|
|
2501
|
+
agent_id: string;
|
|
2502
|
+
|
|
2503
|
+
/**
|
|
2504
|
+
* Specific versions to filter on. If not provided, all versions are included.
|
|
2505
|
+
*/
|
|
2506
|
+
version?: Array<number>;
|
|
2507
|
+
}
|
|
2508
|
+
|
|
2509
|
+
/**
|
|
2510
|
+
* Filter by batch call ID.
|
|
2511
|
+
*/
|
|
2512
|
+
export interface BatchCallID {
|
|
2513
|
+
/**
|
|
2514
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2515
|
+
*/
|
|
2516
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2517
|
+
|
|
2518
|
+
type: 'string';
|
|
2519
|
+
|
|
2520
|
+
value: string;
|
|
2521
|
+
}
|
|
2522
|
+
|
|
2478
2523
|
/**
|
|
2479
|
-
*
|
|
2524
|
+
* Filter by call ID.
|
|
2480
2525
|
*/
|
|
2481
|
-
export interface
|
|
2482
|
-
|
|
2526
|
+
export interface CallID {
|
|
2527
|
+
/**
|
|
2528
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2529
|
+
*/
|
|
2530
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2531
|
+
|
|
2532
|
+
type: 'string';
|
|
2533
|
+
|
|
2534
|
+
value: string;
|
|
2535
|
+
}
|
|
2536
|
+
|
|
2537
|
+
export interface CallStatus {
|
|
2538
|
+
/**
|
|
2539
|
+
* in: value is one of the listed values
|
|
2540
|
+
*/
|
|
2541
|
+
op: 'in';
|
|
2542
|
+
|
|
2543
|
+
type: 'enum';
|
|
2544
|
+
|
|
2545
|
+
value: Array<'not_connected' | 'ongoing' | 'ended' | 'error'>;
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2548
|
+
/**
|
|
2549
|
+
* Filter by whether the call was successful.
|
|
2550
|
+
*/
|
|
2551
|
+
export interface CallSuccessful {
|
|
2552
|
+
op: 'eq';
|
|
2553
|
+
|
|
2554
|
+
type: 'boolean';
|
|
2555
|
+
|
|
2556
|
+
value: boolean;
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2559
|
+
export interface CallType {
|
|
2560
|
+
/**
|
|
2561
|
+
* in: value is one of the listed values
|
|
2562
|
+
*/
|
|
2563
|
+
op: 'in';
|
|
2564
|
+
|
|
2565
|
+
type: 'enum';
|
|
2566
|
+
|
|
2567
|
+
value: Array<'web_call' | 'phone_call'>;
|
|
2568
|
+
}
|
|
2569
|
+
|
|
2570
|
+
export interface NumberFilter {
|
|
2571
|
+
/**
|
|
2572
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2573
|
+
* than, le: less than or equal
|
|
2574
|
+
*/
|
|
2575
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2576
|
+
|
|
2577
|
+
type: 'number';
|
|
2578
|
+
|
|
2579
|
+
value: number;
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
export interface RangeFilter {
|
|
2583
|
+
/**
|
|
2584
|
+
* bt: between
|
|
2585
|
+
*/
|
|
2586
|
+
op: 'bt';
|
|
2587
|
+
|
|
2588
|
+
type: 'range';
|
|
2589
|
+
|
|
2590
|
+
/**
|
|
2591
|
+
* [lower_bound, upper_bound]
|
|
2592
|
+
*/
|
|
2593
|
+
value: Array<number>;
|
|
2594
|
+
}
|
|
2595
|
+
|
|
2596
|
+
export interface StringFilter {
|
|
2597
|
+
/**
|
|
2598
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2599
|
+
*/
|
|
2600
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2601
|
+
|
|
2602
|
+
type: 'string';
|
|
2603
|
+
|
|
2604
|
+
value: string;
|
|
2605
|
+
|
|
2606
|
+
/**
|
|
2607
|
+
* The field name to filter on.
|
|
2608
|
+
*/
|
|
2609
|
+
key?: string;
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
export interface NumberFilter {
|
|
2613
|
+
/**
|
|
2614
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2615
|
+
* than, le: less than or equal
|
|
2616
|
+
*/
|
|
2617
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2618
|
+
|
|
2619
|
+
type: 'number';
|
|
2620
|
+
|
|
2621
|
+
value: number;
|
|
2622
|
+
|
|
2623
|
+
/**
|
|
2624
|
+
* The field name to filter on.
|
|
2625
|
+
*/
|
|
2626
|
+
key?: string;
|
|
2627
|
+
}
|
|
2628
|
+
|
|
2629
|
+
export interface BooleanFilter {
|
|
2630
|
+
op: 'eq';
|
|
2631
|
+
|
|
2632
|
+
type: 'boolean';
|
|
2633
|
+
|
|
2634
|
+
value: boolean;
|
|
2635
|
+
|
|
2636
|
+
/**
|
|
2637
|
+
* The field name to filter on.
|
|
2638
|
+
*/
|
|
2639
|
+
key?: string;
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
export interface RangeFilter {
|
|
2643
|
+
/**
|
|
2644
|
+
* bt: between
|
|
2645
|
+
*/
|
|
2646
|
+
op: 'bt';
|
|
2647
|
+
|
|
2648
|
+
type: 'range';
|
|
2649
|
+
|
|
2650
|
+
/**
|
|
2651
|
+
* [lower_bound, upper_bound]
|
|
2652
|
+
*/
|
|
2653
|
+
value: Array<number>;
|
|
2654
|
+
|
|
2655
|
+
/**
|
|
2656
|
+
* The field name to filter on.
|
|
2657
|
+
*/
|
|
2658
|
+
key?: string;
|
|
2659
|
+
}
|
|
2660
|
+
|
|
2661
|
+
export interface EnumFilter {
|
|
2662
|
+
/**
|
|
2663
|
+
* in: value is one of the listed values
|
|
2664
|
+
*/
|
|
2665
|
+
op: 'in';
|
|
2666
|
+
|
|
2667
|
+
type: 'enum';
|
|
2668
|
+
|
|
2669
|
+
value: Array<string>;
|
|
2670
|
+
|
|
2671
|
+
/**
|
|
2672
|
+
* The field name to filter on.
|
|
2673
|
+
*/
|
|
2674
|
+
key?: string;
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
export interface PresentFilter {
|
|
2678
|
+
/**
|
|
2679
|
+
* pr: present (has value), np: not present
|
|
2680
|
+
*/
|
|
2681
|
+
op: 'pr' | 'np';
|
|
2682
|
+
|
|
2683
|
+
type: 'present';
|
|
2684
|
+
|
|
2685
|
+
/**
|
|
2686
|
+
* The field name to filter on.
|
|
2687
|
+
*/
|
|
2688
|
+
key?: string;
|
|
2689
|
+
}
|
|
2690
|
+
|
|
2691
|
+
export interface StringFilter {
|
|
2692
|
+
/**
|
|
2693
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2694
|
+
*/
|
|
2695
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2696
|
+
|
|
2697
|
+
type: 'string';
|
|
2698
|
+
|
|
2699
|
+
value: string;
|
|
2700
|
+
|
|
2701
|
+
/**
|
|
2702
|
+
* The field name to filter on.
|
|
2703
|
+
*/
|
|
2704
|
+
key?: string;
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
export interface NumberFilter {
|
|
2708
|
+
/**
|
|
2709
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2710
|
+
* than, le: less than or equal
|
|
2711
|
+
*/
|
|
2712
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2713
|
+
|
|
2714
|
+
type: 'number';
|
|
2715
|
+
|
|
2716
|
+
value: number;
|
|
2717
|
+
|
|
2718
|
+
/**
|
|
2719
|
+
* The field name to filter on.
|
|
2720
|
+
*/
|
|
2721
|
+
key?: string;
|
|
2722
|
+
}
|
|
2723
|
+
|
|
2724
|
+
export interface BooleanFilter {
|
|
2725
|
+
op: 'eq';
|
|
2726
|
+
|
|
2727
|
+
type: 'boolean';
|
|
2728
|
+
|
|
2729
|
+
value: boolean;
|
|
2730
|
+
|
|
2731
|
+
/**
|
|
2732
|
+
* The field name to filter on.
|
|
2733
|
+
*/
|
|
2734
|
+
key?: string;
|
|
2735
|
+
}
|
|
2736
|
+
|
|
2737
|
+
export interface RangeFilter {
|
|
2738
|
+
/**
|
|
2739
|
+
* bt: between
|
|
2740
|
+
*/
|
|
2741
|
+
op: 'bt';
|
|
2742
|
+
|
|
2743
|
+
type: 'range';
|
|
2744
|
+
|
|
2745
|
+
/**
|
|
2746
|
+
* [lower_bound, upper_bound]
|
|
2747
|
+
*/
|
|
2748
|
+
value: Array<number>;
|
|
2749
|
+
|
|
2750
|
+
/**
|
|
2751
|
+
* The field name to filter on.
|
|
2752
|
+
*/
|
|
2753
|
+
key?: string;
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2756
|
+
export interface EnumFilter {
|
|
2757
|
+
/**
|
|
2758
|
+
* in: value is one of the listed values
|
|
2759
|
+
*/
|
|
2760
|
+
op: 'in';
|
|
2761
|
+
|
|
2762
|
+
type: 'enum';
|
|
2763
|
+
|
|
2764
|
+
value: Array<string>;
|
|
2765
|
+
|
|
2766
|
+
/**
|
|
2767
|
+
* The field name to filter on.
|
|
2768
|
+
*/
|
|
2769
|
+
key?: string;
|
|
2770
|
+
}
|
|
2771
|
+
|
|
2772
|
+
export interface PresentFilter {
|
|
2773
|
+
/**
|
|
2774
|
+
* pr: present (has value), np: not present
|
|
2775
|
+
*/
|
|
2776
|
+
op: 'pr' | 'np';
|
|
2483
2777
|
|
|
2484
|
-
|
|
2778
|
+
type: 'present';
|
|
2779
|
+
|
|
2780
|
+
/**
|
|
2781
|
+
* The field name to filter on.
|
|
2782
|
+
*/
|
|
2783
|
+
key?: string;
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
export interface DataStorageSetting {
|
|
2787
|
+
/**
|
|
2788
|
+
* in: value is one of the listed values
|
|
2789
|
+
*/
|
|
2790
|
+
op: 'in';
|
|
2791
|
+
|
|
2792
|
+
type: 'enum';
|
|
2793
|
+
|
|
2794
|
+
value: Array<'everything' | 'everything_except_pii' | 'basic_attributes_only'>;
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
export interface Direction {
|
|
2798
|
+
/**
|
|
2799
|
+
* in: value is one of the listed values
|
|
2800
|
+
*/
|
|
2801
|
+
op: 'in';
|
|
2802
|
+
|
|
2803
|
+
type: 'enum';
|
|
2804
|
+
|
|
2805
|
+
value: Array<'inbound' | 'outbound'>;
|
|
2806
|
+
}
|
|
2807
|
+
|
|
2808
|
+
export interface DisconnectionReason {
|
|
2809
|
+
/**
|
|
2810
|
+
* in: value is one of the listed values
|
|
2811
|
+
*/
|
|
2812
|
+
op: 'in';
|
|
2813
|
+
|
|
2814
|
+
type: 'enum';
|
|
2815
|
+
|
|
2816
|
+
value: Array<
|
|
2817
|
+
| 'user_hangup'
|
|
2818
|
+
| 'agent_hangup'
|
|
2819
|
+
| 'call_transfer'
|
|
2820
|
+
| 'voicemail_reached'
|
|
2821
|
+
| 'ivr_reached'
|
|
2822
|
+
| 'inactivity'
|
|
2823
|
+
| 'max_duration_reached'
|
|
2824
|
+
| 'concurrency_limit_reached'
|
|
2825
|
+
| 'no_valid_payment'
|
|
2826
|
+
| 'scam_detected'
|
|
2827
|
+
| 'dial_busy'
|
|
2828
|
+
| 'dial_failed'
|
|
2829
|
+
| 'dial_no_answer'
|
|
2830
|
+
| 'invalid_destination'
|
|
2831
|
+
| 'telephony_provider_permission_denied'
|
|
2832
|
+
| 'telephony_provider_unavailable'
|
|
2833
|
+
| 'sip_routing_error'
|
|
2834
|
+
| 'marked_as_spam'
|
|
2835
|
+
| 'user_declined'
|
|
2836
|
+
| 'error_llm_websocket_open'
|
|
2837
|
+
| 'error_llm_websocket_lost_connection'
|
|
2838
|
+
| 'error_llm_websocket_runtime'
|
|
2839
|
+
| 'error_llm_websocket_corrupt_payload'
|
|
2840
|
+
| 'error_no_audio_received'
|
|
2841
|
+
| 'error_asr'
|
|
2842
|
+
| 'error_retell'
|
|
2843
|
+
| 'error_unknown'
|
|
2844
|
+
| 'error_user_not_joined'
|
|
2845
|
+
| 'registered_call_timeout'
|
|
2846
|
+
| 'transfer_bridged'
|
|
2847
|
+
| 'transfer_cancelled'
|
|
2848
|
+
| 'manual_stopped'
|
|
2849
|
+
>;
|
|
2485
2850
|
}
|
|
2486
2851
|
|
|
2487
|
-
export interface
|
|
2488
|
-
|
|
2852
|
+
export interface NumberFilter {
|
|
2853
|
+
/**
|
|
2854
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2855
|
+
* than, le: less than or equal
|
|
2856
|
+
*/
|
|
2857
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2858
|
+
|
|
2859
|
+
type: 'number';
|
|
2489
2860
|
|
|
2490
|
-
|
|
2861
|
+
value: number;
|
|
2862
|
+
}
|
|
2863
|
+
|
|
2864
|
+
export interface RangeFilter {
|
|
2865
|
+
/**
|
|
2866
|
+
* bt: between
|
|
2867
|
+
*/
|
|
2868
|
+
op: 'bt';
|
|
2869
|
+
|
|
2870
|
+
type: 'range';
|
|
2871
|
+
|
|
2872
|
+
/**
|
|
2873
|
+
* [lower_bound, upper_bound]
|
|
2874
|
+
*/
|
|
2875
|
+
value: Array<number>;
|
|
2876
|
+
}
|
|
2877
|
+
|
|
2878
|
+
export interface DynamicVariable {
|
|
2879
|
+
/**
|
|
2880
|
+
* The dynamic variable name to filter on.
|
|
2881
|
+
*/
|
|
2882
|
+
key: string;
|
|
2883
|
+
|
|
2884
|
+
/**
|
|
2885
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2886
|
+
*/
|
|
2887
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2888
|
+
|
|
2889
|
+
type: 'string';
|
|
2890
|
+
|
|
2891
|
+
value: string;
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2894
|
+
export interface NumberFilter {
|
|
2895
|
+
/**
|
|
2896
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2897
|
+
* than, le: less than or equal
|
|
2898
|
+
*/
|
|
2899
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2900
|
+
|
|
2901
|
+
type: 'number';
|
|
2902
|
+
|
|
2903
|
+
value: number;
|
|
2904
|
+
}
|
|
2905
|
+
|
|
2906
|
+
export interface RangeFilter {
|
|
2907
|
+
/**
|
|
2908
|
+
* bt: between
|
|
2909
|
+
*/
|
|
2910
|
+
op: 'bt';
|
|
2911
|
+
|
|
2912
|
+
type: 'range';
|
|
2913
|
+
|
|
2914
|
+
/**
|
|
2915
|
+
* [lower_bound, upper_bound]
|
|
2916
|
+
*/
|
|
2917
|
+
value: Array<number>;
|
|
2918
|
+
}
|
|
2919
|
+
|
|
2920
|
+
export interface NumberFilter {
|
|
2921
|
+
/**
|
|
2922
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2923
|
+
* than, le: less than or equal
|
|
2924
|
+
*/
|
|
2925
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2926
|
+
|
|
2927
|
+
type: 'number';
|
|
2928
|
+
|
|
2929
|
+
value: number;
|
|
2930
|
+
}
|
|
2931
|
+
|
|
2932
|
+
export interface RangeFilter {
|
|
2933
|
+
/**
|
|
2934
|
+
* bt: between
|
|
2935
|
+
*/
|
|
2936
|
+
op: 'bt';
|
|
2937
|
+
|
|
2938
|
+
type: 'range';
|
|
2939
|
+
|
|
2940
|
+
/**
|
|
2941
|
+
* [lower_bound, upper_bound]
|
|
2942
|
+
*/
|
|
2943
|
+
value: Array<number>;
|
|
2491
2944
|
}
|
|
2492
2945
|
|
|
2493
2946
|
/**
|
|
2494
|
-
*
|
|
2947
|
+
* Filter by from number.
|
|
2495
2948
|
*/
|
|
2496
|
-
export interface
|
|
2497
|
-
|
|
2949
|
+
export interface FromNumber {
|
|
2950
|
+
/**
|
|
2951
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2952
|
+
*/
|
|
2953
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2954
|
+
|
|
2955
|
+
type: 'string';
|
|
2498
2956
|
|
|
2499
|
-
|
|
2957
|
+
value: string;
|
|
2500
2958
|
}
|
|
2501
2959
|
|
|
2502
2960
|
/**
|
|
2503
|
-
*
|
|
2961
|
+
* Filter by whether the call is in voicemail.
|
|
2504
2962
|
*/
|
|
2505
|
-
export interface
|
|
2506
|
-
|
|
2963
|
+
export interface InVoicemail {
|
|
2964
|
+
op: 'eq';
|
|
2965
|
+
|
|
2966
|
+
type: 'boolean';
|
|
2967
|
+
|
|
2968
|
+
value: boolean;
|
|
2969
|
+
}
|
|
2970
|
+
|
|
2971
|
+
export interface StringFilter {
|
|
2972
|
+
/**
|
|
2973
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
2974
|
+
*/
|
|
2975
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
2976
|
+
|
|
2977
|
+
type: 'string';
|
|
2978
|
+
|
|
2979
|
+
value: string;
|
|
2980
|
+
|
|
2981
|
+
/**
|
|
2982
|
+
* The field name to filter on.
|
|
2983
|
+
*/
|
|
2984
|
+
key?: string;
|
|
2985
|
+
}
|
|
2986
|
+
|
|
2987
|
+
export interface NumberFilter {
|
|
2988
|
+
/**
|
|
2989
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
2990
|
+
* than, le: less than or equal
|
|
2991
|
+
*/
|
|
2992
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
2993
|
+
|
|
2994
|
+
type: 'number';
|
|
2995
|
+
|
|
2996
|
+
value: number;
|
|
2997
|
+
|
|
2998
|
+
/**
|
|
2999
|
+
* The field name to filter on.
|
|
3000
|
+
*/
|
|
3001
|
+
key?: string;
|
|
3002
|
+
}
|
|
3003
|
+
|
|
3004
|
+
export interface BooleanFilter {
|
|
3005
|
+
op: 'eq';
|
|
3006
|
+
|
|
3007
|
+
type: 'boolean';
|
|
3008
|
+
|
|
3009
|
+
value: boolean;
|
|
3010
|
+
|
|
3011
|
+
/**
|
|
3012
|
+
* The field name to filter on.
|
|
3013
|
+
*/
|
|
3014
|
+
key?: string;
|
|
3015
|
+
}
|
|
3016
|
+
|
|
3017
|
+
export interface RangeFilter {
|
|
3018
|
+
/**
|
|
3019
|
+
* bt: between
|
|
3020
|
+
*/
|
|
3021
|
+
op: 'bt';
|
|
3022
|
+
|
|
3023
|
+
type: 'range';
|
|
3024
|
+
|
|
3025
|
+
/**
|
|
3026
|
+
* [lower_bound, upper_bound]
|
|
3027
|
+
*/
|
|
3028
|
+
value: Array<number>;
|
|
3029
|
+
|
|
3030
|
+
/**
|
|
3031
|
+
* The field name to filter on.
|
|
3032
|
+
*/
|
|
3033
|
+
key?: string;
|
|
3034
|
+
}
|
|
3035
|
+
|
|
3036
|
+
export interface EnumFilter {
|
|
3037
|
+
/**
|
|
3038
|
+
* in: value is one of the listed values
|
|
3039
|
+
*/
|
|
3040
|
+
op: 'in';
|
|
3041
|
+
|
|
3042
|
+
type: 'enum';
|
|
3043
|
+
|
|
3044
|
+
value: Array<string>;
|
|
3045
|
+
|
|
3046
|
+
/**
|
|
3047
|
+
* The field name to filter on.
|
|
3048
|
+
*/
|
|
3049
|
+
key?: string;
|
|
3050
|
+
}
|
|
3051
|
+
|
|
3052
|
+
export interface PresentFilter {
|
|
3053
|
+
/**
|
|
3054
|
+
* pr: present (has value), np: not present
|
|
3055
|
+
*/
|
|
3056
|
+
op: 'pr' | 'np';
|
|
3057
|
+
|
|
3058
|
+
type: 'present';
|
|
3059
|
+
|
|
3060
|
+
/**
|
|
3061
|
+
* The field name to filter on.
|
|
3062
|
+
*/
|
|
3063
|
+
key?: string;
|
|
3064
|
+
}
|
|
3065
|
+
|
|
3066
|
+
export interface NumberFilter {
|
|
3067
|
+
/**
|
|
3068
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
3069
|
+
* than, le: less than or equal
|
|
3070
|
+
*/
|
|
3071
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
3072
|
+
|
|
3073
|
+
type: 'number';
|
|
3074
|
+
|
|
3075
|
+
value: number;
|
|
3076
|
+
}
|
|
3077
|
+
|
|
3078
|
+
export interface RangeFilter {
|
|
3079
|
+
/**
|
|
3080
|
+
* bt: between
|
|
3081
|
+
*/
|
|
3082
|
+
op: 'bt';
|
|
3083
|
+
|
|
3084
|
+
type: 'range';
|
|
3085
|
+
|
|
3086
|
+
/**
|
|
3087
|
+
* [lower_bound, upper_bound]
|
|
3088
|
+
*/
|
|
3089
|
+
value: Array<number>;
|
|
3090
|
+
}
|
|
3091
|
+
|
|
3092
|
+
/**
|
|
3093
|
+
* Filter by to number.
|
|
3094
|
+
*/
|
|
3095
|
+
export interface ToNumber {
|
|
3096
|
+
/**
|
|
3097
|
+
* eq: equal, ne: not equal, sw: starts with, ew: ends with, co: contains
|
|
3098
|
+
*/
|
|
3099
|
+
op: 'eq' | 'ne' | 'sw' | 'ew' | 'co';
|
|
3100
|
+
|
|
3101
|
+
type: 'string';
|
|
3102
|
+
|
|
3103
|
+
value: string;
|
|
3104
|
+
}
|
|
3105
|
+
|
|
3106
|
+
export interface ToolCall {
|
|
3107
|
+
/**
|
|
3108
|
+
* The tool call name to filter on.
|
|
3109
|
+
*/
|
|
3110
|
+
name: string;
|
|
3111
|
+
|
|
3112
|
+
/**
|
|
3113
|
+
* Filter by tool call latency in milliseconds.
|
|
3114
|
+
*/
|
|
3115
|
+
latency_ms?: ToolCall.NumberFilter | ToolCall.RangeFilter;
|
|
3116
|
+
|
|
3117
|
+
/**
|
|
3118
|
+
* Filter by tool call success status.
|
|
3119
|
+
*/
|
|
3120
|
+
success?: ToolCall.Success;
|
|
3121
|
+
}
|
|
3122
|
+
|
|
3123
|
+
export namespace ToolCall {
|
|
3124
|
+
export interface NumberFilter {
|
|
3125
|
+
/**
|
|
3126
|
+
* eq: equal, ne: not equal, gt: greater than, ge: greater than or equal, lt: less
|
|
3127
|
+
* than, le: less than or equal
|
|
3128
|
+
*/
|
|
3129
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le';
|
|
3130
|
+
|
|
3131
|
+
type: 'number';
|
|
3132
|
+
|
|
3133
|
+
value: number;
|
|
3134
|
+
}
|
|
3135
|
+
|
|
3136
|
+
export interface RangeFilter {
|
|
3137
|
+
/**
|
|
3138
|
+
* bt: between
|
|
3139
|
+
*/
|
|
3140
|
+
op: 'bt';
|
|
3141
|
+
|
|
3142
|
+
type: 'range';
|
|
3143
|
+
|
|
3144
|
+
/**
|
|
3145
|
+
* [lower_bound, upper_bound]
|
|
3146
|
+
*/
|
|
3147
|
+
value: Array<number>;
|
|
3148
|
+
}
|
|
3149
|
+
|
|
3150
|
+
/**
|
|
3151
|
+
* Filter by tool call success status.
|
|
3152
|
+
*/
|
|
3153
|
+
export interface Success {
|
|
3154
|
+
op: 'eq';
|
|
3155
|
+
|
|
3156
|
+
type: 'boolean';
|
|
3157
|
+
|
|
3158
|
+
value: boolean;
|
|
3159
|
+
}
|
|
3160
|
+
}
|
|
3161
|
+
|
|
3162
|
+
export interface UserSentiment {
|
|
3163
|
+
/**
|
|
3164
|
+
* in: value is one of the listed values
|
|
3165
|
+
*/
|
|
3166
|
+
op: 'in';
|
|
3167
|
+
|
|
3168
|
+
type: 'enum';
|
|
2507
3169
|
|
|
2508
|
-
|
|
3170
|
+
value: Array<'Negative' | 'Positive' | 'Neutral' | 'Unknown'>;
|
|
2509
3171
|
}
|
|
2510
3172
|
}
|
|
2511
3173
|
}
|