From a296b5e64547bd99d206cf5ef88d7db1973150b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Fri, 24 Nov 2023 18:45:16 +0300 Subject: [PATCH] feat(zendesk): add new users trigger --- .../src/apps/zendesk/triggers/index.ts | 3 +- .../apps/zendesk/triggers/new-users/index.ts | 83 +++++++++++++++++++ packages/docs/pages/apps/zendesk/triggers.md | 2 + 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/zendesk/triggers/new-users/index.ts diff --git a/packages/backend/src/apps/zendesk/triggers/index.ts b/packages/backend/src/apps/zendesk/triggers/index.ts index 1c47e6b5..883357c1 100644 --- a/packages/backend/src/apps/zendesk/triggers/index.ts +++ b/packages/backend/src/apps/zendesk/triggers/index.ts @@ -1,3 +1,4 @@ import newTickets from './new-tickets'; +import newUsers from './new-users'; -export default [newTickets]; +export default [newTickets, newUsers]; diff --git a/packages/backend/src/apps/zendesk/triggers/new-users/index.ts b/packages/backend/src/apps/zendesk/triggers/new-users/index.ts new file mode 100644 index 00000000..85b16fa4 --- /dev/null +++ b/packages/backend/src/apps/zendesk/triggers/new-users/index.ts @@ -0,0 +1,83 @@ +import Crypto from 'crypto'; +import defineTrigger from '../../../../helpers/define-trigger'; + +export default defineTrigger({ + name: 'New users', + key: 'newUsers', + type: 'webhook', + description: 'Triggers upon the creation of a new user.', + + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async testRun($) { + const params = { + query: 'type:user', + sort_by: 'created_at', + sort_order: 'desc', + }; + + const response = await $.http.get('/api/v2/search', { params }); + + const lastUser = response.data.results[0]; + + const computedWebhookEvent = { + id: Crypto.randomUUID(), + time: lastUser.created_at, + type: 'zen:event-type:user.created', + event: {}, + detail: { + id: lastUser.id, + role: lastUser.role, + email: lastUser.email, + created_at: lastUser.created_at, + updated_at: lastUser.updated_at, + external_id: lastUser.external_id, + organization_id: lastUser.organization_id, + default_group_id: lastUser.default_group_id, + }, + subject: `zen:user:${lastUser.id}`, + account_id: '', + zendesk_event_version: '2022-11-06', + }; + + const dataItem = { + raw: computedWebhookEvent, + meta: { + internalId: computedWebhookEvent.id, + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async registerHook($) { + const payload = { + webhook: { + name: `Flow ID: ${$.flow.id}`, + status: 'active', + subscriptions: ['zen:event-type:user.created'], + endpoint: $.webhookUrl, + http_method: 'POST', + request_format: 'json', + }, + }; + + const response = await $.http.post('/api/v2/webhooks', payload); + const id = response.data.webhook.id; + + await $.flow.setRemoteWebhookId(id); + }, + + async unregisterHook($) { + await $.http.delete(`/api/v2/webhooks/${$.flow.remoteWebhookId}`); + }, +}); diff --git a/packages/docs/pages/apps/zendesk/triggers.md b/packages/docs/pages/apps/zendesk/triggers.md index 6b286305..0846d7b9 100644 --- a/packages/docs/pages/apps/zendesk/triggers.md +++ b/packages/docs/pages/apps/zendesk/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/zendesk.svg items: - name: New tickets desc: Triggers when a new ticket is created in a specific view. + - name: New users + desc: Triggers upon the creation of a new user. ---