dove-bulklisted
Install: claude install-skill sandeep121sandeep/dove-sms-skill
# /dove-bulk — bulk campaign + breakdown
Engine: `dove.py` in this skill's folder. Config: shared `~/.dove/config.json`
(run `/dove-setup` if missing).
## Flow
1. Pick the approved template (`dove.py templates`) matching the campaign. For
promotional content, remember the route is **DND-filtered** and any URL needs
a whitelisted CTA. **If there's no approved template for this campaign yet**,
the content isn't registered on DLT — guide the user through `docs/DLT-SETUP.md`
(Smartping: header + promo template + CTA whitelist), then `/dove-setup`.
2. **Always dry-run first** to show the deduped recipient list:
```
python3 ~/.claude/skills/dove-bulk/dove.py bulk --name <template> \
--file <numbers.txt | numbers.csv> --dry-run
# or: --to 98xxxx,99xxxx
```
Numbers come from `--to` (comma) or `--file` (one per line, or CSV first
column; a header row like "mobile/number/phone" is skipped). Duplicates are
removed by last-10-digits.
3. Confirm count with the user, then send for real with `--yes`:
```
python3 ~/.claude/skills/dove-bulk/dove.py bulk --name <template> \
--file <path> --yes --date <YYYY-MM-DD> [--rate 0.5]
```
- `--rate <s>` throttles (seconds between sends) to avoid flooding.
- `--date <today>` makes it poll the DLR and print a **breakdown** (counts by
DELIVRD / blocked_ndnc / template-not-matched / gateway-rejected / pending).
- Add `--schedule "YYYY-MM-DD HH:MM:SS"` to schedule instead of sending now