---
title: Error Recovery
url: https://docs.kaltura.com/docs/conversational-agents/agentic-avatars-sdk/examples-error-recovery
---

## Error Recovery

Patterns for handling errors and recovering gracefully.

### Retry Pattern

```javascript
async function createSessionWithRetry(maxRetries = 3) {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      await session.createSession({
        visualId: 'visual-123',
        videoContainerId: 'avatar-container',
      });
      return; // Success!
    } catch (error) {
      console.log(`Attempt ${attempt} failed:`, error.message);
      if (attempt === maxRetries) {
        throw error; // Give up
      }
      // Wait before retry (exponential backoff)
      await new Promise((r) => setTimeout(r, 1000 * Math.pow(2, attempt - 1)));
    }
  }
}
```

### Connection Failure Recovery

```javascript
session.on('connectionChange', async (state) => {
  if (state === 'FAILED') {
    console.log('Connection failed, attempting recovery...');
    // Try to reconnect
    try {
      await session.endSession();
      await createSessionWithRetry();
    } catch (error) {
      console.error('Recovery failed:', error);
      showErrorToUser('Connection lost. Please refresh the page.');
    }
  }
});
```

### Complete Error Handling

```javascript
import { KalturaAvatarSession, AvatarError, AvatarErrorCode } from '@unisphere/models-sdk-js';

async function robustAvatarInit() {
  const session = new KalturaAvatarSession({
    apiKey,
    baseUrl
  });

  session.on('error', (error) => {
    handleError(error);
  });

  try {
    await session.createSession({
      visualId: 'visual-123',
      videoContainerId: 'avatar-container',
    });
  } catch (error) {
    if (error instanceof AvatarError) {
      handleAvatarError(error);
    } else {
      handleGenericError(error);
    }
  }
}

function handleAvatarError(error) {
  switch (error.code) {
    case AvatarErrorCode.RTC_CONNECTION_FAILED:
      showError('Connection failed. Check your network and firewall settings.');
      break;
    case AvatarErrorCode.UNAUTHORIZED:
      showError('Authentication failed. Please log in again.');
      break;
    default:
      showError(`Error: ${error.message}`);
  }
}
```

### See Also

- **[Error Handling](/docs/conversational-agents/agentic-avatars-sdk/client-sdk-error-handling)** - Complete error handling guide
- **Troubleshooting** - Common issues and solutions
