conduyt 1.37.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.js +18 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,6 +45,7 @@ conduyt whatsapp status # WhatsApp via your Twilio: connected? f
|
|
|
45
45
|
conduyt whatsapp senders # the senders Twilio lists for the account (ONLINE = connectable)
|
|
46
46
|
conduyt whatsapp connect <senderSid> # connect a sender (verified with Twilio first)
|
|
47
47
|
conduyt whatsapp templates # approved / pending / rejected templates with their {{n}} placeholders
|
|
48
|
+
conduyt dialer voice-drop --contact <id> [--recording "Missed you"] [--if-human play] # a call that plays a Voicemail Drop recording to a machine
|
|
48
49
|
conduyt messages send-sms --contact <id> --transport whatsapp --whatsapp-template HX… --whatsapp-variables '{"1":"Alex"}' --body "…"
|
|
49
50
|
conduyt privacy export <id> # GDPR data-portability export (owner/admin)
|
|
50
51
|
conduyt privacy forget <id> --confirm FORGET # GDPR erasure — IRREVERSIBLE, owner only
|
package/dist/index.js
CHANGED
|
@@ -804,7 +804,7 @@ messages
|
|
|
804
804
|
}));
|
|
805
805
|
messages
|
|
806
806
|
.command("transports")
|
|
807
|
-
.description("What a workflow Send SMS step can speak through today (GET /sms/transports): Twilio {connected, numbers = account number + active reps' lines, valid send_sms fromNumber values}, Project Blue {connected, lines held by active reps, valid projectBlueLineId values for smsMode project_blue}, WhatsApp {connected, sender for smsMode whatsapp}, webhook provider count, FromK.ai coming soon (automations scope)")
|
|
807
|
+
.description("What a workflow Send SMS step can speak through today (GET /sms/transports): Twilio {connected, numbers = account number + active reps' lines, valid send_sms fromNumber values}, Project Blue {connected, lines held by active reps, valid projectBlueLineId values for smsMode project_blue}, WhatsApp {connected, sender for smsMode whatsapp}, Voice drop {connected, recordings = the Voicemail Drop catalog for smsMode voice_drop}, webhook provider count, FromK.ai coming soon (automations scope)")
|
|
808
808
|
.action(run(async (client) => client.get("/api/v1/sms/transports")));
|
|
809
809
|
// ---- WhatsApp via Twilio (2026-09-11) ----
|
|
810
810
|
const whatsapp = program.command("whatsapp").description("WhatsApp via your own Twilio account: a Meta-approved sender, approved templates for outreach, free-form replies within a contact's 24-hour window");
|
|
@@ -1837,6 +1837,23 @@ program
|
|
|
1837
1837
|
}));
|
|
1838
1838
|
// ---- dialer ----
|
|
1839
1839
|
const dialer = program.command("dialer").description("Dialer operations");
|
|
1840
|
+
dialer
|
|
1841
|
+
.command("voice-drop")
|
|
1842
|
+
.description("Place a voice drop to a contact (POST /calls/voice-drop): an outbound Twilio call with answering-machine detection that plays one of the account's Voicemail Drop recordings (Settings → Twilio → Voicemail Drop; names from `messages transports` voiceDrop.recordings) when a machine answers, and hangs up quietly when a person answers unless --if-human play. Governed like a call: calls-tier consent (a texting STOP does not block it, a DNC or litigator row does), calling hours, one live call per lead. Placed from your own Twilio line (else the account number) unless --from names a number the account owns. Returns 202 with the Call row; the outcome lands on it through the voice webhooks (disposition voicemail_drop = played to a machine, voice_drop_human = a person answered, voice_drop_live = played to a person). Refusals carry a code (dnc, litigator, calling_window, active_call, voice_drop_recording_missing, voice_drop_not_configured); 429 and 502 are safe to retry (dialer scope)")
|
|
1843
|
+
.requiredOption("--contact <id>", "contact UUID (the drop calls the contact's primary number)")
|
|
1844
|
+
.option("--recording <name>", "a Voicemail Drop template name; omit for the default recording")
|
|
1845
|
+
.option("--from <number>", "caller ID the account owns (E.164); omit for your own line")
|
|
1846
|
+
.option("--if-human <rule>", "hang_up (default) | play — what the call does when a person answers")
|
|
1847
|
+
.action(run(async (client, opts) => {
|
|
1848
|
+
const body = { contactId: opts.contact };
|
|
1849
|
+
if (opts.recording !== undefined)
|
|
1850
|
+
body.recording = opts.recording;
|
|
1851
|
+
if (opts.from !== undefined)
|
|
1852
|
+
body.fromNumber = opts.from;
|
|
1853
|
+
if (opts.ifHuman !== undefined)
|
|
1854
|
+
body.onHuman = opts.ifHuman;
|
|
1855
|
+
return client.post("/api/v1/calls/voice-drop", body);
|
|
1856
|
+
}));
|
|
1840
1857
|
dialer
|
|
1841
1858
|
.command("sync-local-presence")
|
|
1842
1859
|
.description("Reconcile the Local Presence pool from Twilio. Only adopts numbers whose Twilio FriendlyName contains a standalone 'LP' (or 'LocalPres'), that are voice-capable, and that are US +1 E.164 — first 50 sorted matches; pool entries that no longer match are REMOVED. Name the number in Twilio first, then sync. Requires settings:edit")
|
package/package.json
CHANGED