skills$openclaw/dialpad
kesslerio8.3k

by kesslerio

dialpad – OpenClaw Skill

dialpad is an OpenClaw Skills integration for coding workflows. Send SMS and make voice calls via Dialpad API. Supports single/batch SMS, voice calls with TTS, and caller ID selection.

8.3k stars2.1k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026coding

Skill Snapshot

namedialpad
descriptionSend SMS and make voice calls via Dialpad API. Supports single/batch SMS, voice calls with TTS, and caller ID selection. OpenClaw Skills integration.
ownerkesslerio
repositorykesslerio/dialpad
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @kesslerio/dialpad
last updatedFeb 7, 2026

Maintainer

kesslerio

kesslerio

Maintains dialpad in the OpenClaw Skills directory.

View GitHub profile
File Explorer
12 files
.
_meta.json
281 B
create_sms_webhook.py
6.3 KB
export_sms.py
5.3 KB
lookup_contact.py
1.4 KB
make_call.py
5.1 KB
README.md
6.7 KB
send_sms.py
4.0 KB
SKILL.md
7.2 KB
sms_sqlite.py
15.9 KB
sms_storage.py
10.7 KB
webhook_receiver.py
3.3 KB
webhook_sqlite.py
4.4 KB
SKILL.md

name: dialpad description: Send SMS and make voice calls via Dialpad API. Supports single/batch SMS, voice calls with TTS, and caller ID selection. homepage: https://developers.dialpad.com/

Dialpad Skill

Send SMS and make voice calls via the Dialpad API.

Available Phone Numbers

NumberPurposeFormat
(415) 520-1316Sales TeamDefault for sales context
(415) 360-2954Work/PersonalDefault for work context
(415) 991-7155Support SMS OnlySMS only (no voice)

Use --from <number> to specify which number appears as caller ID.

Setup

Required environment variable:

DIALPAD_API_KEY=your_api_key_here

Optional (for ElevenLabs TTS in calls):

ELEVENLABS_API_KEY=your_elevenlabs_api_key

Get your Dialpad API key from Dialpad API Settings.

Usage

Send SMS

# Basic SMS
python3 send_sms.py --to "+14155551234" --message "Hello from Clawdbot!"

# From specific number (e.g., work phone)
python3 send_sms.py --to "+14155551234" --message "Hello!" --from "+14153602954"

# Batch SMS (up to 10 recipients)
python3 send_sms.py --to "+14155551234" "+14155555678" --message "Group update"

Make Voice Calls

# Basic call (ring recipient - they'll answer to speak with you)
python3 make_call.py --to "+14155551234"

# Call with Text-to-Speech greeting (Dialpad's robotic TTS)
python3 make_call.py --to "+14155551234" --text "Hello! This is a call from ShapeScale."

# Call from specific number with TTS
python3 make_call.py --to "+14155551234" --from "+14153602954" --text "Meeting reminder"

# With custom voice (requires ELEVENLABS_API_KEY)
python3 make_call.py --to "+14155551234" --voice "Adam" --text "Premium voice test"

From Agent Instructions

SMS:

python3 send_sms.py --to "+14155551234" --message "Your message here"

Voice Call:

python3 make_call.py --to "+14155551234" --text "Optional TTS message"

Low-Cost Voices (Recommended for Budget)

VoiceStyleNotes
EricMale, smooth, trustworthyLow-cost, available!
DanielMale, British, steadyBudget
SarahFemale, matureBudget
RiverMale, neutralBudget
AliceFemale, clearBudget
BrianMale, deepBudget
BillMale, wiseBudget

Premium Voices (Higher Quality)

VoiceStyleNotes
AdamMale, deep, clearBest for professional
AntoniMale, warmFriendly tone
BellaFemale, softWarm, engaging

To use a specific voice, add --voice "VoiceName".

API Capabilities

SMS

  • Endpoint: POST https://dialpad.com/api/v2/sms
  • Max recipients: 10 per request
  • Max message length: 1600 characters
  • Rate limits: 100-800 requests/minute (tier-dependent)

Voice Calls

  • Endpoint: POST https://dialpad.com/api/v2/call
  • Requires: phone_number + user_id
  • Features: Outbound calling, Text-to-Speech
  • Caller ID: Must be assigned to your Dialpad account

Known Users (Auto-Detected)

NamePhoneUser ID
Martin(415) 360-29545765607478525952
Lilla(415) 870-19455625110025338880
Scott(415) 223-03235964143916400640

Response

SMS Response

{
  "id": "4612924117884928",
  "status": "pending",
  "message_delivery_result": "pending",
  "to_numbers": ["+14158235304"],
  "from_number": "+14155201316",
  "direction": "outbound"
}

Call Response

{
  "call_id": "6342343299702784",
  "status": "ringing"
}

Error Handling

ErrorMeaningAction
invalid_destinationInvalid phone numberVerify E.164 format
invalid_sourceCaller ID not availableCheck --from number assignment
no_routeCannot deliverCheck carrier/recipient
user_id requiredMissing user IDUse --from with known number

