A API de integração da Track NPS foi criada com o objetivo de que as informações
pudessem ter uma autenticação para serem acessadas. Entre as características, temos:
- Um TOKEN é gerado através da nossa plataforma, ou de uma requisição. Desta forma,
automatizamos todo o processo e também homologamos o acesso a informações.
- A API integra as funções em uma só API com métodos diversos.
- Trabalha com modelo RESTful com JSON.
Nessa documentaçao você encontrará também exemplos de códigos nas linguagem a sua escolha, que podem ser alterados a qualquer momento no botão a direita.
Essa API usa o protocolo HTTPS. Portanto todas as chamadas deverão começar com https://
.
A API conta com uma trava de segurança que limita o número de requisições a 1000 em um intervalo de cinco minutos.
Caso sejam realizadas mais de 1000 requisições dentro deste intervalo, será retornado um erro com status 405
com uma validação CAPTCHA que deverá ser resolvida para continuar enviando requisições.
A utilização da API demanda o uso de uma chave que chamamos de TOKEN, o mesmo será responsável por
autenticar o acesso ao sistema.
-
Para isso faça o login na
Tracksale com uma conta de administrador.
-
Acesse o menu Apps no canto
superior direito junto ao nome do usuário.
-
Clique em instalar no
app
"API V2".
-
Clicando em NOVO TOKEN.
-
Um novo token será gerado.
-
Um novo TOKEN será gerado e adicionado a lista, novas adições não inutilizam os
anteriores.
Cada endpoint possui uma URL específica, verifique individualmente.
Usaremos o TOKEN que adquirimos no header (sem a necessidade de conversão para base64), para
autenticarmos o acesso. Da seguinte forma:
-
Key
Authorization
-
Value
bearer TOKEN
Onde:
- Authorization é a palavra Authorization
- bearer é a palavra bearer e TOKEN é o TOKEN
adquirido aqui
Listar Campanhas
Para listar as campanhas utilizaremos a seguinte configuração:
-
O método usado será :
GET
-
A URL usada será :
https://api.tracksale.co/v2/campaign
Esse método é responsável por listar todas as campanhas, seus códigos e
alguns detalhes, como por exemplo as perguntas usadas.
É possível que se retorne apenas uma campanha específica, isso é possivel usando:
Onde Campaign_code é o código da campanha que você deseja obter
informações.
Para pegar o código de uma campanha específica, deve-se primeiro listar
todas as campanhas e pegar o atributo "code" do retorno.
Certifique-se de usar os parâmetros start
e end
no formato AAAA-MM-DD para receber dados de resposta como número de neutros, promotores, detratores e assim por diante.
Exemplo de retorno:
{
"name":"Customers_name",
"code" : Campaign_code,
"description" : Campaign_description,
"detractors" : Detractors_name,
"passives" : Neutrals_name,
"promoters" : Promoters_name,
"dispatches" : Dispatches_number,
"comments" : Comments,
"answers" : Answers,
"main_channel" : "Main_channel",
"create_time" : "Time_of_creation",
"questions" : [
{
"id" : "Question_id",
"type" : "Question_type",
"title" : "Question_title",
"question" : "Question",
"secondary" : "Secondary_question"
}
]
}
Também é possível complementar o resultado da consulta com as informações de limitação de disparos. Para isso, utilize o parâmetro de query dispatch_limits
com valor 1
.
Se a campanha não utiliza esse recurso, os valores retornados serão null
.
Exemplo de retorno:
{
"name":"Customers_name",
"code" : Campaign_code,
"description" : Campaign_description,
"detractors" : Detractors_name,
"passives" : Neutrals_name,
"promoters" : Promoters_name,
"dispatches" : Dispatches_number,
"comments" : Comments,
"answers" : Answers,
"main_channel" : "Main_channel",
"create_time" : "Time_of_creation",
"questions" : [
{
"id" : "Question_id",
"type" : "Question_type",
"title" : "Question_title",
"question" : "Question",
"secondary" : "Secondary_question"
}
],
"dispatch_limits": {
"daily": {
"limit": null,
"remaining": null
},
"weekly": {
"limit": null,
"remaining": null
},
"monthly": {
"limit": null,
"remaining": null
}
}
}
Exemplos de código : Listar Campanhas
Tipo Http
GET /v2/campaign HTTP/1.1
Host: api.tracksale.co
Authorization: bearer TOKEN
Cache-Control: no-cache
Tipo C(libCurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.tracksale.co/v2/campaign");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "cache-control: no-cache");
headers = curl_slist_append(headers, "authorization: bearer TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);
Tipo cURL
curl -X GET \
https://api.tracksale.co/v2/campaign \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache'
Tipo C#
var client = new RestClient("https://api.tracksale.co/v2/campaign");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "bearer TOKEN");
IRestResponse response = client.Execute(request);
Tipo Go
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.tracksale.co/v2/campaign"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("authorization", "bearer TOKEN")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Tipo Java (OK HTTP)
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.tracksale.co/v2/campaign")
.get()
.addHeader("authorization", "bearer TOKEN")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
Tipo Java Unirest
HttpResponse<String> response = Unirest.get("https://api.tracksale.co/v2/campaign")
.header("authorization", "bearer TOKEN")
.header("cache-control", "no-cache")
.asString();
Tipo JavaScript Jquery AJAX
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.tracksale.co/v2/campaign",
"method": "GET",
"headers": {
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Tipo JavaScript XHR
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://api.tracksale.co/v2/campaign");
xhr.setRequestHeader("authorization", "bearer TOKEN");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
Tipo NodeJS Native
var http = require("https");
var options = {
"method": "GET",
"hostname": "api.tracksale.co",
"port": null,
"path": "/v2/campaign",
"headers": {
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
Tipo NodeJS Request
var request = require("request");
var options = { method: 'GET',
url: 'https://api.tracksale.co/v2/campaign',
headers:
{ 'cache-control': 'no-cache',
'authorization': 'bearer TOKEN' } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Tipo NodeJS NodeJS Unirest
var unirest = require("unirest");
var req = unirest("GET", "https://api.tracksale.co/v2/campaign");
req.headers({
"cache-control": "no-cache",
"authorization": "bearer TOKEN"
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Tipo Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"authorization": @"bearer TOKEN",
@"cache-control": @"no-cache" };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.tracksale.co/v2/campaign"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Tipo OCaml(coHttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.tracksale.co/v2/campaign" in
let headers = Header.init ()
|> fun h -> Header.add h "authorization" "bearer TOKEN"
|> fun h -> Header.add h "cache-control" "no-cache"
in
Client.call ~headers `GET uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
Tipo PHP HttpRequest
<?php
$request = new HttpRequest();
$request->setUrl('https://api.tracksale.co/v2/campaign');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN'
));
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Tipo PHP pecl_http
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://api.tracksale.co/v2/campaign');
$request->setRequestMethod('GET');
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Tipo PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tracksale.co/v2/campaign",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"authorization: bearer TOKEN",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Tipo Python http.client(Python 3)
import http.client
conn = http.client.HTTPSConnection("api.tracksale.co")
headers = {
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
conn.request("GET", "/v2/campaign", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Tipo Python requests
import requests
url = "https://api.tracksale.co/v2/campaign"
headers = {
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers)
print(response.text)
Tipo Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.tracksale.co/v2/campaign")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(url)
request["authorization"] = 'bearer TOKEN'
request["cache-control"] = 'no-cache'
response = http.request(request)
puts response.read_body
Tipo Shell wget
wget --quiet \
--method GET \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--output-document \
- https://api.tracksale.co/v2/campaign
Tipo Shell Httpie
http GET https://api.tracksale.co/v2/campaign \
authorization:'bearer TOKEN' \
cache-control:no-cache
Tipo Shell cURL
curl --request GET \
--url https://api.tracksale.co/v2/campaign \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache'
Tipo Swift (NSURL)
import Foundation
let headers = [
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.tracksale.co/v2/campaign")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
É possível buscar informações de um Widget criado como a quantidade de vezes que foi aberto, limites de abertura, seu identificador e nome.
-
O método usado será :
GET
-
A URL usada será :
https://api.tracksale.co/v2/widget/{key}
Onde {key} é o atributo chave que pode ser encotrado na personalização de um Widget.
Exemplo de retorno:
{
"id": 1,
"name": "Widget",
"views": {
"daily": 2,
"weekly": 0,
"monthly": 0,
},
"limits": {
"daily": 2,
"weekly": 0,
"monthly": 0,
"has_limit": false,
"limit_reached": "daily"
}
}
Checar Noventena
É possível checar se um cliente está sendo impactado pelas regras de noventena.
-
O método usado será :
POST
-
A URL usada será :
https://api.tracksale.co/v2/campaign/Campaign_code/can-impact
-
O JSON poderá usar um e-mail, número de telefone ou um identificador único da sua empresa para o cliente:
Exemplo de requisição:
{
"email": "Customer Email",
// or
"phone": "Customer Phone",
// or
"identification": "Customer Identification"
}
Onde Campaign_code é o código da campanha que você deseja checar as informações.
Para pegar o código de uma campanha específica, deve-se primeiro listar
todas as campanhas e pegar o atributo "code" do retorno.
Exemplo de retorno:
{
"can_impact": true
}
Link de Pesquisa
É possível criar links de pesquisa diretamente pela API respeitando a limitação de 500 clientes por requisição.
-
O método usado será :
POST
-
A URL usada será :
https://api.tracksale.co/v2/campaign/Campaign_code/survey-links
-
O JSON será um array de clientes como no exemplo abaixo:
Exemplo de requisição:
{
"customers": [
{
"name": "Customer Name",
"email": "Customer Email",
"phone": "Customer Phone",
"tags": [
{
"name": "Tag name",
"value": "Tag value"
},
{
"name": "Tag name",
"value": "Tag value"
}
]
}
]
}
Onde Campaign_code é o código da campanha que você deseja checar as informações.
Para pegar o código de uma campanha específica, deve-se primeiro listar
todas as campanhas e pegar o atributo "code" do retorno.
Exemplo de retorno:
{
"customers": [
{
"name": "Customer Name",
"email": "Customer Email",
"phone": "Customer Phone",
"tags": [
{
"name": "Tag name",
"value": "Tag value"
},
{
"name": "Tag name",
"value": "Tag value"
}
],
"survey_link": "https://tracksale.co/s/Survey_hash"
}
]
}
Onde Survey_hash é o identificador alfanumérico desse link.
Disparos
Os disparos podem ser realizados de duas formas diferentes:
Disparo Agendado:
A existência da variável schedule_time é opcional.
Assim, temos duas opções:
-
Inserir a variável "schedule_time":
Dessa forma você você pode usar "schedule_time" para definir o momento onde o disparo deve ser efetuado,
determinado no formato "Unix Timestamp" em segundos .
O body ficará da seguinte forma
O Exemplo a seguir mostra a inserção com todas as variáveis, mas existe casos em que as variáveis indentification, phone e email podem ser omitidas.
Ex: Caso a campanha seja via SMS, não é necessário eviar o email, mas ele ainda pode ser enviado. Nas campanhas via email a variável phone não precisa ser enviada, mas caso seja necessário, existe a possibilidade de enviá-la.
O envio de ambas variáveis é indicado caso use fluxo de campanhas.
O envio de identification
é opcional, porém, recomendado caso deseje identificar o cliente pelo mesmo parâmetro da sua empresa. O identification
precisa ser um valor único para cada cliente. Se trata de um valor alfanumérico, passado entre aspas. Caso não seja utilizado, deve ser enviado null
, sem aspas.
Limite máximo de 500 clientes por requisição.
Exemplo de requisição:
{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"identification": null,
"phone": "Customers_phone",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_seconds
}
Do tipo application/json
Não inserir a variável "schedule_time" :
Essa maneira deve ser usada caso sua intenção seja reunir vários disparos a uma
campanha, para efetuá-los de uma só vez posteriormente.
Dessa forma, será retornado um código do lote disparos, esse código deve ser usado no Disparo de lotes.
Exemplo de requisição:
{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
}
Do tipo application/json
Todos os disparos subsequentes a mesma campanha retornarão o mesmo lote de disparos
até que você realize o disparo deste lote.
Parâmetros:
Atributos |
Tipos |
Obrigatório |
Descrição |
name |
String |
Não |
Nome do cliente |
email |
String |
Sim (para disparos via email) |
Email do cliente |
phone |
String |
Sim (para disparos via SMS) |
Telefone do cliente |
tags |
Array |
Não |
Nome da tag |
finish_time |
Integer |
Não |
Data de expiração da pesquisa, em segundos, no formato timestamp |
tags |
Tipo |
Obrigatório |
Descrição |
name |
String |
Sim |
Nome da tag |
value |
String |
Sim |
Valor da Tag |
Exemplo de retorno:
Sem schedule_time
{
"msg":"Customers have been successfully added!",
"dispatch_code":"Dispatch_code",
"status": {
"duplicated":Number_of_duplications,
"invalid":Number_of_invalids,
"inserted":Number_of_insertions
},
"campaign": {
"name":Campaign_name,
"cod":Campaign_code
}
}
Exemplo de retorno:
Com schedule_time
{
"msg":"Dispatch executed!",
"dispatch_code":"Dispatch_code",
"status": {
"duplicated":Number_of_duplications,
"invalid":Number_of_invalids,
"inserted":Number_of_insertions
},
"campaign": {
"name":Campaign_name,
"cod":Campaign_code
}
}
É possível também retornar um array com os customers que não foram inseridos, seja por que eram duplicados ou por que se encontravam inválidos.
Para isso, deve-se passar o parâmetro getNotInserted com o valor 1. Assim retornaremos da seguinte forma.
Exemplo de retorno:
{
"msg":"Dispatch executed!",
"dispatch_code":"Dispatch_code",
"status": {
"duplicated":Number_of_duplications,
"invalid":Number_of_invalids,
"inserted":Number_of_insertions
},
"campaign": {
"name":Campaign_name,
"cod":Campaign_code
}
"duplicated_customers": [
{
"name":"customer name",
"email":"email@email.com"
}
],
"invalid_customers": [
{
"name":"customer name",
"reason":"Invalid or empty main channel"
}
],
}
Exemplos de código : Disparos
Tipo Http
POST /v2/campaign/campaign_code/dispatch HTTP/1.1
Host: api.tracksale
Content-Type: application/json
Authorization: bearer TOKEN
Cache-Control: no-cache
{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}
Tipo C(libCurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.tracksale.co/v2/campaign/campaign_code/dispatch");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "cache-control: no-cache");
headers = curl_slist_append(headers, "authorization: bearer TOKEN");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}");
CURLcode ret = curl_easy_perform(hnd);
Tipo cURL
curl -X POST \
https://api.tracksale.co/v2/campaign/campaign_code/dispatch \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}'
Tipo C#
var client = new RestClient("https://api.tracksale.co/v2/campaign/campaign_code/dispatch");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "bearer TOKEN");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Tipo Go
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.tracksale.co/v2/campaign/campaign_code/dispatch"
payload := strings.NewReader("{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
req.Header.Add("authorization", "bearer TOKEN")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Tipo Java (OK HTTP)
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}");
Request request = new Request.Builder()
.url("https://api.tracksale.co/v2/campaign/campaign_code/dispatch")
.post(body)
.addHeader("content-type", "application/json")
.addHeader("authorization", "bearer TOKEN")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
Tipo Java Unirest
HttpResponse<Foundag> response = Unirest.get("https://api.tracksale.co/v2/campaign")
.header("authorization", "bearer TOKEN")
.header("cache-control", "no-cache")
.asString();
Tipo JavaScript Jquery AJAX
HttpResponse<String> response = Unirest.post("https://api.tracksale.co/v2/campaign/campaign_code/dispatch")
.header("content-type", "application/json")
.header("authorization", "bearer TOKEN")
.header("cache-control", "no-cache")
.body("{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}")
.asString();
Tipo JavaScript XHR
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.tracksale.co/v2/campaign/campaign_code/dispatch",
"method": "POST",
"headers": {
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
},
"data": "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Tipo NodeJS Native
var http = require("https");
var options = {
"method": "POST",
"hostname": "api.tracksale.co",
"port": null,
"path": "/v2/campaign/campaign_code/dispatch",
"headers": {
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write("{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}");
req.end()
Tipo NodeJS Request
var request = require("request");
var options = { method: 'POST',
url: 'https://api.tracksale.co/v2/campaign/campaign_code/dispatch',
headers:
{ 'cache-control': 'no-cache',
'authorization': 'bearer TOKEN',
'content-type': 'application/json' },
body: '{\n "customers": [\n {\n "name":"Customers_name",\n "email":"Customers_email",\n "tags" : [\n {\n "name" : "TagExample",\n "value" : "TagExample"\n },\n {\n "name" : "TagExample",\n "value" : "TagExample"\n }\n ]\n }\n ],\n "schedule_time": Timestamp_in_Seconds\n}' };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Tipo NodeJS NodeJS Unirest
var unirest = require("unirest");
var req = unirest("POST", "https://api.tracksale.co/v2/campaign/campaign_code/dispatch");
req.headers({
"cache-control": "no-cache",
"authorization": "bearer TOKEN",
"content-type": "application/json"
});
req.send("{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}");
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Tipo Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"content-type": @"application/json",
@"authorization": @"bearer TOKEN",
@"cache-control": @"no-cache" };
NSData *postData = [[NSData alloc] initWithData:[@"{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}" dataUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.tracksale.co/v2/campaign/campaign_code/dispatch"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Tipo OCaml(coHttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.tracksale.co/v2/campaign/campaign_code/dispatch" in
let headers = Header.init ()
|> fun h -> Header.add h "content-type" "application/json"
|> fun h -> Header.add h "authorization" "bearer TOKEN"
|> fun h -> Header.add h "cache-control" "no-cache"
in
let body = Cohttp_lwt_body.of_string "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}" in
Client.call ~headers ~body `POST uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
Tipo PHP HttpRequest
<?php
$request = new HttpRequest();
$request->setUrl('https://api.tracksale.co/v2/campaign/campaign_code/dispatch');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN',
'content-type' => 'application/json'
));
$request->setBody('{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}');
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Tipo PHP pecl_http
<?php
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}');
$request->setRequestUrl('https://api.tracksale.co/v2/campaign/campaign_code/dispatch');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN',
'content-type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Tipo PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tracksale.co/v2/campaign/campaign_code/dispatch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}",
CURLOPT_HTTPHEADER => array(
"authorization: bearer TOKEN",
"cache-control: no-cache",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Tipo Python http.client(Python 3)
import http.client
conn = http.client.HTTPSConnection("api.tracksale.co")
payload = "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}"
headers = {
'content-type': "application/json",
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
conn.request("POST", "/v2/campaign/campaign_code/dispatch", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Tipo Python requests
import requests
url = "https://api.tracksale.co/v2/campaign/campaign_code/dispatch"
payload = "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}"
headers = {
'content-type': "application/json",
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
Tipo Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.tracksale.co/v2/campaign/campaign_code/dispatch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["authorization"] = 'bearer TOKEN'
request["cache-control"] = 'no-cache'
request.body = "{\n \"customers\": [\n {\n \"name\":\"Customers_name\",\n \"email\":\"Customers_email\",\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n },\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ],\n \"schedule_time\": Timestamp_in_Seconds\n}"
response = http.request(request)
puts response.read_body
Tipo Shell wget
wget --quiet \
--method POST \
--header 'content-type: application/json' \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--body-data '{\n "customers": [\n {\n "name":"Customers_name",\n "email":"Customers_email",\n "tags" : [\n {\n "name" : "TagExample",\n "value" : "TagExample"\n },\n {\n "name" : "TagExample",\n "value" : "TagExample"\n }\n ]\n }\n ],\n "schedule_time": Timestamp_in_Seconds\n}' \
--output-document \
- https://api.tracksale.co/v2/campaign/campaign_code/dispatch
Tipo Shell Httpie
echo '{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}' | \
http POST https://api.tracksale.co/v2/campaign/campaign_code/dispatch \
authorization:'bearer TOKEN' \
cache-control:no-cache \
content-type:application/json
Tipo Shell cURL
curl --request POST \
--url https://api.tracksale.co/v2/campaign/campaign_code/dispatch \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data '{\n "customers": [\n {\n "name":"Customers_name",\n "email":"Customers_email",\n "tags" : [\n {\n "name" : "TagExample",\n "value" : "TagExample"\n },\n {\n "name" : "TagExample",\n "value" : "TagExample"\n }\n ]\n }\n ],\n "schedule_time": Timestamp_in_Seconds\n}'
Tipo Swift (NSURL)
import Foundation
let headers = [
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
]
let postData = NSData(data: "{
"customers": [
{
"name":"Customers_name",
"email":"Customers_email",
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
},
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
],
"schedule_time": Timestamp_in_Seconds
}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://api.tracksale.co/v2/campaign/campaign_code/dispatch")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
Disparo de Lotes:
O disparo deste lote deve ser efetuado usando as seguintes configurações
O body deve ser preenchido com o tempo que o disparo deve ser realizado em segundos, no formato timestamp.
Use 0 para um disparo instantâneo.
Exemplo de requisição:
4>
{
"time": Timestamp_in_seconds
}
Nome |
Tipo |
Obrigatório |
Descrição |
time |
Integer |
Sim |
Tempo que o disparo será realizado, em segundos no formato timestamp |
Exemplo de retorno:
{
"msg":"Dispatch executed!",
"customers":"Number_of_customers",
}
Exemplos de código : Disparo de lotes
Tipo Http
POST /v2/campaign/campaign_code/dispatch/Codigo_lote HTTP/1.1
Host: api.tracksale.co
Authorization: bearer TOKEN
Content-Type: application/json
Cache-Control: no-cache
{
"time": Timestamp_in_Seconds
}
Tipo C(libCurl)
curl -X POST \
https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"time": Timestamp_in_Seconds
}'
Tipo cURL
curl -X POST \
https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"time": Timestamp_in_Seconds
}'
Tipo C#
var client = new RestClient("https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/json");
request.AddHeader("authorization", "bearer TOKEN");
request.AddParameter("application/json", "{\n \"time\": Timestamp_in_Seconds\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Tipo Go
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote"
payload := strings.NewReader("{\n \"time\": Timestamp_in_Seconds\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "bearer TOKEN")
req.Header.Add("content-type", "application/json")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Tipo Java (OK HTTP)
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n \"time\": Timestamp_in_Seconds\n}");
Request request = new Request.Builder()
.url("https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote")
.post(body)
.addHeader("authorization", "bearer TOKEN")
.addHeader("content-type", "application/json")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
Tipo Java Unirest
HttpResponse<String> response = Unirest.post("https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote")
.header("authorization", "bearer TOKEN")
.header("content-type", "application/json")
.header("cache-control", "no-cache")
.body("{\n \"time\": Timestamp_in_Seconds\n}")
.asString();
Tipo JavaScript Jquery AJAX
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote",
"method": "POST",
"headers": {
"authorization": "bearer TOKEN",
"content-type": "application/json",
"cache-control": "no-cache"
},
"data": "{\n \"time\": Timestamp_in_Seconds\n}"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Tipo JavaScript XHR
var data = "{\n \"time\": Timestamp_in_Seconds\n}";
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote");
xhr.setRequestHeader("authorization", "bearer TOKEN");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
Tipo NodeJS Native
var http = require("https");
var options = {
"method": "POST",
"hostname": "api.tracksale.co",
"port": null,
"path": "/v2/campaign/campaign_code/dispatch/Codigo_lote",
"headers": {
"authorization": "bearer TOKEN",
"content-type": "application/json",
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write("{\n \"time\": Timestamp_in_Seconds\n}");
req.end();
Tipo NodeJS Request
var request = require("request");
var options = { method: 'POST',
url: 'https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote',
headers:
{ 'cache-control': 'no-cache',
'content-type': 'application/json',
'authorization': 'bearer TOKEN' },
body: '{\n "time": Timestamp_in_Seconds\n}' };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Tipo NodeJS NodeJS Unirest
var unirest = require("unirest");
var req = unirest("POST", "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote");
req.headers({
"cache-control": "no-cache",
"content-type": "application/json",
"authorization": "bearer TOKEN"
});
req.send("{\n \"time\": Timestamp_in_Seconds\n}");
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Tipo Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"authorization": @"bearer TOKEN",
@"content-type": @"application/json",
@"cache-control": @"no-cache" };
NSData *postData = [[NSData alloc] initWithData:[@"{
"time": Timestamp_in_Seconds
}" dataUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Tipo OCaml(coHttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote" in
let headers = Header.init ()
|> fun h -> Header.add h "authorization" "bearer TOKEN"
|> fun h -> Header.add h "content-type" "application/json"
|> fun h -> Header.add h "cache-control" "no-cache"
in
let body = Cohttp_lwt_body.of_string "{\n \"time\": Timestamp_in_Seconds\n}" in
Client.call ~headers ~body `POST uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
Tipo PHP HttpRequest
<?php
$request = new HttpRequest();
$request->setUrl('https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'content-type' => 'application/json',
'authorization' => 'bearer TOKEN'
));
$request->setBody('{
"time": Timestamp_in_Seconds
}');
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Tipo PHP pecl_http
<?php
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{
"time": Timestamp_in_Seconds
}');
$request->setRequestUrl('https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'content-type' => 'application/json',
'authorization' => 'bearer TOKEN'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Tipo PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n \"time\": Timestamp_in_Seconds\n}",
CURLOPT_HTTPHEADER => array(
"authorization: bearer TOKEN",
"cache-control: no-cache",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Tipo Python http.client(Python 3)
import http.client
conn = http.client.HTTPSConnection("api.tracksale.co")
payload = "{\n \"time\": Timestamp_in_Seconds\n}"
headers = {
'authorization': "bearer TOKEN",
'content-type': "application/json",
'cache-control': "no-cache"
}
conn.request("POST", "/v2/campaign/campaign_code/dispatch/Codigo_lote", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Tipo Python requests
import requests
url = "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote"
payload = "{\n \"time\": Timestamp_in_Seconds\n}"
headers = {
'authorization': "bearer TOKEN",
'content-type': "application/json",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
Tipo Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["authorization"] = 'bearer TOKEN'
request["content-type"] = 'application/json'
request["cache-control"] = 'no-cache'
request.body = "{\n \"time\": Timestamp_in_Seconds\n}"
response = http.request(request)
puts response.read_body
Tipo Shell wget
wget --quiet \
--method POST \
--header 'authorization: bearer TOKEN' \
--header 'content-type: application/json' \
--header 'cache-control: no-cache' \
--body-data '{\n "time": Timestamp_in_Seconds\n}' \
--output-document \
- https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote
Tipo Shell Httpie
echo '{
"time": Timestamp_in_Seconds
}' | \
http POST https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote \
authorization:'bearer TOKEN' \
cache-control:no-cache \
content-type:application/json
Tipo Shell cURL
curl --request POST \
--url https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data '{\n "time": Timestamp_in_Seconds\n}'
Tipo Swift (NSURL)
import Foundation
let headers = [
"authorization": "bearer TOKEN",
"content-type": "application/json",
"cache-control": "no-cache"
]
let postData = NSData(data: "{
"time": Timestamp_in_Seconds
}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://api.tracksale.co/v2/campaign/campaign_code/dispatch/Codigo_lote")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
Inserir Respostas
Fornecemos também um método de inserção de respostas. Esse método pode ser utilizado com os seguintes parâmetros.
- O método será:
POST
- A URL a ser usada deve ser:
https://api.tracksale.co/v2/answer
O body deve ser preenchido com o lote de respostas usando o seguinte padrão
Exemplo de requisição:
4>
{
"campaign_code": "Campaign_code",
"answers":[
{
"name":"Customers_name",
"email":"Customers_email",
"score":Customer_score,
"justification":""Customers_comment"",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}
Parâmetros:
Parâmetro |
Tipo |
Obrigatório |
Descrição |
campaign_code |
String |
Sim |
Chave da campanha alvo. Obtida pelo método Listar
campanhas |
answers |
Array |
Sim |
Lista de respostas |
answers |
Tipo |
Obrigatório |
Descrição |
name |
String |
Sim |
Nome do cliente |
email |
String |
Sim, se o disparo foi realizado por email |
Email do cliente |
phone |
String |
Sim, se o disparo foi realizado por telefone |
Telefone do cliente |
identification |
String |
Não |
Atributo identificador único da sua empresa para o cliente |
score |
Integer |
Sim |
Score do cliente (entre 0 a 10) |
justification |
String |
Não |
Comentário do cliente |
create_time |
Integer |
Não |
Data/hora da resposta no padrão timestamp (em segundos) |
Exemplo de retorno:
{
"msg":"Number_of_answers Answer inserted"
"status": {
"invalid":Number_of_invalids,
"inserted":Number_of_insertions,
}
}
É possível também obter no retorno da requisição um array com os clientes que foram inseridos e os IDs de suas respectivas respostas.
Para isso, deve-se passar o parâmetro de query return_answer_id
com o valor 1
.
Assim retornaremos da seguinte forma:
Exemplo de retorno:
{
"msg":"Number_of_answers Answer inserted"
"status": {
"invalid":Number_of_invalids,
"inserted":Number_of_insertions,
},
"answers": [
{
"answer_id": Answer_id,
"name": "Customers_name",
"email": "Customers_email",
"phone": Customers_phone,
"identification": "Customers_identification"
}
]
}
Exemplos de código : Inserir respostas
Tipo Http
POST /v2/answer HTTP/1.1
Host: api.tracksale
Content-Type: application/json
Authorization: bearer TOKEN
Cache-Control: no-cache
{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}
Tipo C(libCurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.tracksale.co/v2/answer");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "cache-control: no-cache");
headers = curl_slist_append(headers, "authorization: bearer TOKEN");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}");
CURLcode ret = curl_easy_perform(hnd);
Tipo cURL
curl -X POST \
https://api.tracksale.co/v2/answer \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}'
Tipo C#
var client = new RestClient("https://api.tracksale.co/v2/answer");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "bearer TOKEN");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Tipo Go
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.tracksale.co/v2/answer"
payload := strings.NewReader("{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
req.Header.Add("authorization", "bearer TOKEN")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Tipo Java (OK HTTP)
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}");
Request request = new Request.Builder()
.url("https://api.tracksale.co/v2/answer")
.post(body)
.addHeader("content-type", "application/json")
.addHeader("authorization", "bearer TOKEN")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
Tipo Java Unirest
HttpResponse<String> response = Unirest.post("https://api.tracksale.co/v2/answer")
.header("content-type", "application/json")
.header("authorization", "bearer TOKEN")
.header("cache-control", "no-cache")
.body("{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}")
.asString();
Tipo JavaScript Jquery AJAX
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.tracksale.co/v2/answer",
"method": "POST",
"headers": {
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
},
"data": "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Tipo JavaScript XHR
var data = "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}";
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://api.tracksale.co/v2/answer");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "bearer TOKEN");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
Tipo NodeJS Native
var http = require("https");
var options = {
"method": "POST",
"hostname": "api.tracksale.co",
"port": null,
"path": "/v2/answer",
"headers": {
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write("{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}");
req.end();
Tipo NodeJS Request
var request = require("request");
var options = { method: 'POST',
url: 'https://api.tracksale.co/v2/answer',
headers:
{ 'cache-control': 'no-cache',
'authorization': 'bearer TOKEN',
'content-type': 'application/json' },
body: '{\n "campaign_code": "campaign_code",\n "answers":[\n {\n "name":"customers_name",\n "email":"customers_Email",\n "score":Customer_score,\n "justification":"customers_comment",\n "create_time":Timestamp_in_seconds,\n "tags" : [\n {\n "name" : "TagExample",\n "value" : "TagExample"\n }\n ]\n }\n ]\n}' };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Tipo NodeJS NodeJS Unirest
var unirest = require("unirest");
var req = unirest("POST", "https://api.tracksale.co/v2/answer");
req.headers({
"cache-control": "no-cache",
"authorization": "bearer TOKEN",
"content-type": "application/json"
});
req.send("{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}");
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Tipo Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"content-type": @"application/json",
@"authorization": @"bearer TOKEN",
@"cache-control": @"no-cache" };
NSData *postData = [[NSData alloc] initWithData:[@"{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}" dataUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.tracksale.co/v2/answer"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Tipo OCaml(coHttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.tracksale.co/v2/answer" in
let headers = Header.init ()
|> fun h -> Header.add h "content-type" "application/json"
|> fun h -> Header.add h "authorization" "bearer TOKEN"
|> fun h -> Header.add h "cache-control" "no-cache"
in
let body = Cohttp_lwt_body.of_string "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}" in
Client.call ~headers ~body `POST uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
Tipo PHP HttpRequest
<?php
$request = new HttpRequest();
$request->setUrl('https://api.tracksale.co/v2/answer');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN',
'content-type' => 'application/json'
));
$request->setBody('{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}');
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Tipo PHP pecl_http
<?php
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}');
$request->setRequestUrl('https://api.tracksale.co/v2/answer');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN',
'content-type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Tipo PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tracksale.co/v2/answer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}",
CURLOPT_HTTPHEADER => array(
"authorization: bearer TOKEN",
"cache-control: no-cache",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Tipo Python http.client(Python 3)
import http.client
conn = http.client.HTTPSConnection("api.tracksale.co")
payload = "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}"
headers = {
'content-type': "application/json",
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
conn.request("POST", "/v2/answer", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Tipo Python requests
import requests
url = "https://api.tracksale.co/v2/answer"
payload = "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}"
headers = {
'content-type': "application/json",
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
Tipo Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.tracksale.co/v2/answer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["authorization"] = 'bearer TOKEN'
request["cache-control"] = 'no-cache'
request.body = "{\n \"campaign_code\": \"campaign_code\",\n \"answers\":[\n {\n \"name\":\"customers_name\",\n \"email\":\"customers_Email\",\n \"score\":Customer_score,\n \"justification\":\"customers_comment\",\n \"create_time\":Timestamp_in_seconds,\n \"tags\" : [\n {\n \"name\" : \"TagExample\",\n \"value\" : \"TagExample\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body
Tipo Shell wget
wget --quiet \
--method POST \
--header 'content-type: application/json' \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--body-data '{\n "campaign_code": "campaign_code",\n "answers":[\n {\n "name":"customers_name",\n "email":"customers_Email",\n "score":Customer_score,\n "justification":"customers_comment",\n "create_time":Timestamp_in_seconds,\n "tags" : [\n {\n "name" : "TagExample",\n "value" : "TagExample"\n }\n ]\n }\n ]\n}' \
--output-document \
- https://api.tracksale.co/v2/answer
Tipo Shell Httpie
echo '{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}' | \
http POST https://api.tracksale.co/v2/answer \
authorization:'bearer TOKEN' \
cache-control:no-cache \
content-type:application/json
Tipo Shell cURL
curl --request POST \
--url https://api.tracksale.co/v2/answer \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data '{\n "campaign_code": "campaign_code",\n "answers":[\n {\n "name":"customers_name",\n "email":"customers_Email",\n "score":Customer_score,\n "justification":"customers_comment",\n "create_time":Timestamp_in_seconds,\n "tags" : [\n {\n "name" : "TagExample",\n "value" : "TagExample"\n }\n ]\n }\n ]\n}'
Tipo Swift (NSURL)
import Foundation
let headers = [
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
]
let postData = NSData(data: "{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://api.tracksale.co/v2/answer")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
Inserir Múltiplas Respostas
Método de inserção de múltiplas respostas para uma campanha. São aceitas respostas para campanhas com perguntas dos tipos:
NPS, CSAT, Única Escolha, Review, Pergunta Aberta e NPS Secundária.
- O método será:
POST
- A URL a ser usada deve ser:
https://api.tracksale.co/v2/answers
O body deve ser preenchido com o lote de respostas usando o seguinte padrão:
Exemplo de requisição:
{
"campaign_code": "Campaign_code",
"data":[
{
"name":"Customers_name",
"email":"Customers_email",
"phone":"Customers_phone",
"identification":"Customers_identification",
"create_time":Timestamp_in_seconds,
"answers":[
{
"question_id":Question_id,
"score":Customer_score,
"justification":""Customers_comment""
},
{
"question_id":Question_id,
"option":Option_chosen,
},
{
"question_id":Question_id,
"comment":""Customers_comment""
},
],
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}
Parâmetros:
Parâmetro |
Tipo |
Obrigatório |
Descrição |
campaign_code |
String |
Sim |
Chave da campanha alvo. Obtida pelo método Listar campanhas |
data |
Array |
Sim |
Lista de respostas |
data |
Tipo |
Obrigatório |
Descrição |
name |
String |
Sim |
Nome do cliente |
email |
String |
Sim, se o disparo foi realizado por email |
Email do cliente |
phone |
String |
Sim, se o disparo foi realizado por telefone |
Telefone do cliente |
identification |
String |
Não |
Atributo identificador único da sua empresa para o cliente |
create_time |
Integer |
Não |
Data/hora da resposta no padrão timestamp (em segundos) |
answers |
Array |
Sim |
Lista de respostas às perguntas da campanha. Devem estar na mesma ordem definida na campanha. |
tags |
Array |
Não |
Tags para adicionar informações ao cliente |
answers |
Tipo |
Obrigatório |
Tipo de pergunta |
Descrição |
question_id |
Integer |
Sim |
NPS, CSAT, Review, Única Escolha, Pergunta Aberta, NPS secundária |
Id da pergunta |
score |
String|Integer |
Sim |
NPS, CSAT, Review, NPS secundária |
Nota do cliente. |
justification |
String |
Não |
NPS, CSAT, Review, NPS secundária |
Comentário do cliente. |
option |
String |
Não |
Única Escolha |
Opção escolhida pelo cliente. Opcional apenas caso a pergunta esteja configurada como opcional. |
comment |
String |
Sim |
Pergunta Aberta |
Comentário do cliente. |
Exemplo de retorno:
{
"msg":"Number_of_answers Answer inserted",
"status": {
"invalid":Number_of_invalids,
"inserted":Number_of_insertions,
},
"answers": [
{
"answer_id": Answer_id,
"name": "Customers_name",
"email": "Customers_email",
"phone": Customers_phone,
"identification": "Customers_identification"
}
]
}
Exemplo de código: Inserir Múltiplas Respostas
A ordem das respostas deve estar na mesma ordem das perguntas definida na campanha. Caso contrário, a resposta será considerada inválida.
Tipo Http
POST /v2/answer HTTP/1.1
Host: api.tracksale
Content-Type: application/json
Authorization: bearer TOKEN
Cache-Control: no-cache
{
"campaign_code": "campaign_code",
"data": [
{
"name": "customers_name",
"email": "customers_email",
"phone": "customers_phoneemail",
"identification": "customers_identification",
"create_time": Timestamp_in_seconds,
"answers": [
{
"question_id": 12345,
"score": 10,
"justification": "NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "Review example"
},
{
"question_id": 12345,
"option": "Single Choice Question example"
},
{
"question_id": 12345,
"comment": "Open Question example"
},
{
"question_id": 12345,
"score": 10,
"justification": "Secondary NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "CSAT example"
}
],
"tags": [
{
"name": "TagExample",
"value": "TagExample"
}
]
}
]
}
Tipo C(libCurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.tracksale.co/v2/answers");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "cache-control: no-cache");
headers = curl_slist_append(headers, "authorization: bearer TOKEN");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}");
CURLcode ret = curl_easy_perform(hnd);
Tipo cURL
curl -X POST \
https://api.tracksale.co/v2/answers \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"campaign_code": "campaign_code",
"data": [
{
"name": "customers_name",
"email": "customers_email",
"phone": "customers_phoneemail",
"identification": "customers_identification",
"create_time": Timestamp_in_seconds,
"answers": [
{
"question_id": 12345,
"score": 10,
"justification": "NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "Review example"
},
{
"question_id": 12345,
"option": "Single Choice Question example"
},
{
"question_id": 12345,
"comment": "Open Question example"
},
{
"question_id": 12345,
"score": 10,
"justification": "Secondary NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "CSAT example"
}
],
"tags": [
{
"name": "TagExample",
"value": "TagExample"
}
]
}
]
}'
Tipo C#
var client = new RestClient("https://api.tracksale.co/v2/answers");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "bearer TOKEN");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Tipo Go
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.tracksale.co/v2/answers"
payload := strings.NewReader("{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
req.Header.Add("authorization", "bearer TOKEN")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Tipo Java (OK HTTP)
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}");
Request request = new Request.Builder()
.url("https://api.tracksale.co/v2/answers")
.post(body)
.addHeader("content-type", "application/json")
.addHeader("authorization", "bearer TOKEN")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
Tipo Java Unirest
HttpResponse<String> response = Unirest.post("https://api.tracksale.co/v2/answers")
.header("content-type", "application/json")
.header("authorization", "bearer TOKEN")
.header("cache-control", "no-cache")
.body("{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}")
.asString();
Tipo JavaScript Jquery AJAX
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.tracksale.co/v2/answers",
"method": "POST",
"headers": {
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
},
"data": "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Tipo JavaScript XHR
var data = "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}";
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://api.tracksale.co/v2/answers");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "bearer TOKEN");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
Tipo NodeJS Native
var http = require("https");
var options = {
"method": "POST",
"hostname": "api.tracksale.co",
"port": null,
"path": "/v2/answer",
"headers": {
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write("{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}");
req.end();
Tipo NodeJS Request
var request = require("request");
var options = { method: 'POST',
url: 'https://api.tracksale.co/v2/answers',
headers:
{ 'cache-control': 'no-cache',
'authorization': 'bearer TOKEN',
'content-type': 'application/json' },
body: '{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}' };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Tipo NodeJS NodeJS Unirest
var unirest = require("unirest");
var req = unirest("POST", "https://api.tracksale.co/v2/answers");
req.headers({
"cache-control": "no-cache",
"authorization": "bearer TOKEN",
"content-type": "application/json"
});
req.send("{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}");
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Tipo Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"content-type": @"application/json",
@"authorization": @"bearer TOKEN",
@"cache-control": @"no-cache" };
NSData *postData = [[NSData alloc] initWithData:[@"{
"campaign_code": "campaign_code",
"data": [
{
"name": "customers_name",
"email": "customers_email",
"phone": "customers_phoneemail",
"identification": "customers_identification",
"create_time": Timestamp_in_seconds,
"answers": [
{
"question_id": 12345,
"score": 10,
"justification": "NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "Review example"
},
{
"question_id": 12345,
"option": "Single Choice Question example"
},
{
"question_id": 12345,
"comment": "Open Question example"
},
{
"question_id": 12345,
"score": 10,
"justification": "Secondary NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "CSAT example"
}
],
"tags": [
{
"name": "TagExample",
"value": "TagExample"
}
]
}
]
}" dataUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.tracksale.co/v2/answers"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Tipo OCaml(coHttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.tracksale.co/v2/answers" in
let headers = Header.init ()
|> fun h -> Header.add h "content-type" "application/json"
|> fun h -> Header.add h "authorization" "bearer TOKEN"
|> fun h -> Header.add h "cache-control" "no-cache"
in
let body = Cohttp_lwt_body.of_string "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}" in
Client.call ~headers ~body `POST uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
Tipo PHP HttpRequest
<?php
$request = new HttpRequest();
$request->setUrl('https://api.tracksale.co/v2/answers');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN',
'content-type' => 'application/json'
));
$request->setBody('{
"campaign_code": "campaign_code",
"data": [
{
"name": "customers_name",
"email": "customers_email",
"phone": "customers_phoneemail",
"identification": "customers_identification",
"create_time": Timestamp_in_seconds,
"answers": [
{
"question_id": 12345,
"score": 10,
"justification": "NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "Review example"
},
{
"question_id": 12345,
"option": "Single Choice Question example"
},
{
"question_id": 12345,
"comment": "Open Question example"
},
{
"question_id": 12345,
"score": 10,
"justification": "Secondary NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "CSAT example"
}
],
"tags": [
{
"name": "TagExample",
"value": "TagExample"
}
]
}
]
}');
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Tipo PHP pecl_http
<?php
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{
"campaign_code": "campaign_code",
"data": [
{
"name": "customers_name",
"email": "customers_email",
"phone": "customers_phoneemail",
"identification": "customers_identification",
"create_time": Timestamp_in_seconds,
"answers": [
{
"question_id": 12345,
"score": 10,
"justification": "NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "Review example"
},
{
"question_id": 12345,
"option": "Single Choice Question example"
},
{
"question_id": 12345,
"comment": "Open Question example"
},
{
"question_id": 12345,
"score": 10,
"justification": "Secondary NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "CSAT example"
}
],
"tags": [
{
"name": "TagExample",
"value": "TagExample"
}
]
}
]
}');
$request->setRequestUrl('https://api.tracksale.co/v2/answers');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN',
'content-type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Tipo PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tracksale.co/v2/answers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}",
CURLOPT_HTTPHEADER => array(
"authorization: bearer TOKEN",
"cache-control: no-cache",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Tipo Python http.client(Python 3)
import http.client
conn = http.client.HTTPSConnection("api.tracksale.co")
payload = "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}"
headers = {
'content-type': "application/json",
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
conn.request("POST", "/v2/answer", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Tipo Python requests
import requests
url = "https://api.tracksale.co/v2/answers"
payload = "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}"
headers = {
'content-type': "application/json",
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
Tipo Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.tracksale.co/v2/answers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["authorization"] = 'bearer TOKEN'
request["cache-control"] = 'no-cache'
request.body = "{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body
Tipo Shell wget
wget --quiet \
--method POST \
--header 'content-type: application/json' \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--body-data '{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}' \
--output-document \
- https://api.tracksale.co/v2/answers
Tipo Shell Httpie
echo '{
"campaign_code": "campaign_code",
"answers":[
{
"name":"customers_name",
"email":"customers_Email",
"score":Customer_score,
"justification":"customers_comment",
"create_time":Timestamp_in_seconds,
"tags" : [
{
"name" : "TagExample",
"value" : "TagExample"
}
]
}
]
}' | \
http POST https://api.tracksale.co/v2/answers \
authorization:'bearer TOKEN' \
cache-control:no-cache \
content-type:application/json
Tipo Shell cURL
curl --request POST \
--url https://api.tracksale.co/v2/answers \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data '{\n \"campaign_code\": \"campaign_code\",\n \"data\": [\n {\n \"name\": \"customers_name\",\n \"email\": \"customers_email\",\n \"phone\": \"customers_phoneemail\",\n \"identification\": \"customers_identification\",\n \"create_time\": Timestamp_in_seconds,\n \"answers\": [\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"NPS example\",\n \"tags\": [\n {\n \"name\": \"TagExample\",\n \"value\": \"TagExample\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"Review example\"\n },\n {\n \"question_id\": 12345,\n \"option\": \"Single Choice Question example\"\n },\n {\n \"question_id\": 12345,\n \"comment\": \"Open Question example\"\n },\n {\n \"question_id\": 12345,\n \"score\": 10,\n \"justification\": \"Secondary NPS example\",\n \"tags\": [\n {\n \"name\": \"TagSecondary\",\n \"value\": \"TagSecondary\"\n }\n ]\n },\n {\n \"question_id\": 12345,\n \"score\": 5,\n \"justification\": \"CSAT example\"\n }\n ]\n }\n ]\n}'
Tipo Swift (NSURL)
import Foundation
let headers = [
"content-type": "application/json",
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
]
let postData = NSData(data: "{
"campaign_code": "campaign_code",
"data": [
{
"name": "customers_name",
"email": "customers_email",
"phone": "customers_phoneemail",
"identification": "customers_identification",
"create_time": Timestamp_in_seconds,
"answers": [
{
"question_id": 12345,
"score": 10,
"justification": "NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "Review example"
},
{
"question_id": 12345,
"option": "Single Choice Question example"
},
{
"question_id": 12345,
"comment": "Open Question example"
},
{
"question_id": 12345,
"score": 10,
"justification": "Secondary NPS example"
},
{
"question_id": 12345,
"score": 5,
"justification": "CSAT example"
}
],
"tags": [
{
"name": "TagExample",
"value": "TagExample"
}
]
}
]
}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "https://api.tracksale.co/v2/answers")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
Inserir Notas Internas
Fornecemos também um método de inserção de notas internas. Esse método pode ser utilizado com os seguintes parâmetros.
- O método será:
POST
- A URL a ser usada deve ser:
https://api.tracksale.co/v2/note
O body deve ser preenchido com o comentário, usando o seguinte padrão
Exemplo de requisição:
{
"comment": "Comment_Text",
"answer_id": Answer_ID
}
Parâmetros:
Parâmetro |
Tipo |
Obrigatório |
Descrição |
comment |
String |
Sim |
Comentário a ser inserido na nota |
answer_id |
Integer |
Não |
Id da resposta, caso não seja informado é necessário utilizar o filter abaixo |
filter |
Array |
Não |
Se o ID da resposta não for enviado, o Filter deverá ser enviado usando o seguinte padrão: |
Exemplo de requisição:
{
"comment": "Comment_Text",
"filter": {
"email":"Customer_Email",
"start_date":"Start_Date",
"end_date":"End_date"
}
}
Filtros |
Tipo |
Obrigatório |
Descrição |
email |
String |
Não, para utilizar o filter é necessário utilizar pelo menos um identificador (e-mail ou phone ou identification) |
Email do cliente |
phone |
String |
Não, para utilizar o filter é necessário utilizar pelo menos um identificador (e-mail ou phone ou identification) |
Telefone do cliente |
identification |
String |
Não, para utilizar o filter é necessário utilizar pelo menos um identificador (e-mail ou phone ou identification) |
Identification do cliente |
start_date |
Date |
Não, para utilizar o filter é necessário definir uma data |
Data pode ser utilizada no formato AAAA-MM-DD. Ex: 2017-01-31 |
end_date |
Date |
Não, para utilizar o filter é necessário definir uma data |
Data pode ser utilizada no formato AAAA-MM-DD. Ex: 2017-01-31 |
campaign_code |
String |
Não |
Code da campanha |
Exemplo de retorno:
{
"msg":"Success",
"answer_id":123456
}
Fornecemos um método de solicitação de preenchimento de tags vazias. Esse método pode ser utilizado com os seguintes parâmetros.
- O método será:
POST
- A URL a ser usada deve ser:
https://api.tracksale.co/v2/fill-empty-tags
O body deve ser enviado com as tags a serem preenchidas na resposta, usando o seguinte padrão
Limites de envio:
1 cliente por requisição.
Máximo de 50 tags por requisição.
Exemplo de requisição:
{
"answer_id": Answer_ID,
"tags": [
{
"name": "Tag name",
"value": "Tag value"
},
{
"name": "Tag name",
"value": "Tag value"
}
]
}
Parâmetros:
Parâmetro |
Tipo |
Obrigatório |
Descrição |
answer_id |
Integer |
Não |
Id da resposta, caso não seja informado é necessário utilizar o
abaixo |
tags |
Array |
Sim |
Nome da tag |
customer |
Array |
Não |
Se o ID da resposta não for enviado, o customer deverá ser enviado usando o seguinte padrão: |
tags |
Tipo |
Obrigatório |
Descrição |
name |
String |
Sim |
Nome da tag |
value |
String |
Sim |
Valor da Tag |
Exemplo de requisição:
{
"campaign_code": "Campaign_code",
"customer": {
"email":"Customer_Email",
},
"tags": [
{
"name": "Tag name",
"value": "Tag value"
},
{
"name": "Tag name",
"value": "Tag value"
}
]
}
customer |
Tipo |
Obrigatório |
Descrição |
email |
String |
Não, para utilizar o customer é necessário utilizar pelo menos um identificador (e-mail ou phone ou identification) |
Email do cliente |
phone |
String |
Não, para utilizar o customer é necessário utilizar pelo menos um identificador (e-mail ou phone ou identification) |
Telefone do cliente |
identification |
String |
Não, para utilizar o customer é necessário utilizar pelo menos um identificador (e-mail ou phone ou identification) |
Identification do cliente |
campaign_code |
String |
Não |
Code da campanha |
Exemplo de retorno:
{
"answer_id":12345,
"msg":"Request received successfully!"
}
Consultar lotes de rascunho
Para listar os lotes de rascunho utilizaremos a seguinte configuração
- O método usado será :
GET
- A URL usada será :
https://api.tracksale.co/v2/campaign/{code}/draft-lot
Este método é responsável por listar todos os lotes de rascunho da campanha.
Onde code é o código da campanha que você deseja obter informações.
Certifique-se de usar o parâmetro code
.
Exemplo de retorno:
{
"lot": [
{
"code": "Lot_code",
"create_time": "Create_Time",
"total_dispatches": "Total_dispatches",
}
]
}
Descartar lotes de rascunho
Para descartar os lotes de rascunho utilizaremos a seguinte configuração
- O método usado será :
POST
- A URL usada será :
https://api.tracksale.co/v2/campaign/{code}/discard-lot/{lot_code}
Este método é responsável por descartar todos os lotes de rascunho da campanha.
Onde lot_code é o código do lote que você deseja realizar o descarte.
Certifique-se de usar o parâmetro lot_code
.
Exemplo de retorno:
{
"success": true
}
Reports é nosso método para geração de relatórios, é responsável por mostrar detalhes de todas suas campanhas ou de uma campanha.
Toda a comunicação da API é feita a partir da URL base
https://api.tracksale.co/v2/report/DETALHES
.
Onde DETALHES deverá ser substituído pelos detalhes que você deseja
obter através da requisição
O método a ser usado será o GET
O header deve ser preenchido com os parametros onde
-
Key
Authorization
-
Value
bearer TOKEN
Comentários
O método a ser usado deve ser :GET
A URL a ser usada deve ser :https://api.tracksale.co/v2/report/answer
Método responsável por retornar os comentários dos clientes.
Parâmetros:
Parâmetro |
Tipo |
Padrão |
Obrigatório |
Descrição |
start |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
end |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
limit |
Integer |
Por padrão mostrará 10 comentários por requisição. |
Não |
Total de comentários a serem retornados. Utilize -1 para retornar todos.
|
tags |
Boolean |
Por padrão é falso, ou seja, nenhuma tag será mostrada. |
Não |
Retorna as tags referentes às respostas |
justifReturn |
String |
Por padrão mostraremos o formato "level" |
Não |
Formato de retorno das justificativas.
"array" - Retorna todas em um único array.
"level" - Retorna formato JSON com subníveis de justificativas
agrupadas.
|
codes |
String |
Por padrão mostrará os comentários de todas as campanhas |
Não |
Usado para mostrar os comentários de uma campanha específica, ou os
comentários de todas as campanhas. Pode-se também mostrar os comentários de
mais de uma campanha por vez, para isso utilize a vírgula como separador
(Ex: codes=52,51,50 mostrará os comentários das campanhas cujo Campaign_code é
50, 51 e 52) |
review |
Integer |
Por padrão é 0, ou seja, nenhum comentário é retornado |
Não |
Usado para mostrar as notas e comentários de perguntas do tipo Review. |
nps_secondary |
Integer |
Por padrão é 0, ou seja, nenhum comentário é retornado |
Não |
Usado para mostrar as notas e comentários das demais perguntas do tipo NPS além da pergunta do tipo NPS obrigatória em toda campanha. |
open_question |
Integer |
Por padrão é 0, ou seja, nenhum comentário é retornado |
Não |
Usado para mostrar os comentários de perguntas do tipo Pergunta Aberta. |
csat |
Integer |
Por padrão é 0, ou seja, nenhum comentário é retornado |
Não |
Usado para mostrar os comentários de perguntas do tipo CSAT. |
return_update_time |
Boolean |
Por padráo é false |
Não |
Retorna a data da última alteração efetuada na opinião, como por exemplo, mudanças de responsável, status ou categoria. |
Exemplo de retorno:
[
{
"time": 1454340407,
"type": "Email",
"name": "Customers_name",
"email": "Customers_email",
"identification": null,
"phone": "Customers_phone",
"alternative_email": "Customers_email",
"alternative_phone": "Customers_phone",
"nps_answer": Score,
"last_nps_answer": Score,
"nps_comment": Comment,
"campaign_name": "Campaign_name",
"campaign_code": "Campaign_code",
"lot_code": "ABCDEFG123",
"id": 6805511,
"deadline": null,
"elapsed_time": 17,
"dispatch_time": null,
"reminder_time": null,
"status": "Status",
"priority": "None",
"assignee": "Assignee_name",
"picture": null,
"tags": [],
"categories": [],
"justifications": [],
"review": [],
"nps_secondary": [],
"open_question": [],
"csat": [],
"update_time": 1454340407
}
]
Disparos
O método a ser usado deve ser : GET
A URL a ser usada deve ser:https://api.tracksale.co/v2/report/dispatch
Método responsável por retornar os disparos e seus dados, como clientes inseridos , a hora que foi realizado,
seu status e os clientes que foram inseridos no mesmo.
Exemplo de retorno:
[
{
"campaign": {
"name": "Camapaign_name",
"code": "Campaign_code"
},
"dispatch_code": "Code_of_dispatch",
"status": Status_of_dispatch,
"create_time": "Campaign_creation_time",
"customers": [
{
"name": "Customers_name",
"identification": null,
"email": "Customers_email",
"phone": "Customers_phone",
"dispatch_time": "Code_of_dispatch",
"status": "Status_of_dispatch",
"has_answered": "Status_of_answer"
}
],
"channel": "Channel_of_dispatch"
}
]
Parâmetros:
Parâmetro |
Tipo |
Padrão |
Obrigatório |
Descrição |
start |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
end |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
codes |
String |
Por padrão mostrará os comentários de todas as campanhas |
Não |
Usado para mostrar os comentários de uma campanha específica, ou os
comentários de todas as campanhas. Pode-se também mostrar os comentários de
mais de uma campanha por vez, para isso utilize a vírgula como separador.
(Ex: codes=52,51,50 mostrará os comentários das campanhas cujo Campaign_code é
50, 51 e 52) |
channel |
Boolean |
Por padrão é false, ou seja, não retorna o canal dos disparos. |
Não |
Usado para retornar o canal de envio dos disparos. Por exemplo: Email, WhatsApp, SMS, etc. |
Disparos Paginados
O método a ser usado deve ser :GET
A URL a ser usada deve ser:https://apiv3.track.co/dispatch
Método responsável por retornar de forma paginada os disparos e seus dados, a hora que foi realizado, seu status e os clientes que foram inseridos no mesmo.
É possível que se retorne apenas um lote específico, isso é possivel usando
Onde Dispatch_code é o código do lote de disparo que você deseja obter
informações.
Ao filtrar por um código de lote específico, os parâmetros start
e end
serão desconsiderados.
Exemplo de retorno:
{
"code": "Response_code",
"status": "Response_status",
"data":
[
{
"campaign":
{
"code": "Campaign_code",
"name": "Campaign_name"
},
"lot":
{
"create_time": "Campaign_creation_time",
"dispatch_code": "Code_of_dispatch",
"status": "Status_of_dispatch",
"channel": "Channel_of_dispatch"
},
"customer":
{
"name": "Customers_name",
"identification": null,
"email": "Customers_email",
"phone": "Customers_phone",
"dispatch_time": "Code_of_dispatch",
"status": "Status_of_dispatch",
"has_answered": "Status_of_answer",
"survey_opened": "Survey_opened"
},
}
]
}
Parâmetros:
Parâmetro |
Tipo |
Padrão |
Obrigatório |
Descrição |
start |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
end |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
codes |
String |
Por padrão mostrará os comentários de todas as campanhas |
Não |
Usado para mostrar os comentários de uma campanha específica, ou os
comentários de todas as campanhas. Pode-se também mostrar os comentários de
mais de uma campanha por vez, para isso utilize a vírgula como separador.
(Ex: codes=52,51,50 mostrará os comentários das campanhas cujo Campaign_code é
50, 51 e 52) |
channel |
Boolean |
Por padrão é false, ou seja, não retorna o canal dos disparos. |
Não |
Usado para retornar o canal de envio dos disparos. Por exemplo: Email, WhatsApp, SMS, etc. |
tags |
Boolean |
Por padrão é false, ou seja, não retorna as tags referentes aos disparos. |
Não |
Usado para retornar as tags referentes aos disparos. Por exemplo: Cidade, Departamento, Produto, etc. |
page |
Integer |
Por padrão é igual à 1, ou seja, retorna a primeira página dos disparos. |
1 |
Usado para obter determinada página dos disparos. |
limit |
Integer |
Por padrão é igual à 100, retorna até 100 registros por página. |
100 |
Usado para controlar a quantidade de registros obtidas em cada página, podendo variar de 100 até 10.000. |
NPS
O método a ser usado deve ser : GET
A URL a ser usada deve ser:https://api.tracksale.co/v2/report/nps
Método responsável por retornar o numero de disparos, os numeros de detratores,
promotores e neutros e suas respectivas porcentagens e também o valor do nps.
Parâmetros:
Parâmetro |
Tipo |
Padrão |
Obrigatório |
Descrição |
start |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data inicial no formato aaaa-mm-dd |
end |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data final no formato aaaa-mm-dd |
compare |
Boolean |
Por padráo é false |
Não |
Retorna os dados do NPS referente ao período anterior do filtro de data.
|
codes |
String |
Por padrão mostrará os comentários de todas as campanhas |
Não |
Usado para mostrar os comentários de uma campanha específica, ou os
comentários de todas as campanhas. Pode-se também mostrar os comentários de
mais de uma campanha por vez, para isso utilize a vírgula como separador
(Ex: codes=52,51,50 mostrará os comentários das campanhas cujo Campaign_code é
50, 51 e 52) |
Exemplo de retorno:
{
"dispatches": Number_of_dispatches,
"promoters": Number_of_promoter,
"detractors": Number_of_detractors,
"passives": Number_of_neutrals,
"detractors_percentage": Percentage_of_detractors,
"passives_percentage": Percentage_of_neutrals,
"promoters_percentage": Percentage_of_promoters,
"nps": Period_NPS,
"compare": {
"dispatches": Number_of_dispatches,
"promoters": Number_of_promoter,
"detractors": Number_of_detractors,
"passives": Number_of_neutrals,
"detractors_percentage": Percentage_of_detractors,
"passives_percentage": Percentage_of_neutrals,
"promoters_percentage": Percentage_of_promoters,
"nps": Period_NPS,
}
}
Categorias
O método a ser usado deve ser :GET
A URL a ser usada deve ser: https://api.tracksale.co/v2/report/category
Método responsável por retornar as categorias das campanhas de acordo com o NPS.
Parâmetros:
Parâmetro |
Tipo |
Padrão |
Obrigatório |
Descrição |
start |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
end |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
codes |
String |
Por padrão mostrará os comentários de todas as campanhas |
Não |
Usado para mostrar os comentários de uma campanha específica, ou os
comentários de todas as campanhas. Pode-se também mostrar os comentários de
mais de uma campanha por vez, para isso utilize a vírgula como separador.
(Ex: codes=52,51,50 mostrará os comentários das campanhas cujo Campaign_code é
50, 51 e 52) |
Exemplo de retorno:
[
{
"id": 6805511,
"name": "Product",
"color": "#F8D347",
"total": 25,
"nps": Period_NPS,
"total": total,
}
]
Obter status das campanhas
O método a ser usado deve ser :GET
A URL a ser usada deve ser: https://api.tracksale.co/v2/report/status
Método responsável por retornar os status das campanhas.
Parâmetros:
Parâmetro |
Tipo |
Padrão |
Obrigatório |
Descrição |
start |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
end |
Date |
Por padrão mostraremos resultados 30 dias anteriores a data que está
realizando a requisição (Ex: se você está fazendo essa requisição no
dia 31/01/2017 e não incluir o intervalo inicial e final que você deseja
fazer sua pesquisa, o período retornado será de 01/01/2017 a
31/01/2017) |
Não |
Data pode ser utilizada no formato AAAA-MM-DD ou especificando a hora no formato AAAA-MM-DDTHH:mm:ss. Ex: 2017-01-31T12:00:00 |
codes |
String |
Por padrão mostrará os comentários de todas as campanhas |
Não |
Usado para mostrar os comentários de uma campanha específica, ou os
comentários de todas as campanhas. Pode-se também mostrar os comentários de
mais de uma campanha por vez, para isso utilize a vírgula como separador.
(Ex: codes=52,51,50 mostrará os comentários das campanhas cujo Campaign_code é
50, 51 e 52) |
Exemplo de retorno:
[
{
"id": 76,
"name": "Pendente Cliente",
"total": 25,
"color": "#F8D347"
}
]
Exemplos de código : Reports /DETALHES
Tipo Http
GET /v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM HTTP/1.1
Host: api.tracksale
Authorization: bearer TOKEN
Cache-Control: no-cache
Tipo C(libCurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "cache-control: no-cache");
headers = curl_slist_append(headers, "authorization: bearer TOKEN");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);
Tipo cURL
curl -X GET \
'https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM' \
-H 'authorization: bearer TOKEN' \
-H 'cache-control: no-cache'
Tipo C#
var client = new RestClient("https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "bearer TOKEN");
IRestResponse response = client.Execute(request);
Tipo Go
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("authorization", "bearer TOKEN")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Tipo Java (OK HTTP)
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM")
.get()
.addHeader("authorization", "bearer TOKEN")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
Tipo Java Unirest
HttpResponse<String> response = Unirest.get("https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM")
.header("authorization", "bearer TOKEN")
.header("cache-control", "no-cache")
.asString();
Tipo JavaScript Jquery AJAX
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM",
"method": "GET",
"headers": {
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Tipo JavaScript XHR
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM");
xhr.setRequestHeader("authorization", "bearer TOKEN");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
Tipo NodeJS Native
var http = require("https");
var options = {
"method": "GET",
"hostname": "api.tracksale.co",
"port": null,
"path": "/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM",
"headers": {
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
Tipo NodeJS Request
var request = require("request");
var options = { method: 'GET',
url: 'https://api.tracksale.co/v2/report/DETALHES',
qs: { start: 'DATA_INICIO', end: 'DATA_FIM' },
headers:
{ 'cache-control': 'no-cache',
'authorization': 'bearer TOKEN' } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Tipo NodeJS NodeJS Unirest
var unirest = require("unirest");
var req = unirest("GET", "https://api.tracksale.co/v2/report/DETALHES");
req.query({
"start": "DATA_INICIO",
"end": "DATA_FIM"
});
req.headers({
"cache-control": "no-cache",
"authorization": "bearer TOKEN"
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Tipo Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"authorization": @"bearer TOKEN",
@"cache-control": @"no-cache" };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Tipo OCaml(coHttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM" in
let headers = Header.init ()
|> fun h -> Header.add h "authorization" "bearer TOKEN"
|> fun h -> Header.add h "cache-control" "no-cache"
in
Client.call ~headers `GET uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
Tipo PHP HttpRequest
<?php
$request = new HttpRequest();
$request->setUrl('https://api.tracksale.co/v2/report/DETALHES');
$request->setMethod(HTTP_METH_GET);
$request->setQueryData(array(
'start' => 'DATA_INICIO',
'end' => 'DATA_FIM'
));
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN'
));
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Tipo PHP pecl_http
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://api.tracksale.co/v2/report/DETALHES');
$request->setRequestMethod('GET');
$request->setQuery(new http\QueryString(array(
'start' => 'DATA_INICIO',
'end' => 'DATA_FIM'
)));
$request->setHeaders(array(
'cache-control' => 'no-cache',
'authorization' => 'bearer TOKEN'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Tipo PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"authorization: bearer TOKEN",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Tipo Python http.client(Python 3)
import http.client
conn = http.client.HTTPSConnection("api.tracksale.co")
headers = {
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
conn.request("GET", "/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Tipo Python requests
import requests
url = "https://api.tracksale.co/v2/report/DETALHES"
querystring = {"start":"DATA_INICIO","end":"DATA_FIM"}
headers = {
'authorization': "bearer TOKEN",
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
Tipo Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(url)
request["authorization"] = 'bearer TOKEN'
request["cache-control"] = 'no-cache'
response = http.request(request)
puts response.read_body
Tipo Shell wget
wget --quiet \
--method GET \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache' \
--output-document \
- 'https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM'
Tipo Shell Httpie
http GET 'https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM' \
authorization:'bearer TOKEN' \
cache-control:no-cache
Tipo Shell cURL
curl --request GET \
--url 'https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM' \
--header 'authorization: bearer TOKEN' \
--header 'cache-control: no-cache'
Tipo Swift (NSURL)
import Foundation
let headers = [
"authorization": "bearer TOKEN",
"cache-control": "no-cache"
]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.tracksale.co/v2/report/DETALHES?start=DATA_INICIO&end=DATA_FIM")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()