CampaignsService
Automate pass updates and notifications.
Methods
| Method | Description |
|---|---|
list(options?) | List all campaigns |
get(id) | Get a single campaign |
create(data) | Create a campaign |
update(id, data) | Update a campaign |
delete(id) | Delete a campaign |
schedule(id, data) | Schedule campaign |
startNow(id) | Start immediately |
complete(id) | Mark as complete |
cancel(id) | Cancel campaign |
preview(id, options?) | Preview audience |
count(id) | Get audience count |
getStatistics(id) | Get campaign statistics |
getActions(id) | List campaign actions |
addAction(id, action) | Add an action |
updateAction(actionId, data) | Update an action |
deleteAction(actionId) | Delete an action |
executeAction(actionId) | Execute single action |
executeAllActions(id) | Execute all actions |
duplicate(id, options?) | Duplicate campaign |
getCalendar(options) | Get calendar view |
create()
Create a new campaign.
typescript
const campaign = await client.campaigns.create({
workspace_id: 'workspace-uuid',
name: 'Winter Promotion',
description: 'Double points for all purchases',
segment_id: 'active-members-segment-uuid'
});addAction()
Add actions to a campaign.
typescript
// Push notification
await client.campaigns.addAction(campaign.id, {
action_type: 'push_notification',
action_config: {
notification_message: '❄️ Earn double points this weekend!'
}
});
// Custom field update
await client.campaigns.addAction(campaign.id, {
action_type: 'custom_field_update',
action_config: {
custom_field_updates: {
promo_active: true,
points_multiplier: 2
}
}
});
// Template switch
await client.campaigns.addAction(campaign.id, {
action_type: 'template_switch',
action_config: {
target_template_id: 'promo-template-uuid',
preserve_custom_fields: true
}
});preview() / count()
Preview campaign audience.
typescript
// Get sample of targeted passes
const preview = await client.campaigns.preview(campaign.id, { limit: 10 });
console.log(`Campaign will target ${preview.total} passes`);
// Get just the count
const count = await client.campaigns.count(campaign.id);schedule() / startNow()
Control campaign execution.
typescript
// Schedule for later
await client.campaigns.schedule(campaign.id, {
scheduled_at: '2024-01-20T09:00:00Z'
});
// Or start immediately
await client.campaigns.startNow(campaign.id);getStatistics()
Monitor campaign progress.
typescript
const stats = await client.campaigns.getStatistics(campaign.id);
console.log(`Status: ${stats.status}`);
console.log(`Progress: ${stats.passes_completed}/${stats.total_targeted}`);
console.log(`Failed: ${stats.passes_failed}`);
console.log(`Actions: ${stats.actions_completed}/${stats.actions_total}`);Complete Example
typescript
// Create campaign
const campaign = await client.campaigns.create({
workspace_id: 'ws-uuid',
name: 'Tier Upgrade',
segment_id: 'upgrade-eligible-segment'
});
// Add actions
await client.campaigns.addAction(campaign.id, {
action_type: 'template_switch',
action_config: {
target_template_id: 'gold-template-uuid',
preserve_custom_fields: true
}
});
await client.campaigns.addAction(campaign.id, {
action_type: 'custom_field_update',
action_config: {
custom_field_updates: {
tier: 'Gold',
upgraded_at: new Date().toISOString()
}
}
});
await client.campaigns.addAction(campaign.id, {
action_type: 'push_notification',
action_config: {
notification_message: '🎉 You\'ve been upgraded to Gold!'
}
});
// Preview before executing
const preview = await client.campaigns.preview(campaign.id);
console.log(`Will upgrade ${preview.total} members`);
// Execute
await client.campaigns.startNow(campaign.id);
// Monitor
const stats = await client.campaigns.getStatistics(campaign.id);
console.log(`Completed: ${stats.passes_completed}/${stats.total_targeted}`);