Skip to content

Instantly share code, notes, and snippets.

@catkins
Created August 7, 2023 04:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save catkins/d1267c32fda475d54ce5a91b6015dcd3 to your computer and use it in GitHub Desktop.
Save catkins/d1267c32fda475d54ce5a91b6015dcd3 to your computer and use it in GitHub Desktop.
Helpscout airbyte low-code connector
version: 0.50.0
type: DeclarativeSource
check:
type: CheckStream
stream_names:
- Mailboxes
streams:
- type: DeclarativeStream
name: Mailboxes
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$schema: http://json-schema.org/schema#
properties:
_links:
properties:
fields:
properties:
href:
type: string
type: object
folders:
properties:
href:
type: string
type: object
self:
properties:
href:
type: string
type: object
type: object
createdAt:
type: string
email:
type: string
id:
type: number
name:
type: string
slug:
type: string
updatedAt:
type: string
type: object
retriever:
type: SimpleRetriever
requester:
type: HttpRequester
url_base: https://api.helpscout.net/
path: /v2/mailboxes
http_method: GET
request_parameters: {}
request_headers: {}
authenticator:
type: OAuthAuthenticator
client_id: '{{ config[''client_id''] }}'
grant_type: client_credentials
client_secret: '{{ config[''client_secret''] }}'
refresh_request_body: {}
token_refresh_endpoint: https://api.helpscout.net/v2/oauth2/token
request_body_json: {}
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- _embedded
- mailboxes
- '*'
paginator:
type: NoPagination
- type: DeclarativeStream
name: Conversations
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$schema: http://json-schema.org/schema#
properties:
_embedded:
properties:
threads:
type: array
type: object
_links:
properties:
assignee:
properties:
href:
type: string
type: object
closedBy:
properties:
href:
type: string
type: object
createdByCustomer:
properties:
href:
type: string
type: object
createdByUser:
properties:
href:
type: string
type: object
mailbox:
properties:
href:
type: string
type: object
primaryCustomer:
properties:
href:
type: string
type: object
self:
properties:
href:
type: string
type: object
threads:
properties:
href:
type: string
type: object
web:
properties:
href:
type: string
type: object
type: object
assignee:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
bcc:
type: array
cc:
items:
type: string
type: array
closedAt:
type: string
closedBy:
type: number
closedByUser:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
createdAt:
type: string
createdBy:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
customFields:
items:
properties:
id:
type: number
name:
type: string
text:
type: string
value:
type: string
type: object
type: array
customerWaitingSince:
properties:
friendly:
type: string
time:
type: string
type: object
folderId:
type: number
id:
type: number
mailboxId:
type: number
number:
type: number
preview:
type: string
primaryCustomer:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
source:
properties:
type:
type: string
via:
type: string
type: object
state:
type: string
status:
type: string
subject:
type: string
tags:
items:
properties:
color:
type: string
id:
type: number
tag:
type: string
type: object
type: array
threads:
type: number
type:
type: string
userUpdatedAt:
type: string
type: object
retriever:
type: SimpleRetriever
requester:
type: HttpRequester
url_base: https://api.helpscout.net/
path: /v2/conversations
http_method: GET
request_parameters:
status: all
mailbox: '{{ stream_partition[''mailbox_id''] }}'
sortField: modifiedAt
request_headers: {}
authenticator:
type: OAuthAuthenticator
client_id: '{{ config[''client_id''] }}'
grant_type: client_credentials
client_secret: '{{ config[''client_secret''] }}'
refresh_request_body: {}
token_refresh_endpoint: https://api.helpscout.net/v2/oauth2/token
request_body_json: {}
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- _embedded
- conversations
- '*'
paginator:
type: DefaultPaginator
page_token_option:
type: RequestPath
pagination_strategy:
type: CursorPagination
cursor_value: '{{ response.get("_links", {}).get("next", {}).get("href", {}) }}'
stop_condition: '{{ not response.get("_links", {}).get("next", {}).get("href", {}) }}'
partition_router:
- type: SubstreamPartitionRouter
parent_stream_configs:
- type: ParentStreamConfig
parent_key: id
partition_field: mailbox_id
stream:
type: DeclarativeStream
name: Mailboxes
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$schema: http://json-schema.org/schema#
properties:
_links:
properties:
fields:
properties:
href:
type: string
type: object
folders:
properties:
href:
type: string
type: object
self:
properties:
href:
type: string
type: object
type: object
createdAt:
type: string
email:
type: string
id:
type: number
name:
type: string
slug:
type: string
updatedAt:
type: string
type: object
retriever:
type: SimpleRetriever
requester:
type: HttpRequester
url_base: https://api.helpscout.net/
path: /v2/mailboxes
http_method: GET
request_parameters: {}
request_headers: {}
authenticator:
type: OAuthAuthenticator
client_id: '{{ config[''client_id''] }}'
grant_type: client_credentials
client_secret: '{{ config[''client_secret''] }}'
refresh_request_body: {}
token_refresh_endpoint: https://api.helpscout.net/v2/oauth2/token
request_body_json: {}
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- _embedded
- mailboxes
- '*'
paginator:
type: NoPagination
incremental_sync:
type: DatetimeBasedCursor
cursor_field: createdAt
datetime_format: '%Y-%m-%dT%H:%M:%SZ'
lookback_window: P1D
start_time_option:
type: RequestOption
field_name: modifiedSince
inject_into: request_parameter
start_datetime:
type: MinMaxDatetime
datetime: '{{ config[''start_date''] }}'
datetime_format: '%Y-%m-%dT%H:%M:%SZ'
- type: DeclarativeStream
name: Threads
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$schema: http://json-schema.org/schema#
properties:
_embedded:
properties:
attachments:
items:
properties:
_links:
properties:
data:
properties:
href:
type: string
type: object
self:
properties:
href:
type: string
type: object
web:
properties:
href:
type: string
type: object
type: object
filename:
type: string
height:
type: number
id:
type: number
mimeType:
type: string
size:
type: number
width:
type: number
type: object
type: array
type: object
_links:
properties:
assignedTo:
properties:
href:
type: string
type: object
createdByCustomer:
properties:
href:
type: string
type: object
createdByUser:
properties:
href:
type: string
type: object
customer:
properties:
href:
type: string
type: object
type: object
action:
properties:
associatedEntities:
properties:
mailbox:
type: number
user:
type: number
workflow:
type: number
type: object
text:
type: string
type:
type: string
type: object
assignedTo:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
type: object
bcc:
type: array
body:
type: string
cc:
type: array
conversationId:
type: number
createdAt:
type: string
createdBy:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
customer:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type: object
id:
type: number
openedAt:
type: string
savedReplyId:
type: number
source:
properties:
type:
type: string
via:
type: string
type: object
state:
type: string
status:
type: string
to:
type: array
type:
type: string
type: object
retriever:
type: SimpleRetriever
requester:
type: HttpRequester
url_base: https://api.helpscout.net/
path: /v2/conversations/{{ stream_partition['conversation_id'] }}/threads
http_method: GET
request_parameters: {}
request_headers: {}
authenticator:
type: OAuthAuthenticator
client_id: '{{ config[''client_id''] }}'
grant_type: client_credentials
client_secret: '{{ config[''client_secret''] }}'
refresh_request_body: {}
token_refresh_endpoint: https://api.helpscout.net/v2/oauth2/token
request_body_json: {}
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- _embedded
- threads
- '*'
paginator:
type: DefaultPaginator
page_token_option:
type: RequestPath
pagination_strategy:
type: CursorPagination
cursor_value: '{{ response.get("_links", {}).get("next", {}).get("href", {}) }}'
stop_condition: '{{ not response.get("_links", {}).get("next", {}).get("href", {}) }}'
partition_router:
- type: SubstreamPartitionRouter
parent_stream_configs:
- type: ParentStreamConfig
parent_key: id
partition_field: conversation_id
stream:
type: DeclarativeStream
name: Conversations
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$schema: http://json-schema.org/schema#
properties:
_embedded:
properties:
threads:
type: array
type: object
_links:
properties:
assignee:
properties:
href:
type: string
type: object
closedBy:
properties:
href:
type: string
type: object
createdByCustomer:
properties:
href:
type: string
type: object
createdByUser:
properties:
href:
type: string
type: object
mailbox:
properties:
href:
type: string
type: object
primaryCustomer:
properties:
href:
type: string
type: object
self:
properties:
href:
type: string
type: object
threads:
properties:
href:
type: string
type: object
web:
properties:
href:
type: string
type: object
type: object
assignee:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
bcc:
type: array
cc:
items:
type: string
type: array
closedAt:
type: string
closedBy:
type: number
closedByUser:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
createdAt:
type: string
createdBy:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
customFields:
items:
properties:
id:
type: number
name:
type: string
text:
type: string
value:
type: string
type: object
type: array
customerWaitingSince:
properties:
friendly:
type: string
time:
type: string
type: object
folderId:
type: number
id:
type: number
mailboxId:
type: number
number:
type: number
preview:
type: string
primaryCustomer:
properties:
email:
type: string
first:
type: string
id:
type: number
last:
type: string
photoUrl:
type: string
type:
type: string
type: object
source:
properties:
type:
type: string
via:
type: string
type: object
state:
type: string
status:
type: string
subject:
type: string
tags:
items:
properties:
color:
type: string
id:
type: number
tag:
type: string
type: object
type: array
threads:
type: number
type:
type: string
userUpdatedAt:
type: string
type: object
retriever:
type: SimpleRetriever
requester:
type: HttpRequester
url_base: https://api.helpscout.net/
path: /v2/conversations
http_method: GET
request_parameters:
status: all
mailbox: '{{ stream_partition[''mailbox_id''] }}'
sortField: modifiedAt
request_headers: {}
authenticator:
type: OAuthAuthenticator
client_id: '{{ config[''client_id''] }}'
grant_type: client_credentials
client_secret: '{{ config[''client_secret''] }}'
refresh_request_body: {}
token_refresh_endpoint: https://api.helpscout.net/v2/oauth2/token
request_body_json: {}
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- _embedded
- conversations
- '*'
paginator:
type: DefaultPaginator
page_token_option:
type: RequestPath
pagination_strategy:
type: CursorPagination
cursor_value: >-
{{ response.get("_links", {}).get("next",
{}).get("href", {}) }}
stop_condition: >-
{{ not response.get("_links", {}).get("next",
{}).get("href", {}) }}
partition_router:
- type: SubstreamPartitionRouter
parent_stream_configs:
- type: ParentStreamConfig
parent_key: id
partition_field: mailbox_id
stream:
type: DeclarativeStream
name: Mailboxes
primary_key:
- id
schema_loader:
type: InlineSchemaLoader
schema:
$schema: http://json-schema.org/schema#
properties:
_links:
properties:
fields:
properties:
href:
type: string
type: object
folders:
properties:
href:
type: string
type: object
self:
properties:
href:
type: string
type: object
type: object
createdAt:
type: string
email:
type: string
id:
type: number
name:
type: string
slug:
type: string
updatedAt:
type: string
type: object
retriever:
type: SimpleRetriever
requester:
type: HttpRequester
url_base: https://api.helpscout.net/
path: /v2/mailboxes
http_method: GET
request_parameters: {}
request_headers: {}
authenticator:
type: OAuthAuthenticator
client_id: '{{ config[''client_id''] }}'
grant_type: client_credentials
client_secret: '{{ config[''client_secret''] }}'
refresh_request_body: {}
token_refresh_endpoint: https://api.helpscout.net/v2/oauth2/token
request_body_json: {}
record_selector:
type: RecordSelector
extractor:
type: DpathExtractor
field_path:
- _embedded
- mailboxes
- '*'
paginator:
type: NoPagination
incremental_sync:
type: DatetimeBasedCursor
cursor_field: createdAt
datetime_format: '%Y-%m-%dT%H:%M:%SZ'
lookback_window: P1D
start_time_option:
type: RequestOption
field_name: modifiedSince
inject_into: request_parameter
start_datetime:
type: MinMaxDatetime
datetime: '{{ config[''start_date''] }}'
datetime_format: '%Y-%m-%dT%H:%M:%SZ'
transformations:
- type: AddFields
fields:
- path:
- conversationId
value: '{{ stream_partition[''conversation_id''] }}'
spec:
connection_specification:
$schema: http://json-schema.org/draft-07/schema#
type: object
required:
- start_date
- client_id
- client_secret
properties:
start_date:
type: string
title: Start date
format: date-time
pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
order: 0
client_id:
type: string
title: Client ID
airbyte_secret: true
order: 1
client_secret:
type: string
title: Client secret
airbyte_secret: true
order: 2
additionalProperties: true
documentation_url: https://example.org
type: Spec
metadata:
autoImportSchema:
Mailboxes: true
Conversations: true
Threads: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment