Atualizar campanha
Mesmo corpo da criação. Só vale enquanto a campanha ainda não começou a disparar —
depois disso, use /pause, /resume, /cancel ou /restart.
Reenviar file troca a lista de destinatários e reinicia a importação; sem mapping,
o de-para é refeito automaticamente a partir do novo cabeçalho.
curl --request PUT \
--url https://api.connectadesk.com/api/v1/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"send_name": "Black Friday 2026",
"slug": "black-friday-2026",
"channel": {
"id": 4
},
"type": "connecta_contacts",
"message_type": "template",
"init_timestamp": "2026-11-24T09:00:00-03:00",
"send_avg_time": 30,
"queue": {
"id": 7
},
"import_contacts_mode": "tags",
"contacts": [
4821,
4822
],
"tags": [
7,
12
],
"tags_mode": "only",
"tags_operator": "or",
"mapping": [
{
"header": "Telefone",
"value": "contact_number"
}
],
"messages": [
"Olá {{name}}, temos uma novidade para você!"
],
"template": {
"name": "promocao_black_friday",
"language": "pt_BR",
"parameters": {
"header": [
"<string>"
],
"body": [
"Maria",
"30%"
]
}
},
"pause_timestamp": "2026-11-24T21:00:00-03:00",
"restart_timestamp": "2026-11-25T09:00:00-03:00",
"open_ticket": true,
"add_tags": [
19
]
}
'import requests
url = "https://api.connectadesk.com/api/v1/campaigns/{id}"
payload = {
"send_name": "Black Friday 2026",
"slug": "black-friday-2026",
"channel": { "id": 4 },
"type": "connecta_contacts",
"message_type": "template",
"init_timestamp": "2026-11-24T09:00:00-03:00",
"send_avg_time": 30,
"queue": { "id": 7 },
"import_contacts_mode": "tags",
"contacts": [4821, 4822],
"tags": [7, 12],
"tags_mode": "only",
"tags_operator": "or",
"mapping": [
{
"header": "Telefone",
"value": "contact_number"
}
],
"messages": ["Olá {{name}}, temos uma novidade para você!"],
"template": {
"name": "promocao_black_friday",
"language": "pt_BR",
"parameters": {
"header": ["<string>"],
"body": ["Maria", "30%"]
}
},
"pause_timestamp": "2026-11-24T21:00:00-03:00",
"restart_timestamp": "2026-11-25T09:00:00-03:00",
"open_ticket": True,
"add_tags": [19]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
send_name: 'Black Friday 2026',
slug: 'black-friday-2026',
channel: {id: 4},
type: 'connecta_contacts',
message_type: 'template',
init_timestamp: '2026-11-24T09:00:00-03:00',
send_avg_time: 30,
queue: {id: 7},
import_contacts_mode: 'tags',
contacts: [4821, 4822],
tags: [7, 12],
tags_mode: 'only',
tags_operator: 'or',
mapping: [{header: 'Telefone', value: 'contact_number'}],
messages: ['Olá {{name}}, temos uma novidade para você!'],
template: {
name: 'promocao_black_friday',
language: 'pt_BR',
parameters: {header: ['<string>'], body: JSON.stringify(['Maria', '30%'])}
},
pause_timestamp: '2026-11-24T21:00:00-03:00',
restart_timestamp: '2026-11-25T09:00:00-03:00',
open_ticket: true,
add_tags: [19]
})
};
fetch('https://api.connectadesk.com/api/v1/campaigns/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.connectadesk.com/api/v1/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'send_name' => 'Black Friday 2026',
'slug' => 'black-friday-2026',
'channel' => [
'id' => 4
],
'type' => 'connecta_contacts',
'message_type' => 'template',
'init_timestamp' => '2026-11-24T09:00:00-03:00',
'send_avg_time' => 30,
'queue' => [
'id' => 7
],
'import_contacts_mode' => 'tags',
'contacts' => [
4821,
4822
],
'tags' => [
7,
12
],
'tags_mode' => 'only',
'tags_operator' => 'or',
'mapping' => [
[
'header' => 'Telefone',
'value' => 'contact_number'
]
],
'messages' => [
'Olá {{name}}, temos uma novidade para você!'
],
'template' => [
'name' => 'promocao_black_friday',
'language' => 'pt_BR',
'parameters' => [
'header' => [
'<string>'
],
'body' => [
'Maria',
'30%'
]
]
],
'pause_timestamp' => '2026-11-24T21:00:00-03:00',
'restart_timestamp' => '2026-11-25T09:00:00-03:00',
'open_ticket' => true,
'add_tags' => [
19
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.connectadesk.com/api/v1/campaigns/{id}"
payload := strings.NewReader("{\n \"send_name\": \"Black Friday 2026\",\n \"slug\": \"black-friday-2026\",\n \"channel\": {\n \"id\": 4\n },\n \"type\": \"connecta_contacts\",\n \"message_type\": \"template\",\n \"init_timestamp\": \"2026-11-24T09:00:00-03:00\",\n \"send_avg_time\": 30,\n \"queue\": {\n \"id\": 7\n },\n \"import_contacts_mode\": \"tags\",\n \"contacts\": [\n 4821,\n 4822\n ],\n \"tags\": [\n 7,\n 12\n ],\n \"tags_mode\": \"only\",\n \"tags_operator\": \"or\",\n \"mapping\": [\n {\n \"header\": \"Telefone\",\n \"value\": \"contact_number\"\n }\n ],\n \"messages\": [\n \"Olá {{name}}, temos uma novidade para você!\"\n ],\n \"template\": {\n \"name\": \"promocao_black_friday\",\n \"language\": \"pt_BR\",\n \"parameters\": {\n \"header\": [\n \"<string>\"\n ],\n \"body\": [\n \"Maria\",\n \"30%\"\n ]\n }\n },\n \"pause_timestamp\": \"2026-11-24T21:00:00-03:00\",\n \"restart_timestamp\": \"2026-11-25T09:00:00-03:00\",\n \"open_ticket\": true,\n \"add_tags\": [\n 19\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.connectadesk.com/api/v1/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"send_name\": \"Black Friday 2026\",\n \"slug\": \"black-friday-2026\",\n \"channel\": {\n \"id\": 4\n },\n \"type\": \"connecta_contacts\",\n \"message_type\": \"template\",\n \"init_timestamp\": \"2026-11-24T09:00:00-03:00\",\n \"send_avg_time\": 30,\n \"queue\": {\n \"id\": 7\n },\n \"import_contacts_mode\": \"tags\",\n \"contacts\": [\n 4821,\n 4822\n ],\n \"tags\": [\n 7,\n 12\n ],\n \"tags_mode\": \"only\",\n \"tags_operator\": \"or\",\n \"mapping\": [\n {\n \"header\": \"Telefone\",\n \"value\": \"contact_number\"\n }\n ],\n \"messages\": [\n \"Olá {{name}}, temos uma novidade para você!\"\n ],\n \"template\": {\n \"name\": \"promocao_black_friday\",\n \"language\": \"pt_BR\",\n \"parameters\": {\n \"header\": [\n \"<string>\"\n ],\n \"body\": [\n \"Maria\",\n \"30%\"\n ]\n }\n },\n \"pause_timestamp\": \"2026-11-24T21:00:00-03:00\",\n \"restart_timestamp\": \"2026-11-25T09:00:00-03:00\",\n \"open_ticket\": true,\n \"add_tags\": [\n 19\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.connectadesk.com/api/v1/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"send_name\": \"Black Friday 2026\",\n \"slug\": \"black-friday-2026\",\n \"channel\": {\n \"id\": 4\n },\n \"type\": \"connecta_contacts\",\n \"message_type\": \"template\",\n \"init_timestamp\": \"2026-11-24T09:00:00-03:00\",\n \"send_avg_time\": 30,\n \"queue\": {\n \"id\": 7\n },\n \"import_contacts_mode\": \"tags\",\n \"contacts\": [\n 4821,\n 4822\n ],\n \"tags\": [\n 7,\n 12\n ],\n \"tags_mode\": \"only\",\n \"tags_operator\": \"or\",\n \"mapping\": [\n {\n \"header\": \"Telefone\",\n \"value\": \"contact_number\"\n }\n ],\n \"messages\": [\n \"Olá {{name}}, temos uma novidade para você!\"\n ],\n \"template\": {\n \"name\": \"promocao_black_friday\",\n \"language\": \"pt_BR\",\n \"parameters\": {\n \"header\": [\n \"<string>\"\n ],\n \"body\": [\n \"Maria\",\n \"30%\"\n ]\n }\n },\n \"pause_timestamp\": \"2026-11-24T21:00:00-03:00\",\n \"restart_timestamp\": \"2026-11-25T09:00:00-03:00\",\n \"open_ticket\": true,\n \"add_tags\": [\n 19\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 77,
"name": "Promoção de inverno",
"status": "processing",
"scheduledAt": "2026-08-19T12:00:00.000Z",
"completedAt": null,
"contactListId": 12,
"channelId": 11,
"createdAt": "2026-08-17T18:20:00.000Z",
"updatedAt": "2026-08-19T12:00:03.221Z"
}
}{
"error": {
"code": "ERR_API_NOT_FOUND",
"message": "Registro não encontrado."
}
}{
"error": {
"code": "ERR_API_VALIDATION",
"message": "O parâmetro `application` é obrigatório e aceita \"contact\" ou \"card\"."
}
}Autorizações
Token da API no formato sk_live_….
Parâmetros de caminho
Corpo
Configuração da campanha. Os campos obrigatórios variam com type (de onde vêm os
destinatários) e message_type (o que será enviado).
Nome da campanha, como aparece na listagem.
"Black Friday 2026"
Identificador curto da campanha, usado nos relatórios.
"black-friday-2026"
Canal de saída. Veja os disponíveis em GET /channels.
Show child attributes
Show child attributes
De onde vêm os destinatários:
file (planilha enviada no campo file) ou connecta_contacts (base de contatos).
file, connecta_contacts "connecta_contacts"
O que será enviado: message (texto livre, só em canal não oficial) ou template
(template aprovado do WhatsApp oficial). Outro valor responde 422
(ERR_API_CAMPAIGN_MESSAGE_TYPE_INVALID).
message, template "template"
Quando o disparo começa. Precisa ser no futuro.
Sem fuso, vale o fuso da sua empresa. 2026-11-24T09:00:00 dispara às nove da
manhã no fuso configurado na empresa — que é o que você vê no painel. Se preferir
ser explícito, mande com fuso (2026-11-24T09:00:00-03:00) ou em UTC
(2026-11-24T12:00:00.000Z), e aí o valor é respeitado como está.
"2026-11-24T09:00:00-03:00"
Intervalo médio entre os envios, em segundos. Quanto maior, mais lento e mais seguro para o número.
30
Fila do atendimento que o disparo cria. Obrigatória. Vale nos dois casos: com
open_ticket: true a conversa abre já nessa fila; sem ele, o atendimento fica
fechado, mas na fila.
É o queueId que decide onde o atendimento entra. Sem fila ele nasceria solto, sem
aparecer para nenhum time — e você só descobriria depois da campanha rodar. Por isso
criar ou editar sem queue responde 422
(ERR_API_CAMPAIGN_QUEUE_REQUIRED). Veja as filas em GET /queues.
Show child attributes
Show child attributes
Obrigatório com type: connecta_contacts. Escolhe contatos um a um ou por tags.
contacts, tags "tags"
Ids dos contatos, com import_contacts_mode: contacts. Não precisa enviar arquivo:
a lista vira a base de destinatários da campanha.
Todos os ids precisam ser desta empresa — um id de fora responde 422
(ERR_API_CAMPAIGN_IDS_NOT_FOUND) com a lista do que não confere.
[4821, 4822]
Ids das tags, com import_contacts_mode: tags. Os destinatários são os contatos que
casam com as tags, conforme tags_mode e tags_operator. Também não precisa de
arquivo, e os ids precisam ser desta empresa.
[7, 12]
Como as tags filtram a base: only (só quem tem), except (quem não tem) ou all
(toda a base, ignorando as tags).
all, except, only "only"
Com mais de uma tag: and exige todas, or aceita qualquer uma.
and, or "or"
De-para entre as colunas da planilha e os campos do sistema, com type: file.
Pode ser omitido. Sem ele, o de-para é montado automaticamente a partir do
cabeçalho: cada coluna é comparada (sem acento e sem diferenciar maiúsculas) com os
nomes conhecidos de cada campo — por exemplo telefone, celular, whatsapp,
fone, numero e phone viram contact_number; nome, contato e cliente
viram contact_name; cpf, cnpj e documento viram contact_cpfcnpj. Para os
campos personalizados, o cabeçalho é comparado com a key e com o nome do campo.
Coluna que não casa com nada entra como dont_import, e a primeira coluna vence
quando duas apontariam para o mesmo campo.
Telefone e nome são obrigatórios. Se o automático não reconhecer uma dessas colunas,
ou se o mapping enviado não tiver contact_number e contact_name, a criação
responde 422 (ERR_API_CAMPAIGN_MAPPING_PHONE_REQUIRED ou
ERR_API_CAMPAIGN_MAPPING_NAME_REQUIRED) em vez de criar uma campanha que falharia
na importação.
Show child attributes
Show child attributes
Textos da campanha, com message_type: message. Mais de um texto faz o sistema
alternar entre eles a cada disparo. Aceita as variáveis do contato ({{name}},
{{email}}…). O anexo de cada mensagem vai em message_attachment_<posição>.
[
"Olá {{name}}, temos uma novidade para você!"
]
Template aprovado, com message_type: template. Informe só o nome e as variáveis —
o sistema monta o restante e confere contra os templates REAIS do canal, então um
nome errado ou uma variável faltando aparece aqui e não no dia do disparo. Consulte
os disponíveis em GET /channels/{id}/templates.
Show child attributes
Show child attributes
Início da janela de pausa diária (por exemplo, para não disparar de madrugada).
Mesma regra de fuso do init_timestamp.
"2026-11-24T21:00:00-03:00"
Fim da janela de pausa. Obrigatório quando pause_timestamp é informado.
Mesma regra de fuso do init_timestamp.
"2026-11-25T09:00:00-03:00"
Abre a conversa no momento do disparo: o atendimento entra como pending na fila de
queue e já aparece para os atendentes. Sem isso o disparo sai com o atendimento
fechado, e a conversa só abre se o contato responder.
true
Tags aplicadas a cada contato que a campanha atinge.
[19]
Resposta
OK
Show child attributes
Show child attributes
{
"id": 77,
"name": "Promoção de inverno",
"status": "processing",
"scheduledAt": "2026-08-19T12:00:00.000Z",
"completedAt": null,
"contactListId": 12,
"channelId": 11,
"createdAt": "2026-08-17T18:20:00.000Z",
"updatedAt": "2026-08-19T12:00:03.221Z"
}
curl --request PUT \
--url https://api.connectadesk.com/api/v1/campaigns/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"send_name": "Black Friday 2026",
"slug": "black-friday-2026",
"channel": {
"id": 4
},
"type": "connecta_contacts",
"message_type": "template",
"init_timestamp": "2026-11-24T09:00:00-03:00",
"send_avg_time": 30,
"queue": {
"id": 7
},
"import_contacts_mode": "tags",
"contacts": [
4821,
4822
],
"tags": [
7,
12
],
"tags_mode": "only",
"tags_operator": "or",
"mapping": [
{
"header": "Telefone",
"value": "contact_number"
}
],
"messages": [
"Olá {{name}}, temos uma novidade para você!"
],
"template": {
"name": "promocao_black_friday",
"language": "pt_BR",
"parameters": {
"header": [
"<string>"
],
"body": [
"Maria",
"30%"
]
}
},
"pause_timestamp": "2026-11-24T21:00:00-03:00",
"restart_timestamp": "2026-11-25T09:00:00-03:00",
"open_ticket": true,
"add_tags": [
19
]
}
'import requests
url = "https://api.connectadesk.com/api/v1/campaigns/{id}"
payload = {
"send_name": "Black Friday 2026",
"slug": "black-friday-2026",
"channel": { "id": 4 },
"type": "connecta_contacts",
"message_type": "template",
"init_timestamp": "2026-11-24T09:00:00-03:00",
"send_avg_time": 30,
"queue": { "id": 7 },
"import_contacts_mode": "tags",
"contacts": [4821, 4822],
"tags": [7, 12],
"tags_mode": "only",
"tags_operator": "or",
"mapping": [
{
"header": "Telefone",
"value": "contact_number"
}
],
"messages": ["Olá {{name}}, temos uma novidade para você!"],
"template": {
"name": "promocao_black_friday",
"language": "pt_BR",
"parameters": {
"header": ["<string>"],
"body": ["Maria", "30%"]
}
},
"pause_timestamp": "2026-11-24T21:00:00-03:00",
"restart_timestamp": "2026-11-25T09:00:00-03:00",
"open_ticket": True,
"add_tags": [19]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
send_name: 'Black Friday 2026',
slug: 'black-friday-2026',
channel: {id: 4},
type: 'connecta_contacts',
message_type: 'template',
init_timestamp: '2026-11-24T09:00:00-03:00',
send_avg_time: 30,
queue: {id: 7},
import_contacts_mode: 'tags',
contacts: [4821, 4822],
tags: [7, 12],
tags_mode: 'only',
tags_operator: 'or',
mapping: [{header: 'Telefone', value: 'contact_number'}],
messages: ['Olá {{name}}, temos uma novidade para você!'],
template: {
name: 'promocao_black_friday',
language: 'pt_BR',
parameters: {header: ['<string>'], body: JSON.stringify(['Maria', '30%'])}
},
pause_timestamp: '2026-11-24T21:00:00-03:00',
restart_timestamp: '2026-11-25T09:00:00-03:00',
open_ticket: true,
add_tags: [19]
})
};
fetch('https://api.connectadesk.com/api/v1/campaigns/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.connectadesk.com/api/v1/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'send_name' => 'Black Friday 2026',
'slug' => 'black-friday-2026',
'channel' => [
'id' => 4
],
'type' => 'connecta_contacts',
'message_type' => 'template',
'init_timestamp' => '2026-11-24T09:00:00-03:00',
'send_avg_time' => 30,
'queue' => [
'id' => 7
],
'import_contacts_mode' => 'tags',
'contacts' => [
4821,
4822
],
'tags' => [
7,
12
],
'tags_mode' => 'only',
'tags_operator' => 'or',
'mapping' => [
[
'header' => 'Telefone',
'value' => 'contact_number'
]
],
'messages' => [
'Olá {{name}}, temos uma novidade para você!'
],
'template' => [
'name' => 'promocao_black_friday',
'language' => 'pt_BR',
'parameters' => [
'header' => [
'<string>'
],
'body' => [
'Maria',
'30%'
]
]
],
'pause_timestamp' => '2026-11-24T21:00:00-03:00',
'restart_timestamp' => '2026-11-25T09:00:00-03:00',
'open_ticket' => true,
'add_tags' => [
19
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.connectadesk.com/api/v1/campaigns/{id}"
payload := strings.NewReader("{\n \"send_name\": \"Black Friday 2026\",\n \"slug\": \"black-friday-2026\",\n \"channel\": {\n \"id\": 4\n },\n \"type\": \"connecta_contacts\",\n \"message_type\": \"template\",\n \"init_timestamp\": \"2026-11-24T09:00:00-03:00\",\n \"send_avg_time\": 30,\n \"queue\": {\n \"id\": 7\n },\n \"import_contacts_mode\": \"tags\",\n \"contacts\": [\n 4821,\n 4822\n ],\n \"tags\": [\n 7,\n 12\n ],\n \"tags_mode\": \"only\",\n \"tags_operator\": \"or\",\n \"mapping\": [\n {\n \"header\": \"Telefone\",\n \"value\": \"contact_number\"\n }\n ],\n \"messages\": [\n \"Olá {{name}}, temos uma novidade para você!\"\n ],\n \"template\": {\n \"name\": \"promocao_black_friday\",\n \"language\": \"pt_BR\",\n \"parameters\": {\n \"header\": [\n \"<string>\"\n ],\n \"body\": [\n \"Maria\",\n \"30%\"\n ]\n }\n },\n \"pause_timestamp\": \"2026-11-24T21:00:00-03:00\",\n \"restart_timestamp\": \"2026-11-25T09:00:00-03:00\",\n \"open_ticket\": true,\n \"add_tags\": [\n 19\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.connectadesk.com/api/v1/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"send_name\": \"Black Friday 2026\",\n \"slug\": \"black-friday-2026\",\n \"channel\": {\n \"id\": 4\n },\n \"type\": \"connecta_contacts\",\n \"message_type\": \"template\",\n \"init_timestamp\": \"2026-11-24T09:00:00-03:00\",\n \"send_avg_time\": 30,\n \"queue\": {\n \"id\": 7\n },\n \"import_contacts_mode\": \"tags\",\n \"contacts\": [\n 4821,\n 4822\n ],\n \"tags\": [\n 7,\n 12\n ],\n \"tags_mode\": \"only\",\n \"tags_operator\": \"or\",\n \"mapping\": [\n {\n \"header\": \"Telefone\",\n \"value\": \"contact_number\"\n }\n ],\n \"messages\": [\n \"Olá {{name}}, temos uma novidade para você!\"\n ],\n \"template\": {\n \"name\": \"promocao_black_friday\",\n \"language\": \"pt_BR\",\n \"parameters\": {\n \"header\": [\n \"<string>\"\n ],\n \"body\": [\n \"Maria\",\n \"30%\"\n ]\n }\n },\n \"pause_timestamp\": \"2026-11-24T21:00:00-03:00\",\n \"restart_timestamp\": \"2026-11-25T09:00:00-03:00\",\n \"open_ticket\": true,\n \"add_tags\": [\n 19\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.connectadesk.com/api/v1/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"send_name\": \"Black Friday 2026\",\n \"slug\": \"black-friday-2026\",\n \"channel\": {\n \"id\": 4\n },\n \"type\": \"connecta_contacts\",\n \"message_type\": \"template\",\n \"init_timestamp\": \"2026-11-24T09:00:00-03:00\",\n \"send_avg_time\": 30,\n \"queue\": {\n \"id\": 7\n },\n \"import_contacts_mode\": \"tags\",\n \"contacts\": [\n 4821,\n 4822\n ],\n \"tags\": [\n 7,\n 12\n ],\n \"tags_mode\": \"only\",\n \"tags_operator\": \"or\",\n \"mapping\": [\n {\n \"header\": \"Telefone\",\n \"value\": \"contact_number\"\n }\n ],\n \"messages\": [\n \"Olá {{name}}, temos uma novidade para você!\"\n ],\n \"template\": {\n \"name\": \"promocao_black_friday\",\n \"language\": \"pt_BR\",\n \"parameters\": {\n \"header\": [\n \"<string>\"\n ],\n \"body\": [\n \"Maria\",\n \"30%\"\n ]\n }\n },\n \"pause_timestamp\": \"2026-11-24T21:00:00-03:00\",\n \"restart_timestamp\": \"2026-11-25T09:00:00-03:00\",\n \"open_ticket\": true,\n \"add_tags\": [\n 19\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 77,
"name": "Promoção de inverno",
"status": "processing",
"scheduledAt": "2026-08-19T12:00:00.000Z",
"completedAt": null,
"contactListId": 12,
"channelId": 11,
"createdAt": "2026-08-17T18:20:00.000Z",
"updatedAt": "2026-08-19T12:00:03.221Z"
}
}{
"error": {
"code": "ERR_API_NOT_FOUND",
"message": "Registro não encontrado."
}
}{
"error": {
"code": "ERR_API_VALIDATION",
"message": "O parâmetro `application` é obrigatório e aceita \"contact\" ou \"card\"."
}
}