SMS Storage (SQLite with FTS5)

Messages are stored in a single SQLite database with full-text search.

Storage

~/.dialpad/sms.db  # Single file with messages + FTS5 index

Commands

# List all SMS conversations
python3 sms_sqlite.py list

# View specific conversation thread
python3 sms_sqlite.py thread "+14155551234"

# Full-text search across all messages
python3 sms_sqlite.py search "demo"

# Show unread message summary
python3 sms_sqlite.py unread

# Statistics
python3 sms_sqlite.py stats

# Mark messages as read
python3 sms_sqlite.py read "+14155551234"

# Migrate from legacy storage
python3 sms_sqlite.py migrate

Features

  • Full-text search via FTS5 (search "keyword")
  • Fast queries with indexes on contact, timestamp, direction
  • ACID transactions — no corruption on concurrent writes
  • Unread tracking with per-contact counts
  • Denormalized contact stats for instant list views

Webhook Integration

from webhook_sqlite import handle_sms_webhook, format_notification, get_inbox_summary

# Store incoming message
result = handle_sms_webhook(dialpad_payload)
notification = format_notification(result)

# Get inbox summary
summary = get_inbox_summary()

Legacy JSON Storage (Deprecated)

The original JSON-based storage is still available but not recommended:

python3 sms_storage.py [list|thread|search|unread]

Requirements

  • Python 3.7+
  • No external dependencies (uses stdlib only)
  • Valid DIALPAD_API_KEY environment variable
  • For ElevenLabs TTS: ELEVENLABS_API_KEY + webhook setup for audio playback

Reading SMS Messages

Dialpad doesn't provide a direct "GET /sms" endpoint. Instead, use:

1. Real-Time: SMS Webhooks

Receive SMS events in real-time when messages are sent/received.

# Create a webhook subscription
python3 create_sms_webhook.py create --url "https://your-server.com/webhook/dialpad" --direction "all"

# List existing subscriptions
python3 create_sms_webhook.py list

Webhook Events:

  • sms_sent — Outgoing SMS
  • sms_received — Incoming SMS

Note: Add message_content_export scope to receive message text in events.

2. Historical: Stats Export API

Export past SMS messages as CSV.

# Export all SMS
python3 export_sms.py --output all_sms.csv

# Export by date range
python3 export_sms.py --start-date 2026-01-01 --end-date 2026-01-31 --output jan_sms.csv

# Export for specific office
python3 export_sms.py --office-id 6194013244489728 --output office_sms.csv

Output: CSV file with columns:

  • date — Timestamp
  • from_number — Sender
  • to_number — Recipient
  • text — Message content
  • status — Delivery status

Architecture

Dialpad SMS Skill
├── send_sms.py           # Send SMS (working)
├── make_call.py          # Make voice calls (working)
├── create_sms_webhook.py # Create webhook subscriptions (new)
├── export_sms.py         # Export historical SMS (new)
├── sms_sqlite.py         # SQLite storage with FTS5 (RECOMMENDED)
├── webhook_sqlite.py     # Webhook handler for SQLite
├── sms_storage.py        # Legacy JSON storage (deprecated)
└── webhook_receiver.py   # Legacy webhook handler
README.md

Dialpad Moltbot Skill

Send SMS text messages and make voice calls via the Dialpad API with support for TTS, caller ID selection, and message storage.

Features

  • Send SMS - Single or batch SMS messages (up to 10 recipients)
  • Voice Calls - Outbound voice calls with optional Text-to-Speech
  • Caller ID Selection - Choose which Dialpad phone number appears as caller ID
  • Message Storage - SQLite database with full-text search for SMS history
  • Webhooks - Real-time SMS event notifications
  • Multiple Voices - Use Dialpad's TTS or premium ElevenLabs voices

Installation

# Clone the repository
git clone https://github.com/kesslerio/dialpad-moltbot-skill.git
cd dialpad-moltbot-skill

Configuration

Required

Set your Dialpad API key:

export DIALPAD_API_KEY="your-api-key-here"

Or add to ~/.moltbot/.env or ~/.clawdbot/.env:

DIALPAD_API_KEY=your-api-key-here

Get your API key from: https://dialpad.com/api/settings

Optional

For premium voice quality using ElevenLabs TTS:

export ELEVENLABS_API_KEY="your-elevenlabs-key"

Usage

Send SMS

# Basic SMS
python3 send_sms.py --to "+14155551234" --message "Hello from Dialpad!"

# Batch SMS (multiple recipients)
python3 send_sms.py --to "+14155551234" "+14155555678" --message "Group message"

# From specific caller ID
python3 send_sms.py --to "+14155551234" --message "Hello!" --from "+14159901234"
# Basic outbound call
python3 make_call.py --to "+14155551234"

# Call with TTS greeting
python3 make_call.py --to "+14155551234" --text "Hello! This is a message."

# Call from specific number with TTS
python3 make_call.py --to "+14155551234" --from "+14159901234" --text "Meeting reminder"

# With premium voice (requires ELEVENLABS_API_KEY)
python3 make_call.py --to "+14155551234" --voice "Adam" --text "Premium voice test"

