airbyte-agent-zendesk-support 0.18.18__py3-none-any.whl → 0.18.39__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.
- airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_strategies.py +2 -5
- airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_template.py +1 -1
- airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/__init__.py +5 -0
- airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py +213 -0
- airbyte_agent_zendesk_support/_vendored/connector_sdk/connector_model_loader.py +32 -6
- airbyte_agent_zendesk_support/_vendored/connector_sdk/constants.py +1 -1
- airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py +92 -84
- airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py +94 -25
- airbyte_agent_zendesk_support/_vendored/connector_sdk/extensions.py +43 -5
- airbyte_agent_zendesk_support/_vendored/connector_sdk/http/response.py +2 -0
- airbyte_agent_zendesk_support/_vendored/connector_sdk/http_client.py +50 -43
- airbyte_agent_zendesk_support/_vendored/connector_sdk/introspection.py +262 -0
- airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/logger.py +9 -9
- airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/types.py +10 -10
- airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/config.py +179 -0
- airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/models.py +6 -6
- airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/session.py +41 -32
- airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/metrics.py +3 -3
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/base.py +18 -17
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/components.py +59 -58
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/extensions.py +9 -9
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/operations.py +32 -32
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/security.py +44 -34
- airbyte_agent_zendesk_support/_vendored/connector_sdk/secrets.py +2 -2
- airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py +9 -8
- airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py +9 -5
- airbyte_agent_zendesk_support/_vendored/connector_sdk/types.py +9 -3
- airbyte_agent_zendesk_support/connector.py +98 -15
- airbyte_agent_zendesk_support/connector_model.py +7 -1
- airbyte_agent_zendesk_support/types.py +1 -1
- {airbyte_agent_zendesk_support-0.18.18.dist-info → airbyte_agent_zendesk_support-0.18.39.dist-info}/METADATA +47 -26
- {airbyte_agent_zendesk_support-0.18.18.dist-info → airbyte_agent_zendesk_support-0.18.39.dist-info}/RECORD +33 -29
- {airbyte_agent_zendesk_support-0.18.18.dist-info → airbyte_agent_zendesk_support-0.18.39.dist-info}/WHEEL +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Telemetry event models."""
|
|
2
2
|
|
|
3
|
-
from dataclasses import asdict, dataclass
|
|
3
|
+
from dataclasses import asdict, dataclass, field
|
|
4
4
|
from datetime import datetime
|
|
5
|
-
from typing import Any, Dict
|
|
5
|
+
from typing import Any, Dict
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
@dataclass
|
|
@@ -13,6 +13,7 @@ class BaseEvent:
|
|
|
13
13
|
session_id: str
|
|
14
14
|
user_id: str
|
|
15
15
|
execution_context: str
|
|
16
|
+
is_internal_user: bool = field(default=False, kw_only=True)
|
|
16
17
|
|
|
17
18
|
def to_dict(self) -> Dict[str, Any]:
|
|
18
19
|
"""Convert event to dictionary with ISO formatted timestamp."""
|
|
@@ -29,8 +30,8 @@ class ConnectorInitEvent(BaseEvent):
|
|
|
29
30
|
python_version: str
|
|
30
31
|
os_name: str
|
|
31
32
|
os_version: str
|
|
32
|
-
public_ip:
|
|
33
|
-
connector_version:
|
|
33
|
+
public_ip: str | None = None
|
|
34
|
+
connector_version: str | None = None
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
@dataclass
|
|
@@ -41,9 +42,9 @@ class OperationEvent(BaseEvent):
|
|
|
41
42
|
entity: str
|
|
42
43
|
action: str
|
|
43
44
|
timing_ms: float
|
|
44
|
-
public_ip:
|
|
45
|
-
status_code:
|
|
46
|
-
error_type:
|
|
45
|
+
public_ip: str | None = None
|
|
46
|
+
status_code: int | None = None
|
|
47
|
+
error_type: str | None = None
|
|
47
48
|
|
|
48
49
|
|
|
49
50
|
@dataclass
|
|
@@ -55,4 +56,4 @@ class SessionEndEvent(BaseEvent):
|
|
|
55
56
|
operation_count: int
|
|
56
57
|
success_count: int
|
|
57
58
|
failure_count: int
|
|
58
|
-
public_ip:
|
|
59
|
+
public_ip: str | None = None
|
|
@@ -4,7 +4,6 @@ import logging
|
|
|
4
4
|
import platform
|
|
5
5
|
import sys
|
|
6
6
|
from datetime import datetime
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
from ..observability import ObservabilitySession
|
|
10
9
|
|
|
@@ -20,7 +19,7 @@ class SegmentTracker:
|
|
|
20
19
|
def __init__(
|
|
21
20
|
self,
|
|
22
21
|
session: ObservabilitySession,
|
|
23
|
-
mode:
|
|
22
|
+
mode: TelemetryMode | None = None,
|
|
24
23
|
):
|
|
25
24
|
self.session = session
|
|
26
25
|
self.mode = mode or TelemetryConfig.get_mode()
|
|
@@ -31,6 +30,8 @@ class SegmentTracker:
|
|
|
31
30
|
|
|
32
31
|
if self.enabled:
|
|
33
32
|
try:
|
|
33
|
+
# NOTE: Import here intentionally - segment is an optional dependency.
|
|
34
|
+
# This allows the SDK to work without telemetry if segment is not installed.
|
|
34
35
|
import segment.analytics as analytics
|
|
35
36
|
|
|
36
37
|
analytics.write_key = SEGMENT_WRITE_KEY
|
|
@@ -47,7 +48,7 @@ class SegmentTracker:
|
|
|
47
48
|
|
|
48
49
|
def track_connector_init(
|
|
49
50
|
self,
|
|
50
|
-
connector_version:
|
|
51
|
+
connector_version: str | None = None,
|
|
51
52
|
) -> None:
|
|
52
53
|
"""Track connector initialization."""
|
|
53
54
|
if not self.enabled or not self._analytics:
|
|
@@ -59,6 +60,7 @@ class SegmentTracker:
|
|
|
59
60
|
session_id=self.session.session_id,
|
|
60
61
|
user_id=self.session.user_id,
|
|
61
62
|
execution_context=self.session.execution_context,
|
|
63
|
+
is_internal_user=self.session.is_internal_user,
|
|
62
64
|
public_ip=self.session.public_ip,
|
|
63
65
|
connector_name=self.session.connector_name,
|
|
64
66
|
connector_version=connector_version,
|
|
@@ -81,9 +83,9 @@ class SegmentTracker:
|
|
|
81
83
|
self,
|
|
82
84
|
entity: str,
|
|
83
85
|
action: str,
|
|
84
|
-
status_code:
|
|
86
|
+
status_code: int | None,
|
|
85
87
|
timing_ms: float,
|
|
86
|
-
error_type:
|
|
88
|
+
error_type: str | None = None,
|
|
87
89
|
) -> None:
|
|
88
90
|
"""Track API operation."""
|
|
89
91
|
# Always track success/failure counts (useful even when tracking is disabled)
|
|
@@ -101,6 +103,7 @@ class SegmentTracker:
|
|
|
101
103
|
session_id=self.session.session_id,
|
|
102
104
|
user_id=self.session.user_id,
|
|
103
105
|
execution_context=self.session.execution_context,
|
|
106
|
+
is_internal_user=self.session.is_internal_user,
|
|
104
107
|
public_ip=self.session.public_ip,
|
|
105
108
|
connector_name=self.session.connector_name,
|
|
106
109
|
entity=entity,
|
|
@@ -130,6 +133,7 @@ class SegmentTracker:
|
|
|
130
133
|
session_id=self.session.session_id,
|
|
131
134
|
user_id=self.session.user_id,
|
|
132
135
|
execution_context=self.session.execution_context,
|
|
136
|
+
is_internal_user=self.session.is_internal_user,
|
|
133
137
|
public_ip=self.session.public_ip,
|
|
134
138
|
connector_name=self.session.connector_name,
|
|
135
139
|
duration_seconds=self.session.duration_seconds(),
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from enum import Enum
|
|
6
6
|
from typing import Any
|
|
7
|
+
from uuid import UUID
|
|
7
8
|
|
|
8
9
|
from pydantic import BaseModel, ConfigDict, Field
|
|
9
10
|
|
|
@@ -21,7 +22,7 @@ class Action(str, Enum):
|
|
|
21
22
|
UPDATE = "update"
|
|
22
23
|
DELETE = "delete"
|
|
23
24
|
LIST = "list"
|
|
24
|
-
|
|
25
|
+
API_SEARCH = "api_search"
|
|
25
26
|
DOWNLOAD = "download"
|
|
26
27
|
AUTHORIZE = "authorize"
|
|
27
28
|
|
|
@@ -139,7 +140,7 @@ class AuthConfig(BaseModel):
|
|
|
139
140
|
ValueError: If this is a multi-auth config or invalid
|
|
140
141
|
"""
|
|
141
142
|
if self.is_multi_auth():
|
|
142
|
-
raise ValueError("Cannot call get_single_option() on multi-auth config.
|
|
143
|
+
raise ValueError("Cannot call get_single_option() on multi-auth config. Use options list instead.")
|
|
143
144
|
|
|
144
145
|
if self.type is None:
|
|
145
146
|
raise ValueError("Invalid AuthConfig: neither single-auth nor multi-auth")
|
|
@@ -160,7 +161,7 @@ class EndpointDefinition(BaseModel):
|
|
|
160
161
|
path: str # e.g., /v1/customers/{id} (OpenAPI path)
|
|
161
162
|
path_override: PathOverrideConfig | None = Field(
|
|
162
163
|
None,
|
|
163
|
-
description=("Path override config from x-airbyte-path-override.
|
|
164
|
+
description=("Path override config from x-airbyte-path-override. When set, overrides the path for actual HTTP requests."),
|
|
164
165
|
)
|
|
165
166
|
action: Action | None = None # Semantic action (get, list, create, update, delete)
|
|
166
167
|
description: str | None = None
|
|
@@ -220,6 +221,10 @@ class EntityDefinition(BaseModel):
|
|
|
220
221
|
model_config = {"populate_by_name": True}
|
|
221
222
|
|
|
222
223
|
name: str
|
|
224
|
+
stream_name: str | None = Field(
|
|
225
|
+
default=None,
|
|
226
|
+
description="Airbyte stream name for cache lookup (from x-airbyte-stream-name schema extension)",
|
|
227
|
+
)
|
|
223
228
|
actions: list[Action]
|
|
224
229
|
endpoints: dict[Action, EndpointDefinition]
|
|
225
230
|
entity_schema: dict[str, Any] | None = Field(default=None, alias="schema")
|
|
@@ -230,6 +235,7 @@ class ConnectorModel(BaseModel):
|
|
|
230
235
|
|
|
231
236
|
model_config = ConfigDict(use_enum_values=True)
|
|
232
237
|
|
|
238
|
+
id: UUID
|
|
233
239
|
name: str
|
|
234
240
|
version: str = OPENAPI_DEFAULT_VERSION
|
|
235
241
|
base_url: str
|
|
@@ -4,14 +4,15 @@ zendesk-support connector.
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
import logging
|
|
8
|
+
from typing import TYPE_CHECKING, Any, Callable, TypeVar, AsyncIterator, overload
|
|
8
9
|
try:
|
|
9
10
|
from typing import Literal
|
|
10
11
|
except ImportError:
|
|
11
12
|
from typing_extensions import Literal
|
|
12
13
|
|
|
13
14
|
from .connector_model import ZendeskSupportConnectorModel
|
|
14
|
-
|
|
15
|
+
from ._vendored.connector_sdk.introspection import describe_entities, generate_tool_description
|
|
15
16
|
from .types import (
|
|
16
17
|
ArticleAttachmentsDownloadParams,
|
|
17
18
|
ArticleAttachmentsGetParams,
|
|
@@ -53,7 +54,6 @@ from .types import (
|
|
|
53
54
|
ViewsGetParams,
|
|
54
55
|
ViewsListParams,
|
|
55
56
|
)
|
|
56
|
-
|
|
57
57
|
if TYPE_CHECKING:
|
|
58
58
|
from .models import ZendeskSupportAuthConfig
|
|
59
59
|
# Import specific auth config classes for multi-auth isinstance checks
|
|
@@ -102,6 +102,9 @@ from .models import (
|
|
|
102
102
|
ArticleAttachmentsGetResult,
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
+
# TypeVar for decorator type preservation
|
|
106
|
+
_F = TypeVar("_F", bound=Callable[..., Any])
|
|
107
|
+
|
|
105
108
|
|
|
106
109
|
class ZendeskSupportConnector:
|
|
107
110
|
"""
|
|
@@ -111,7 +114,7 @@ class ZendeskSupportConnector:
|
|
|
111
114
|
"""
|
|
112
115
|
|
|
113
116
|
connector_name = "zendesk-support"
|
|
114
|
-
connector_version = "0.1.
|
|
117
|
+
connector_version = "0.1.4"
|
|
115
118
|
vendored_sdk_version = "0.1.0" # Version of vendored connector-sdk
|
|
116
119
|
|
|
117
120
|
# Map of (entity, action) -> has_extractors for envelope wrapping decision
|
|
@@ -205,10 +208,9 @@ class ZendeskSupportConnector:
|
|
|
205
208
|
def __init__(
|
|
206
209
|
self,
|
|
207
210
|
auth_config: ZendeskSupportAuthConfig | None = None,
|
|
208
|
-
|
|
211
|
+
external_user_id: str | None = None,
|
|
209
212
|
airbyte_client_id: str | None = None,
|
|
210
213
|
airbyte_client_secret: str | None = None,
|
|
211
|
-
airbyte_connector_api_url: str | None = None,
|
|
212
214
|
on_token_refresh: Any | None = None,
|
|
213
215
|
subdomain: str | None = None ):
|
|
214
216
|
"""
|
|
@@ -216,14 +218,13 @@ class ZendeskSupportConnector:
|
|
|
216
218
|
|
|
217
219
|
Supports both local and hosted execution modes:
|
|
218
220
|
- Local mode: Provide `auth_config` for direct API calls
|
|
219
|
-
- Hosted mode: Provide `
|
|
221
|
+
- Hosted mode: Provide `external_user_id`, `airbyte_client_id`, and `airbyte_client_secret` for hosted execution
|
|
220
222
|
|
|
221
223
|
Args:
|
|
222
224
|
auth_config: Typed authentication configuration (required for local mode)
|
|
223
|
-
|
|
225
|
+
external_user_id: External user ID (required for hosted mode)
|
|
224
226
|
airbyte_client_id: Airbyte OAuth client ID (required for hosted mode)
|
|
225
227
|
airbyte_client_secret: Airbyte OAuth client secret (required for hosted mode)
|
|
226
|
-
airbyte_connector_api_url: Airbyte connector API URL (defaults to Airbyte Cloud API URL)
|
|
227
228
|
on_token_refresh: Optional callback for OAuth2 token refresh persistence.
|
|
228
229
|
Called with new_tokens dict when tokens are refreshed. Can be sync or async.
|
|
229
230
|
Example: lambda tokens: save_to_database(tokens) subdomain: Your Zendesk subdomain
|
|
@@ -232,7 +233,7 @@ class ZendeskSupportConnector:
|
|
|
232
233
|
connector = ZendeskSupportConnector(auth_config=ZendeskSupportAuthConfig(access_token="...", refresh_token="..."))
|
|
233
234
|
# Hosted mode (executed on Airbyte cloud)
|
|
234
235
|
connector = ZendeskSupportConnector(
|
|
235
|
-
|
|
236
|
+
external_user_id="user-123",
|
|
236
237
|
airbyte_client_id="client_abc123",
|
|
237
238
|
airbyte_client_secret="secret_xyz789"
|
|
238
239
|
)
|
|
@@ -248,20 +249,20 @@ class ZendeskSupportConnector:
|
|
|
248
249
|
on_token_refresh=save_tokens
|
|
249
250
|
)
|
|
250
251
|
"""
|
|
251
|
-
# Hosted mode:
|
|
252
|
-
if
|
|
252
|
+
# Hosted mode: external_user_id, airbyte_client_id, and airbyte_client_secret provided
|
|
253
|
+
if external_user_id and airbyte_client_id and airbyte_client_secret:
|
|
253
254
|
from ._vendored.connector_sdk.executor import HostedExecutor
|
|
254
255
|
self._executor = HostedExecutor(
|
|
255
|
-
|
|
256
|
+
external_user_id=external_user_id,
|
|
256
257
|
airbyte_client_id=airbyte_client_id,
|
|
257
258
|
airbyte_client_secret=airbyte_client_secret,
|
|
258
|
-
|
|
259
|
+
connector_definition_id=str(ZendeskSupportConnectorModel.id),
|
|
259
260
|
)
|
|
260
261
|
else:
|
|
261
262
|
# Local mode: auth_config required
|
|
262
263
|
if not auth_config:
|
|
263
264
|
raise ValueError(
|
|
264
|
-
"Either provide (
|
|
265
|
+
"Either provide (external_user_id, airbyte_client_id, airbyte_client_secret) for hosted mode "
|
|
265
266
|
"or auth_config for local mode"
|
|
266
267
|
)
|
|
267
268
|
|
|
@@ -714,6 +715,88 @@ class ZendeskSupportConnector:
|
|
|
714
715
|
# No extractors - return raw response data
|
|
715
716
|
return result.data
|
|
716
717
|
|
|
718
|
+
# ===== INTROSPECTION METHODS =====
|
|
719
|
+
|
|
720
|
+
@classmethod
|
|
721
|
+
def describe(cls, func: _F) -> _F:
|
|
722
|
+
"""
|
|
723
|
+
Decorator that populates a function's docstring with connector capabilities.
|
|
724
|
+
|
|
725
|
+
This class method can be used as a decorator to automatically generate
|
|
726
|
+
comprehensive documentation for AI tool functions.
|
|
727
|
+
|
|
728
|
+
Usage:
|
|
729
|
+
@mcp.tool()
|
|
730
|
+
@ZendeskSupportConnector.describe
|
|
731
|
+
async def execute(entity: str, action: str, params: dict):
|
|
732
|
+
'''Execute operations.'''
|
|
733
|
+
...
|
|
734
|
+
|
|
735
|
+
The decorated function's __doc__ will be updated with:
|
|
736
|
+
- Available entities and their actions
|
|
737
|
+
- Parameter signatures with required (*) and optional (?) markers
|
|
738
|
+
- Response structure documentation
|
|
739
|
+
- Example questions (if available in OpenAPI spec)
|
|
740
|
+
|
|
741
|
+
Args:
|
|
742
|
+
func: The function to decorate
|
|
743
|
+
|
|
744
|
+
Returns:
|
|
745
|
+
The same function with updated __doc__
|
|
746
|
+
"""
|
|
747
|
+
description = generate_tool_description(ZendeskSupportConnectorModel)
|
|
748
|
+
|
|
749
|
+
original_doc = func.__doc__ or ""
|
|
750
|
+
if original_doc.strip():
|
|
751
|
+
func.__doc__ = f"{original_doc.strip()}\n{description}"
|
|
752
|
+
else:
|
|
753
|
+
func.__doc__ = description
|
|
754
|
+
|
|
755
|
+
return func
|
|
756
|
+
|
|
757
|
+
def list_entities(self) -> list[dict[str, Any]]:
|
|
758
|
+
"""
|
|
759
|
+
Get structured data about available entities, actions, and parameters.
|
|
760
|
+
|
|
761
|
+
Returns a list of entity descriptions with:
|
|
762
|
+
- entity_name: Name of the entity (e.g., "contacts", "deals")
|
|
763
|
+
- description: Entity description from the first endpoint
|
|
764
|
+
- available_actions: List of actions (e.g., ["list", "get", "create"])
|
|
765
|
+
- parameters: Dict mapping action -> list of parameter dicts
|
|
766
|
+
|
|
767
|
+
Example:
|
|
768
|
+
entities = connector.list_entities()
|
|
769
|
+
for entity in entities:
|
|
770
|
+
print(f"{entity['entity_name']}: {entity['available_actions']}")
|
|
771
|
+
"""
|
|
772
|
+
return describe_entities(ZendeskSupportConnectorModel)
|
|
773
|
+
|
|
774
|
+
def entity_schema(self, entity: str) -> dict[str, Any] | None:
|
|
775
|
+
"""
|
|
776
|
+
Get the JSON schema for an entity.
|
|
777
|
+
|
|
778
|
+
Args:
|
|
779
|
+
entity: Entity name (e.g., "contacts", "companies")
|
|
780
|
+
|
|
781
|
+
Returns:
|
|
782
|
+
JSON schema dict describing the entity structure, or None if not found.
|
|
783
|
+
|
|
784
|
+
Example:
|
|
785
|
+
schema = connector.entity_schema("contacts")
|
|
786
|
+
if schema:
|
|
787
|
+
print(f"Contact properties: {list(schema.get('properties', {}).keys())}")
|
|
788
|
+
"""
|
|
789
|
+
entity_def = next(
|
|
790
|
+
(e for e in ZendeskSupportConnectorModel.entities if e.name == entity),
|
|
791
|
+
None
|
|
792
|
+
)
|
|
793
|
+
if entity_def is None:
|
|
794
|
+
logging.getLogger(__name__).warning(
|
|
795
|
+
f"Entity '{entity}' not found. Available entities: "
|
|
796
|
+
f"{[e.name for e in ZendeskSupportConnectorModel.entities]}"
|
|
797
|
+
)
|
|
798
|
+
return entity_def.entity_schema if entity_def else None
|
|
799
|
+
|
|
717
800
|
|
|
718
801
|
|
|
719
802
|
class TicketsQuery:
|
|
@@ -23,10 +23,14 @@ from ._vendored.connector_sdk.schema.security import (
|
|
|
23
23
|
from ._vendored.connector_sdk.schema.components import (
|
|
24
24
|
PathOverrideConfig,
|
|
25
25
|
)
|
|
26
|
+
from uuid import (
|
|
27
|
+
UUID,
|
|
28
|
+
)
|
|
26
29
|
|
|
27
30
|
ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
|
|
31
|
+
id=UUID('79c1aa37-dae3-42ae-b333-d1c105477715'),
|
|
28
32
|
name='zendesk-support',
|
|
29
|
-
version='0.1.
|
|
33
|
+
version='0.1.4',
|
|
30
34
|
base_url='https://{subdomain}.zendesk.com/api/v2',
|
|
31
35
|
auth=AuthConfig(
|
|
32
36
|
options=[
|
|
@@ -56,6 +60,7 @@ ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
|
|
|
56
60
|
),
|
|
57
61
|
},
|
|
58
62
|
auth_mapping={'access_token': '${access_token}', 'refresh_token': '${refresh_token}'},
|
|
63
|
+
replication_auth_key_mapping={'access_token': 'access_token'},
|
|
59
64
|
),
|
|
60
65
|
),
|
|
61
66
|
AuthOption(
|
|
@@ -79,6 +84,7 @@ ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
|
|
|
79
84
|
),
|
|
80
85
|
},
|
|
81
86
|
auth_mapping={'username': '${email}/token', 'password': '${api_token}'},
|
|
87
|
+
replication_auth_key_mapping={'email': 'email', 'api_token': 'api_token'},
|
|
82
88
|
),
|
|
83
89
|
),
|
|
84
90
|
],
|
|
@@ -3,7 +3,7 @@ Type definitions for zendesk-support connector.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
# Use typing_extensions.TypedDict for Pydantic compatibility
|
|
6
|
+
# Use typing_extensions.TypedDict for Pydantic compatibility
|
|
7
7
|
try:
|
|
8
8
|
from typing_extensions import TypedDict, NotRequired
|
|
9
9
|
except ImportError:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-zendesk-support
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.39
|
|
4
4
|
Summary: Airbyte Zendesk-Support Connector for AI platforms
|
|
5
5
|
Project-URL: Homepage, https://github.com/airbytehq/airbyte-embedded
|
|
6
6
|
Project-URL: Documentation, https://github.com/airbytehq/airbyte-embedded/tree/main/integrations
|
|
@@ -13,13 +13,9 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: License :: Other/Proprietary License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
20
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
17
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
-
Requires-Python: >=3.
|
|
18
|
+
Requires-Python: >=3.13
|
|
23
19
|
Requires-Dist: httpx>=0.24.0
|
|
24
20
|
Requires-Dist: jinja2>=3.0.0
|
|
25
21
|
Requires-Dist: jsonpath-ng>=1.6.1
|
|
@@ -32,7 +28,7 @@ Requires-Dist: pyyaml>=6.0
|
|
|
32
28
|
Requires-Dist: segment-analytics-python>=2.2.0
|
|
33
29
|
Description-Content-Type: text/markdown
|
|
34
30
|
|
|
35
|
-
#
|
|
31
|
+
# Zendesk-Support agent connector
|
|
36
32
|
|
|
37
33
|
Zendesk Support is a customer service platform that helps businesses manage support
|
|
38
34
|
tickets, customer interactions, and help center content. This connector provides
|
|
@@ -41,24 +37,28 @@ triggers, macros, views, satisfaction ratings, SLA policies, and help center art
|
|
|
41
37
|
for customer support analytics and service performance insights.
|
|
42
38
|
|
|
43
39
|
|
|
44
|
-
## Example
|
|
40
|
+
## Example questions
|
|
41
|
+
|
|
42
|
+
The Zendesk-Support connector is optimized to handle prompts like these.
|
|
45
43
|
|
|
46
44
|
- Show me the tickets assigned to me last week
|
|
47
45
|
- What are the top 5 support issues our organization has faced this month?
|
|
48
|
-
- List all unresolved tickets for
|
|
46
|
+
- List all unresolved tickets for \{customer\}
|
|
49
47
|
- Analyze the satisfaction ratings for our support team in the last 30 days
|
|
50
48
|
- Compare ticket resolution times across different support groups
|
|
51
|
-
- Show me the details of recent tickets tagged with
|
|
49
|
+
- Show me the details of recent tickets tagged with \{tag\}
|
|
52
50
|
- Identify the most common ticket fields used in our support workflow
|
|
53
51
|
- Summarize the performance of our SLA policies this quarter
|
|
54
52
|
|
|
55
|
-
## Unsupported
|
|
53
|
+
## Unsupported questions
|
|
54
|
+
|
|
55
|
+
The Zendesk-Support connector isn't currently able to handle prompts like these.
|
|
56
56
|
|
|
57
|
-
- Create a new support ticket for
|
|
57
|
+
- Create a new support ticket for \{customer\}
|
|
58
58
|
- Update the priority of this ticket
|
|
59
|
-
- Assign this ticket to
|
|
59
|
+
- Assign this ticket to \{team_member\}
|
|
60
60
|
- Delete these old support tickets
|
|
61
|
-
- Send an automatic response to
|
|
61
|
+
- Send an automatic response to \{customer\}
|
|
62
62
|
|
|
63
63
|
## Installation
|
|
64
64
|
|
|
@@ -68,19 +68,42 @@ uv pip install airbyte-agent-zendesk-support
|
|
|
68
68
|
|
|
69
69
|
## Usage
|
|
70
70
|
|
|
71
|
+
This connector supports multiple authentication methods:
|
|
72
|
+
|
|
73
|
+
### OAuth 2.0
|
|
74
|
+
|
|
71
75
|
```python
|
|
72
|
-
from airbyte_agent_zendesk_support import ZendeskSupportConnector
|
|
76
|
+
from airbyte_agent_zendesk_support import ZendeskSupportConnector
|
|
77
|
+
from airbyte_agent_zendesk_support.models import ZendeskSupportOauth20AuthConfig
|
|
73
78
|
|
|
74
79
|
connector = ZendeskSupportConnector(
|
|
75
|
-
auth_config=
|
|
80
|
+
auth_config=ZendeskSupportOauth20AuthConfig(
|
|
76
81
|
access_token="...",
|
|
77
82
|
refresh_token="..."
|
|
78
83
|
)
|
|
79
84
|
)
|
|
80
|
-
result = connector.tickets.list()
|
|
85
|
+
result = await connector.tickets.list()
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### API Token
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from airbyte_agent_zendesk_support import ZendeskSupportConnector
|
|
92
|
+
from airbyte_agent_zendesk_support.models import ZendeskSupportApiTokenAuthConfig
|
|
93
|
+
|
|
94
|
+
connector = ZendeskSupportConnector(
|
|
95
|
+
auth_config=ZendeskSupportApiTokenAuthConfig(
|
|
96
|
+
email="...",
|
|
97
|
+
api_token="..."
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
result = await connector.tickets.list()
|
|
81
101
|
```
|
|
82
102
|
|
|
83
|
-
|
|
103
|
+
|
|
104
|
+
## Full documentation
|
|
105
|
+
|
|
106
|
+
This connector supports the following entities and actions.
|
|
84
107
|
|
|
85
108
|
| Entity | Actions |
|
|
86
109
|
|--------|---------|
|
|
@@ -108,14 +131,12 @@ result = connector.tickets.list()
|
|
|
108
131
|
| Article Attachments | [List](./REFERENCE.md#article-attachments-list), [Get](./REFERENCE.md#article-attachments-get), [Download](./REFERENCE.md#article-attachments-download) |
|
|
109
132
|
|
|
110
133
|
|
|
111
|
-
For detailed documentation on available actions and parameters, see [
|
|
112
|
-
|
|
113
|
-
For the service's official API docs, see [Zendesk-Support API Reference](https://developer.zendesk.com/api-reference/ticketing/introduction/).
|
|
114
|
-
|
|
115
|
-
## Version Information
|
|
134
|
+
For detailed documentation on available actions and parameters, see this connector's [full reference documentation](./REFERENCE.md).
|
|
116
135
|
|
|
117
|
-
|
|
136
|
+
For the service's official API docs, see the [Zendesk-Support API reference](https://developer.zendesk.com/api-reference/ticketing/introduction/).
|
|
118
137
|
|
|
119
|
-
|
|
138
|
+
## Version information
|
|
120
139
|
|
|
121
|
-
**
|
|
140
|
+
- **Package version:** 0.18.39
|
|
141
|
+
- **Connector version:** 0.1.4
|
|
142
|
+
- **Generated with Connector SDK commit SHA:** a23d9e7ac2d9d416258f7a9a3b9a731782cd6bd8
|
|
@@ -1,53 +1,57 @@
|
|
|
1
1
|
airbyte_agent_zendesk_support/__init__.py,sha256=MPz4HU055DRA3-1qgbGXh2E0YHmhcexQCFl-Tz21gm4,6227
|
|
2
|
-
airbyte_agent_zendesk_support/connector.py,sha256
|
|
3
|
-
airbyte_agent_zendesk_support/connector_model.py,sha256=
|
|
2
|
+
airbyte_agent_zendesk_support/connector.py,sha256=bW99aXhfnVwjoTPXr0tJ2kjr6Prl_5AqMRlC4cgn2Dg,67056
|
|
3
|
+
airbyte_agent_zendesk_support/connector_model.py,sha256=M1phs0lN_6nxKgEF4enlA2znIMIDOMPkQiHY6BYszeE,241309
|
|
4
4
|
airbyte_agent_zendesk_support/models.py,sha256=31bsOmf4nBdf8EXN3JpYzXW8mx6gv1xaZjeuEBgSzws,36399
|
|
5
|
-
airbyte_agent_zendesk_support/types.py,sha256=
|
|
5
|
+
airbyte_agent_zendesk_support/types.py,sha256=vaWdcxDIJ8_nH7sv9PBsdWOKuTPVkskLur7fQF5Ln94,6320
|
|
6
6
|
airbyte_agent_zendesk_support/_vendored/__init__.py,sha256=ILl7AHXMui__swyrjxrh9yRa4dLiwBvV6axPWFWty80,38
|
|
7
7
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/__init__.py,sha256=T5o7roU6NSpH-lCAGZ338sE5dlh4ZU6i6IkeG1zpems,1949
|
|
8
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_strategies.py,sha256=
|
|
9
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_template.py,sha256=
|
|
10
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/connector_model_loader.py,sha256=
|
|
11
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/constants.py,sha256=
|
|
8
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_strategies.py,sha256=BdjAzFRTwXCmLFqYWqZ4Dx9RsqtI7pAkw-8NynSK4sQ,39914
|
|
9
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_template.py,sha256=nju4jqlFC_KI82ILNumNIyiUtRJcy7J94INIZ0QraI4,4454
|
|
10
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/connector_model_loader.py,sha256=Cx9wPhKwWfzkc8i63IevL0EsN3iWUl_OA-_jA9EKNcE,34877
|
|
11
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/constants.py,sha256=AtzOvhDMWbRJgpsQNWl5tkogHD6mWgEY668PgRmgtOY,2737
|
|
12
12
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/exceptions.py,sha256=ss5MGv9eVPmsbLcLWetuu3sDmvturwfo6Pw3M37Oq5k,481
|
|
13
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/extensions.py,sha256=
|
|
14
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/http_client.py,sha256=
|
|
15
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/
|
|
16
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/
|
|
13
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/extensions.py,sha256=XWRRoJOOrwUHSKbuQt5DU7CCu8ePzhd_HuP7c_uD77w,21376
|
|
14
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/http_client.py,sha256=NdccrrBHI5rW56XnXcP54arCwywIVKnMeSQPas6KlOM,27466
|
|
15
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/introspection.py,sha256=2CyKXZHT74-1Id97uw1RLeyOi6TV24_hoNbQ6-6y7uI,10335
|
|
16
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/secrets.py,sha256=J9ezMu4xNnLW11xY5RCre6DHP7YMKZCqwGJfk7ufHAM,6855
|
|
17
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/types.py,sha256=CStkOsLtmZZdXylkdCsbYORDzughxygt1-Ucma0j-qE,8287
|
|
17
18
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/utils.py,sha256=G4LUXOC2HzPoND2v4tQW68R9uuPX9NQyCjaGxb7Kpl0,1958
|
|
18
19
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/validation.py,sha256=CDjCux1eg35a0Y4BegSivzIwZjiTqOxYWotWNLqTSVU,31792
|
|
20
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/__init__.py,sha256=4799Hv9f2zxDVj1aLyQ8JpTEuFTp_oOZMRz-NZCdBJg,134
|
|
21
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py,sha256=YxdRpQr9XjDzih6csSseBVGn9kfMtaqbOCXP0TPuzFY,7189
|
|
19
22
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
|
|
20
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py,sha256=
|
|
21
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=
|
|
23
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py,sha256=ydHcG-biRS1ITT5ELwPShdJW-KYpvK--Fos1ipNgHho,6995
|
|
24
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=bfvdObgQ6NsriDMf85Ykxx1TPvjr7tuURl_K12md1YA,65258
|
|
22
25
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/models.py,sha256=lYVT_bNcw-PoIks4WHNyl2VY-lJVf2FntzINSOBIheE,5845
|
|
23
26
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/__init__.py,sha256=y8fbzZn-3yV9OxtYz8Dy6FFGI5v6TOqADd1G3xHH3Hw,911
|
|
24
27
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/config.py,sha256=6J7YIIwHC6sRu9i-yKa5XvArwK2KU60rlnmxzDZq3lw,3283
|
|
25
28
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/exceptions.py,sha256=eYdYmxqcwA6pgrSoRXNfR6_nRBGRH6upp2-r1jcKaZo,3586
|
|
26
29
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/protocols.py,sha256=eV7NbBIQOcPLw-iu8mtkV2zCVgScDwP0ek1SbPNQo0g,3323
|
|
27
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/response.py,sha256=
|
|
30
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/response.py,sha256=Q-RyM5D0D05ZhmZVJk4hVpmoS8YtyXNOTM5hqBt7rWI,3475
|
|
28
31
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/adapters/__init__.py,sha256=gjbWdU4LfzUG2PETI0TkfkukdzoCAhpL6FZtIEnkO-s,209
|
|
29
32
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/http/adapters/httpx_adapter.py,sha256=dkYhzBWiKBmzWZlc-cRTx50Hb6fy3OI8kOQvXRfS1CQ,8465
|
|
30
33
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/__init__.py,sha256=IZoE5yXhwSA0m3xQqh0FiCifjp1sB3S8jnnFPuJLYf8,227
|
|
31
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/logger.py,sha256=
|
|
32
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/types.py,sha256=
|
|
34
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/logger.py,sha256=GKm03UgDMNlvGuuH_c07jNcZmUccC3DISG269Ehj1Uo,8084
|
|
35
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/types.py,sha256=z0UiSdXP_r71mtwWkJydo0InsNpYOMyI7SVutzd2PEo,3172
|
|
33
36
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/__init__.py,sha256=ojx1n9vaWCXFFvb3-90Pwtg845trFdV2v6wcCoO75Ko,269
|
|
34
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/
|
|
37
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/config.py,sha256=uWvRAPHnEusVKviQQncqcpnHKNhoZ4ZoFK6nUOSVClY,5372
|
|
38
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/models.py,sha256=IRGjlJia28_IU7BMSBb5RHWs47yAOLvE20JIIXHazLY,448
|
|
35
39
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/redactor.py,sha256=HRbSwGxsfQYbYlG4QBVvv8Qnw0d4SMowMv0dTFHsHqQ,2361
|
|
36
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/session.py,sha256=
|
|
40
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/session.py,sha256=WYRIB3bVz9HhpElkUO9CILCRIrWs9p2MR2hmf8uJm3E,3086
|
|
37
41
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/__init__.py,sha256=Sp5fSd1LvtIQkv-fnrKqPsM7-6IWp0sSZSK0mhzal_A,200
|
|
38
42
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/instrumentation.py,sha256=_dXvNiqdndIBwDjeDKNViWzn_M5FkSUsMmJtFldrmsM,1504
|
|
39
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/metrics.py,sha256=
|
|
43
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/metrics.py,sha256=FRff7dKt4iwt_A7pxV5n9kAGBR756PC7q8-weWygPSM,2817
|
|
40
44
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/__init__.py,sha256=Uymu-QuzGJuMxexBagIvUxpVAigIuIhz3KeBl_Vu4Ko,1638
|
|
41
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/base.py,sha256=
|
|
42
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/components.py,sha256=
|
|
45
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/base.py,sha256=swe27f6sWuuGmG54VAW9K8P5USuhmncpIqAliFcB-OU,4741
|
|
46
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/components.py,sha256=x3YCM1p2n_xHi50fMeOX0mXUiPqjGlLHs3Go8jXokb0,7895
|
|
43
47
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/connector.py,sha256=VFBOzIkLgYBR1XUTmyrPGqBkX8PP-zsG8avQcdJUqXs,3864
|
|
44
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/extensions.py,sha256=
|
|
45
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/operations.py,sha256=
|
|
46
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/security.py,sha256=
|
|
48
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/extensions.py,sha256=0SKtv1WaW2sHaSZF-gi5dI3p0heGbegphjU2PAyIe-M,3277
|
|
49
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/operations.py,sha256=RpzGtAI4yvAtMHAfMUMcUwgHv_qJojnKlNb75_agUF8,5729
|
|
50
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/security.py,sha256=zQ9RRuF3LBgLQi_4cItmjXbG_5WKlmCNM3nCil30H90,8470
|
|
47
51
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/__init__.py,sha256=RaLgkBU4dfxn1LC5Y0Q9rr2PJbrwjxvPgBLmq8_WafE,211
|
|
48
52
|
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
|
|
49
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py,sha256=
|
|
50
|
-
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py,sha256=
|
|
51
|
-
airbyte_agent_zendesk_support-0.18.
|
|
52
|
-
airbyte_agent_zendesk_support-0.18.
|
|
53
|
-
airbyte_agent_zendesk_support-0.18.
|
|
53
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py,sha256=8Y1NbXiwISX-V_wRofY7PqcwEXD0dLMnntKkY6XFU2s,1328
|
|
54
|
+
airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py,sha256=Ftrk0_ddfM7dZG8hF9xBuPwhbc9D6JZ7Q9qs5o3LEyA,5579
|
|
55
|
+
airbyte_agent_zendesk_support-0.18.39.dist-info/METADATA,sha256=xNilzfisqY_NNjlkxYfqxoIjLQrJxVp1KH5287uOmbE,6065
|
|
56
|
+
airbyte_agent_zendesk_support-0.18.39.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
57
|
+
airbyte_agent_zendesk_support-0.18.39.dist-info/RECORD,,
|
|
File without changes
|