Build Status Code Climate Test Coverage Gem Version

Zendesk input plugin for Embulk

Embulk input plugin for loading Zendesk records.

Overview

Required Embulk version >= 0.9.6.

NOTE This plugin differs from original plugin to following:

  • DOES support JSON type columns
  • Supports satisfaction_ratings API
  • Supports ticket_metric_events API
  • Supports SLA Policies API

  • Plugin type: input

  • Resume supported: no

  • Cleanup supported: no

  • Guess supported: no

Configuration

  • login_url: Login URL for Zendesk (string, required)
  • auth_method: basic, token, or oauth. For more detail on zendesk document. (string, required)
  • target: Which export Zendesk resource. Currently supported are tickets, ticket_events, users, organizations, ticket_fields, ticket_forms, ticket_metrics, scores, recipients, object_records, relationship_records or user_events. (string, required)
  • includes: Will fetch sub resources. For example, ticket has ticket_audits, ticket_comments. See below example config. (array, default: [])
  • username: The user name a.k.a. email. Required if auth_method is basic or token. (string, default: null)
  • password: Password. required if auth_method is basic. (string, default: null)
  • token: Token. required if auth_method is token. (string, default: null)
  • access_token: OAuth Access Token. required if auth_method is oauth. (string, default: null)
  • start_time: Start export from this time if present. (string, default: null)
  • retry_limit: Try to retry this times (integer, default: 5)
  • retry_initial_wait_sec: Wait seconds for exponential backoff initial value (integer, default: 4)
  • incremental: If false, start_time in next.yml would not be updated that means you always fetch all of data from Zendesk with statically conditions. If true, start_time would be updated in next.yml. (bool, default: true)
  • dedup: Zendesk incremental API is not designed to protect against duplication. In order to de-dup records, plugin has to cache fetched IDs in memory. If you're importing a large dataset (eg. tens of millions of records), it can lead to OOM error, depends on your configured heap size. In such cases, you can set this option to false, but keep in mind that result may contain duplicated records. (bool, default: true)
  • app_marketplace_integration_name: Invisible to user, only requires to be a part of the Zendesk Apps Marketplace. This should be used to name of the integration.
  • app_marketplace_org_id: Invisible to user, only requires to be a part of the Zendesk Apps Marketplace. This should be the Organization ID for your organization from the new developer portal.
  • app_marketplace_app_id: Invisible to user, only requires to be a part of the Zendesk Apps Marketplace. This is the “App ID” that will be assigned to you when you submit your app.
  • object_types: List custom object types, required if target is object_records.
  • relationship_types: List custom relationship types, required if target is relationship_records.
  • profile_source: Profile source of user event, required if target is user_events.
  • user_event_source: Source of user event, required if target is user_events.
  • user_event_type: Type of user event, required if target is user_events.

Example

in:
  type: zendesk
  login_url: https://obscura.zendesk.com
  auth_method: token
  username: [email protected]
  token: 6wiIBWbGkBMo1mRDMuVwkw1EPsNkeUj95PIz2akv
  target: tickets
  includes:
    - audits
    - comments
  start_time: "2015-01-01 00:00:00+0000"

Build

$ ./gradlew package

@Config("object_types") @ConfigDefault("[]") List getObjectTypes();

    @Config("relationship_types")
    @ConfigDefault("[]")
    List<String> getRelationshipTypes();

    @Config("profile_source")
    @ConfigDefault("null")
    Optional<String> getProfileSource();

    @Config("end_time")
    @ConfigDefault("null")
    Optional<String> getEndTime();

    @Config("user_event_type")
    @ConfigDefault("null")
    Optional<String> getUserEventType();

    @Config("user_event_source")
    @ConfigDefault("null")
    Optional<String> getUserEventSource();