End-to-end Toingg ops: create campaigns, (optionally) schedule daily analytics pulls, and turn Excel contact sheets into WhatsApp outreach via add_contacts + send_whatsapp_templates. Use when Codex needs to automate Toingg voice/WhatsApp workflows and requires scripts for campaign POSTs, analytics cron setup, or bulk contact uploads.
This skill bundles everything needed to manage Toingg campaigns from Claw:
create_campaign.pyfetch_campaigns.py when you need to list active IDs for usersmake_call.py (after collecting name, phone, and campaign)get_campaign_analytics.pyxlsx_to_contacts.py, add_contacts.py, and send_whatsapp_templates.pyAll HTTP calls reuse the TOINGG_API_TOKEN bearer token.
export TOINGG_API_TOKEN="tg_..."
pip install openpyxl requests
Use this whenever the user wants to see active campaigns or needs a campaign ID before launching a call.
./scripts/fetch_campaigns.py --skip 0 --limit 10 --sort -1 > responses/campaigns-$(date +%s).json
Adjust --skip/--limit/--sort if the user needs deeper pages or a different ordering.campID, name, status, and any relevant dates so they can choose confidently.When the user asks you to place a call, gather three pieces of information before touching the API:
Once those details are confirmed, trigger the API:
./scripts/make_call.py "Recipient Name" +919999999999 64fd3f9...
The helper always sends asr=AZURE, startMessage=true, clearMemory=false, and extraParams={} per the product team’s defaults. Echo the API response (success or failure) back to the user so they know the call status.
references/payload-template.md as the scaffold.cd skills/toingg-create-campaign
./scripts/create_campaign.py payloads/my_campaign.json > responses/create-$(date +%s).json
Only offer this when the user explicitly asks for daily analytics.
references/analytics-cron.md to create openclaw cron create toingg-analytics-digest ... with the provided command snippet. Adjust paths if needed.TOINGG_API_TOKEN is visible to the gateway before enabling the cron.openclaw cron delete ...).get_campaign_analytics.py can also be run ad-hoc for on-demand pulls:
./scripts/get_campaign_analytics.py > analytics.json
When a user supplies an Excel sheet (name / phone / context columns) and wants to blast a WhatsApp template:
Convert Excel → JSON
./scripts/xlsx_to_contacts.py ~/Downloads/leads.xlsx contacts.json
See references/contact-workflow.md for the exact column expectations and troubleshooting. The script skips blank rows and normalizes phone numbers.
Upload contacts to a Toingg contact list (auto-creates if missing):
./scripts/add_contacts.py ClawTest contacts.json
Send WhatsApp templates once the list is ready:
./scripts/send_whatsapp_templates.py \
231565687 \
bfesfbgf \
en-US \
ClawTest \
--payload template-variables.json
--payload (defaults to []) if the template has no variables.--resend only when the user explicitly wants to re-contact existing recipients.Confirm delivery status in Toingg and report any errors back to the user (the helper prints full JSON responses for logging).
| Script | Purpose |
|---|---|
scripts/create_campaign.py | POST /api/v3/create_campaign with arbitrary payloads |
scripts/fetch_campaigns.py | GET /api/v3/get_campaigns for quick campaign listings |
scripts/make_call.py | POST /api/v3/make_call once you have name/phone/campaign |
scripts/get_campaign_analytics.py | GET /api/v3/get_campaign_analytics (cron-friendly) |
scripts/xlsx_to_contacts.py | Convert Excel sheets into Toingg contact JSON |
scripts/add_contacts.py | Upload contact lists via /api/v3/add_contacts |
scripts/send_whatsapp_templates.py | Trigger /api/v3/send_whatsapp_templates |
Keep this toolkit lightweight: update the references when Toingg adds new fields or workflows so other operators can follow the same patterns.