# Controlar campanha de envio em massa

POST /sender/edit

Permite controlar campanhas de envio de mensagens em massa através de diferentes ações:

## Ações Disponíveis:

**🛑 stop** - Pausar campanha
- Pausa uma campanha ativa ou agendada
- Altera o status para "paused" 
- Use quando quiser interromper temporariamente o envio
- Mensagens já enviadas não são afetadas

**▶️ continue** - Continuar campanha  
- Retoma uma campanha pausada
- Altera o status para "scheduled"
- Use para continuar o envio após pausar uma campanha
- Campanha pausada antes do horário volta para o horário marcado; para enviar na hora, use `send_now`
- Não funciona em campanhas já concluídas ("done")

**🗑️ delete** - Deletar campanha
- Remove completamente a campanha
- Deleta apenas mensagens NÃO ENVIADAS (status "scheduled")
- Mensagens já enviadas são preservadas no histórico
- Operação é executada de forma assíncrona

**🕒 reschedule** - Alterar horário
- Só para campanha com status "scheduled"
- Muda o `scheduled_for` da campanha e o horário das mensagens que ainda não saíram,
  na mesma ordem: a primeira fica em `scheduled_for` + 1 ms, como na criação
- `scheduled_for` aceita o mesmo formato da criação (timestamp em ms ou s, ou minutos a partir de agora)

**⏩ send_now** - Enviar agora
- Para campanha com status "scheduled" ou "paused"
- Antecipa a campanha para agora; a pausada volta a "scheduled" e começa na hora
- Os delays entre as mensagens continuam valendo

## Status de Campanhas:
- **scheduled**: Agendada para envio
- **sending**: Enviando mensagens  
- **paused**: Pausada pelo usuário
- **done**: Concluída (não pode ser alterada)
- **deleting**: Sendo deletada (operação em andamento)


## Autenticação

```json
[
  {
    "token": []
  }
]
```

```json
{
  "token": {
    "name": "token",
    "type": "apiKey",
    "in": "header"
  }
}
```

## Corpo da requisição

```json
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "folder_id": {
            "type": "string",
            "description": "Identificador único da campanha de envio",
            "example": "folder_123"
          },
          "action": {
            "type": "string",
            "enum": [
              "stop",
              "continue",
              "delete",
              "reschedule",
              "send_now"
            ],
            "description": "Ação a ser executada na campanha:\n- **stop**: Pausa a campanha (muda para status \"paused\")\n- **continue**: Retoma campanha pausada (muda para status \"scheduled\"), no horário marcado se ele ainda não chegou\n- **delete**: Remove campanha e mensagens não enviadas (assíncrono)\n- **reschedule**: Muda o horário de uma campanha agendada (exige `scheduled_for`)\n- **send_now**: Envia agora uma campanha agendada ou pausada\n",
            "example": "stop"
          },
          "scheduled_for": {
            "type": "integer",
            "format": "int64",
            "description": "Novo horário, obrigatório na ação `reschedule`. Timestamp em milissegundos ou segundos,\nou minutos a partir de agora (até 10.080), como no `/sender/simple`.\n",
            "example": 1767225600000
          }
        },
        "required": [
          "folder_id",
          "action"
        ]
      }
    }
  }
}
```

## Respostas

```json
{
  "200": {
    "description": "Ação realizada com sucesso",
    "content": {
      "application/json": {
        "schema": {
          "oneOf": [
            {
              "type": "object",
              "title": "Resposta para ação 'stop'",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "paused"
                  ],
                  "description": "Status da campanha após pausar",
                  "example": "paused"
                }
              }
            },
            {
              "type": "object",
              "title": "Resposta para ação 'continue'",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "scheduled"
                  ],
                  "description": "Status da campanha após retomar",
                  "example": "scheduled"
                },
                "message": {
                  "type": "string",
                  "description": "Mensagem de confirmação",
                  "example": "Folder resumed successfully"
                }
              }
            },
            {
              "type": "object",
              "title": "Resposta para ação 'delete'",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "deleting"
                  ],
                  "description": "Status indicando que a deleção foi iniciada",
                  "example": "deleting"
                },
                "message": {
                  "type": "string",
                  "description": "Mensagem informando que a deleção é assíncrona",
                  "example": "Folder deletion has been initiated"
                }
              }
            },
            {
              "type": "object",
              "title": "Resposta para ações 'reschedule' e 'send_now'",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "scheduled"
                  ],
                  "description": "Status da campanha, que continua agendada",
                  "example": "scheduled"
                },
                "scheduled_for": {
                  "type": "integer",
                  "format": "int64",
                  "description": "Novo horário da campanha, em milissegundos",
                  "example": 1767225600000
                },
                "messages_updated": {
                  "type": "integer",
                  "description": "Quantas mensagens ainda não enviadas mudaram de horário",
                  "example": 120
                }
              }
            }
          ]
        }
      }
    }
  },
  "400": {
    "description": "Requisição inválida",
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "properties": {
            "error": {
              "type": "string",
              "example": "folder is required"
            }
          }
        }
      }
    }
  },
  "404": {
    "description": "Campanha não encontrada para esta instância",
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "properties": {
            "error": {
              "type": "string",
              "example": "Folder not found"
            }
          }
        }
      }
    }
  },
  "409": {
    "description": "A ação `reschedule` foi pedida para uma campanha que não está agendada (status diferente de \"scheduled\"), ou `send_now` para uma que não está agendada nem pausada",
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "properties": {
            "error": {
              "type": "string",
              "example": "folder is not scheduled"
            }
          }
        }
      }
    }
  }
}
```

## Guias relacionados

[Autenticação](/docs/authentication) · [Erros e retries](/docs/errors-and-retries) · [Server URL](/docs/server-url)
