Files
automatisch/packages/backend/src/apps/mailchimp/triggers/email-opened/index.js
2024-08-13 13:16:39 +00:00

102 lines
2.1 KiB
JavaScript

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);
},
});