Available Voices

Dialpad Built-in (Low Cost)

VoiceTypeNotes
EricMale, smoothRecommended for budget
DanielMale, BritishProfessional
SarahFemale, matureClear
RiverMale, neutralFriendly
AliceFemale, clearAccessible
BrianMale, deepAuthoritative
BillMale, wiseExperienced

ElevenLabs Premium (Higher Quality)

VoiceTypeNotes
AdamMale, deepBest for professional calls
AntoniMale, warmFriendly tone
BellaFemale, softWarm, engaging

Use premium voices by setting ELEVENLABS_API_KEY and specifying --voice "VoiceName".

SMS Storage & History

Messages are stored in SQLite with full-text search capabilities.

List Conversations

python3 sms_sqlite.py list

View Specific Thread

python3 sms_sqlite.py thread "+14155551234"

Full-Text Search

python3 sms_sqlite.py search "urgent"

Unread Messages

python3 sms_sqlite.py unread

Statistics

python3 sms_sqlite.py stats

Mark as Read

python3 sms_sqlite.py read "+14155551234"

Webhook Integration

Receive SMS events in real-time:

# Create webhook subscription
python3 create_sms_webhook.py create --url "https://your-server.com/webhook/dialpad" --direction "all"

# List subscriptions
python3 create_sms_webhook.py list

Webhook events:

  • sms_sent - Outgoing SMS
  • sms_received - Incoming SMS

Export SMS History

Export past messages as CSV:

# Export all SMS
python3 export_sms.py --output all_sms.csv

# Export by date range
python3 export_sms.py --start-date 2026-01-01 --end-date 2026-01-31 --output jan_sms.csv

Integration with Moltbot

Add to your Moltbot configuration:

{
  "skills": [
    {
      "name": "dialpad",
      "path": "/path/to/dialpad-moltbot-skill",
      "env": {
        "DIALPAD_API_KEY": "${DIALPAD_API_KEY}"
      }
    }
  ]
}

Then reference in workflows:

  • "Send a text to..."
  • "Call..."
  • "What SMS did I get?"
  • "Search my messages for..."

API Reference

SMS Endpoint

  • URL: POST https://dialpad.com/api/v2/sms
  • Max recipients: 10 per request
  • Max message length: 1600 characters
  • Rate limits: 100-800 requests/minute (varies by plan)

Voice Call Endpoint

  • URL: POST https://dialpad.com/api/v2/call
  • Requires: Phone number + User ID
  • Features: Outbound calling, TTS, Caller ID

Response Examples

SMS Response:

{
  "id": "4612924117884928",
  "status": "pending",
  "message_delivery_result": "pending",
  "to_numbers": ["+14158235304"],
  "from_number": "+14155201316",
  "direction": "outbound"
}

Call Response:

{
  "call_id": "6342343299702784",
  "status": "ringing"
}

Error Handling

ErrorCauseSolution
invalid_destinationInvalid phone numberVerify E.164 format (e.g., +14155551234)
invalid_sourceCaller ID not availableEnsure number is assigned to your account
no_routeCannot deliverCheck recipient carrier and number validity
unauthorizedInvalid API keyVerify DIALPAD_API_KEY is set correctly

Requirements

  • Python 3.7+
  • No external dependencies (uses Python stdlib)
  • Valid Dialpad API key
  • For premium voices: ElevenLabs API key

Project Structure

dialpad-moltbot-skill/
├── send_sms.py           # Send SMS messages
├── make_call.py          # Make voice calls
├── sms_sqlite.py         # SQLite storage and search
├── webhook_sqlite.py     # Handle incoming webhooks
├── create_sms_webhook.py # Manage webhook subscriptions
├── export_sms.py         # Export SMS history
├── SKILL.md              # Moltbot manifest
├── README.md             # This file
└── LICENSE               # MIT License

Troubleshooting

SMS Not Sending

  • Verify DIALPAD_API_KEY is set: echo $DIALPAD_API_KEY
  • Check phone number format (must be E.164: +1 country code + number)
  • Verify caller ID (--from) is assigned to your Dialpad account

Calls Not Connecting

  • Ensure phone number includes country code
  • Verify the Dialpad account has outbound calling enabled
  • Check API rate limits haven't been exceeded

Voice Quality Issues

  • Switch to ElevenLabs voices for better quality: --voice "Adam"
  • Ensure ELEVENLABS_API_KEY is set
  • Try different voices to find the best fit

SMS Not Storing

  • Check SQLite database permissions at ~/.dialpad/sms.db
  • Run migrate to convert from legacy storage: python3 sms_sqlite.py migrate

License

MIT

Support

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

- Python 3.7+ - No external dependencies (uses stdlib only) - Valid `DIALPAD_API_KEY` environment variable - For ElevenLabs TTS: `ELEVENLABS_API_KEY` + webhook setup for audio playback

FAQ

How do I install dialpad?

Run openclaw add @kesslerio/dialpad in your terminal. This installs dialpad into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/kesslerio/dialpad. Review commits and README documentation before installing.