diff --git a/packages/backend/src/apps/bigin-by-zoho-crm/dynamic-data/index.js b/packages/backend/src/apps/bigin-by-zoho-crm/dynamic-data/index.js new file mode 100644 index 00000000..de48bc3f --- /dev/null +++ b/packages/backend/src/apps/bigin-by-zoho-crm/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listOrganizations from './list-organizations/index.js'; + +export default [listOrganizations]; diff --git a/packages/backend/src/apps/bigin-by-zoho-crm/dynamic-data/list-organizations/index.js b/packages/backend/src/apps/bigin-by-zoho-crm/dynamic-data/list-organizations/index.js new file mode 100644 index 00000000..ef57834b --- /dev/null +++ b/packages/backend/src/apps/bigin-by-zoho-crm/dynamic-data/list-organizations/index.js @@ -0,0 +1,23 @@ +export default { + name: 'List organizations', + key: 'listOrganizations', + + async run($) { + const organizations = { + data: [], + }; + + const { data } = await $.http.get('/bigin/v2/org'); + + if (data.org) { + for (const org of data.org) { + organizations.data.push({ + value: org.id, + name: org.company_name, + }); + } + } + + return organizations; + }, +}; diff --git a/packages/backend/src/apps/bigin-by-zoho-crm/index.js b/packages/backend/src/apps/bigin-by-zoho-crm/index.js index 5fcbb39e..de1b0c5a 100644 --- a/packages/backend/src/apps/bigin-by-zoho-crm/index.js +++ b/packages/backend/src/apps/bigin-by-zoho-crm/index.js @@ -2,6 +2,8 @@ import defineApp from '../../helpers/define-app.js'; import addAuthHeader from './common/add-auth-header.js'; import auth from './auth/index.js'; import setBaseUrl from './common/set-base-url.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Bigin By Zoho CRM', @@ -14,4 +16,6 @@ export default defineApp({ supportsConnections: true, beforeRequest: [setBaseUrl, addAuthHeader], auth, + triggers, + dynamicData, }); diff --git a/packages/backend/src/apps/bigin-by-zoho-crm/triggers/index.js b/packages/backend/src/apps/bigin-by-zoho-crm/triggers/index.js new file mode 100644 index 00000000..0e502459 --- /dev/null +++ b/packages/backend/src/apps/bigin-by-zoho-crm/triggers/index.js @@ -0,0 +1,3 @@ +import newContacts from './new-contacts/index.js'; + +export default [newContacts]; diff --git a/packages/backend/src/apps/bigin-by-zoho-crm/triggers/new-contacts/index.js b/packages/backend/src/apps/bigin-by-zoho-crm/triggers/new-contacts/index.js new file mode 100644 index 00000000..367c337b --- /dev/null +++ b/packages/backend/src/apps/bigin-by-zoho-crm/triggers/new-contacts/index.js @@ -0,0 +1,89 @@ +import Crypto from 'crypto'; +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'New contacts', + key: 'newContacts', + type: 'webhook', + description: 'Triggers when a new contact is created.', + arguments: [ + { + label: 'Organization', + key: 'organizationId', + type: 'dropdown', + required: true, + description: '', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listOrganizations', + }, + ], + }, + }, + ], + + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async testRun($) { + const organizationId = $.step.parameters.organizationId; + + const sampleEventData = { + ids: ['111111111111111111'], + token: null, + module: 'Contacts', + operation: 'insert', + channel_id: organizationId, + server_time: 1708426963120, + query_params: {}, + resource_uri: `${$.auth.data.apiDomain}/bigin/v1/Contacts`, + affected_fields: [], + }; + + const dataItem = { + raw: sampleEventData, + meta: { + internalId: sampleEventData.channel_id, + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async registerHook($) { + const organizationId = $.step.parameters.organizationId; + + const payload = { + watch: [ + { + channel_id: organizationId, + notify_url: $.webhookUrl, + events: ['Contacts.create'], + }, + ], + }; + + await $.http.post('/bigin/v2/actions/watch', payload); + + await $.flow.setRemoteWebhookId(organizationId); + }, + + async unregisterHook($) { + await $.http.delete( + `/bigin/v2/actions/watch?channel_ids=${$.flow.remoteWebhookId}` + ); + }, +}); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 555cb294..8e3ff893 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -37,6 +37,7 @@ export default defineConfig({ collapsible: true, collapsed: true, items: [ + { text: 'Triggers', link: '/apps/bigin-by-zoho-crm/triggers' }, { text: 'Connection', link: '/apps/bigin-by-zoho-crm/connection' }, ], }, diff --git a/packages/docs/pages/apps/bigin-by-zoho-crm/triggers.md b/packages/docs/pages/apps/bigin-by-zoho-crm/triggers.md new file mode 100644 index 00000000..770cdd97 --- /dev/null +++ b/packages/docs/pages/apps/bigin-by-zoho-crm/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/bigin-by-zoho-crm.svg +items: + - name: New contacts + desc: Triggers when a new contact is created. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index 90f8ba0a..9120313b 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -2,6 +2,7 @@ The following integrations are currently supported by Automatisch. +- [Bigin By Zoho CRM](/apps/bigin-by-zoho-crm/triggers) - [Carbone](/apps/carbone/actions) - [DeepL](/apps/deepl/actions) - [Delay](/apps/delay/actions)