> For the complete documentation index, see [llms.txt](https://ajuda.digitalsac.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ajuda.digitalsac.io/digicrm/operacao-uso-do-sistema/campanha-digicalls.md).

# Campanha DigiCalls

### Finalidade

**Campanha DigiCalls** (Wavoip) cria e executa **discagens automáticas em massa** com reprodução de áudio quando o destinatário atende. Cada campanha define conexões WhatsApp com token DigiCalls, o áudio a tocar, intervalos entre chamadas e a lista de contatos.

A execução ocorre **no navegador do operador** (executor): o sistema discá via SDK DigiCalls e injeta o áudio na chamada. O backend guarda estado, fila de contatos e progresso.

**Caminho:** menu lateral → **Campanha DigiCalls**\
(legenda do menu: *Ligações automáticas com áudio*)\
URL: '/campanha-wavoip'

**Requisito:** plano **Premium** (módulo DigiCalls / flag 'activecampaigndigicalls'). Sem o módulo no plano (ou adicional contratado), o item não aparece no menu. Acesso típico: perfil **admin** ou **super** (liberável por permissão de menu).

**Não confundir** com **Ligações DigiCalls** (histórico/gravações de chamadas avulsas) nem com **Ligações Internas** (PABX / ClickToCall).

\[\[FOTO]]

***

### Fluxo resumido (criar e executar)

1. Abra **Campanha DigiCalls**.
2. Clique em **Nova campanha** e preencha nome, conexões DigiCalls, áudio e parâmetros.
3. Abra **Gerenciar contatos** e importe a lista (colar, sistema ou CSV).
4. Na lista, com status **Pendente** (ou **Pausada**), clique em **Executar**.
5. No executor: **Conectar DigiCalls** → **Iniciar disparo**.
6. Mantenha a aba aberta até terminar (ou use **Parar disparo** / **Cancelar execução**).
7. Quando não houver mais contatos pendentes, a campanha vai para **Finalizada**.

\[\[FOTO]]

***

### Dashboard (lista de campanhas)

Título: **Campanhas DigiCalls**\
Subtítulo: *Ligações automáticas com áudio via DigiCalls*

#### Cards de resumo

| Card            | Significado                                                    |
| --------------- | -------------------------------------------------------------- |
| **Total**       | Quantidade de campanhas cadastradas                            |
| **Em execução** | Campanhas com status 'running'                                 |
| **Pausadas**    | Campanhas com status 'paused'                                  |
| **Finalizadas** | Campanhas com status 'finished'                                |
| **Entregues**   | Soma de áudios entregues ('playedCount') em todas as campanhas |

#### Ações do cabeçalho

| Botão             | Função                  |
| ----------------- | ----------------------- |
| **Nova campanha** | Abre o modal de criação |
| **Atualizar**     | Recarrega a lista       |

#### Tabela / cards (mobile)

Colunas:

| Coluna        | Conteúdo                                                                                   |
| ------------- | ------------------------------------------------------------------------------------------ |
| **#**         | ID da campanha                                                                             |
| **Nome**      | Nome cadastrado                                                                            |
| **Status**    | Badge: Pendente / Em execução / Pausada / Finalizada / Cancelada                           |
| **Progresso** | Barra + 'entregues / total de contatos' (considera entregues + falhas no cálculo da barra) |
| **Conexões**  | Quantidade de conexões WhatsApp vinculadas                                                 |
| **Criada em** | Data/hora (fuso do tenant)                                                                 |
| **Ações**     | Ver abaixo                                                                                 |

#### Ações por campanha

| Ação                   | Quando aparece / regra                                                                         |
| ---------------------- | ---------------------------------------------------------------------------------------------- |
| **Executar**           | Status **Pendente** ou **Pausada** — abre o executor                                           |
| **Abrir executor**     | Status **Em execução** — abre a mesma tela de execução                                         |
| **Gerenciar contatos** | Sempre — vai para '/campanha-wavoip/:id/contatos'                                              |
| **Editar**             | Desabilitado se status = **Em execução**                                                       |
| **Excluir**            | Desabilitado se status = **Em execução**; pede confirmação (*Esta ação não pode ser desfeita*) |

Lista vazia: *Nenhuma campanha cadastrada.*

\[\[FOTO]]

***

### Nova campanha / Editar (modal)

Títulos: **Nova campanha DigiCalls** / **Editar campanha DigiCalls**\
Subtítulo: *Configure os parâmetros da campanha de ligações automáticas*

#### Campo a campo

| Campo / seção                         | Obrigatório                            | Padrão  | Detalhe                                                                                                                                              |
| ------------------------------------- | -------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nome da campanha**                  | Sim                                    | —       | Texto livre. Validação: *Informe o nome da campanha*.                                                                                                |
| **Conexões WhatsApp (DigiCalls)**     | Sim                                    | nenhuma | Botão que abre o diálogo de seleção. Exige ao menos uma. Mensagem: *Selecione ao menos uma conexão*. Com seleção: *{n} conexão(ões) selecionada(s)*. |
| **Áudio da campanha**                 | Recomendado (obrigatório para iniciar) | —       | Arquivo **mp3 / ogg / wav**. É o áudio reproduzido quando o destinatário atende.                                                                     |
| Upload de arquivo                     | Não\*                                  | —       | Seletor *Arquivo de áudio (mp3/ogg/wav)*.                                                                                                            |
| **Gravar áudio** (ícone microfone)    | Não\*                                  | —       | Abre gravação no navegador e usa o arquivo gerado. Chip: *Gravação: {nome}*.                                                                         |
| **Escolher da galeria** (ícone pasta) | Não\*                                  | —       | Seleciona áudio da Galeria (somente 'mediaType = audio'). Chip: *Galeria: {nome}*.                                                                   |
| Pré-visualização                      | —                                      | —       | Player HTML5 quando há áudio selecionado.                                                                                                            |
| Dica de áudio (nova)                  | —                                      | —       | *Esse áudio será reproduzido quando o destinatário atender a chamada*.                                                                               |
| Dica de áudio (edição)                | —                                      | —       | *Áudio atual: {nome} (selecione outro para substituir)*.                                                                                             |
| **Delay mínimo (s)**                  | Sim (numérico)                         | **5**   | Tempo mínimo entre chamadas. Faixa na UI: 0–600 s.                                                                                                   |
| **Delay máximo (s)**                  | Sim (numérico)                         | **15**  | Tempo máximo entre chamadas (variação aleatória). Deve ser ≥ delay mínimo.                                                                           |
| **Tempo de toque (s)**                | Sim (numérico)                         | **45**  | Se ninguém atender nesse tempo, o contato é marcado como não atendeu e segue o próximo. Faixa: 5–180 s.                                              |
| **Tentativas por contato**            | Sim (numérico)                         | **1**   | Quantas vezes tentar se a chamada falhar (rejeitada / sem resposta / falha). Faixa: 1–10.                                                            |

\*Na criação o áudio pode ser omitido no formulário, mas **não é possível iniciar o disparo** sem áudio configurado. Em edição, enviar novo arquivo substitui o atual.

#### Diálogo de conexões

* Título: **Selecionar conexões WhatsApp**
* Subtítulo: *Escolha as conexões com DigiCalls para realizar as chamadas*
* Lista apenas conexões que possuem **token DigiCalls** ('wavoipToken') preenchido
* Badge: **DigiCalls pronto**
* Dica: *Você pode selecionar uma ou mais conexões para fazer chamadas em paralelo*
* Vazio: *Nenhuma conexão com DigiCalls disponível*
* Botões: **Cancelar** / **Confirmar**

#### Botões do modal

| Botão                 | Função                                                  |
| --------------------- | ------------------------------------------------------- |
| **Cancelar**          | Fecha sem salvar                                        |
| **Criar campanha**    | Cria (mensagem: *Campanha criada com sucesso.*)         |
| **Salvar alterações** | Atualiza (mensagem: *Campanha atualizada com sucesso.*) |

Erro genérico: *Erro ao salvar campanha.*

\[\[FOTO]]

***

### Status da campanha e o que cada ação faz

| Status     | Label           | Como chega                                                              | O que você pode fazer                                                                                                            |
| ---------- | --------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| 'pending'  | **Pendente**    | Criação da campanha                                                     | Editar, excluir, gerenciar contatos, **Executar**                                                                                |
| 'running'  | **Em execução** | **Iniciar disparo** no executor                                         | **Abrir executor**; editar/excluir **bloqueados**; no executor: parar, acompanhar overlay/log; se travada: **Cancelar execução** |
| 'paused'   | **Pausada**     | API de pausa (status previsto no sistema; a lista trata como retomável) | Editar, excluir, contatos, **Executar** para retomar                                                                             |
| 'finished' | **Finalizada**  | Todos os contatos processados e o executor chama a finalização          | Contatos (consulta); editar/excluir liberados; sem novos pendentes não reinicia o disparo                                        |
| 'canceled' | **Cancelada**   | **Cancelar execução**                                                   | Contatos ficam com pendentes/em chamada marcados como cancelados; campanha encerrada                                             |

#### Mapa rápido das ações

| Ação                          | Efeito                                                              |
| ----------------------------- | ------------------------------------------------------------------- |
| **Nova campanha**             | Cria em 'pending'                                                   |
| **Editar**                    | Altera nome, conexões, áudio e parâmetros (bloqueado em 'running')  |
| **Excluir**                   | Remove a campanha (bloqueado em 'running'; confirmação obrigatória) |
| **Gerenciar contatos**        | Importa/remove destinos                                             |
| **Executar / Abrir executor** | Abre a tela de disparo no navegador                                 |
| **Conectar DigiCalls**        | Prepara tokens/sessões da SDK no browser                            |
| **Iniciar disparo**           | 'pending'/'paused' → 'running'; inicia workers                      |
| **Parar disparo**             | Interrompe o loop local após a chamada atual; pendentes permanecem  |
| **Cancelar execução**         | Campanha → 'canceled'; pendentes/em chamada → contato 'CANCELED'    |
| **Finalizar** (automático)    | Campanha → 'finished' quando não há mais pendentes ao fim do loop   |

\[\[FOTO]]

***

### Executor (Play) — tela passo a passo

Rota: '/campanha-wavoip/:campaignId/executar'\
Título: **Executor da campanha — {nome}**\
Subtítulo: *Conecte as sessões e inicie o disparo das ligações*

A execução **não roda sozinha no servidor**: o navegador do operador discá e toca o áudio. Por isso a aba precisa permanecer aberta.

#### 1) Cards de status

| Card               | Significado                                                   |
| ------------------ | ------------------------------------------------------------- |
| **Total**          | Contatos da campanha                                          |
| **Pendentes**      | Ainda não processados                                         |
| **Entregues**      | Áudio entregue ('PLAYED')                                     |
| **Workers ativos** | Conexões em estado chamando / reproduzindo / aguardando delay |
| **Falhas**         | 'FAILED' + 'REJECTED' + 'NO\_ANSWER'                          |

#### 2) Pré-requisito de conexão

Se ainda não conectou: banner *Conecte as sessões DigiCalls antes de iniciar o disparo.*

#### 3) Painel Áudio da campanha

* Nome do arquivo e duração (quando existir)
* Player de prévia
* Sem áudio: *Sem áudio configurado* (bloqueia o início)

#### 4) Painel Conexões selecionadas

Para cada conexão vinculada:

* Indicador online/offline após conectar
* Estado do worker: **Ocioso** / **Chamando** / **Reproduzindo áudio** / **Aguardando** / **Finalizado**
* Contato atual (quando discando)
* Contador de contatos feitos na sessão

Vazio: *Nenhuma conexão selecionada na campanha.*
