> 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/click-to-call/parametros.md).

# Parâmetros

A URL pública **não tem parâmetros** — é só `https://SEU_HOST/call/{linkId}`. Tudo (conexão, número de destino, rótulo) fica gravado no servidor, no cadastro do link. Abaixo, os campos do link e a referência das rotas.

### Campos do link

Definidos ao criar o link (painel ou API):

| Campo       | Obrigatório | Descrição                                                                                         |
| ----------- | ----------- | ------------------------------------------------------------------------------------------------- |
| `sessionId` | sim         | Id da conexão que fará a chamada — sessão WhatsApp (QR) ou device oficial, conforme `kind`.       |
| `kind`      | não         | `whatsmeow` (padrão) ou `official` (API/Cloud API).                                               |
| `phone`     | sim         | Número de destino fixo, com DDI (ex.: `5511999998888`). Aceita máscara; só os dígitos são usados. |
| `label`     | não         | Rótulo interno para organização (ex.: "Botão site — João").                                       |
| `enabled`   | —           | Estado do link (ativo/desativado). Desativar revoga na hora.                                      |
|             |             |                                                                                                   |
|             |             |                                                                                                   |

{% hint style="info" %}
**Oficial (Cloud API):** a ligação só completa se o número de destino já autorizou receber chamadas desta conta (opt-in da Meta). Ative o recebimento para o número fixo antes de divulgar o link.
{% endhint %}

### Referência de API

#### Gerência dos links (autenticada como o dono da conexão)

| Método   | Rota                  | Descrição                                                                      |
| -------- | --------------------- | ------------------------------------------------------------------------------ |
| `GET`    | `/api/ctc-links`      | Lista os links do usuário.                                                     |
| `POST`   | `/api/ctc-links`      | Cria um link. Body: `{ sessionId, phone, label }`. Retorna `{ id, url, ... }`. |
| `PATCH`  | `/api/ctc-links/{id}` | Atualiza `{ enabled?, label? }`.                                               |
| `DELETE` | `/api/ctc-links/{id}` | Remove o link.                                                                 |

#### Fluxo público/escopado (sem autenticação de usuário; usa o ticket efêmero)

| Método   | Rota                        | Descrição                                                                                       |
| -------- | --------------------------- | ----------------------------------------------------------------------------------------------- |
| `POST`   | `/api/ctc/{linkId}/start`   | Valida o link e emite um ticket efêmero. Retorna `{ ticket, label, phoneMasked, expiresIn }`.   |
| `POST`   | `/api/ctc/call`             | Inicia a chamada para o número fixo do ticket. Bearer = ticket. Retorna `{ call: { callId } }`. |
| `POST`   | `/api/ctc/call/{id}/webrtc` | Troca de SDP (offer do navegador → answer). Bearer = ticket.                                    |
| `DELETE` | `/api/ctc/call/{id}`        | Encerra a chamada. Bearer = ticket.                                                             |
| `GET`    | `/api/ctc/events?ticket=…`  | SSE com o estado da chamada (`call-status`, `call-ended`).                                      |
| `GET`    | `/api/ctc/webrtc-config`    | Servidores ICE (STUN/TURN) para o navegador.                                                    |

{% hint style="info" %}
As rotas `/api/ctc/*` aceitam **somente** o ticket efêmero e são **rejeitadas** pela autenticação normal — um ticket não vira login de webphone nem credencial SIP. A chamada só pode ir para o número já amarrado ao link.
{% endhint %}

#### Exemplo — criar um link

```bash
curl -X POST https://SEU_HOST/api/ctc-links \
  -H "Authorization: Bearer <SEU_TOKEN_DE_USUARIO>" \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"<ID_DA_CONEXAO>","phone":"5511999998888","label":"Botão site"}'
# → { "id":"l_ab12cd34", "url":"https://SEU_HOST/call/l_ab12cd34", ... }
```

### Observações

* **Uma chamada por linha.** O link é compartilhado: se a conexão já estiver em chamada (inclusive por outro navegador abrindo o mesmo link), a página mostra "a linha está ocupada, aguarde" e libera o botão quando a chamada anterior terminar.
* O ticket efêmero tem validade de alguns minutos e é renovado a cada abertura da página; não é persistido (um restart do servidor apenas obriga a reabrir o link).
* A conexão precisa estar **online** no momento do clique; se estiver offline, a página informa e a chamada não é iniciada.

Veja também Primeiros passos.
