airbyte-agent-zendesk-chat 0.1.1__py3-none-any.whl

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.

Potentially problematic release.


This version of airbyte-agent-zendesk-chat might be problematic. Click here for more details.

Files changed (57) hide show
  1. airbyte_agent_zendesk_chat/__init__.py +193 -0
  2. airbyte_agent_zendesk_chat/_vendored/__init__.py +1 -0
  3. airbyte_agent_zendesk_chat/_vendored/connector_sdk/__init__.py +82 -0
  4. airbyte_agent_zendesk_chat/_vendored/connector_sdk/auth_strategies.py +1120 -0
  5. airbyte_agent_zendesk_chat/_vendored/connector_sdk/auth_template.py +135 -0
  6. airbyte_agent_zendesk_chat/_vendored/connector_sdk/cloud_utils/__init__.py +5 -0
  7. airbyte_agent_zendesk_chat/_vendored/connector_sdk/cloud_utils/client.py +213 -0
  8. airbyte_agent_zendesk_chat/_vendored/connector_sdk/connector_model_loader.py +965 -0
  9. airbyte_agent_zendesk_chat/_vendored/connector_sdk/constants.py +78 -0
  10. airbyte_agent_zendesk_chat/_vendored/connector_sdk/exceptions.py +23 -0
  11. airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/__init__.py +31 -0
  12. airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/hosted_executor.py +196 -0
  13. airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/local_executor.py +1724 -0
  14. airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/models.py +190 -0
  15. airbyte_agent_zendesk_chat/_vendored/connector_sdk/extensions.py +693 -0
  16. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/__init__.py +37 -0
  17. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/adapters/__init__.py +9 -0
  18. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/adapters/httpx_adapter.py +251 -0
  19. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/config.py +98 -0
  20. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/exceptions.py +119 -0
  21. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/protocols.py +114 -0
  22. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/response.py +104 -0
  23. airbyte_agent_zendesk_chat/_vendored/connector_sdk/http_client.py +693 -0
  24. airbyte_agent_zendesk_chat/_vendored/connector_sdk/introspection.py +262 -0
  25. airbyte_agent_zendesk_chat/_vendored/connector_sdk/logging/__init__.py +11 -0
  26. airbyte_agent_zendesk_chat/_vendored/connector_sdk/logging/logger.py +273 -0
  27. airbyte_agent_zendesk_chat/_vendored/connector_sdk/logging/types.py +93 -0
  28. airbyte_agent_zendesk_chat/_vendored/connector_sdk/observability/__init__.py +11 -0
  29. airbyte_agent_zendesk_chat/_vendored/connector_sdk/observability/config.py +179 -0
  30. airbyte_agent_zendesk_chat/_vendored/connector_sdk/observability/models.py +19 -0
  31. airbyte_agent_zendesk_chat/_vendored/connector_sdk/observability/redactor.py +81 -0
  32. airbyte_agent_zendesk_chat/_vendored/connector_sdk/observability/session.py +103 -0
  33. airbyte_agent_zendesk_chat/_vendored/connector_sdk/performance/__init__.py +6 -0
  34. airbyte_agent_zendesk_chat/_vendored/connector_sdk/performance/instrumentation.py +57 -0
  35. airbyte_agent_zendesk_chat/_vendored/connector_sdk/performance/metrics.py +93 -0
  36. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/__init__.py +75 -0
  37. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/base.py +164 -0
  38. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/components.py +239 -0
  39. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/connector.py +120 -0
  40. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/extensions.py +230 -0
  41. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/operations.py +146 -0
  42. airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/security.py +223 -0
  43. airbyte_agent_zendesk_chat/_vendored/connector_sdk/secrets.py +182 -0
  44. airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/__init__.py +10 -0
  45. airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/config.py +32 -0
  46. airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/events.py +59 -0
  47. airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/tracker.py +155 -0
  48. airbyte_agent_zendesk_chat/_vendored/connector_sdk/types.py +245 -0
  49. airbyte_agent_zendesk_chat/_vendored/connector_sdk/utils.py +60 -0
  50. airbyte_agent_zendesk_chat/_vendored/connector_sdk/validation.py +828 -0
  51. airbyte_agent_zendesk_chat/connector.py +1465 -0
  52. airbyte_agent_zendesk_chat/connector_model.py +2424 -0
  53. airbyte_agent_zendesk_chat/models.py +582 -0
  54. airbyte_agent_zendesk_chat/types.py +984 -0
  55. airbyte_agent_zendesk_chat-0.1.1.dist-info/METADATA +130 -0
  56. airbyte_agent_zendesk_chat-0.1.1.dist-info/RECORD +57 -0
  57. airbyte_agent_zendesk_chat-0.1.1.dist-info/WHEEL +4 -0
