> 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/primeiros-passos/inicializacao.md).

# Inicialização

### Construtor

```typescript
import { DigiCalls } from "@digitalsac/digicalls-sdk";

const dc = new DigiCalls({
  baseUrl: "https://calls.digitalsac.io",
  tokens: ["dev-token-1", "dev-token-2"],
  deviceNames: { "dev-token-1": "Vendas" },
  micDeviceId: undefined,
  outputDeviceId: undefined,
});
```

| Parâmetro                        | Obrigatório | Descrição                                                        |
| -------------------------------- | ----------- | ---------------------------------------------------------------- |
| `baseUrl`                        | Sim         | URL do servidor DigiCalls                                        |
| `tokens`                         | Não         | Device tokens iniciais; pode adicionar depois com `addDevices()` |
| `deviceNames`                    | Não         | Rótulo por token na UI                                           |
| `micDeviceId` / `outputDeviceId` | Não         | IDs de dispositivos de áudio                                     |

Cada token abre um stream **SSE** (`GET /api/events?token=…`) e resolve a sessão associada.

### Métodos principais

#### `onOffer(callback)`

Chamada recebida em qualquer device registrado.

```typescript
dc.onOffer((offer) => {
  console.log("De:", offer.peer.phone);
  // offer.accept() ou offer.reject()
});
```

#### `onPeerInfo(callback)`

Nome/foto do contato quando o backend resolve o peer:

```typescript
dc.onPeerInfo((info) => {
  console.log(info.callId, info.name, info.avatar);
});
```

#### `onUpdate(callback)`

Lista de devices ou estado de conexão mudou.

#### `getDevices()`

```typescript
const list = dc.getDevices();
// { token, sessionId, name, number, connected }[]
```

#### `addDevices(tokens)` / `removeDevices(tokens)`

Adiciona ou remove linhas em runtime.

#### `startCall({ to, fromTokens? })`

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

Tenta o primeiro token de `fromTokens`; se omitido, usa o primeiro device disponível.

#### `getMultimediaDevices()` / `setMic()` / `setOutput()`

Lista e seleciona microfone/alto-falante.

#### `close()`

Encerra SSE e chamadas locais.

### Autenticação

O SDK usa o **device token** como Bearer em todas as requisições:

```
Authorization: Bearer dev_...
```

Isso isola cada linha — ideal para multi-tenant no Izing (um token por inbox).

Próximo: Dispositivo.
