<!-- AvatarFactory Docs · https://avatarfactory.in/docs/sdk/react-native/greeting-ringback · Full map: https://avatarfactory.in/llms.txt -->

# Greeting & ringback

The line the avatar opens with, and the tone that plays while the call connects.

Two small touches that make a call feel like a call. Both are **off until you turn
them on**, and both work with nothing but `enabled: true`.

```tsx
const config = {
  getSessionToken: async () => fetchSessionToken(),
  mode: "call" as const,
  connectTone: { enabled: true },
  avatar: {
    avatarId: "default",
    greeting: { enabled: true },
  },
};
```

## Greeting

The line the avatar speaks once the session goes live. Turn it on and leave
`message` out to get a built-in line in the chosen `language`, or set your own.

```tsx
avatar: {
  avatarId: "default",
  greeting: { enabled: true, message: "Hey! What can I help with?" },
}
```

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `avatar.greeting.enabled` **(required)** | `boolean` | — | Speak an opening line. Nothing below applies until this is true. |
| `avatar.greeting.message` | `string` | — | Your own opening line. Omit it and the avatar speaks a built-in greeting in the chosen language. Capped at 400 characters. |
| `avatar.greeting.language` | `GreetingLanguage` | `"en"` | Language of the built-in greeting: en, es, fr, de, hi, ru, pt, ja, or it. Ignored when you supply your own message. |

## Ringback

The tone that plays while the session connects — the waiting-for-pickup sound.
`enabled: true` plays the built-in tone, and it stops on its own once the call is
live.

```tsx
connectTone: { enabled: true, volume: 0.5 }
```

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `connectTone.enabled` **(required)** | `boolean` | — | Play a ringback while connecting. Nothing below applies until this is true. |
| `connectTone.loop` | `boolean` | `true` | Repeat the tone until the connection completes. |
| `connectTone.volume` | `number` | `0.4` | 0 to 1. A ringback sits under the conversation, not over it. |
| `connectTone.fadeOutMs` | `number` | `350` | Fade-out when it stops. A hard cut clicks. |

> **`connectTone.src` is web only.** React Native ships no decoder for a custom
>   tone, so a `src` you pass here is ignored and the built-in tone plays instead.
>   The field is in the shared type, which is why your editor will still offer it.
