← back to Designer Wallcoverings

mailers/cc-api/test-send.js

40 lines

'use strict';
// One-shot CC v3 test-send (preview) of an existing campaign activity to internal addresses.
// Usage: node test-send.js <activity_id> <comma-separated-emails>
const https = require('https');
const cc = require('./cc-client');

const activityId = process.argv[2];
const emails = (process.argv[3] || '').split(',').map(s => s.trim()).filter(Boolean);
if (!activityId || !emails.length) { console.error('usage: node test-send.js <activity_id> <a@b.com,c@d.com>'); process.exit(1); }

function post(pathname, token, body) {
  return new Promise((resolve, reject) => {
    const data = JSON.stringify(body);
    const req = https.request('https://api.cc.email/v3' + pathname, {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-Type': 'application/json',
        Accept: 'application/json',
        'Content-Length': Buffer.byteLength(data),
      },
    }, (res) => {
      let buf = ''; res.on('data', d => buf += d);
      res.on('end', () => resolve({ status: res.statusCode, body: buf }));
    });
    req.on('error', reject); req.write(data); req.end();
  });
}

(async () => {
  const token = await cc.getAccessToken();
  const r = await post(`/emails/activities/${activityId}/tests`, token, {
    email_addresses: emails,
    personal_message: 'Preview — The Commercial Edit (8 contract houses, 3 picks each) + narrated flip-book. Draft only, not sent to any list.',
  });
  console.log('test-send HTTP', r.status);
  console.log(r.body || '(empty body = accepted)');
  process.exitCode = (r.status >= 200 && r.status < 300) ? 0 : 2;
})().catch(e => { console.error('ERROR', e.message); process.exitCode = 1; });