feat(mailchimp): add email opened trigger

This commit is contained in:
Rıdvan Akca
2024-02-01 14:24:06 +03:00
committed by Ali BARIN
parent 9a5cef08d6
commit 273f04128c
5 changed files with 149 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
import listAudiences from './list-audiences/index.js'; import listAudiences from './list-audiences/index.js';
import listCampaigns from './list-campaigns/index.js';
export default [listAudiences]; export default [listAudiences, listCampaigns];

View File

@@ -0,0 +1,42 @@
export default {
name: 'List campaigns',
key: 'listCampaigns',
async run($) {
const campaigns = {
data: [],
};
let hasMore = false;
const audienceId = $.step.parameters.audienceId;
const params = {
list_id: audienceId,
sort_field: 'create_time',
sort_dir: 'DESC',
count: 1000,
offset: 0,
};
do {
const { data } = await $.http.get('/3.0/campaigns', { params });
params.offset = params.offset + params.count;
if (data?.campaigns) {
for (const campaign of data.campaigns) {
campaigns.data.push({
value: campaign.id,
name: campaign.settings.title || campaign.settings.subject_line,
});
}
}
if (data.total_items > params.offset) {
hasMore = true;
} else {
hasMore = false;
}
} while (hasMore);
return campaigns;
},
};

View File

@@ -0,0 +1,101 @@
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'Email opened',
key: 'emailOpened',
pollInterval: 15,
description:
'Triggers when a recipient opens an email as part of a particular campaign.',
arguments: [
{
label: 'Audience',
key: 'audienceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listAudiences',
},
],
},
},
{
label: 'Campaign Type',
key: 'campaignType',
type: 'dropdown',
required: true,
description: '',
variables: true,
options: [
{
label: 'Campaign',
value: 'campaign',
},
],
},
{
label: 'Campaign',
key: 'campaignId',
type: 'dropdown',
required: true,
dependsOn: ['parameters.audienceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listCampaigns',
},
{
name: 'parameters.audienceId',
value: '{parameters.audienceId}',
},
],
},
},
],
async run($) {
const campaignId = $.step.parameters.campaignId;
let hasMore = false;
const params = {
count: 1000,
offset: 0,
};
do {
const { data } = await $.http.get(
`/3.0/reports/${campaignId}/open-details`,
{ params }
);
params.offset = params.offset + params.count;
if (data.members?.length) {
for (const member of data.members) {
$.pushTriggerItem({
raw: member,
meta: {
internalId: member.email_id,
},
});
}
}
if (data.total_items > params.offset) {
hasMore = true;
} else {
hasMore = false;
}
} while (hasMore);
},
});

View File

@@ -1,4 +1,5 @@
import emailOpened from './email-opened/index.js';
import newSubscribers from './new-subscribers/index.js'; import newSubscribers from './new-subscribers/index.js';
import newUnsubscribers from './new-unsubscribers/index.js'; import newUnsubscribers from './new-unsubscribers/index.js';
export default [newSubscribers, newUnsubscribers]; export default [emailOpened, newSubscribers, newUnsubscribers];

View File

@@ -1,6 +1,8 @@
--- ---
favicon: /favicons/mailchimp.svg favicon: /favicons/mailchimp.svg
items: items:
- name: Email opened
desc: Triggers when a recipient opens an email as part of a particular campaign.
- name: New subscribers - name: New subscribers
desc: Triggers when a new subscriber is appended to an audience. desc: Triggers when a new subscriber is appended to an audience.
- name: New unsubscribers - name: New unsubscribers