> For the complete documentation index, see [llms.txt](https://digitalsac.gitbook.io/digicalls/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://digitalsac.gitbook.io/digicalls/digicalls-sdk/chamadas/chamadas-realizadas.md).

# Chamadas realizadas

Use `startCall()` para originar uma ligação WhatsApp.

### Início

```typescript
const { call, err } = await dc.startCall({
  to: "5511999998888",
  fromTokens: ["dev_vendas"],
});

if (err) {
  console.error(err);
  return;
}

call.onPeerAccept(() => console.log("Destinatário atendeu"));
call.onUnanswered(() => console.log("Não atendeu"));
call.onEnd(({ reason }) => console.log("Fim:", reason));
```

### Parâmetros

| Campo        | Obrigatório | Descrição                                    |
| ------------ | ----------- | -------------------------------------------- |
| `to`         | Sim         | Telefone destino (dígitos, com DDI)          |
| `fromTokens` | Não         | Tokens permitidos; default = primeiro device |

### Backend

1. `POST /api/sessions/{sid}/calls` com `{ phone }`
2. `POST /api/sessions/{sid}/calls/{id}/webrtc` com SDP offer
3. Áudio flui após peer atender (`call-status: connected`)

### Classe `Call` (outbound)

| Propriedade  | Descrição     |
| ------------ | ------------- |
| `callId`     | ID da chamada |
| `peer.phone` | Destino       |
| `direction`  | `"outbound"`  |
| `token`      | Linha usada   |

#### Callbacks

| Método              | Quando                   |
| ------------------- | ------------------------ |
| `onPeerAccept(cb)`  | Destinatário atendeu     |
| `onUnanswered(cb)`  | Encerrou sem atender     |
| `onEnd(cb)`         | Chamada terminou         |
| `onStateChange(cb)` | `"accepted"` / `"ended"` |

#### Ações

```typescript
await call.end();
call.mute();
call.unmute();
```

### Gravação

Envie `record: true` se chamar a API REST diretamente. O SDK atual envia apenas `phone` — para gravar via API:

```typescript
// Chamada manual via fetch + negotiate, ou estenda o SDK
await client.post(`/api/sessions/${sid}/calls`, { phone: to, record: true });
```

Gravação depende da config do usuário (local/S3). Veja Gravação.

### WABA

Ligações outbound em número **oficial** exigem **permissão prévia** da Meta. Use Permissão de ligação.

Próximo: Chamada ativa.
