Install
openclaw skills install phone-callMake phone calls through the macOS Phone/FaceTime app and let an OpenClaw agent speak into the call via local TTS.
openclaw skills install phone-callUse the macOS Phone/FaceTime stack to start phone calls from an OpenClaw agent. The skill can also speak text into/near the active call using local TTS (sag/ElevenLabs when configured, otherwise macOS say).
This is useful when you want calls to go out through the MacBook/iPhone Continuity path instead of Twilio/Telnyx/Plivo.
✅ Use this skill when:
❌ Do not use this skill when:
voice-call with Twilio/Telnyx/Plivo.Install the skill
clawhub install phone-call
Or update an existing install:
clawhub update phone-call
Enable iPhone calls on Apple devices
Grant macOS permissions once
The process that runs OpenClaw must be allowed to control the UI:
Optional: higher-quality TTS
scripts/speak.sh uses ElevenLabs sag only when an API key is available; otherwise it falls back to say.
export ELEVENLABS_API_KEY="..."
export PHONE_CALL_TTS_MODEL="eleven_flash_v2_5"
# optional: export PHONE_CALL_TTS_VOICE="Roger"
scripts/call.sh +491234567890
Dry run without placing a call:
scripts/call.sh --dry-run +491234567890
Useful options:
scripts/call.sh --scheme tel +491234567890
scripts/call.sh --scheme tel-phoneapp +491234567890
scripts/call.sh --scheme facetime-audio +491234567890
scripts/call.sh --timeout 15 +491234567890
scripts/call.sh --no-confirm +491234567890
scripts/speak.sh "Ciao, hier ist Luigi. Ich spreche jetzt über das MacBook."
speak.sh also accepts stdin:
echo "Kurzer Test über das MacBook." | scripts/speak.sh
Start a call, speak an intro, then speak every line from stdin:
scripts/call-agent.sh +491234567890 --intro "Hallo, ich bin dein OpenClaw Agent."
Pipe generated agent text into an already running call:
printf 'Erster Satz.\nZweiter Satz.\n' | scripts/call-agent.sh --no-call +491234567890
scripts/call.sh validates E.164 numbers, opens a macOS phone URL (tel: by default), then searches visible Phone/FaceTime/System dialogs for German/English confirmation buttons (Anrufen, Call, Fortfahren, etc.).scripts/speak.sh plays TTS through the active Mac output device. In a normal MacBook/iPhone Continuity call this can be heard through the call path when the call uses Mac audio.scripts/call-agent.sh combines both pieces for agents: call first, then speak an intro and/or piped text.Use international E.164 format:
+49 + area code/mobile prefix without leading 0+43 + area code without leading 0+41 + area code without leading 0Examples:
+4915112345678+493012345678PHONE_CALL_URL_SCHEME — default URL scheme (tel, tel-phoneapp, facetime-audio, telephony). Default: tel.PHONE_CALL_CONFIRM_TIMEOUT — seconds to search/click confirmation UI. Default: 10.PHONE_CALL_SETTLE_SECONDS — pause after starting a call before intro speech. Default: 2.PHONE_CALL_TTS_MODEL — ElevenLabs model for sag. Default: eleven_flash_v2_5.PHONE_CALL_TTS_VOICE — optional ElevenLabs voice name/id.PHONE_CALL_SAY_RATE — macOS say words per minute fallback. Default: 185.Call opens the wrong app (for example Warp):
macOS LaunchServices may have reassigned tel:. Set PHONE_CALL_URL_SCHEME=tel-phoneapp and retry:
PHONE_CALL_URL_SCHEME=tel-phoneapp scripts/call.sh +491234567890
Confirmation is not clicked:
Re-check Accessibility/Automation permissions for the actual process running the skill (Terminal, Warp, OpenClaw, or the gateway service).
Retry with a longer timeout:
scripts/call.sh --timeout 20 +491234567890
No speech in the call:
Confirm the Mac call is using Mac audio, not only the iPhone handset.
Test local playback:
scripts/speak.sh "Audio test"
Select the intended output device in macOS Control Center/Sound settings.
For clean two-way telephony audio, prefer the official OpenClaw voice-call plugin with realtime media, or add virtual audio routing (for example BlackHole) plus STT.
ElevenLabs fails:
ELEVENLABS_API_KEY/ELEVENLABS_API_KEY_FILE, or let the helper fall back to macOS say.