This integration is powered by Singer's UJET tap. For support, visit the GitHub repo or join the Singer Slack.
UJET integration summary
Stitch’s UJET integration replicates data using the UJET API. Refer to the Schema section for a list of objects available for replication.
UJET feature snapshot
A high-level look at Stitch's UJET (v1) integration, including release status, useful links, and the features supported in Stitch.
STITCH | |||
Release status |
Released on March 4, 2020 |
Supported by | |
Stitch plan |
Standard |
API availability |
Available |
Singer GitHub repository | |||
REPLICATION SETTINGS | |||
Anchor Scheduling |
Supported |
Advanced Scheduling |
Supported |
Table-level reset |
Unsupported |
Configurable Replication Methods |
Unsupported |
DATA SELECTION | |||
Table selection |
Supported |
Column selection |
Supported |
Select all |
Supported |
||
TRANSPARENCY | |||
Extraction Logs |
Supported |
Loading Reports |
Supported |
Connecting UJET
UJET setup requirements
To set up UJET in Stitch, you need:
-
A UJET account with admin privileges. You need this privilege to retrieve the information required for the Stitch integration.
Step 1: Retrieve your UJET company credentials
- Login to your UJET Console.
- Click on Settings > Developer Settings.
- In the Agent Platform section, click on the UJET bubble.
- Click Save Changes.
- Your Company Key and Company Secret Code will display. Keep these available to complete your setup in Stitch.
Step 2: Add UJET as a Stitch data source
- Sign into your Stitch account.
-
On the Stitch Dashboard page, click the Add Integration button.
-
Click the UJET icon.
-
Enter a name for the integration. This is the name that will display on the Stitch Dashboard for the integration; it’ll also be used to create the schema in your destination.
For example, the name “Stitch UJET” would create a schema called
stitch_ujet
in the destination. Note: Schema names cannot be changed after you save the integration. - In the Company Key field, enter the Company Key that you retrieved in Step 1.
- In the Company Secret field, enter the Company Secret Code that you retrieved in Step 1.
- In the Domain Field field, your UJET domain. This will usually be
ujet
, but if you are unsure, check your welcome email from UJET. - In the Subdomain field, enter the subdomain of your UJET account’s URL. For example: The subdomain for
stitch.ujet.com
would bestitch
.
Step 3: Define the historical replication start date
The Sync Historical Data setting defines the starting date for your UJET integration. This means that data equal to or newer than this date will be replicated to your data warehouse.
Change this setting if you want to replicate data beyond UJET’s default setting of 1 year. For a detailed look at historical replication jobs, check out the Syncing Historical SaaS Data guide.
Step 4: Create a replication schedule
In the Replication Frequency section, you’ll create the integration’s replication schedule. An integration’s replication schedule determines how often Stitch runs a replication job, and the time that job begins.
UJET integrations support the following replication scheduling methods:
-
Advanced Scheduling using Cron (Advanced or Premium plans only)
To keep your row usage low, consider setting the integration to replicate less frequently. See the Understanding and Reducing Your Row Usage guide for tips on reducing your usage.
Step 5: Set objects to replicate
The last step is to select the tables and columns you want to replicate. Learn about the available tables for this integration.
Note: If a replication job is currently in progress, new selections won’t be used until the next job starts.
For UJET integrations, you can select:
-
Individual tables and columns
-
All tables and columns
Click the tabs to view instructions for each selection method.
- In the integration’s Tables to Replicate tab, locate a table you want to replicate.
-
To track a table, click the checkbox next to the table’s name. A blue checkmark means the table is set to replicate.
-
To track a column, click the checkbox next to the column’s name. A blue checkmark means the column is set to replicate.
- Repeat this process for all the tables and columns you want to replicate.
- When finished, click the Finalize Your Selections button at the bottom of the screen to save your selections.
- Click into the integration from the Stitch Dashboard page.
-
Click the Tables to Replicate tab.
- In the list of tables, click the box next to the Table Names column.
-
In the menu that displays, click Track all Tables and Fields:
- Click the Finalize Your Selections button at the bottom of the page to save your data selections.
Initial and historical replication jobs
After you finish setting up UJET, its Sync Status may show as Pending on either the Stitch Dashboard or in the Integration Details page.
For a new integration, a Pending status indicates that Stitch is in the process of scheduling the initial replication job for the integration. This may take some time to complete.
Initial replication jobs with Anchor Scheduling
If using Anchor Scheduling, an initial replication job may not kick off immediately. This depends on the selected Replication Frequency and Anchor Time. Refer to the Anchor Scheduling documentation for more information.
Free historical data loads
The first seven days of replication, beginning when data is first replicated, are free. Rows replicated from the new integration during this time won’t count towards your quota. Stitch offers this as a way of testing new integrations, measuring usage, and ensuring historical data volumes don’t quickly consume your quota.
UJET table reference
Schemas and versioning
Schemas and naming conventions can change from version to version, so we recommend verifying your integration’s version before continuing.
The schema and info displayed below is for version 1 of this integration.
This is the latest version of the UJET integration.
Table and column names in your destination
Depending on your destination, table and column names may not appear as they are outlined below.
For example: Object names are lowercased in Redshift (CusTomERs
> customers
), while case is maintained in PostgreSQL destinations (CusTomERs
> CusTomERs
). Refer to the Loading Guide for your destination for more info.
agent_activity_logs
The agent_activity_logs
table contains info about agent activity logs.
Key-based Incremental |
|
Primary Key |
id |
Replication Key |
started_at |
Useful links |
Join agent_activity_logs with | on |
---|---|
agents |
agent_activity_logs.agent_id = agents.id |
calls |
agent_activity_logs.agent_id = calls.agent_info.id agent_activity_logs.agent_id = calls.transfers.from_agent.id agent_activity_logs.agent_id = calls.transfers.to_agent.id agent_activity_logs.call_id = calls.id agent_activity_logs.call_id = calls.participants.call_id |
chats |
agent_activity_logs.agent_id = chats.transfers.from_agent.id agent_activity_logs.agent_id = chats.transfers.to_agent.id agent_activity_logs.chat_id = chats.id agent_activity_logs.chat_id = chats.participants.chat_id |
menus |
agent_activity_logs.agent_id = menus.agent_assignments.assignee.id agent_activity_logs.agent_id = menus.team_assignments.team.assignees.id |
activity STRING |
||||||
agent_id INTEGER |
||||||
call_id INTEGER |
||||||
chat_id INTEGER |
||||||
duration INTEGER |
||||||
ended_at DATE-TIME |
||||||
id INTEGER |
||||||
started_at DATE-TIME |
||||||
status OBJECT
|
||||||
whodunnit OBJECT
|
agents
The agents
table contains info about agents.
Key-based Incremental |
|
Primary Key |
id |
Replication Key |
status_updated_at |
Useful links |
Join agents with | on |
---|---|
agent_activity_logs |
agents.id = agent_activity_logs.agent_id |
calls |
agents.id = calls.agent_info.id agents.id = calls.transfers.from_agent.id agents.id = calls.transfers.to_agent.id |
chats |
agents.id = chats.transfers.from_agent.id agents.id = chats.transfers.to_agent.id |
menus |
agents.id = menus.agent_assignments.assignee.id agents.id = menus.team_assignments.team.assignees.id agents.teams.id = menus.team_assignments.team.id |
teams |
agents.teams.id = teams.id |
agent_number STRING |
||||||
avatar_url STRING |
||||||
call_count INTEGER |
||||||
channels
ARRAY
|
||||||
chat_count INTEGER |
||||||
created_at DATE-TIME |
||||||
crm_authenticated BOOLEAN |
||||||
STRING |
||||||
first_name STRING |
||||||
id INTEGER |
||||||
last_login_time DATE-TIME |
||||||
last_name STRING |
||||||
location STRING |
||||||
middle_name STRING |
||||||
online BOOLEAN |
||||||
roles
ARRAY |
||||||
status OBJECT
|
||||||
status_updated_at DATE-TIME |
||||||
teams
ARRAY
|
||||||
wrap_up BOOLEAN |
calls
The calls
table contains info about calls.
Key-based Incremental |
|
Primary Key |
id |
Replication Key |
updated_at |
Useful links |
Join calls with | on |
---|---|
agents |
calls.agent_info.id = agents.id calls.transfers.from_agent.id = agents.id calls.transfers.to_agent.id = agents.id |
agent_activity_logs |
calls.agent_info.id = agent_activity_logs.agent_id calls.transfers.from_agent.id = agent_activity_logs.agent_id calls.transfers.to_agent.id = agent_activity_logs.agent_id calls.id = agent_activity_logs.call_id calls.participants.call_id = agent_activity_logs.call_id |
chats |
calls.agent_info.id = chats.transfers.from_agent.id calls.transfers.from_agent.id = chats.transfers.from_agent.id calls.transfers.to_agent.id = chats.transfers.from_agent.id calls.agent_info.id = chats.transfers.to_agent.id calls.transfers.from_agent.id = chats.transfers.to_agent.id calls.transfers.to_agent.id = chats.transfers.to_agent.id |
menus |
calls.agent_info.id = menus.agent_assignments.assignee.id calls.transfers.from_agent.id = menus.agent_assignments.assignee.id calls.transfers.to_agent.id = menus.agent_assignments.assignee.id calls.agent_info.id = menus.team_assignments.team.assignees.id calls.transfers.from_agent.id = menus.team_assignments.team.assignees.id calls.transfers.to_agent.id = menus.team_assignments.team.assignees.id |
agent_info OBJECT
|
|||||||||||||||||||||||||||||
answer_type STRING |
|||||||||||||||||||||||||||||
assigned_at DATE-TIME |
|||||||||||||||||||||||||||||
call_duration INTEGER |
|||||||||||||||||||||||||||||
call_type STRING |
|||||||||||||||||||||||||||||
connected_at DATE-TIME |
|||||||||||||||||||||||||||||
created_at DATE-TIME |
|||||||||||||||||||||||||||||
deflection STRING |
|||||||||||||||||||||||||||||
deflection_details
ARRAY
|
|||||||||||||||||||||||||||||
disconnected_by STRING |
|||||||||||||||||||||||||||||
end_user OBJECT
|
|||||||||||||||||||||||||||||
ends_at DATE-TIME |
|||||||||||||||||||||||||||||
fail_details STRING |
|||||||||||||||||||||||||||||
fail_reason STRING |
|||||||||||||||||||||||||||||
has_feedback BOOLEAN |
|||||||||||||||||||||||||||||
hold_duration INTEGER |
|||||||||||||||||||||||||||||
id INTEGER |
|||||||||||||||||||||||||||||
lang STRING |
|||||||||||||||||||||||||||||
menu_path OBJECT |
|||||||||||||||||||||||||||||
offer_events
ARRAY
|
|||||||||||||||||||||||||||||
offer_type STRING |
|||||||||||||||||||||||||||||
out_ticket_id STRING |
|||||||||||||||||||||||||||||
out_ticket_url STRING |
|||||||||||||||||||||||||||||
outbound_number STRING |
|||||||||||||||||||||||||||||
participants
ARRAY
|
|||||||||||||||||||||||||||||
photos
ARRAY
|
|||||||||||||||||||||||||||||
queued_at DATE-TIME |
|||||||||||||||||||||||||||||
rating STRING |
|||||||||||||||||||||||||||||
recording_url STRING |
|||||||||||||||||||||||||||||
scheduled_at DATE-TIME |
|||||||||||||||||||||||||||||
selected_menu OBJECT |
|||||||||||||||||||||||||||||
status STRING |
|||||||||||||||||||||||||||||
support_number STRING |
|||||||||||||||||||||||||||||
transfers
ARRAY
|
|||||||||||||||||||||||||||||
updated_at DATE-TIME |
|||||||||||||||||||||||||||||
verified BOOLEAN |
|||||||||||||||||||||||||||||
videos
ARRAY
|
|||||||||||||||||||||||||||||
voicemail_reason STRING |
|||||||||||||||||||||||||||||
voip_provider STRING |
|||||||||||||||||||||||||||||
wait_duration INTEGER |
chats
The chats
table contains info about chats.
Key-based Incremental |
|
Primary Key |
id |
Replication Key |
updated_at |
Useful links |
Join chats with | on |
---|---|
agents |
chats.transfers.from_agent.id = agents.id chats.transfers.to_agent.id = agents.id |
agent_activity_logs |
chats.transfers.from_agent.id = agent_activity_logs.agent_id chats.transfers.to_agent.id = agent_activity_logs.agent_id chats.id = agent_activity_logs.chat_id chats.participants.chat_id = agent_activity_logs.chat_id |
calls |
chats.transfers.from_agent.id = calls.agent_info.id chats.transfers.to_agent.id = calls.agent_info.id chats.transfers.from_agent.id = calls.transfers.from_agent.id chats.transfers.to_agent.id = calls.transfers.from_agent.id chats.transfers.from_agent.id = calls.transfers.to_agent.id chats.transfers.to_agent.id = calls.transfers.to_agent.id |
menus |
chats.transfers.from_agent.id = menus.agent_assignments.assignee.id chats.transfers.to_agent.id = menus.agent_assignments.assignee.id chats.transfers.from_agent.id = menus.team_assignments.team.assignees.id chats.transfers.to_agent.id = menus.team_assignments.team.assignees.id |
agent_info STRING |
|||||||||||||||||||||||||||||
assigned_at DATE-TIME |
|||||||||||||||||||||||||||||
average_response_time INTEGER |
|||||||||||||||||||||||||||||
chat_duration INTEGER |
|||||||||||||||||||||||||||||
chat_type STRING |
|||||||||||||||||||||||||||||
created_at DATE-TIME |
|||||||||||||||||||||||||||||
end_user OBJECT
|
|||||||||||||||||||||||||||||
ends_at DATE-TIME |
|||||||||||||||||||||||||||||
fail_reason STRING |
|||||||||||||||||||||||||||||
first_msg_sent_at DATE-TIME |
|||||||||||||||||||||||||||||
has_feedback BOOLEAN |
|||||||||||||||||||||||||||||
id INTEGER |
|||||||||||||||||||||||||||||
lang STRING |
|||||||||||||||||||||||||||||
last_msg_sent_at DATE-TIME |
|||||||||||||||||||||||||||||
longest_response_time INTEGER |
|||||||||||||||||||||||||||||
menu_path OBJECT |
|||||||||||||||||||||||||||||
message_count INTEGER |
|||||||||||||||||||||||||||||
offer_events
ARRAY |
|||||||||||||||||||||||||||||
offer_type STRING |
|||||||||||||||||||||||||||||
out_ticket_id STRING |
|||||||||||||||||||||||||||||
out_ticket_url STRING |
|||||||||||||||||||||||||||||
participants
ARRAY
|
|||||||||||||||||||||||||||||
photos
ARRAY
|
|||||||||||||||||||||||||||||
rating STRING |
|||||||||||||||||||||||||||||
selected_menu OBJECT |
|||||||||||||||||||||||||||||
status STRING |
|||||||||||||||||||||||||||||
transcript BOOLEAN |
|||||||||||||||||||||||||||||
transfers
ARRAY
|
|||||||||||||||||||||||||||||
updated_at DATE-TIME |
|||||||||||||||||||||||||||||
verified BOOLEAN |
|||||||||||||||||||||||||||||
videos
ARRAY
|
|||||||||||||||||||||||||||||
wait_duration INTEGER |
menu_tree
The menu_tree
table contains info about menu trees.
Full Table |
|
Primary Key |
id |
Useful links |
menus
The menus
table contains info about menus.
Key-based Incremental |
|
Primary Key |
id |
Useful links |
team_tree
The team_tree
table contains info about team trees.
Full Table |
|
Primary Key |
id |
Useful links |
agents_count INTEGER |
deleted BOOLEAN |
id INTEGER |
name STRING |
parent_id INTEGER |
position INTEGER |
teams
The teams
table contains info about teams.
Full Table |
|
Primary Key |
id |
Useful links |
agents_count INTEGER |
||||||
assignees
ARRAY
|
||||||
deleted BOOLEAN |
||||||
id INTEGER |
||||||
name STRING |
||||||
parent_id INTEGER |
||||||
position INTEGER |
user_statuses
The user_statuses
table contains info about user statuses.
Full Table |
|
Primary Key |
id |
Useful links |
color STRING |
id INTEGER |
name STRING |
wfm_id INTEGER |
Related | Troubleshooting |
Questions? Feedback?
Did this article help? If you have questions or feedback, feel free to submit a pull request with your suggestions, open an issue on GitHub, or reach out to us.