> 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.md).

# DigiCalls SDK

O pacote **`@digitalsac/digicalls-sdk`** gerencia o ciclo de chamadas WhatsApp no **navegador**: eventos em tempo real (SSE), negociação WebRTC e controle de dispositivos de áudio.

A UI pronta está em **`@digitalsac/digicalls-widget`**.

### O que faz

* Conecta a um ou mais **device tokens** (`dev_…`) contra o seu servidor DigiCalls
* Recebe ofertas de chamada (`onOffer`)
* Origina chamadas (`startCall`)
* Negocia SDP com o backend (`/webrtc`)
* Expõe mute/unmute/end na chamada ativa

### Início rápido

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

const dc = new DigiCalls({
  baseUrl: "https://calls.digitalsac.io",
  tokens: ["dev_seu_token"],
});

dc.onOffer(async (offer) => {
  const call = await offer.accept();
  call.onEnd(() => console.log("encerrada"));
});

const { call, err } = await dc.startCall({
  fromTokens: ["dev_seu_token"],
  to: "5511999998888",
});
if (call) {
  call.onPeerAccept(() => console.log("atendida"));
}
```

### Requisitos

* Navegador com WebRTC (Chrome 80+, Firefox 75+, Safari 14.1+)
* **Device token** criado via `POST /api/devices` (API key) ou painel DigiCalls
* Número WhatsApp **pareado** (state `open`)

> Esta biblioteca funciona **apenas no navegador** — depende de `navigator.mediaDevices` e `RTCPeerConnection`.

### Explore a documentação

| Seção                | Conteúdo                 |
| -------------------- | ------------------------ |
| Instalação           | npm / CDN                |
| Inicialização        | Construtor e métodos     |
| Dispositivo          | Tokens e status          |
| Mídia                | Microfone e alto-falante |
| Chamadas recebidas   | `Offer`                  |
| Chamadas realizadas  | `startCall`              |
| Chamada ativa        | `Call`                   |
| Tipos                | Referência               |
| Solução de problemas | ICE, SSE, áudio          |

### Diferença QR vs. WABA

Devices **oficiais** (`kind: "official"`) usam os **mesmos endpoints** de chamada no painel, mas o token de integração provisioning (`dev_…`) aplica-se ao fluxo **QR**. Para WABA, o operador usa sessão autenticada no painel ou integrações específicas documentadas em WABA.
