# Oratrix API - Campanhas

## Status

Documentacao parcial baseada na parte 1 enviada para o projeto Wezapp Shots.

Este grupo e prioridade para o Wezapp Shots, pois esta diretamente ligado ao fluxo de disparos em massa.

## Base URL

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}
```

## Autenticacao

```http
Authorization: Bearer {token}
```

## Endpoints do grupo

Total documentado nesta parte: 15 endpoints.

---

## 1. Criar campanha

```http
POST /campaign/create
```

Nome na documentacao Oratrix:

```text
CampaignCreate
```

Descricao:

Criar uma nova campanha de disparo.

Campos obrigatorios informados na documentacao:

- `name`
- `sessionId` ou `whatsappId`
- `message1`, `message2`, `message3` ou `message`
- Para WABA: `templateName` + `templateLanguage`

Campos com default informado:

- `start`: agora
- `delay`: 20 segundos

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/create
```

Body JSON exemplo:

```json
{
  "name": "Campanha Promo",
  "sessionId": 1,
  "message1": "Ola {{name}}!",
  "message2": "Ola {{name}}, tudo bem?",
  "message3": "Oi {{name}}!",
  "start": "2026-05-01 10:00",
  "delay": 20,
  "mediaUrl": null,
  "mediaType": null,
  "sendTimeWindowEnabled": false,
  "sendTimeStart": null,
  "sendTimeEnd": null
}
```

Observacao para Wezapp Shots:

O Wezapp deve manter sua propria entidade de campanha e tratar a campanha do Oratrix como uma referencia externa, quando este endpoint for usado.

---

## 2. Listar campanhas

```http
GET /campaign/list
```

Nome na documentacao Oratrix:

```text
CampaignList
```

Descricao:

Listar campanhas com paginacao e filtros.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/list
```

Query params:

| Parametro | Obrigatorio | Descricao | Exemplo |
|---|---:|---|---|
| pageNumber | Sim | Numero da pagina | 1 |
| status | Nao | pending, running, completed, cancelled | pending |

---

## 3. Atualizar campanha

```http
POST /campaign/update/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignUpdate
```

Descricao:

Atualizar dados de uma campanha.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/update/:campaignId
```

Body JSON exemplo:

```json
{
  "name": "Campanha Atualizada",
  "message": "Nova mensagem {nome}!"
}
```

---

## 4. Duplicar campanha

```http
POST /campaign/duplicate/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignDuplicate
```

Descricao:

Duplicar uma campanha existente.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/duplicate/:campaignId
```

Body JSON:

```json
{}
```

---

## 5. Iniciar campanha

```http
POST /campaign/start/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignStart
```

Descricao:

Iniciar o disparo de uma campanha.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/start/:campaignId
```

Body JSON:

```json
{}
```

Observacao para Wezapp Shots:

Antes de chamar este endpoint, o Wezapp deve validar saldo de shots, status interno da campanha, base vinculada e permissao do usuario interno.

---

## 6. Cancelar campanha

```http
POST /campaign/cancel/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignCancel
```

Descricao:

Cancelar uma campanha em andamento.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/cancel/:campaignId
```

Body JSON:

```json
{}
```

---

## 7. Pausar campanha

```http
POST /campaign/pause/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignPause
```

Descricao:

Pausar uma campanha em andamento.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/pause/:campaignId
```

Body JSON:

```json
{}
```

---

## 8. Retomar campanha

```http
POST /campaign/resume/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignResume
```

Descricao:

Retomar uma campanha pausada.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/resume/:campaignId
```

Body JSON:

```json
{}
```

---

## 9. Pular contato da campanha

```http
POST /campaign/skip/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignSkip
```

Descricao:

Pular para o proximo contato da campanha.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/skip/:campaignId
```

Body JSON:

```json
{}
```

---

## 10. Relatorio da campanha

```http
GET /campaign/report/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignReport
```

Descricao:

Consultar relatorio de uma campanha.

---

## 11. Excluir campanha

```http
POST /campaign/delete/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignDelete
```

Descricao:

Excluir uma campanha.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/delete/:campaignId
```

Body JSON:

```json
{}
```

---

## 12. Listar contatos da campanha

```http
GET /campaign/contacts/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignContactsList
```

Descricao:

Listar contatos vinculados a uma campanha.

---

## 13. Adicionar contatos a campanha

```http
POST /campaign/contacts/add/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignContactsAdd
```

Descricao:

Adicionar contatos a uma campanha.

A documentacao informa que aceita 3 formatos:

1. Array de IDs: `[{ "id": 1 }]`
2. Array com `number` e `name`, criando ou reutilizando o contato
3. Objeto `{ "contactsIds": [1, 2, 3] }`

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/contacts/add/:campaignId
```

Body JSON exemplo:

```json
[
  {
    "name": "Contato 1",
    "number": "5511999990001"
  },
  {
    "id": 42
  }
]
```

Observacao para Wezapp Shots:

Para alto volume, este endpoint precisa ser testado quanto a limite por requisicao, tempo de resposta e comportamento em duplicados.

---

## 14. Remover contato da campanha

```http
POST /campaign/contacts/remove/:campaignId/:contactId
```

Nome na documentacao Oratrix:

```text
CampaignContactsRemove
```

Descricao:

Remover um contato de uma campanha.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/contacts/remove/:campaignId/:contactId
```

Body JSON:

```json
{}
```

---

## 15. Remover todos os contatos da campanha

```http
POST /campaign/contacts/removeAll/:campaignId
```

Nome na documentacao Oratrix:

```text
CampaignContactsRemoveAll
```

Descricao:

Remover todos os contatos de uma campanha.

URL completa:

```text
https://api-pro1.oratrixchat.com.br/v2/api/external/{ApiID}/campaign/contacts/removeAll/:campaignId
```

Body JSON:

```json
{}
```

## Mapeamento sugerido com Wezapp Shots

| Wezapp Shots | Oratrix |
|---|---|
| `wezapp_campaigns.id` | ID interno da campanha no Wezapp |
| `wezapp_campaigns.external_campaign_id` futuro | `campaignId` no Oratrix |
| `wezapp_dispatch_jobs.id` | Job/lote interno de disparo |
| `wezapp_dispatch_items.contact_id` | Contato enviado/adicionado na campanha Oratrix |
| `wezapp_channels.external_channel_id` | `sessionId` ou `whatsappId` |

## Pendencias tecnicas para validar

- Limite maximo de contatos por chamada em `/campaign/contacts/add/:campaignId`.
- Se `CampaignCreate` retorna `campaignId` imediatamente.
- Formato exato do retorno de `CampaignReport`.
- Se `sessionId` e `whatsappId` representam tipos de canal diferentes.
- Como funciona WABA com `templateName` e `templateLanguage`.
- Status reais retornados pela API alem dos status documentados.
