home / skills / jeremylongshore / claude-code-plugins-plus-skills / retellai-reference-architecture

This skill helps you design and assess a robust Retell AI reference architecture with best-practice project layouts and integration patterns.

npx playbooks add skill jeremylongshore/claude-code-plugins-plus-skills --skill retellai-reference-architecture

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.0 KB
---
name: retellai-reference-architecture
description: |
  Implement Retell AI reference architecture with best-practice project layout.
  Use when designing new Retell AI integrations, reviewing project structure,
  or establishing architecture standards for Retell AI applications.
  Trigger with phrases like "retellai architecture", "retellai best practices",
  "retellai project structure", "how to organize retellai", "retellai layout".
allowed-tools: Read, Grep
version: 1.0.0
license: MIT
author: Jeremy Longshore <[email protected]>
---

# Retell AI Reference Architecture

## Overview
Production-ready architecture patterns for Retell AI integrations.

## Prerequisites
- Understanding of layered architecture
- Retell AI SDK knowledge
- TypeScript project setup
- Testing framework configured

## Project Structure

```
my-retellai-project/
├── src/
│   ├── retellai/
│   │   ├── client.ts           # Singleton client wrapper
│   │   ├── config.ts           # Environment configuration
│   │   ├── types.ts            # TypeScript types
│   │   ├── errors.ts           # Custom error classes
│   │   └── handlers/
│   │       ├── webhooks.ts     # Webhook handlers
│   │       └── events.ts       # Event processing
│   ├── services/
│   │   └── retellai/
│   │       ├── index.ts        # Service facade
│   │       ├── sync.ts         # Data synchronization
│   │       └── cache.ts        # Caching layer
│   ├── api/
│   │   └── retellai/
│   │       └── webhook.ts      # Webhook endpoint
│   └── jobs/
│       └── retellai/
│           └── sync.ts         # Background sync job
├── tests/
│   ├── unit/
│   │   └── retellai/
│   └── integration/
│       └── retellai/
├── config/
│   ├── retellai.development.json
│   ├── retellai.staging.json
│   └── retellai.production.json
└── docs/
    └── retellai/
        ├── SETUP.md
        └── RUNBOOK.md
```

## Layer Architecture

```
┌─────────────────────────────────────────┐
│             API Layer                    │
│   (Controllers, Routes, Webhooks)        │
├─────────────────────────────────────────┤
│           Service Layer                  │
│  (Business Logic, Orchestration)         │
├─────────────────────────────────────────┤
│          Retell AI Layer        │
│   (Client, Types, Error Handling)        │
├─────────────────────────────────────────┤
│         Infrastructure Layer             │
│    (Cache, Queue, Monitoring)            │
└─────────────────────────────────────────┘
```

## Key Components

### Step 1: Client Wrapper
```typescript
// src/retellai/client.ts
export class Retell AIService {
  private client: RetellAIClient;
  private cache: Cache;
  private monitor: Monitor;

  constructor(config: Retell AIConfig) {
    this.client = new RetellAIClient(config);
    this.cache = new Cache(config.cacheOptions);
    this.monitor = new Monitor('retellai');
  }

  async get(id: string): Promise<Resource> {
    return this.cache.getOrFetch(id, () =>
      this.monitor.track('get', () => this.client.get(id))
    );
  }
}
```

### Step 2: Error Boundary
```typescript
// src/retellai/errors.ts
export class Retell AIServiceError extends Error {
  constructor(
    message: string,
    public readonly code: string,
    public readonly retryable: boolean,
    public readonly originalError?: Error
  ) {
    super(message);
    this.name = 'Retell AIServiceError';
  }
}

export function wrapRetell AIError(error: unknown): Retell AIServiceError {
  // Transform SDK errors to application errors
}
```

### Step 3: Health Check
```typescript
// src/retellai/health.ts
export async function checkRetell AIHealth(): Promise<HealthStatus> {
  try {
    const start = Date.now();
    await retellaiClient.ping();
    return {
      status: 'healthy',
      latencyMs: Date.now() - start,
    };
  } catch (error) {
    return { status: 'unhealthy', error: error.message };
  }
}
```

## Data Flow Diagram

