Skip to Content
CampanhaImportar contatos

Usando a API para importação de contatos

Para importar contatos usando a API é preciso utilizar a interface do sistema para gerar um
token de acesso da API e criar uma campanha.

Cumprindo esses requisitos, siga os passos descritos abaixo:

1. Criar lista de campanha

A lista de campanha agrupa contatos dentro de uma campanha. E pode ser criada tanto pela interface quanto pela API.

Exemplo de chamada:

POST
/api/v1/campaign_lists
Params
Authorization
Body
KeyValue
var axios = require("axios").default;

var options = {
  method: 'POST',
  url: 'https://exemplo.callix.com.br/api/v1/campaign_lists',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer {seu_token
  }'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Para testar, configure na página de Autenticação.

Exemplo de resposta:

{ "data": { "type": "campaign_lists", "id": "146", "attributes": { "name": "Lista de campanha teste", "status": 2 }, "links": { "self": "/api/v1/campaign_lists/146" }, "relationships": { "campaign": { "links": { "self": "/api/v1/campaign_lists/146/relationships/campaign", "related": "/api/v1/campaign_lists/146/campaign" } } } } }

No exemplo acima, é criada uma lista de nome Lista de campanha teste na campanha de ID 1. No retorno temos o ID 146, atribuído para a lista recém criada e que vamos utilizar para importar contatos.

2. Importar contatos em uma lista

Essa chamada adiciona contatos a uma lista de contatos. O processamento dessa chamada é feito de forma assíncrona.

Exemplo de chamada:

POST
/api/v1/campaign_contacts_async
Params
Authorization
Body
KeyValue
var axios = require("axios").default;

var options = {
  method: 'POST',
  url: 'https://exemplo.callix.com.br/api/v1/campaign_contacts_async',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer {seu_token
  }'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Para testar, configure na página de Autenticação.

Na chamada, no atributo import_data, deve-se enviar no mínimo os campos obrigatórios do formulário associado à campanha. O valor da chave é o próprio nome do campo.

No caso de exemplo, apenas os campos ID e Celular são obrigatórios na importação:

Formulário

Exemplo de resposta:

{ "data": { "type": "campaign_contacts_async", "id": "1", "attributes": { "remove_duplicated_phones": true, "status": 1, "import_data": [] }, "links": { "self": "/api/v1/campaign_contacts_async/1" }, "relationships": { "campaign_list": { "links": { "self": "/api/v1/campaign_contacts_async/1/relationships/campaign_list", "related": "/api/v1/campaign_contacts_async/1/campaign_list" } } } } }

Como o processamento é feito de forma assíncrona, no retorno da chamada temos o status da importação:

"attributes": { "remove_duplicated_phones": true, "status": 1 // o valor 1 indica que o status é pendente }

E também um ID do serviço de importação (job) que tratará a importação assíncrona:

"links": { "self": "/api/v1/campaign_contacts_async/1" // Este ID será usado no próximo passo }

Usando o ID (no exemplo, ID 1), é possível consultar o progresso da importação.

3. Consultar progresso da importação de contatos

Essa chamada retorna a situação da importação. Para usá-la é necessário usar o ID do job de importação obtida no fim do passo 2 acima.

Exemplo de chamada:

GET
/api/v1/campaign_contacts_async/1
Params
Authorization
KeyValue
var axios = require("axios").default;

var options = {
  method: 'GET',
  url: 'https://exemplo.callix.com.br/api/v1/campaign_contacts_async/1',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer {seu_token
  }'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Para testar, configure na página de Autenticação.

Exemplo de resposta:

{ "data": { "type": "campaign_contacts_async", "id": "1", "attributes": { "remove_duplicated_phones": true, "status": 3, "import_result": [] }, "links": { "self": "/api/v1/campaign_contacts_async/1" }, "relationships": { "campaign_list": { "links": { "self": "/api/v1/campaign_contacts_async/1/relationships/campaign_list", "related": "/api/v1/campaign_contacts_async/1/campaign_list" } } } }

O campo status pode assumir os seguintes valores:

códigosignificado
1Pendente
2Executando
3Completada
4Falha

No caso do exemplo, a solicitação foi completada com sucesso.

4. Baixar arquivo de resultado da importação

Após a conclusão da importação, é possível baixar um arquivo contendo os erros e avisos que ocorreram durante o processamento. Este endpoint retorna o arquivo de resultado nos formatos CSV (padrão) ou JSON.

Exemplo de chamada (formato CSV):

GET
/api/v1/campaign_contacts_async/1/result
Params
Authorization
KeyValue
var axios = require("axios").default;

var options = {
  method: 'GET',
  url: 'https://exemplo.callix.com.br/api/v1/campaign_contacts_async/1/result',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer {seu_token
  }'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Para testar, configure na página de Autenticação.

Exemplo de chamada (formato JSON):

GET
/api/v1/campaign_contacts_async/1/result
Params
Authorization
KeyValue
var axios = require("axios").default;

var options = {
  method: 'GET',
  url: 'https://exemplo.callix.com.br/api/v1/campaign_contacts_async/1/result',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer {seu_token
  }'}
};

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

Para testar, configure na página de Autenticação.

Parâmetros:

ParâmetroTipoObrigatórioValoresDescrição
formatquery stringNãocsv, jsonDefine o formato do arquivo de retorno. Padrão: csv

Resposta:

A resposta será o download de um arquivo nos formatos:

  • CSV: Arquivo de texto delimitado por ponto e vírgula (;) com os erros/avisos
  • JSON: Array de objetos JSON com os erros/avisos

Possíveis respostas:

Código HTTPDescrição
200Sucesso - retorna o arquivo CSV ou JSON com os erros/avisos
202Importação ainda está sendo processada - retorna JSON com status e progresso
400Formato inválido (valores aceitos: csv, json)
404Importação não encontrada, falhou ou não possui arquivo de resultado

Exemplo de resposta 200 (JSON com erros):

[ { "id": "1", "nome": "João Silva", "telefone": "(12)99999-9999", "email": "joao@example.com", "Erros (contato não importado)": "Contato duplicado", "Avisos": "", "Telefones com baixa probabilidade de atendimento": "" }, { "id": "2", "nome": "Maria Santos", "telefone": "(11)98888-8888", "email": "maria@example.com", "Erros (contato não importado)": "", "Avisos": "Contato existente sobreescrito na mesma lista", "Telefones com baixa probabilidade de atendimento": "(11)98888-8888" } ]

Caso a importação ainda esteja sendo processada (202 ACCEPTED):

{ "status": "in_progress", "progress": 45, "total_count": 1000, "success_count": 450, "error_count": 10, "warning_count": 5, "message": "The import is still being processed. Please try again later." }

Caso a importação ainda esteja pendente (202 ACCEPTED):

{ "status": "pending", "total_count": 0, "success_count": 0, "error_count": 0, "warning_count": 0, "message": "The import has not started yet. Please try again later." }

Tipos de erros que podem aparecer no resultado

ErroDescrição
Contato duplicadoO contato já existe no arquivo de importação (baseado nos campos únicos configurados)
O contato não possui nenhum número de telefone válidoNenhum telefone válido foi encontrado nos campos de telefone
Todos os telefones do contato foram descartados por possuírem baixa probabilidade de atendimentoTodos os telefones foram removidos pelo filtro de qualidade de telefones
Contato já existe na lista de contatosO contato já foi importado anteriormente e a opção de sobrescrever está desabilitada
Telefone repetido: A coluna [nome] contém um telefone que já foi importado anteriormente para esse contatoO telefone já existe no contato e a opção de remover duplicados está desabilitada

Tipos de avisos que podem aparecer no resultado

AvisoDescrição
O telefone da coluna “[nome]” foi descartado por ter uma baixa probabilidade de atendimentoUm telefone específico foi removido pelo filtro de qualidade
Contato existente sobreescrito em outra lista ([nome da lista])O contato foi atualizado, mas ele pertencia a outra lista
Contato existente sobreescrito na mesma listaO contato foi atualizado na mesma lista
Telefone repetido descartado: A coluna [nome] contém um telefone que já foi importado anteriormente para esse contatoO telefone duplicado foi removido porque a opção de remover duplicados está habilitada
Last updated on