Claude-code-plugins-plus-skills retellai-webhooks-events
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/retellai-pack/skills/retellai-webhooks-events" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-retellai-webhooks-events && rm -rf "$T"
manifest:
plugins/saas-packs/retellai-pack/skills/retellai-webhooks-events/SKILL.mdsource content
Retell AI Webhooks Events
Overview
Handle Retell AI webhook events for call lifecycle, transcripts, and function execution.
Prerequisites
- HTTPS webhook endpoint
- Agent configured with webhook URL
Instructions
Step 1: Configure Webhook URL
// Set webhook URL in agent configuration await retell.agent.update(agentId, { webhook_url: 'https://your-app.com/webhooks/retell', });
Step 2: Webhook Endpoint
import express from 'express'; const app = express(); app.post('/webhooks/retell', express.json(), async (req, res) => { const { event, call } = req.body; switch (event) { case 'call_started': console.log(`Call started: ${call.call_id} from ${call.from_number}`); break; case 'call_ended': console.log(`Call ended: ${call.call_id}`); console.log(` Duration: ${call.duration_ms}ms`); console.log(` Status: ${call.call_status}`); if (call.transcript) { await saveTranscript(call.call_id, call.transcript); } break; case 'call_analyzed': console.log(`Analysis ready: ${call.call_id}`); console.log(` Summary: ${call.call_analysis?.call_summary}`); break; default: console.log(`Unhandled event: ${event}`); } res.status(200).json({ received: true }); });
Step 3: Handle Function Calls During Conversation
// When agent triggers a function, Retell calls your URL app.post('/functions/book-appointment', express.json(), async (req, res) => { const { patient_name, phone, date, time } = req.body.args; // Process the booking const booking = await bookAppointment(patient_name, phone, date, time); // Return response for agent to speak res.json({ result: `Appointment booked for ${patient_name} on ${date} at ${time}. Confirmation number: ${booking.id}`, }); });
Output
- Webhook handling for call lifecycle events
- Transcript storage on call completion
- Function execution during live calls
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| No webhook events | URL not configured | Set webhook_url on agent |
| Function timeout | Slow backend | Respond within 5 seconds |
| Missing transcript | Short call | Transcript only for calls > 5 seconds |
Resources
Next Steps
Common errors:
retellai-common-errors