```
User Request
     │
     ▼
┌─────────────┐
│   API       │
│   Gateway   │
└──────┬──────┘
       │
       ▼
┌─────────────┐    ┌─────────────┐
│   Service   │───▶│   Cache     │
│   Layer     │    │   (Redis)   │
└──────┬──────┘    └─────────────┘
       │
       ▼
┌─────────────┐
│ Retell AI    │
│   Client    │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│ Retell AI    │
│   API       │
└─────────────┘
```

## Configuration Management

```typescript
// config/retellai.ts
export interface Retell AIConfig {
  apiKey: string;
  environment: 'development' | 'staging' | 'production';
  timeout: number;
  retries: number;
  cache: {
    enabled: boolean;
    ttlSeconds: number;
  };
}

export function loadRetell AIConfig(): Retell AIConfig {
  const env = process.env.NODE_ENV || 'development';
  return require(`./retellai.${env}.json`);
}
```

## Instructions

### Step 1: Create Directory Structure
Set up the project layout following the reference structure above.

### Step 2: Implement Client Wrapper
Create the singleton client with caching and monitoring.

### Step 3: Add Error Handling
Implement custom error classes for Retell AI operations.

### Step 4: Configure Health Checks
Add health check endpoint for Retell AI connectivity.

## Output
- Structured project layout
- Client wrapper with caching
- Error boundary implemented
- Health checks configured

## Error Handling
| Issue | Cause | Solution |
|-------|-------|----------|
| Circular dependencies | Wrong layering | Separate concerns by layer |
| Config not loading | Wrong paths | Verify config file locations |
| Type errors | Missing types | Add Retell AI types |
| Test isolation | Shared state | Use dependency injection |

## Examples

### Quick Setup Script
```bash
# Create reference structure
mkdir -p src/retellai/{handlers} src/services/retellai src/api/retellai
touch src/retellai/{client,config,types,errors}.ts
touch src/services/retellai/{index,sync,cache}.ts
```

## Resources
- [Retell AI SDK Documentation](https://docs.retellai.com/sdk)
- [Retell AI Best Practices](https://docs.retellai.com/best-practices)

## Flagship Skills
For multi-environment setup, see `retellai-multi-env-setup`.

Overview

This skill implements a production-ready reference architecture for Retell AI integrations, providing a clear project layout, layered patterns, and implementation guidance. It helps teams set up a maintainable TypeScript/Node project with client wrappers, error boundaries, caching, health checks, and environment-specific configuration. Use it to standardize new integrations and review existing codebases against best practices.

How this skill works

The skill defines a recommended folder layout and layer separation: API, Service, Retell AI, and Infrastructure. It prescribes a singleton client wrapper that adds caching and monitoring, custom error classes to normalize SDK errors, and a health-check endpoint to surface service status and latency. It also outlines config management per environment and background job placement for scheduled syncs.

When to use it

  • Designing a new Retell AI integration from scratch
  • Reviewing or refactoring an existing Retell AI project structure
  • Establishing architecture and coding standards for teams using Retell AI
  • Onboarding engineers to consistent patterns for client, errors, and health checks
  • Preparing a project for production readiness and observability

Best practices

  • Keep layers strictly separated: controllers/routes in API, business logic in Service, SDK clients and types in Retell AI layer, and Redis/queues in Infrastructure.
  • Implement a singleton client wrapper that encapsulates caching, retries, and monitoring to centralize external calls.
  • Use custom error types to wrap SDK errors and expose retryable flags and codes for orchestration and retry logic.
  • Store environment-specific settings in distinct config files and load them via a small loader that reads NODE_ENV.
  • Add health checks that measure latency and connectivity and surface them to your monitoring/alerting system.
  • Write unit tests for service logic and integration tests for client interactions; use dependency injection to isolate tests.

Example use cases

  • Create a webhook endpoint that forwards events to a service layer which calls the Retell AI client with caching.
  • Implement a background sync job that reconciles local state with Retell AI using the service facade and a retryable error boundary.
  • Add a monitoring dashboard that consumes health-check endpoints for Retell AI latency and status.
  • Standardize multiple plugins by copying the reference layout and implementing the singleton client and error wrapper templates.

FAQ

What languages and frameworks does this pattern target?

The reference uses TypeScript/Node conventions but the layered ideas and patterns apply to any language; adapt client wrapper and config loader accordingly.

How do I test the Retell AI client without calling the real API?

Inject a mock client into the service facade, use dependency injection for cache and monitor, and write integration tests that run against a sandbox or recorded responses.