@@ -0,0 +1,2424 @@
1
+ """
2
+ Connector model for zendesk-chat.
3
+
4
+ This file is auto-generated from the connector definition at build time.
5
+ DO NOT EDIT MANUALLY - changes will be overwritten on next generation.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from ._vendored.connector_sdk.types import (
11
+ Action,
12
+ AuthConfig,
13
+ AuthType,
14
+ ConnectorModel,
15
+ EndpointDefinition,
16
+ EntityDefinition,
17
+ )
18
+ from ._vendored.connector_sdk.schema.security import (
19
+ AirbyteAuthConfig,
20
+ AuthConfigFieldSpec,
21
+ )
22
+ from uuid import (
23
+ UUID,
24
+ )
25
+
26
+ ZendeskChatConnectorModel: ConnectorModel = ConnectorModel(
27
+ id=UUID('40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4'),
28
+ name='zendesk-chat',
29
+ version='0.1.2',
30
+ base_url='https://{subdomain}.zendesk.com/api/v2/chat',
31
+ auth=AuthConfig(
32
+ type=AuthType.BEARER,
33
+ config={'header': 'Authorization', 'prefix': 'Bearer'},
34
+ user_config_spec=AirbyteAuthConfig(
35
+ title='OAuth 2.0 Access Token',
36
+ description='Authenticate using an OAuth 2.0 access token from Zendesk',
37
+ type='object',
38
+ required=['access_token'],
39
+ properties={
40
+ 'access_token': AuthConfigFieldSpec(
41
+ title='Access Token',
42
+ description='Your Zendesk Chat OAuth 2.0 access token',
43
+ airbyte_secret=True,
44
+ ),
45
+ },
46
+ auth_mapping={'token': '${access_token}'},
47
+ replication_auth_key_mapping={'credentials.access_token': 'access_token'},
48
+ ),
49
+ ),
50
+ entities=[
51
+ EntityDefinition(
52
+ name='accounts',
53
+ actions=[Action.GET],
54
+ endpoints={
55
+ Action.GET: EndpointDefinition(
56
+ method='GET',
57
+ path='/account',
58
+ action=Action.GET,
59
+ description='Returns the account information for the authenticated user',
60
+ response_schema={
61
+ 'type': 'object',
62
+ 'description': 'Zendesk Chat account information',
63
+ 'properties': {
64
+ 'account_key': {'type': 'string', 'description': 'Unique account key identifier'},
65
+ 'status': {
66
+ 'type': ['string', 'null'],
67
+ 'description': 'Account status',
68
+ },
69
+ 'create_date': {
70
+ 'type': ['string', 'null'],
71
+ 'format': 'date-time',
72
+ 'description': 'When the account was created',
73
+ },
74
+ 'billing': {
75
+ 'oneOf': [
76
+ {
77
+ 'type': 'object',
78
+ 'description': 'Account billing information',
79
+ 'properties': {
80
+ 'company': {
81
+ 'type': ['string', 'null'],
82
+ },
83
+ 'first_name': {
84
+ 'type': ['string', 'null'],
85
+ },
86
+ 'last_name': {
87
+ 'type': ['string', 'null'],
88
+ },
89
+ 'email': {
90
+ 'type': ['string', 'null'],
91
+ },
92
+ 'phone': {
93
+ 'type': ['string', 'null'],
94
+ },
95
+ 'address1': {
96
+ 'type': ['string', 'null'],
97
+ },
98
+ 'address2': {
99
+ 'type': ['string', 'null'],
100
+ },
101
+ 'city': {
102
+ 'type': ['string', 'null'],
103
+ },
104
+ 'state': {
105
+ 'type': ['string', 'null'],
106
+ },
107
+ 'postal_code': {
108
+ 'type': ['string', 'null'],
109
+ },
110
+ 'country_code': {
111
+ 'type': ['string', 'null'],
112
+ },
113
+ 'additional_info': {
114
+ 'type': ['string', 'null'],
115
+ },
116
+ 'cycle': {
117
+ 'type': ['integer', 'null'],
118
+ },
119
+ },
120
+ },
121
+ {'type': 'null'},
122
+ ],
123
+ 'description': 'Billing information',
124
+ },
125
+ 'plan': {
126
+ 'oneOf': [
127
+ {
128
+ 'type': 'object',
129
+ 'description': 'Account plan details',
130
+ 'properties': {
131
+ 'name': {
132
+ 'type': ['string', 'null'],
133
+ },
134
+ 'price': {
135
+ 'type': ['number', 'null'],
136
+ },
137
+ 'max_agents': {
138
+ 'type': ['integer', 'null'],
139
+ },
140
+ 'max_departments': {
141
+ 'type': ['string', 'null'],
142
+ },
143
+ 'max_concurrent_chats': {
144
+ 'type': ['string', 'null'],
145
+ },
146
+ 'max_history_search_days': {
147
+ 'type': ['string', 'null'],
148
+ },
149
+ 'max_advanced_triggers': {
150
+ 'type': ['string', 'null'],
151
+ },
152
+ 'max_basic_triggers': {
153
+ 'type': ['string', 'null'],
154
+ },
155
+ 'analytics': {
156
+ 'type': ['boolean', 'null'],
157
+ },
158
+ 'file_upload': {
159
+ 'type': ['boolean', 'null'],
160
+ },
161
+ 'rest_api': {
162
+ 'type': ['boolean', 'null'],
163
+ },
164
+ 'goals': {
165
+ 'type': ['integer', 'null'],
166
+ },
167
+ 'high_load': {
168
+ 'type': ['boolean', 'null'],
169
+ },
170
+ 'integrations': {
171
+ 'type': ['boolean', 'null'],
172
+ },
173
+ 'ip_restriction': {
174
+ 'type': ['boolean', 'null'],
175
+ },
176
+ 'monitoring': {
177
+ 'type': ['boolean', 'null'],
178
+ },
179
+ 'operating_hours': {
180
+ 'type': ['boolean', 'null'],
181
+ },
182
+ 'sla': {
183
+ 'type': ['boolean', 'null'],
184
+ },
185
+ 'support': {
186
+ 'type': ['boolean', 'null'],
187
+ },
188
+ 'unbranding': {
189
+ 'type': ['boolean', 'null'],
190
+ },
191
+ 'agent_leaderboard': {
192
+ 'type': ['boolean', 'null'],
193
+ },
194
+ 'agent_reports': {
195
+ 'type': ['boolean', 'null'],
196
+ },
197
+ 'chat_reports': {
198
+ 'type': ['boolean', 'null'],
199
+ },
200
+ 'daily_reports': {
201
+ 'type': ['boolean', 'null'],
202
+ },
203
+ 'email_reports': {
204
+ 'type': ['boolean', 'null'],
205
+ },
206
+ 'widget_customization': {
207
+ 'type': ['string', 'null'],
208
+ },
209
+ 'long_desc': {
210
+ 'type': ['string', 'null'],
211
+ },
212
+ 'short_desc': {
213
+ 'type': ['string', 'null'],
214
+ },
215
+ },
216
+ },
217
+ {'type': 'null'},
218
+ ],
219
+ 'description': 'Account plan details',
220
+ },
221
+ },
222
+ 'required': ['account_key'],
223
+ 'x-airbyte-entity-name': 'accounts',
224
+ },
225
+ record_extractor='$',
226
+ ),
227
+ },
228
+ entity_schema={
229
+ 'type': 'object',
230
+ 'description': 'Zendesk Chat account information',
231
+ 'properties': {
232
+ 'account_key': {'type': 'string', 'description': 'Unique account key identifier'},
233
+ 'status': {
234
+ 'type': ['string', 'null'],
235
+ 'description': 'Account status',
236
+ },
237
+ 'create_date': {
238
+ 'type': ['string', 'null'],
239
+ 'format': 'date-time',
240
+ 'description': 'When the account was created',
241
+ },
242
+ 'billing': {
243
+ 'oneOf': [
244
+ {'$ref': '#/components/schemas/Billing'},
245
+ {'type': 'null'},
246
+ ],
247
+ 'description': 'Billing information',
248
+ },
249
+ 'plan': {
250
+ 'oneOf': [
251
+ {'$ref': '#/components/schemas/Plan'},
252
+ {'type': 'null'},
253
+ ],
254
+ 'description': 'Account plan details',
255
+ },
256
+ },
257
+ 'required': ['account_key'],
258
+ 'x-airbyte-entity-name': 'accounts',
259
+ },
260
+ ),
261
+ EntityDefinition(
262
+ name='agents',
263
+ actions=[Action.LIST, Action.GET],
264
+ endpoints={
265
+ Action.LIST: EndpointDefinition(
266
+ method='GET',
267
+ path='/agents',
268
+ action=Action.LIST,
269
+ description='List all agents',
270
+ query_params=['limit', 'since_id'],
271
+ query_params_schema={
272
+ 'limit': {
273
+ 'type': 'integer',
274
+ 'required': False,
275
+ 'default': 100,
276
+ },
277
+ 'since_id': {'type': 'integer', 'required': False},
278
+ },
279
+ response_schema={
280
+ 'type': 'array',
281
+ 'items': {
282
+ 'type': 'object',
283
+ 'description': 'Zendesk Chat agent',
284
+ 'properties': {
285
+ 'id': {'type': 'integer', 'description': 'Unique agent identifier'},
286
+ 'email': {
287
+ 'type': ['string', 'null'],
288
+ 'description': 'Agent email address',
289
+ },
290
+ 'display_name': {
291
+ 'type': ['string', 'null'],
292
+ 'description': 'Agent display name shown in chat',
293
+ },
294
+ 'first_name': {
295
+ 'type': ['string', 'null'],
296
+ 'description': 'Agent first name',
297
+ },
298
+ 'last_name': {
299
+ 'type': ['string', 'null'],
300
+ 'description': 'Agent last name',
301
+ },
302
+ 'enabled': {
303
+ 'type': ['boolean', 'null'],
304
+ 'description': 'Whether agent is enabled for chat',
305
+ },
306
+ 'role_id': {
307
+ 'type': ['integer', 'null'],
308
+ 'description': 'Agent role ID',
309
+ },
310
+ 'roles': {
311
+ 'oneOf': [
312
+ {
313
+ 'type': 'object',
314
+ 'description': 'Agent role flags',
315
+ 'properties': {
316
+ 'administrator': {
317
+ 'type': ['boolean', 'null'],
318
+ },
319
+ 'owner': {
320
+ 'type': ['boolean', 'null'],
321
+ },
322
+ },
323
+ },
324
+ {'type': 'null'},
325
+ ],
326
+ 'description': 'Agent role flags',
327
+ },
328
+ 'departments': {
329
+ 'type': ['array', 'null'],
330
+ 'items': {'type': 'integer'},
331
+ 'description': 'Department IDs agent belongs to',
332
+ },
333
+ 'enabled_departments': {
334
+ 'type': ['array', 'null'],
335
+ 'items': {'type': 'integer'},
336
+ 'description': 'Department IDs where agent is enabled',
337
+ },
338
+ 'skills': {
339
+ 'type': ['array', 'null'],
340
+ 'items': {'type': 'integer'},
341
+ 'description': 'Skill IDs assigned to agent',
342
+ },
343
+ 'scope': {
344
+ 'type': ['string', 'null'],
345
+ 'description': 'Agent scope',
346
+ },
347
+ 'create_date': {
348
+ 'type': ['string', 'null'],
349
+ 'format': 'date-time',
350
+ 'description': 'When agent was created',
351
+ },
352
+ 'last_login': {
353
+ 'type': ['string', 'null'],
354
+ 'format': 'date-time',
355
+ 'description': 'Last login timestamp',
356
+ },
357
+ 'login_count': {
358
+ 'type': ['integer', 'null'],
359
+ 'description': 'Total login count',
360
+ },
361
+ },
362
+ 'required': ['id'],
363
+ 'x-airbyte-entity-name': 'agents',
364
+ },
365
+ },
366
+ record_extractor='$',
367
+ ),
368
+ Action.GET: EndpointDefinition(
369
+ method='GET',
370
+ path='/agents/{agent_id}',
371
+ action=Action.GET,
372
+ description='Get an agent',
373
+ path_params=['agent_id'],
374
+ path_params_schema={
375
+ 'agent_id': {'type': 'integer', 'required': True},
376
+ },
377
+ response_schema={
378
+ 'type': 'object',
379
+ 'description': 'Zendesk Chat agent',
380
+ 'properties': {
381
+ 'id': {'type': 'integer', 'description': 'Unique agent identifier'},
382
+ 'email': {
383
+ 'type': ['string', 'null'],
384
+ 'description': 'Agent email address',
385
+ },
386
+ 'display_name': {
387
+ 'type': ['string', 'null'],
388
+ 'description': 'Agent display name shown in chat',
389
+ },
390
+ 'first_name': {
391
+ 'type': ['string', 'null'],
392
+ 'description': 'Agent first name',
393
+ },
394
+ 'last_name': {
395
+ 'type': ['string', 'null'],
396
+ 'description': 'Agent last name',
397
+ },
398
+ 'enabled': {
399
+ 'type': ['boolean', 'null'],
400
+ 'description': 'Whether agent is enabled for chat',
401
+ },
402
+ 'role_id': {
403
+ 'type': ['integer', 'null'],
404
+ 'description': 'Agent role ID',
405
+ },
406
+ 'roles': {
407
+ 'oneOf': [
408
+ {
409
+ 'type': 'object',
410
+ 'description': 'Agent role flags',
411
+ 'properties': {
412
+ 'administrator': {
413
+ 'type': ['boolean', 'null'],
414
+ },
415
+ 'owner': {
416
+ 'type': ['boolean', 'null'],
417
+ },
418
+ },
419
+ },
420
+ {'type': 'null'},
421
+ ],
422
+ 'description': 'Agent role flags',
423
+ },
424
+ 'departments': {
425
+ 'type': ['array', 'null'],
426
+ 'items': {'type': 'integer'},
427
+ 'description': 'Department IDs agent belongs to',
428
+ },
429
+ 'enabled_departments': {
430
+ 'type': ['array', 'null'],
431
+ 'items': {'type': 'integer'},
432
+ 'description': 'Department IDs where agent is enabled',
433
+ },
434
+ 'skills': {
435
+ 'type': ['array', 'null'],
436
+ 'items': {'type': 'integer'},
437
+ 'description': 'Skill IDs assigned to agent',
438
+ },
439
+ 'scope': {
440
+ 'type': ['string', 'null'],
441
+ 'description': 'Agent scope',
442
+ },
443
+ 'create_date': {
444
+ 'type': ['string', 'null'],
445
+ 'format': 'date-time',
446
+ 'description': 'When agent was created',
447
+ },
448
+ 'last_login': {
449
+ 'type': ['string', 'null'],
450
+ 'format': 'date-time',
451
+ 'description': 'Last login timestamp',
452
+ },
453
+ 'login_count': {
454
+ 'type': ['integer', 'null'],
455
+ 'description': 'Total login count',
456
+ },
457
+ },
458
+ 'required': ['id'],
459
+ 'x-airbyte-entity-name': 'agents',
460
+ },
461
+ record_extractor='$',
462
+ ),
463
+ },
464
+ entity_schema={
465
+ 'type': 'object',
466
+ 'description': 'Zendesk Chat agent',
467
+ 'properties': {
468
+ 'id': {'type': 'integer', 'description': 'Unique agent identifier'},
469
+ 'email': {
470
+ 'type': ['string', 'null'],
471
+ 'description': 'Agent email address',
472
+ },
473
+ 'display_name': {
474
+ 'type': ['string', 'null'],
475
+ 'description': 'Agent display name shown in chat',
476
+ },
477
+ 'first_name': {
478
+ 'type': ['string', 'null'],
479
+ 'description': 'Agent first name',
480
+ },
481
+ 'last_name': {
482
+ 'type': ['string', 'null'],
483
+ 'description': 'Agent last name',
484
+ },
485
+ 'enabled': {
486
+ 'type': ['boolean', 'null'],
487
+ 'description': 'Whether agent is enabled for chat',
488
+ },
489
+ 'role_id': {
490
+ 'type': ['integer', 'null'],
491
+ 'description': 'Agent role ID',
492
+ },
493
+ 'roles': {
494
+ 'oneOf': [
495
+ {'$ref': '#/components/schemas/AgentRoles'},
496
+ {'type': 'null'},
497
+ ],
498
+ 'description': 'Agent role flags',
499
+ },
500
+ 'departments': {
501
+ 'type': ['array', 'null'],
502
+ 'items': {'type': 'integer'},
503
+ 'description': 'Department IDs agent belongs to',
504
+ },
505
+ 'enabled_departments': {
506
+ 'type': ['array', 'null'],
507
+ 'items': {'type': 'integer'},
508
+ 'description': 'Department IDs where agent is enabled',
509
+ },
510
+ 'skills': {
511
+ 'type': ['array', 'null'],
512
+ 'items': {'type': 'integer'},
513
+ 'description': 'Skill IDs assigned to agent',
514
+ },
515
+ 'scope': {
516
+ 'type': ['string', 'null'],
517
+ 'description': 'Agent scope',
518
+ },
519
+ 'create_date': {
520
+ 'type': ['string', 'null'],
521
+ 'format': 'date-time',
522
+ 'description': 'When agent was created',
523
+ },
524
+ 'last_login': {
525
+ 'type': ['string', 'null'],
526
+ 'format': 'date-time',
527
+ 'description': 'Last login timestamp',
528
+ },
529
+ 'login_count': {
530
+ 'type': ['integer', 'null'],
531
+ 'description': 'Total login count',
532
+ },
533
+ },
534
+ 'required': ['id'],
535
+ 'x-airbyte-entity-name': 'agents',
536
+ },
537
+ ),
538
+ EntityDefinition(
539
+ name='agent_timeline',
540
+ actions=[Action.LIST],
541
+ endpoints={
542
+ Action.LIST: EndpointDefinition(
543
+ method='GET',
544
+ path='/incremental/agent_timeline',
545
+ action=Action.LIST,
546
+ description='List agent timeline (incremental export)',
547
+ query_params=['start_time', 'limit', 'fields'],
548
+ query_params_schema={
549
+ 'start_time': {'type': 'integer', 'required': False},
550
+ 'limit': {
551
+ 'type': 'integer',
552
+ 'required': False,
553
+ 'default': 1000,
554
+ },
555
+ 'fields': {
556
+ 'type': 'string',
557
+ 'required': False,
558
+ 'default': 'agent_timeline(*)',
559
+ },
560
+ },
561
+ response_schema={
562
+ 'type': 'object',
563
+ 'properties': {
564
+ 'agent_timeline': {
565
+ 'type': 'array',
566
+ 'items': {
567
+ 'type': 'object',
568
+ 'description': 'Agent activity timeline entry',
569
+ 'properties': {
570
+ 'agent_id': {'type': 'integer', 'description': 'Agent identifier'},
571
+ 'start_time': {
572
+ 'type': ['string', 'null'],
573
+ 'format': 'date-time',
574
+ },
575
+ 'status': {
576
+ 'type': ['string', 'null'],
577
+ },
578
+ 'duration': {
579
+ 'type': ['number', 'null'],
580
+ },
581
+ 'engagement_count': {
582
+ 'type': ['integer', 'null'],
583
+ },
584
+ },
585
+ 'required': ['agent_id'],
586
+ 'x-airbyte-entity-name': 'agent_timeline',
587
+ },
588
+ },
589
+ 'next_page': {
590
+ 'type': ['string', 'null'],
591
+ },
592
+ 'count': {'type': 'integer'},
593
+ 'end_time': {
594
+ 'type': ['integer', 'null'],
595
+ },
596
+ },
597
+ },
598
+ record_extractor='$.agent_timeline',
599
+ meta_extractor={'next_page': '$.next_page', 'count': '$.count'},
600
+ ),
601
+ },
602
+ entity_schema={
603
+ 'type': 'object',
604
+ 'description': 'Agent activity timeline entry',
605
+ 'properties': {
606
+ 'agent_id': {'type': 'integer', 'description': 'Agent identifier'},
607
+ 'start_time': {
608
+ 'type': ['string', 'null'],
609
+ 'format': 'date-time',
610
+ },
611
+ 'status': {
612
+ 'type': ['string', 'null'],
613
+ },
614
+ 'duration': {
615
+ 'type': ['number', 'null'],
616
+ },
617
+ 'engagement_count': {
618
+ 'type': ['integer', 'null'],
619
+ },
620
+ },
621
+ 'required': ['agent_id'],
622
+ 'x-airbyte-entity-name': 'agent_timeline',
623
+ },
624
+ ),
625
+ EntityDefinition(
626
+ name='bans',
627
+ actions=[Action.LIST, Action.GET],
628
+ endpoints={
629
+ Action.LIST: EndpointDefinition(
630
+ method='GET',
631
+ path='/bans',
632
+ action=Action.LIST,
633
+ description='List all bans',
634
+ query_params=['limit', 'since_id'],
635
+ query_params_schema={
636
+ 'limit': {
637
+ 'type': 'integer',
638
+ 'required': False,
639
+ 'default': 100,
640
+ },
641
+ 'since_id': {'type': 'integer', 'required': False},
642
+ },
643
+ response_schema={
644
+ 'type': 'object',
645
+ 'properties': {
646
+ 'ip_address': {
647
+ 'type': 'array',
648
+ 'items': {
649
+ 'type': 'object',
650
+ 'description': 'Banned visitor',
651
+ 'properties': {
652
+ 'id': {'type': 'integer', 'description': 'Unique ban identifier'},
653
+ 'type': {
654
+ 'type': ['string', 'null'],
655
+ 'description': 'Ban type (ip_address or visitor)',
656
+ },
657
+ 'ip_address': {
658
+ 'type': ['string', 'null'],
659
+ },
660
+ 'visitor_id': {
661
+ 'type': ['string', 'null'],
662
+ },
663
+ 'visitor_name': {
664
+ 'type': ['string', 'null'],
665
+ },
666
+ 'reason': {
667
+ 'type': ['string', 'null'],
668
+ },
669
+ 'created_at': {
670
+ 'type': ['string', 'null'],
671
+ 'format': 'date-time',
672
+ },
673
+ },
674
+ 'required': ['id'],
675
+ 'x-airbyte-entity-name': 'bans',
676
+ },
677
+ },
678
+ 'visitor': {
679
+ 'type': 'array',
680
+ 'items': {
681
+ 'type': 'object',
682
+ 'description': 'Banned visitor',
683
+ 'properties': {
684
+ 'id': {'type': 'integer', 'description': 'Unique ban identifier'},
685
+ 'type': {
686
+ 'type': ['string', 'null'],
687
+ 'description': 'Ban type (ip_address or visitor)',
688
+ },
689
+ 'ip_address': {
690
+ 'type': ['string', 'null'],
691
+ },
692
+ 'visitor_id': {
693
+ 'type': ['string', 'null'],
694
+ },
695
+ 'visitor_name': {
696
+ 'type': ['string', 'null'],
697
+ },
698
+ 'reason': {
699
+ 'type': ['string', 'null'],
700
+ },
701
+ 'created_at': {
702
+ 'type': ['string', 'null'],
703
+ 'format': 'date-time',
704
+ },
705
+ },
706
+ 'required': ['id'],
707
+ 'x-airbyte-entity-name': 'bans',
708
+ },
709
+ },
710
+ },
711
+ },
712
+ record_extractor='$[*][*]',
713
+ ),
714
+ Action.GET: EndpointDefinition(
715
+ method='GET',
716
+ path='/bans/{ban_id}',
717
+ action=Action.GET,
718
+ description='Get a ban',
719
+ path_params=['ban_id'],
720
+ path_params_schema={
721
+ 'ban_id': {'type': 'integer', 'required': True},
722
+ },
723
+ response_schema={
724
+ 'type': 'object',
725
+ 'description': 'Banned visitor',
726
+ 'properties': {
727
+ 'id': {'type': 'integer', 'description': 'Unique ban identifier'},
728
+ 'type': {
729
+ 'type': ['string', 'null'],
730
+ 'description': 'Ban type (ip_address or visitor)',
731
+ },
732
+ 'ip_address': {
733
+ 'type': ['string', 'null'],
734
+ },
735
+ 'visitor_id': {
736
+ 'type': ['string', 'null'],
737
+ },
738
+ 'visitor_name': {
739
+ 'type': ['string', 'null'],
740
+ },
741
+ 'reason': {
742
+ 'type': ['string', 'null'],
743
+ },
744
+ 'created_at': {
745
+ 'type': ['string', 'null'],
746
+ 'format': 'date-time',
747
+ },
748
+ },
749
+ 'required': ['id'],
750
+ 'x-airbyte-entity-name': 'bans',
751
+ },
752
+ record_extractor='$',
753
+ ),
754
+ },
755
+ entity_schema={
756
+ 'type': 'object',
757
+ 'description': 'Banned visitor',
758
+ 'properties': {
759
+ 'id': {'type': 'integer', 'description': 'Unique ban identifier'},
760
+ 'type': {
761
+ 'type': ['string', 'null'],
762
+ 'description': 'Ban type (ip_address or visitor)',
763
+ },
764
+ 'ip_address': {
765
+ 'type': ['string', 'null'],
766
+ },
767
+ 'visitor_id': {
768
+ 'type': ['string', 'null'],
769
+ },
770
+ 'visitor_name': {
771
+ 'type': ['string', 'null'],
772
+ },
773
+ 'reason': {
774
+ 'type': ['string', 'null'],
775
+ },
776
+ 'created_at': {
777
+ 'type': ['string', 'null'],
778
+ 'format': 'date-time',
779
+ },
780
+ },
781
+ 'required': ['id'],
782
+ 'x-airbyte-entity-name': 'bans',
783
+ },
784
+ ),
785
+ EntityDefinition(
786
+ name='chats',
787
+ actions=[Action.LIST, Action.GET],
788
+ endpoints={
789
+ Action.LIST: EndpointDefinition(
790
+ method='GET',
791
+ path='/incremental/chats',
792
+ action=Action.LIST,
793
+ description='List chats (incremental export)',
794
+ query_params=['start_time', 'limit', 'fields'],
795
+ query_params_schema={
796
+ 'start_time': {'type': 'integer', 'required': False},
797
+ 'limit': {
798
+ 'type': 'integer',
799
+ 'required': False,
800
+ 'default': 1000,
801
+ },
802
+ 'fields': {
803
+ 'type': 'string',
804
+ 'required': False,
805
+ 'default': 'chats(*)',
806
+ },
807
+ },
808
+ response_schema={
809
+ 'type': 'object',
810
+ 'properties': {
811
+ 'chats': {
812
+ 'type': 'array',
813
+ 'items': {
814
+ 'type': 'object',
815
+ 'description': 'Chat conversation transcript',
816
+ 'properties': {
817
+ 'id': {'type': 'string', 'description': 'Unique chat identifier'},
818
+ 'type': {
819
+ 'type': ['string', 'null'],
820
+ },
821
+ 'timestamp': {
822
+ 'type': ['string', 'null'],
823
+ 'format': 'date-time',
824
+ },
825
+ 'update_timestamp': {
826
+ 'type': ['string', 'null'],
827
+ 'format': 'date-time',
828
+ },
829
+ 'duration': {
830
+ 'type': ['integer', 'null'],
831
+ },
832
+ 'department_id': {
833
+ 'type': ['integer', 'null'],
834
+ },
835
+ 'department_name': {
836
+ 'type': ['string', 'null'],
837
+ },
838
+ 'agent_ids': {
839
+ 'type': ['array', 'null'],
840
+ 'items': {'type': 'string'},
841
+ },
842
+ 'agent_names': {
843
+ 'type': ['array', 'null'],
844
+ 'items': {'type': 'string'},
845
+ },
846
+ 'visitor': {
847
+ 'oneOf': [
848
+ {
849
+ 'type': 'object',
850
+ 'properties': {
851
+ 'id': {
852
+ 'type': ['string', 'null'],
853
+ },
854
+ 'name': {
855
+ 'type': ['string', 'null'],
856
+ },
857
+ 'email': {
858
+ 'type': ['string', 'null'],
859
+ },
860
+ 'phone': {
861
+ 'type': ['string', 'null'],
862
+ },
863
+ 'notes': {
864
+ 'type': ['string', 'null'],
865
+ },
866
+ },
867
+ },
868
+ {'type': 'null'},
869
+ ],
870
+ },
871
+ 'session': {
872
+ 'oneOf': [
873
+ {
874
+ 'type': 'object',
875
+ 'properties': {
876
+ 'id': {
877
+ 'type': ['string', 'null'],
878
+ },
879
+ 'browser': {
880
+ 'type': ['string', 'null'],
881
+ },
882
+ 'platform': {
883
+ 'type': ['string', 'null'],
884
+ },
885
+ 'user_agent': {
886
+ 'type': ['string', 'null'],
887
+ },
888
+ 'ip': {
889
+ 'type': ['string', 'null'],
890
+ },
891
+ 'city': {
892
+ 'type': ['string', 'null'],
893
+ },
894
+ 'region': {
895
+ 'type': ['string', 'null'],
896
+ },
897
+ 'country_code': {
898
+ 'type': ['string', 'null'],
899
+ },
900
+ 'country_name': {
901
+ 'type': ['string', 'null'],
902
+ },
903
+ 'start_date': {
904
+ 'type': ['string', 'null'],
905
+ 'format': 'date-time',
906
+ },
907
+ 'end_date': {
908
+ 'type': ['string', 'null'],
909
+ 'format': 'date-time',
910
+ },
911
+ },
912
+ },
913
+ {'type': 'null'},
914
+ ],
915
+ },
916
+ 'history': {
917
+ 'type': ['array', 'null'],
918
+ 'items': {
919
+ 'type': 'object',
920
+ 'properties': {
921
+ 'type': {
922
+ 'type': ['string', 'null'],
923
+ },
924
+ 'timestamp': {
925
+ 'type': ['string', 'null'],
926
+ 'format': 'date-time',
927
+ },
928
+ 'name': {
929
+ 'type': ['string', 'null'],
930
+ },
931
+ 'nick': {
932
+ 'type': ['string', 'null'],
933
+ },
934
+ 'msg': {
935
+ 'type': ['string', 'null'],
936
+ },
937
+ 'msg_id': {
938
+ 'type': ['string', 'null'],
939
+ },
940
+ 'channel': {
941
+ 'type': ['string', 'null'],
942
+ },
943
+ 'department_id': {
944
+ 'type': ['integer', 'null'],
945
+ },
946
+ 'department_name': {
947
+ 'type': ['string', 'null'],
948
+ },
949
+ 'rating': {
950
+ 'type': ['string', 'null'],
951
+ },
952
+ 'new_rating': {
953
+ 'type': ['string', 'null'],
954
+ },
955
+ 'tags': {
956
+ 'type': ['array', 'null'],
957
+ 'items': {'type': 'string'},
958
+ },
959
+ 'new_tags': {
960
+ 'type': ['array', 'null'],
961
+ 'items': {'type': 'string'},
962
+ },
963
+ 'options': {
964
+ 'type': ['string', 'null'],
965
+ },
966
+ },
967
+ },
968
+ },
969
+ 'engagements': {
970
+ 'type': ['array', 'null'],
971
+ 'items': {
972
+ 'type': 'object',
973
+ 'properties': {
974
+ 'id': {
975
+ 'type': ['string', 'null'],
976
+ },
977
+ 'agent_id': {
978
+ 'type': ['string', 'null'],
979
+ },
980
+ 'agent_name': {
981
+ 'type': ['string', 'null'],
982
+ },
983
+ 'agent_full_name': {
984
+ 'type': ['string', 'null'],
985
+ },
986
+ 'department_id': {
987
+ 'type': ['integer', 'null'],
988
+ },
989
+ 'timestamp': {
990
+ 'type': ['string', 'null'],
991
+ 'format': 'date-time',
992
+ },
993
+ 'duration': {
994
+ 'type': ['number', 'null'],
995
+ },
996
+ 'accepted': {
997
+ 'type': ['boolean', 'null'],
998
+ },
999
+ 'assigned': {
1000
+ 'type': ['boolean', 'null'],
1001
+ },
1002
+ 'started_by': {
1003
+ 'type': ['string', 'null'],
1004
+ },
1005
+ 'rating': {
1006
+ 'type': ['string', 'null'],
1007
+ },
1008
+ 'comment': {
1009
+ 'type': ['string', 'null'],
1010
+ },
1011
+ 'count': {
1012
+ 'oneOf': [
1013
+ {
1014
+ 'type': 'object',
1015
+ 'properties': {
1016
+ 'total': {
1017
+ 'type': ['integer', 'null'],
1018
+ },
1019
+ 'agent': {
1020
+ 'type': ['integer', 'null'],
1021
+ },
1022
+ 'visitor': {
1023
+ 'type': ['integer', 'null'],
1024
+ },
1025
+ },
1026
+ },
1027
+ {'type': 'null'},
1028
+ ],
1029
+ },
1030
+ 'response_time': {
1031
+ 'oneOf': [
1032
+ {
1033
+ 'type': 'object',
1034
+ 'properties': {
1035
+ 'first': {
1036
+ 'type': ['integer', 'null'],
1037
+ },
1038
+ 'avg': {
1039
+ 'type': ['number', 'null'],
1040
+ },
1041
+ 'max': {
1042
+ 'type': ['integer', 'null'],
1043
+ },
1044
+ },
1045
+ },
1046
+ {'type': 'null'},
1047
+ ],
1048
+ },
1049
+ 'skills_requested': {
1050
+ 'type': ['array', 'null'],
1051
+ 'items': {'type': 'integer'},
1052
+ },
1053
+ 'skills_fulfilled': {
1054
+ 'type': ['boolean', 'null'],
1055
+ },
1056
+ },
1057
+ },
1058
+ },
1059
+ 'conversions': {
1060
+ 'type': ['array', 'null'],
1061
+ 'items': {
1062
+ 'type': 'object',
1063
+ 'properties': {
1064
+ 'id': {
1065
+ 'type': ['string', 'null'],
1066
+ },
1067
+ 'goal_id': {
1068
+ 'type': ['integer', 'null'],
1069
+ },
1070
+ 'goal_name': {
1071
+ 'type': ['string', 'null'],
1072
+ },
1073
+ 'timestamp': {
1074
+ 'type': ['string', 'null'],
1075
+ 'format': 'date-time',
1076
+ },
1077
+ 'attribution': {
1078
+ 'oneOf': [
1079
+ {
1080
+ 'type': 'object',
1081
+ 'properties': {
1082
+ 'agent_id': {
1083
+ 'type': ['integer', 'null'],
1084
+ },
1085
+ 'agent_name': {
1086
+ 'type': ['string', 'null'],
1087
+ },
1088
+ 'department_id': {
1089
+ 'type': ['integer', 'null'],
1090
+ },
1091
+ 'department_name': {
1092
+ 'type': ['string', 'null'],
1093
+ },
1094
+ 'chat_timestamp': {
1095
+ 'type': ['string', 'null'],
1096
+ 'format': 'date-time',
1097
+ },
1098
+ },
1099
+ },
1100
+ {'type': 'null'},
1101
+ ],
1102
+ },
1103
+ },
1104
+ },
1105
+ },
1106
+ 'count': {
1107
+ 'oneOf': [
1108
+ {
1109
+ 'type': 'object',
1110
+ 'properties': {
1111
+ 'total': {
1112
+ 'type': ['integer', 'null'],
1113
+ },
1114
+ 'agent': {
1115
+ 'type': ['integer', 'null'],
1116
+ },
1117
+ 'visitor': {
1118
+ 'type': ['integer', 'null'],
1119
+ },
1120
+ },
1121
+ },
1122
+ {'type': 'null'},
1123
+ ],
1124
+ },
1125
+ 'response_time': {
1126
+ 'oneOf': [
1127
+ {
1128
+ 'type': 'object',
1129
+ 'properties': {
1130
+ 'first': {
1131
+ 'type': ['integer', 'null'],
1132
+ },
1133
+ 'avg': {
1134
+ 'type': ['number', 'null'],
1135
+ },
1136
+ 'max': {
1137
+ 'type': ['integer', 'null'],
1138
+ },
1139
+ },
1140
+ },
1141
+ {'type': 'null'},
1142
+ ],
1143
+ },
1144
+ 'rating': {
1145
+ 'type': ['string', 'null'],
1146
+ },
1147
+ 'comment': {
1148
+ 'type': ['string', 'null'],
1149
+ },
1150
+ 'tags': {
1151
+ 'type': ['array', 'null'],
1152
+ 'items': {'type': 'string'},
1153
+ },
1154
+ 'started_by': {
1155
+ 'type': ['string', 'null'],
1156
+ },
1157
+ 'triggered': {
1158
+ 'type': ['boolean', 'null'],
1159
+ },
1160
+ 'triggered_response': {
1161
+ 'type': ['boolean', 'null'],
1162
+ },
1163
+ 'missed': {
1164
+ 'type': ['boolean', 'null'],
1165
+ },
1166
+ 'unread': {
1167
+ 'type': ['boolean', 'null'],
1168
+ },
1169
+ 'deleted': {
1170
+ 'type': ['boolean', 'null'],
1171
+ },
1172
+ 'message': {
1173
+ 'type': ['string', 'null'],
1174
+ },
1175
+ 'webpath': {
1176
+ 'type': ['array', 'null'],
1177
+ 'items': {
1178
+ 'type': 'object',
1179
+ 'properties': {
1180
+ 'from': {
1181
+ 'type': ['string', 'null'],
1182
+ },
1183
+ 'timestamp': {
1184
+ 'type': ['string', 'null'],
1185
+ 'format': 'date-time',
1186
+ },
1187
+ },
1188
+ },
1189
+ },
1190
+ 'zendesk_ticket_id': {
1191
+ 'type': ['integer', 'null'],
1192
+ 'description': 'Associated Zendesk Support ticket ID',
1193
+ },
1194
+ },
1195
+ 'required': ['id'],
1196
+ 'x-airbyte-entity-name': 'chats',
1197
+ },
1198
+ },
1199
+ 'next_page': {
1200
+ 'type': ['string', 'null'],
1201
+ },
1202
+ 'count': {'type': 'integer'},
1203
+ 'end_id': {
1204
+ 'type': ['string', 'null'],
1205
+ },
1206
+ 'end_time': {
1207
+ 'type': ['integer', 'null'],
1208
+ },
1209
+ },
1210
+ },
1211
+ record_extractor='$.chats',
1212
+ meta_extractor={'next_page': '$.next_page', 'count': '$.count'},
1213
+ ),
1214
+ Action.GET: EndpointDefinition(
1215
+ method='GET',
1216
+ path='/chats/{chat_id}',
1217
+ action=Action.GET,
1218
+ description='Get a chat',
1219
+ path_params=['chat_id'],
1220
+ path_params_schema={
1221
+ 'chat_id': {'type': 'string', 'required': True},
1222
+ },
1223
+ response_schema={
1224
+ 'type': 'object',
1225
+ 'description': 'Chat conversation transcript',
1226
+ 'properties': {
1227
+ 'id': {'type': 'string', 'description': 'Unique chat identifier'},
1228
+ 'type': {
1229
+ 'type': ['string', 'null'],
1230
+ },
1231
+ 'timestamp': {
1232
+ 'type': ['string', 'null'],
1233
+ 'format': 'date-time',
1234
+ },
1235
+ 'update_timestamp': {
1236
+ 'type': ['string', 'null'],
1237
+ 'format': 'date-time',
1238
+ },
1239
+ 'duration': {
1240
+ 'type': ['integer', 'null'],
1241
+ },
1242
+ 'department_id': {
1243
+ 'type': ['integer', 'null'],
1244
+ },
1245
+ 'department_name': {
1246
+ 'type': ['string', 'null'],
1247
+ },
1248
+ 'agent_ids': {
1249
+ 'type': ['array', 'null'],
1250
+ 'items': {'type': 'string'},
1251
+ },
1252
+ 'agent_names': {
1253
+ 'type': ['array', 'null'],
1254
+ 'items': {'type': 'string'},
1255
+ },
1256
+ 'visitor': {
1257
+ 'oneOf': [
1258
+ {
1259
+ 'type': 'object',
1260
+ 'properties': {
1261
+ 'id': {
1262
+ 'type': ['string', 'null'],
1263
+ },
1264
+ 'name': {
1265
+ 'type': ['string', 'null'],
1266
+ },
1267
+ 'email': {
1268
+ 'type': ['string', 'null'],
1269
+ },
1270
+ 'phone': {
1271
+ 'type': ['string', 'null'],
1272
+ },
1273
+ 'notes': {
1274
+ 'type': ['string', 'null'],
1275
+ },
1276
+ },
1277
+ },
1278
+ {'type': 'null'},
1279
+ ],
1280
+ },
1281
+ 'session': {
1282
+ 'oneOf': [
1283
+ {
1284
+ 'type': 'object',
1285
+ 'properties': {
1286
+ 'id': {
1287
+ 'type': ['string', 'null'],
1288
+ },
1289
+ 'browser': {
1290
+ 'type': ['string', 'null'],
1291
+ },
1292
+ 'platform': {
1293
+ 'type': ['string', 'null'],
1294
+ },
1295
+ 'user_agent': {
1296
+ 'type': ['string', 'null'],
1297
+ },
1298
+ 'ip': {
1299
+ 'type': ['string', 'null'],
1300
+ },
1301
+ 'city': {
1302
+ 'type': ['string', 'null'],
1303
+ },
1304
+ 'region': {
1305
+ 'type': ['string', 'null'],
1306
+ },
1307
+ 'country_code': {
1308
+ 'type': ['string', 'null'],
1309
+ },
1310
+ 'country_name': {
1311
+ 'type': ['string', 'null'],
1312
+ },
1313
+ 'start_date': {
1314
+ 'type': ['string', 'null'],
1315
+ 'format': 'date-time',
1316
+ },
1317
+ 'end_date': {
1318
+ 'type': ['string', 'null'],
1319
+ 'format': 'date-time',
1320
+ },
1321
+ },
1322
+ },
1323
+ {'type': 'null'},
1324
+ ],
1325
+ },
1326
+ 'history': {
1327
+ 'type': ['array', 'null'],
1328
+ 'items': {
1329
+ 'type': 'object',
1330
+ 'properties': {
1331
+ 'type': {
1332
+ 'type': ['string', 'null'],
1333
+ },
1334
+ 'timestamp': {
1335
+ 'type': ['string', 'null'],
1336
+ 'format': 'date-time',
1337
+ },
1338
+ 'name': {
1339
+ 'type': ['string', 'null'],
1340
+ },
1341
+ 'nick': {
1342
+ 'type': ['string', 'null'],
1343
+ },
1344
+ 'msg': {
1345
+ 'type': ['string', 'null'],
1346
+ },
1347
+ 'msg_id': {
1348
+ 'type': ['string', 'null'],
1349
+ },
1350
+ 'channel': {
1351
+ 'type': ['string', 'null'],
1352
+ },
1353
+ 'department_id': {
1354
+ 'type': ['integer', 'null'],
1355
+ },
1356
+ 'department_name': {
1357
+ 'type': ['string', 'null'],
1358
+ },
1359
+ 'rating': {
1360
+ 'type': ['string', 'null'],
1361
+ },
1362
+ 'new_rating': {
1363
+ 'type': ['string', 'null'],
1364
+ },
1365
+ 'tags': {
1366
+ 'type': ['array', 'null'],
1367
+ 'items': {'type': 'string'},
1368
+ },
1369
+ 'new_tags': {
1370
+ 'type': ['array', 'null'],
1371
+ 'items': {'type': 'string'},
1372
+ },
1373
+ 'options': {
1374
+ 'type': ['string', 'null'],
1375
+ },
1376
+ },
1377
+ },
1378
+ },
1379
+ 'engagements': {
1380
+ 'type': ['array', 'null'],
1381
+ 'items': {
1382
+ 'type': 'object',
1383
+ 'properties': {
1384
+ 'id': {
1385
+ 'type': ['string', 'null'],
1386
+ },
1387
+ 'agent_id': {
1388
+ 'type': ['string', 'null'],
1389
+ },
1390
+ 'agent_name': {
1391
+ 'type': ['string', 'null'],
1392
+ },
1393
+ 'agent_full_name': {
1394
+ 'type': ['string', 'null'],
1395
+ },
1396
+ 'department_id': {
1397
+ 'type': ['integer', 'null'],
1398
+ },
1399
+ 'timestamp': {
1400
+ 'type': ['string', 'null'],
1401
+ 'format': 'date-time',
1402
+ },
1403
+ 'duration': {
1404
+ 'type': ['number', 'null'],
1405
+ },
1406
+ 'accepted': {
1407
+ 'type': ['boolean', 'null'],
1408
+ },
1409
+ 'assigned': {
1410
+ 'type': ['boolean', 'null'],
1411
+ },
1412
+ 'started_by': {
1413
+ 'type': ['string', 'null'],
1414
+ },
1415
+ 'rating': {
1416
+ 'type': ['string', 'null'],
1417
+ },
1418
+ 'comment': {
1419
+ 'type': ['string', 'null'],
1420
+ },
1421
+ 'count': {
1422
+ 'oneOf': [
1423
+ {
1424
+ 'type': 'object',
1425
+ 'properties': {
1426
+ 'total': {
1427
+ 'type': ['integer', 'null'],
1428
+ },
1429
+ 'agent': {
1430
+ 'type': ['integer', 'null'],
1431
+ },
1432
+ 'visitor': {
1433
+ 'type': ['integer', 'null'],
1434
+ },
1435
+ },
1436
+ },
1437
+ {'type': 'null'},
1438
+ ],
1439
+ },
1440
+ 'response_time': {
1441
+ 'oneOf': [
1442
+ {
1443
+ 'type': 'object',
1444
+ 'properties': {
1445
+ 'first': {
1446
+ 'type': ['integer', 'null'],
1447
+ },
1448
+ 'avg': {
1449
+ 'type': ['number', 'null'],
1450
+ },
1451
+ 'max': {
1452
+ 'type': ['integer', 'null'],
1453
+ },
1454
+ },
1455
+ },
1456
+ {'type': 'null'},
1457
+ ],
1458
+ },
1459
+ 'skills_requested': {
1460
+ 'type': ['array', 'null'],
1461
+ 'items': {'type': 'integer'},
1462
+ },
1463
+ 'skills_fulfilled': {
1464
+ 'type': ['boolean', 'null'],
1465
+ },
1466
+ },
1467
+ },
1468
+ },
1469
+ 'conversions': {
1470
+ 'type': ['array', 'null'],
1471
+ 'items': {
1472
+ 'type': 'object',
1473
+ 'properties': {
1474
+ 'id': {
1475
+ 'type': ['string', 'null'],
1476
+ },
1477
+ 'goal_id': {
1478
+ 'type': ['integer', 'null'],
1479
+ },
1480
+ 'goal_name': {
1481
+ 'type': ['string', 'null'],
1482
+ },
1483
+ 'timestamp': {
1484
+ 'type': ['string', 'null'],
1485
+ 'format': 'date-time',
1486
+ },
1487
+ 'attribution': {
1488
+ 'oneOf': [
1489
+ {
1490
+ 'type': 'object',
1491
+ 'properties': {
1492
+ 'agent_id': {
1493
+ 'type': ['integer', 'null'],
1494
+ },
1495
+ 'agent_name': {
1496
+ 'type': ['string', 'null'],
1497
+ },
1498
+ 'department_id': {
1499
+ 'type': ['integer', 'null'],
1500
+ },
1501
+ 'department_name': {
1502
+ 'type': ['string', 'null'],
1503
+ },
1504
+ 'chat_timestamp': {
1505
+ 'type': ['string', 'null'],
1506
+ 'format': 'date-time',
1507
+ },
1508
+ },
1509
+ },
1510
+ {'type': 'null'},
1511
+ ],
1512
+ },
1513
+ },
1514
+ },
1515
+ },
1516
+ 'count': {
1517
+ 'oneOf': [
1518
+ {
1519
+ 'type': 'object',
1520
+ 'properties': {
1521
+ 'total': {
1522
+ 'type': ['integer', 'null'],
1523
+ },
1524
+ 'agent': {
1525
+ 'type': ['integer', 'null'],
1526
+ },
1527
+ 'visitor': {
1528
+ 'type': ['integer', 'null'],
1529
+ },
1530
+ },
1531
+ },
1532
+ {'type': 'null'},
1533
+ ],
1534
+ },
1535
+ 'response_time': {
1536
+ 'oneOf': [
1537
+ {
1538
+ 'type': 'object',
1539
+ 'properties': {
1540
+ 'first': {
1541
+ 'type': ['integer', 'null'],
1542
+ },
1543
+ 'avg': {
1544
+ 'type': ['number', 'null'],
1545
+ },
1546
+ 'max': {
1547
+ 'type': ['integer', 'null'],
1548
+ },
1549
+ },
1550
+ },
1551
+ {'type': 'null'},
1552
+ ],
1553
+ },
1554
+ 'rating': {
1555
+ 'type': ['string', 'null'],
1556
+ },
1557
+ 'comment': {
1558
+ 'type': ['string', 'null'],
1559
+ },
1560
+ 'tags': {
1561
+ 'type': ['array', 'null'],
1562
+ 'items': {'type': 'string'},
1563
+ },
1564
+ 'started_by': {
1565
+ 'type': ['string', 'null'],
1566
+ },
1567
+ 'triggered': {
1568
+ 'type': ['boolean', 'null'],
1569
+ },
1570
+ 'triggered_response': {
1571
+ 'type': ['boolean', 'null'],
1572
+ },
1573
+ 'missed': {
1574
+ 'type': ['boolean', 'null'],
1575
+ },
1576
+ 'unread': {
1577
+ 'type': ['boolean', 'null'],
1578
+ },
1579
+ 'deleted': {
1580
+ 'type': ['boolean', 'null'],
1581
+ },
1582
+ 'message': {
1583
+ 'type': ['string', 'null'],
1584
+ },
1585
+ 'webpath': {
1586
+ 'type': ['array', 'null'],
1587
+ 'items': {
1588
+ 'type': 'object',
1589
+ 'properties': {
1590
+ 'from': {
1591
+ 'type': ['string', 'null'],
1592
+ },
1593
+ 'timestamp': {
1594
+ 'type': ['string', 'null'],
1595
+ 'format': 'date-time',
1596
+ },
1597
+ },
1598
+ },
1599
+ },
1600
+ 'zendesk_ticket_id': {
1601
+ 'type': ['integer', 'null'],
1602
+ 'description': 'Associated Zendesk Support ticket ID',
1603
+ },
1604
+ },
1605
+ 'required': ['id'],
1606
+ 'x-airbyte-entity-name': 'chats',
1607
+ },
1608
+ record_extractor='$',
1609
+ ),
1610
+ },
1611
+ entity_schema={
1612
+ 'type': 'object',
1613
+ 'description': 'Chat conversation transcript',
1614
+ 'properties': {
1615
+ 'id': {'type': 'string', 'description': 'Unique chat identifier'},
1616
+ 'type': {
1617
+ 'type': ['string', 'null'],
1618
+ },
1619
+ 'timestamp': {
1620
+ 'type': ['string', 'null'],
1621
+ 'format': 'date-time',
1622
+ },
1623
+ 'update_timestamp': {
1624
+ 'type': ['string', 'null'],
1625
+ 'format': 'date-time',
1626
+ },
1627
+ 'duration': {
1628
+ 'type': ['integer', 'null'],
1629
+ },
1630
+ 'department_id': {
1631
+ 'type': ['integer', 'null'],
1632
+ },
1633
+ 'department_name': {
1634
+ 'type': ['string', 'null'],
1635
+ },
1636
+ 'agent_ids': {
1637
+ 'type': ['array', 'null'],
1638
+ 'items': {'type': 'string'},
1639
+ },
1640
+ 'agent_names': {
1641
+ 'type': ['array', 'null'],
1642
+ 'items': {'type': 'string'},
1643
+ },
1644
+ 'visitor': {
1645
+ 'oneOf': [
1646
+ {'$ref': '#/components/schemas/Visitor'},
1647
+ {'type': 'null'},
1648
+ ],
1649
+ },
1650
+ 'session': {
1651
+ 'oneOf': [
1652
+ {'$ref': '#/components/schemas/ChatSession'},
1653
+ {'type': 'null'},
1654
+ ],
1655
+ },
1656
+ 'history': {
1657
+ 'type': ['array', 'null'],
1658
+ 'items': {'$ref': '#/components/schemas/ChatHistoryItem'},
1659
+ },
1660
+ 'engagements': {
1661
+ 'type': ['array', 'null'],
1662
+ 'items': {'$ref': '#/components/schemas/ChatEngagement'},
1663
+ },
1664
+ 'conversions': {
1665
+ 'type': ['array', 'null'],
1666
+ 'items': {'$ref': '#/components/schemas/ChatConversion'},
1667
+ },
1668
+ 'count': {
1669
+ 'oneOf': [
1670
+ {'$ref': '#/components/schemas/MessageCount'},
1671
+ {'type': 'null'},
1672
+ ],
1673
+ },
1674
+ 'response_time': {
1675
+ 'oneOf': [
1676
+ {'$ref': '#/components/schemas/ResponseTime'},
1677
+ {'type': 'null'},
1678
+ ],
1679
+ },
1680
+ 'rating': {
1681
+ 'type': ['string', 'null'],
1682
+ },
1683
+ 'comment': {
1684
+ 'type': ['string', 'null'],
1685
+ },
1686
+ 'tags': {
1687
+ 'type': ['array', 'null'],
1688
+ 'items': {'type': 'string'},
1689
+ },
1690
+ 'started_by': {
1691
+ 'type': ['string', 'null'],
1692
+ },
1693
+ 'triggered': {
1694
+ 'type': ['boolean', 'null'],
1695
+ },
1696
+ 'triggered_response': {
1697
+ 'type': ['boolean', 'null'],
1698
+ },
1699
+ 'missed': {
1700
+ 'type': ['boolean', 'null'],
1701
+ },
1702
+ 'unread': {
1703
+ 'type': ['boolean', 'null'],
1704
+ },
1705
+ 'deleted': {
1706
+ 'type': ['boolean', 'null'],
1707
+ },
1708
+ 'message': {
1709
+ 'type': ['string', 'null'],
1710
+ },
1711
+ 'webpath': {
1712
+ 'type': ['array', 'null'],
1713
+ 'items': {'$ref': '#/components/schemas/WebpathItem'},
1714
+ },
1715
+ 'zendesk_ticket_id': {
1716
+ 'type': ['integer', 'null'],
1717
+ 'description': 'Associated Zendesk Support ticket ID',
1718
+ },
1719
+ },
1720
+ 'required': ['id'],
1721
+ 'x-airbyte-entity-name': 'chats',
1722
+ },
1723
+ ),
1724
+ EntityDefinition(
1725
+ name='departments',
1726
+ actions=[Action.LIST, Action.GET],
1727
+ endpoints={
1728
+ Action.LIST: EndpointDefinition(
1729
+ method='GET',
1730
+ path='/departments',
1731
+ action=Action.LIST,
1732
+ description='List all departments',
1733
+ response_schema={
1734
+ 'type': 'array',
1735
+ 'items': {
1736
+ 'type': 'object',
1737
+ 'properties': {
1738
+ 'id': {'type': 'integer'},
1739
+ 'name': {
1740
+ 'type': ['string', 'null'],
1741
+ },
1742
+ 'description': {
1743
+ 'type': ['string', 'null'],
1744
+ },
1745
+ 'enabled': {
1746
+ 'type': ['boolean', 'null'],
1747
+ },
1748
+ 'members': {
1749
+ 'type': ['array', 'null'],
1750
+ 'items': {'type': 'integer'},
1751
+ },
1752
+ 'settings': {
1753
+ 'oneOf': [
1754
+ {
1755
+ 'type': 'object',
1756
+ 'properties': {
1757
+ 'chat_limit': {
1758
+ 'type': ['integer', 'null'],
1759
+ },
1760
+ },
1761
+ },
1762
+ {'type': 'null'},
1763
+ ],
1764
+ },
1765
+ },
1766
+ 'required': ['id'],
1767
+ 'x-airbyte-entity-name': 'departments',
1768
+ },
1769
+ },
1770
+ record_extractor='$',
1771
+ ),
1772
+ Action.GET: EndpointDefinition(
1773
+ method='GET',
1774
+ path='/departments/{department_id}',
1775
+ action=Action.GET,
1776
+ description='Get a department',
1777
+ path_params=['department_id'],
1778
+ path_params_schema={
1779
+ 'department_id': {'type': 'integer', 'required': True},
1780
+ },
1781
+ response_schema={
1782
+ 'type': 'object',
1783
+ 'properties': {
1784
+ 'id': {'type': 'integer'},
1785
+ 'name': {
1786
+ 'type': ['string', 'null'],
1787
+ },
1788
+ 'description': {
1789
+ 'type': ['string', 'null'],
1790
+ },
1791
+ 'enabled': {
1792
+ 'type': ['boolean', 'null'],
1793
+ },
1794
+ 'members': {
1795
+ 'type': ['array', 'null'],
1796
+ 'items': {'type': 'integer'},
1797
+ },
1798
+ 'settings': {
1799
+ 'oneOf': [
1800
+ {
1801
+ 'type': 'object',
1802
+ 'properties': {
1803
+ 'chat_limit': {
1804
+ 'type': ['integer', 'null'],
1805
+ },
1806
+ },
1807
+ },
1808
+ {'type': 'null'},
1809
+ ],
1810
+ },
1811
+ },
1812
+ 'required': ['id'],
1813
+ 'x-airbyte-entity-name': 'departments',
1814
+ },
1815
+ record_extractor='$',
1816
+ ),
1817
+ },
1818
+ entity_schema={
1819
+ 'type': 'object',
1820
+ 'properties': {
1821
+ 'id': {'type': 'integer'},
1822
+ 'name': {
1823
+ 'type': ['string', 'null'],
1824
+ },
1825
+ 'description': {
1826
+ 'type': ['string', 'null'],
1827
+ },
1828
+ 'enabled': {
1829
+ 'type': ['boolean', 'null'],
1830
+ },
1831
+ 'members': {
1832
+ 'type': ['array', 'null'],
1833
+ 'items': {'type': 'integer'},
1834
+ },
1835
+ 'settings': {
1836
+ 'oneOf': [
1837
+ {'$ref': '#/components/schemas/DepartmentSettings'},
1838
+ {'type': 'null'},
1839
+ ],
1840
+ },
1841
+ },
1842
+ 'required': ['id'],
1843
+ 'x-airbyte-entity-name': 'departments',
1844
+ },
1845
+ ),
1846
+ EntityDefinition(
1847
+ name='goals',
1848
+ actions=[Action.LIST, Action.GET],
1849
+ endpoints={
1850
+ Action.LIST: EndpointDefinition(
1851
+ method='GET',
1852
+ path='/goals',
1853
+ action=Action.LIST,
1854
+ description='List all goals',
1855
+ response_schema={
1856
+ 'type': 'array',
1857
+ 'items': {
1858
+ 'type': 'object',
1859
+ 'properties': {
1860
+ 'id': {'type': 'integer'},
1861
+ 'name': {
1862
+ 'type': ['string', 'null'],
1863
+ },
1864
+ 'description': {
1865
+ 'type': ['string', 'null'],
1866
+ },
1867
+ 'enabled': {
1868
+ 'type': ['boolean', 'null'],
1869
+ },
1870
+ 'attribution_model': {
1871
+ 'type': ['string', 'null'],
1872
+ },
1873
+ 'attribution_window': {
1874
+ 'type': ['integer', 'null'],
1875
+ },
1876
+ 'attribution_period': {
1877
+ 'type': ['integer', 'null'],
1878
+ },
1879
+ 'settings': {
1880
+ 'type': ['object', 'null'],
1881
+ },
1882
+ },
1883
+ 'required': ['id'],
1884
+ 'x-airbyte-entity-name': 'goals',
1885
+ },
1886
+ },
1887
+ record_extractor='$',
1888
+ ),
1889
+ Action.GET: EndpointDefinition(
1890
+ method='GET',
1891
+ path='/goals/{goal_id}',
1892
+ action=Action.GET,
1893
+ description='Get a goal',
1894
+ path_params=['goal_id'],
1895
+ path_params_schema={
1896
+ 'goal_id': {'type': 'integer', 'required': True},
1897
+ },
1898
+ response_schema={
1899
+ 'type': 'object',
1900
+ 'properties': {
1901
+ 'id': {'type': 'integer'},
1902
+ 'name': {
1903
+ 'type': ['string', 'null'],
1904
+ },
1905
+ 'description': {
1906
+ 'type': ['string', 'null'],
1907
+ },
1908
+ 'enabled': {
1909
+ 'type': ['boolean', 'null'],
1910
+ },
1911
+ 'attribution_model': {
1912
+ 'type': ['string', 'null'],
1913
+ },
1914
+ 'attribution_window': {
1915
+ 'type': ['integer', 'null'],
1916
+ },
1917
+ 'attribution_period': {
1918
+ 'type': ['integer', 'null'],
1919
+ },
1920
+ 'settings': {
1921
+ 'type': ['object', 'null'],
1922
+ },
1923
+ },
1924
+ 'required': ['id'],
1925
+ 'x-airbyte-entity-name': 'goals',
1926
+ },
1927
+ record_extractor='$',
1928
+ ),
1929
+ },
1930
+ entity_schema={
1931
+ 'type': 'object',
1932
+ 'properties': {
1933
+ 'id': {'type': 'integer'},
1934
+ 'name': {
1935
+ 'type': ['string', 'null'],
1936
+ },
1937
+ 'description': {
1938
+ 'type': ['string', 'null'],
1939
+ },
1940
+ 'enabled': {
1941
+ 'type': ['boolean', 'null'],
1942
+ },
1943
+ 'attribution_model': {
1944
+ 'type': ['string', 'null'],
1945
+ },
1946
+ 'attribution_window': {
1947
+ 'type': ['integer', 'null'],
1948
+ },
1949
+ 'attribution_period': {
1950
+ 'type': ['integer', 'null'],
1951
+ },
1952
+ 'settings': {
1953
+ 'type': ['object', 'null'],
1954
+ },
1955
+ },
1956
+ 'required': ['id'],
1957
+ 'x-airbyte-entity-name': 'goals',
1958
+ },
1959
+ ),
1960
+ EntityDefinition(
1961
+ name='roles',
1962
+ actions=[Action.LIST, Action.GET],
1963
+ endpoints={
1964
+ Action.LIST: EndpointDefinition(
1965
+ method='GET',
1966
+ path='/roles',
1967
+ action=Action.LIST,
1968
+ description='List all roles',
1969
+ response_schema={
1970
+ 'type': 'array',
1971
+ 'items': {
1972
+ 'type': 'object',
1973
+ 'properties': {
1974
+ 'id': {'type': 'integer'},
1975
+ 'name': {
1976
+ 'type': ['string', 'null'],
1977
+ },
1978
+ 'description': {
1979
+ 'type': ['string', 'null'],
1980
+ },
1981
+ 'enabled': {
1982
+ 'type': ['boolean', 'null'],
1983
+ },
1984
+ 'permissions': {
1985
+ 'type': ['object', 'null'],
1986
+ },
1987
+ 'members_count': {
1988
+ 'type': ['integer', 'null'],
1989
+ },
1990
+ },
1991
+ 'required': ['id'],
1992
+ 'x-airbyte-entity-name': 'roles',
1993
+ },
1994
+ },
1995
+ record_extractor='$',
1996
+ ),
1997
+ Action.GET: EndpointDefinition(
1998
+ method='GET',
1999
+ path='/roles/{role_id}',
2000
+ action=Action.GET,
2001
+ description='Get a role',
2002
+ path_params=['role_id'],
2003
+ path_params_schema={
2004
+ 'role_id': {'type': 'integer', 'required': True},
2005
+ },
2006
+ response_schema={
2007
+ 'type': 'object',
2008
+ 'properties': {
2009
+ 'id': {'type': 'integer'},
2010
+ 'name': {
2011
+ 'type': ['string', 'null'],
2012
+ },
2013
+ 'description': {
2014
+ 'type': ['string', 'null'],
2015
+ },
2016
+ 'enabled': {
2017
+ 'type': ['boolean', 'null'],
2018
+ },
2019
+ 'permissions': {
2020
+ 'type': ['object', 'null'],
2021
+ },
2022
+ 'members_count': {
2023
+ 'type': ['integer', 'null'],
2024
+ },
2025
+ },
2026
+ 'required': ['id'],
2027
+ 'x-airbyte-entity-name': 'roles',
2028
+ },
2029
+ record_extractor='$',
2030
+ ),
2031
+ },
2032
+ entity_schema={
2033
+ 'type': 'object',
2034
+ 'properties': {
2035
+ 'id': {'type': 'integer'},
2036
+ 'name': {
2037
+ 'type': ['string', 'null'],
2038
+ },
2039
+ 'description': {
2040
+ 'type': ['string', 'null'],
2041
+ },
2042
+ 'enabled': {
2043
+ 'type': ['boolean', 'null'],
2044
+ },
2045
+ 'permissions': {
2046
+ 'type': ['object', 'null'],
2047
+ },
2048
+ 'members_count': {
2049
+ 'type': ['integer', 'null'],
2050
+ },
2051
+ },
2052
+ 'required': ['id'],
2053
+ 'x-airbyte-entity-name': 'roles',
2054
+ },
2055
+ ),
2056
+ EntityDefinition(
2057
+ name='routing_settings',
2058
+ actions=[Action.GET],
2059
+ endpoints={
2060
+ Action.GET: EndpointDefinition(
2061
+ method='GET',
2062
+ path='/routing_settings/account',
2063
+ action=Action.GET,
2064
+ description='Get routing settings',
2065
+ response_schema={
2066
+ 'type': 'object',
2067
+ 'properties': {
2068
+ 'data': {
2069
+ 'type': 'object',
2070
+ 'properties': {
2071
+ 'routing_mode': {
2072
+ 'type': ['string', 'null'],
2073
+ },
2074
+ 'chat_limit': {
2075
+ 'type': ['object', 'null'],
2076
+ },
2077
+ 'skill_routing': {
2078
+ 'type': ['object', 'null'],
2079
+ },
2080
+ 'reassignment': {
2081
+ 'type': ['object', 'null'],
2082
+ },
2083
+ 'auto_idle': {
2084
+ 'type': ['object', 'null'],
2085
+ },
2086
+ 'auto_accept': {
2087
+ 'type': ['object', 'null'],
2088
+ },
2089
+ },
2090
+ 'x-airbyte-entity-name': 'routing_settings',
2091
+ },
2092
+ },
2093
+ },
2094
+ record_extractor='$.data',
2095
+ ),
2096
+ },
2097
+ entity_schema={
2098
+ 'type': 'object',
2099
+ 'properties': {
2100
+ 'routing_mode': {
2101
+ 'type': ['string', 'null'],
2102
+ },
2103
+ 'chat_limit': {
2104
+ 'type': ['object', 'null'],
2105
+ },
2106
+ 'skill_routing': {
2107
+ 'type': ['object', 'null'],
2108
+ },
2109
+ 'reassignment': {
2110
+ 'type': ['object', 'null'],
2111
+ },
2112
+ 'auto_idle': {
2113
+ 'type': ['object', 'null'],
2114
+ },
2115
+ 'auto_accept': {
2116
+ 'type': ['object', 'null'],
2117
+ },
2118
+ },
2119
+ 'x-airbyte-entity-name': 'routing_settings',
2120
+ },
2121
+ ),
2122
+ EntityDefinition(
2123
+ name='shortcuts',
2124
+ actions=[Action.LIST, Action.GET],
2125
+ endpoints={
2126
+ Action.LIST: EndpointDefinition(
2127
+ method='GET',
2128
+ path='/shortcuts',
2129
+ action=Action.LIST,
2130
+ description='List all shortcuts',
2131
+ response_schema={
2132
+ 'type': 'array',
2133
+ 'items': {
2134
+ 'type': 'object',
2135
+ 'properties': {
2136
+ 'id': {'type': 'string', 'description': 'Shortcut name/identifier'},
2137
+ 'name': {
2138
+ 'type': ['string', 'null'],
2139
+ },
2140
+ 'message': {
2141
+ 'type': ['string', 'null'],
2142
+ },
2143
+ 'options': {
2144
+ 'type': ['string', 'null'],
2145
+ },
2146
+ 'tags': {
2147
+ 'type': ['array', 'null'],
2148
+ 'items': {'type': 'string'},
2149
+ },
2150
+ 'departments': {
2151
+ 'type': ['array', 'null'],
2152
+ 'items': {'type': 'integer'},
2153
+ },
2154
+ 'agents': {
2155
+ 'type': ['array', 'null'],
2156
+ 'items': {'type': 'integer'},
2157
+ },
2158
+ 'scope': {
2159
+ 'type': ['string', 'null'],
2160
+ },
2161
+ },
2162
+ 'required': ['id'],
2163
+ 'x-airbyte-entity-name': 'shortcuts',
2164
+ },
2165
+ },
2166
+ record_extractor='$',
2167
+ ),
2168
+ Action.GET: EndpointDefinition(
2169
+ method='GET',
2170
+ path='/shortcuts/{shortcut_id}',
2171
+ action=Action.GET,
2172
+ description='Get a shortcut',
2173
+ path_params=['shortcut_id'],
2174
+ path_params_schema={
2175
+ 'shortcut_id': {'type': 'integer', 'required': True},
2176
+ },
2177
+ response_schema={
2178
+ 'type': 'object',
2179
+ 'properties': {
2180
+ 'id': {'type': 'string', 'description': 'Shortcut name/identifier'},
2181
+ 'name': {
2182
+ 'type': ['string', 'null'],
2183
+ },
2184
+ 'message': {
2185
+ 'type': ['string', 'null'],
2186
+ },
2187
+ 'options': {
2188
+ 'type': ['string', 'null'],
2189
+ },
2190
+ 'tags': {
2191
+ 'type': ['array', 'null'],
2192
+ 'items': {'type': 'string'},
2193
+ },
2194
+ 'departments': {
2195
+ 'type': ['array', 'null'],
2196
+ 'items': {'type': 'integer'},
2197
+ },
2198
+ 'agents': {
2199
+ 'type': ['array', 'null'],
2200
+ 'items': {'type': 'integer'},
2201
+ },
2202
+ 'scope': {
2203
+ 'type': ['string', 'null'],
2204
+ },
2205
+ },
2206
+ 'required': ['id'],
2207
+ 'x-airbyte-entity-name': 'shortcuts',
2208
+ },
2209
+ record_extractor='$',
2210
+ ),
2211
+ },
2212
+ entity_schema={
2213
+ 'type': 'object',
2214
+ 'properties': {
2215
+ 'id': {'type': 'string', 'description': 'Shortcut name/identifier'},
2216
+ 'name': {
2217
+ 'type': ['string', 'null'],
2218
+ },
2219
+ 'message': {
2220
+ 'type': ['string', 'null'],
2221
+ },
2222
+ 'options': {
2223
+ 'type': ['string', 'null'],
2224
+ },
2225
+ 'tags': {
2226
+ 'type': ['array', 'null'],
2227
+ 'items': {'type': 'string'},
2228
+ },
2229
+ 'departments': {
2230
+ 'type': ['array', 'null'],
2231
+ 'items': {'type': 'integer'},
2232
+ },
2233
+ 'agents': {
2234
+ 'type': ['array', 'null'],
2235
+ 'items': {'type': 'integer'},
2236
+ },
2237
+ 'scope': {
2238
+ 'type': ['string', 'null'],
2239
+ },
2240
+ },
2241
+ 'required': ['id'],
2242
+ 'x-airbyte-entity-name': 'shortcuts',
2243
+ },
2244
+ ),
2245
+ EntityDefinition(
2246
+ name='skills',
2247
+ actions=[Action.LIST, Action.GET],
2248
+ endpoints={
2249
+ Action.LIST: EndpointDefinition(
2250
+ method='GET',
2251
+ path='/skills',
2252
+ action=Action.LIST,
2253
+ description='List all skills',
2254
+ response_schema={
2255
+ 'type': 'array',
2256
+ 'items': {
2257
+ 'type': 'object',
2258
+ 'properties': {
2259
+ 'id': {'type': 'integer'},
2260
+ 'name': {
2261
+ 'type': ['string', 'null'],
2262
+ },
2263
+ 'description': {
2264
+ 'type': ['string', 'null'],
2265
+ },
2266
+ 'enabled': {
2267
+ 'type': ['boolean', 'null'],
2268
+ },
2269
+ 'members': {
2270
+ 'type': ['array', 'null'],
2271
+ 'items': {'type': 'integer'},
2272
+ },
2273
+ },
2274
+ 'required': ['id'],
2275
+ 'x-airbyte-entity-name': 'skills',
2276
+ },
2277
+ },
2278
+ record_extractor='$',
2279
+ ),
2280
+ Action.GET: EndpointDefinition(
2281
+ method='GET',
2282
+ path='/skills/{skill_id}',
2283
+ action=Action.GET,
2284
+ description='Get a skill',
2285
+ path_params=['skill_id'],
2286
+ path_params_schema={
2287
+ 'skill_id': {'type': 'integer', 'required': True},
2288
+ },
2289
+ response_schema={
2290
+ 'type': 'object',
2291
+ 'properties': {
2292
+ 'id': {'type': 'integer'},
2293
+ 'name': {
2294
+ 'type': ['string', 'null'],
2295
+ },
2296
+ 'description': {
2297
+ 'type': ['string', 'null'],
2298
+ },
2299
+ 'enabled': {
2300
+ 'type': ['boolean', 'null'],
2301
+ },
2302
+ 'members': {
2303
+ 'type': ['array', 'null'],
2304
+ 'items': {'type': 'integer'},
2305
+ },
2306
+ },
2307
+ 'required': ['id'],
2308
+ 'x-airbyte-entity-name': 'skills',
2309
+ },
2310
+ record_extractor='$',
2311
+ ),
2312
+ },
2313
+ entity_schema={
2314
+ 'type': 'object',
2315
+ 'properties': {
2316
+ 'id': {'type': 'integer'},
2317
+ 'name': {
2318
+ 'type': ['string', 'null'],
2319
+ },
2320
+ 'description': {
2321
+ 'type': ['string', 'null'],
2322
+ },
2323
+ 'enabled': {
2324
+ 'type': ['boolean', 'null'],
2325
+ },
2326
+ 'members': {
2327
+ 'type': ['array', 'null'],
2328
+ 'items': {'type': 'integer'},
2329
+ },
2330
+ },
2331
+ 'required': ['id'],
2332
+ 'x-airbyte-entity-name': 'skills',
2333
+ },
2334
+ ),
2335
+ EntityDefinition(
2336
+ name='triggers',
2337
+ actions=[Action.LIST],
2338
+ endpoints={
2339
+ Action.LIST: EndpointDefinition(
2340
+ method='GET',
2341
+ path='/triggers',
2342
+ action=Action.LIST,
2343
+ description='List all triggers',
2344
+ response_schema={
2345
+ 'type': 'array',
2346
+ 'items': {
2347
+ 'type': 'object',
2348
+ 'properties': {
2349
+ 'id': {'type': 'integer'},
2350
+ 'name': {
2351
+ 'type': ['string', 'null'],
2352
+ },
2353
+ 'description': {
2354
+ 'type': ['string', 'null'],
2355
+ },
2356
+ 'enabled': {
2357
+ 'type': ['boolean', 'null'],
2358
+ },
2359
+ 'run_once': {
2360
+ 'type': ['boolean', 'null'],
2361
+ },
2362
+ 'conditions': {
2363
+ 'type': ['array', 'null'],
2364
+ 'items': {'type': 'object'},
2365
+ },
2366
+ 'actions': {
2367
+ 'type': ['array', 'null'],
2368
+ 'items': {'type': 'object'},
2369
+ },
2370
+ 'departments': {
2371
+ 'type': ['array', 'null'],
2372
+ 'items': {'type': 'integer'},
2373
+ },
2374
+ 'definition': {
2375
+ 'type': ['object', 'null'],
2376
+ 'description': 'Trigger definition with conditions, events, and actions',
2377
+ },
2378
+ },
2379
+ 'required': ['id'],
2380
+ 'x-airbyte-entity-name': 'triggers',
2381
+ },
2382
+ },
2383
+ record_extractor='$',
2384
+ ),
2385
+ },
2386
+ entity_schema={
2387
+ 'type': 'object',
2388
+ 'properties': {
2389
+ 'id': {'type': 'integer'},
2390
+ 'name': {
2391
+ 'type': ['string', 'null'],
2392
+ },
2393
+ 'description': {
2394
+ 'type': ['string', 'null'],
2395
+ },
2396
+ 'enabled': {
2397
+ 'type': ['boolean', 'null'],
2398
+ },
2399
+ 'run_once': {
2400
+ 'type': ['boolean', 'null'],
2401
+ },
2402
+ 'conditions': {
2403
+ 'type': ['array', 'null'],
2404
+ 'items': {'type': 'object'},
2405
+ },
2406
+ 'actions': {
2407
+ 'type': ['array', 'null'],
2408
+ 'items': {'type': 'object'},
2409
+ },
2410
+ 'departments': {
2411
+ 'type': ['array', 'null'],
2412
+ 'items': {'type': 'integer'},
2413
+ },
2414
+ 'definition': {
2415
+ 'type': ['object', 'null'],
2416
+ 'description': 'Trigger definition with conditions, events, and actions',
2417
+ },
2418
+ },
2419
+ 'required': ['id'],
2420
+ 'x-airbyte-entity-name': 'triggers',
2421
+ },
2422
+ ),
2423
+ ],
2424
+ )