diff --git a/packages/backend/src/apps/zendesk/dynamic-data/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/index.ts
index 4cd089e7..de4720f9 100644
--- a/packages/backend/src/apps/zendesk/dynamic-data/index.ts
+++ b/packages/backend/src/apps/zendesk/dynamic-data/index.ts
@@ -3,6 +3,7 @@ import listBrands from './list-brands';
import listGroups from './list-groups';
import listSharingAgreements from './list-sharing-agreements';
import listTicketForms from './list-ticket-forms';
+import listViews from './list-views';
export default [
listUsers,
@@ -10,4 +11,5 @@ export default [
listGroups,
listSharingAgreements,
listTicketForms,
+ listViews,
];
diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.ts
new file mode 100644
index 00000000..3c7d94b7
--- /dev/null
+++ b/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.ts
@@ -0,0 +1,38 @@
+import { IGlobalVariable, IJSONObject } from '@automatisch/types';
+
+export default {
+ name: 'List views',
+ key: 'listViews',
+
+ async run($: IGlobalVariable) {
+ const views: {
+ data: IJSONObject[];
+ } = {
+ data: [],
+ };
+ let hasMore;
+
+ const params = {
+ 'page[size]': 100,
+ 'page[after]': undefined as unknown as string,
+ };
+
+ do {
+ const response = await $.http.get('/api/v2/views', { params });
+ const allViews = response?.data?.views;
+ hasMore = response?.data?.meta?.has_more;
+ params['page[after]'] = response.data.meta?.after_cursor;
+
+ if (allViews?.length) {
+ for (const view of allViews) {
+ views.data.push({
+ value: view.id,
+ name: view.title,
+ });
+ }
+ }
+ } while (hasMore);
+
+ return views;
+ },
+};
diff --git a/packages/backend/src/apps/zendesk/index.ts b/packages/backend/src/apps/zendesk/index.ts
index 54810011..a0e5e6a7 100644
--- a/packages/backend/src/apps/zendesk/index.ts
+++ b/packages/backend/src/apps/zendesk/index.ts
@@ -1,6 +1,7 @@
import defineApp from '../../helpers/define-app';
import addAuthHeader from './common/add-auth-headers';
import auth from './auth';
+import triggers from './triggers';
import actions from './actions';
import dynamicData from './dynamic-data';
@@ -15,6 +16,7 @@ export default defineApp({
supportsConnections: true,
beforeRequest: [addAuthHeader],
auth,
+ triggers,
actions,
dynamicData,
});
diff --git a/packages/backend/src/apps/zendesk/triggers/index.ts b/packages/backend/src/apps/zendesk/triggers/index.ts
new file mode 100644
index 00000000..1c47e6b5
--- /dev/null
+++ b/packages/backend/src/apps/zendesk/triggers/index.ts
@@ -0,0 +1,3 @@
+import newTickets from './new-tickets';
+
+export default [newTickets];
diff --git a/packages/backend/src/apps/zendesk/triggers/new-tickets/index.ts b/packages/backend/src/apps/zendesk/triggers/new-tickets/index.ts
new file mode 100644
index 00000000..9a7d1a63
--- /dev/null
+++ b/packages/backend/src/apps/zendesk/triggers/new-tickets/index.ts
@@ -0,0 +1,59 @@
+import defineTrigger from '../../../../helpers/define-trigger';
+
+export default defineTrigger({
+ name: 'New tickets',
+ key: 'newTickets',
+ pollInterval: 15,
+ description: 'Triggers when a new ticket is created in a specific view.',
+ arguments: [
+ {
+ label: 'View',
+ key: 'viewId',
+ type: 'dropdown' as const,
+ required: true,
+ variables: true,
+ source: {
+ type: 'query',
+ name: 'getDynamicData',
+ arguments: [
+ {
+ name: 'key',
+ value: 'listViews',
+ },
+ ],
+ },
+ },
+ ],
+
+ async run($) {
+ const viewId = $.step.parameters.viewId;
+
+ const params = {
+ 'page[size]': 100,
+ 'page[after]': undefined as unknown as string,
+ sort_by: 'nice_id',
+ sort_order: 'desc',
+ };
+ let hasMore;
+
+ do {
+ const response = await $.http.get(`/api/v2/views/${viewId}/tickets`, {
+ params,
+ });
+ const allTickets = response?.data?.tickets;
+ hasMore = response?.data?.meta?.has_more;
+ params['page[after]'] = response.data.meta?.after_cursor;
+
+ if (allTickets?.length) {
+ for (const ticket of allTickets) {
+ $.pushTriggerItem({
+ raw: ticket,
+ meta: {
+ internalId: ticket.id.toString(),
+ },
+ });
+ }
+ }
+ } while (hasMore);
+ },
+});
diff --git a/packages/docs/pages/apps/zendesk/triggers.md b/packages/docs/pages/apps/zendesk/triggers.md
new file mode 100644
index 00000000..6b286305
--- /dev/null
+++ b/packages/docs/pages/apps/zendesk/triggers.md
@@ -0,0 +1,12 @@
+---
+favicon: /favicons/zendesk.svg
+items:
+ - name: New tickets
+ desc: Triggers when a new ticket is created in a specific view.
+---
+
+
+
+