curl --request POST \
--url https://clientapi.woku.app/v1/nps \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"score": 9,
"flowId": "<string>",
"npsToolId": "<string>",
"clientEmail": "jsmith@example.com",
"clientPhone": "<string>",
"anonymous": true,
"responseChannel": "my-crm",
"dispatchToken": "a1b2c3d4-..."
}
'import requests
url = "https://clientapi.woku.app/v1/nps"
payload = {
"score": 9,
"flowId": "<string>",
"npsToolId": "<string>",
"clientEmail": "jsmith@example.com",
"clientPhone": "<string>",
"anonymous": True,
"responseChannel": "my-crm",
"dispatchToken": "a1b2c3d4-..."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
score: 9,
flowId: '<string>',
npsToolId: '<string>',
clientEmail: 'jsmith@example.com',
clientPhone: '<string>',
anonymous: true,
responseChannel: 'my-crm',
dispatchToken: 'a1b2c3d4-...'
})
};
fetch('https://clientapi.woku.app/v1/nps', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://clientapi.woku.app/v1/nps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'score' => 9,
'flowId' => '<string>',
'npsToolId' => '<string>',
'clientEmail' => 'jsmith@example.com',
'clientPhone' => '<string>',
'anonymous' => true,
'responseChannel' => 'my-crm',
'dispatchToken' => 'a1b2c3d4-...'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://clientapi.woku.app/v1/nps"
payload := strings.NewReader("{\n \"score\": 9,\n \"flowId\": \"<string>\",\n \"npsToolId\": \"<string>\",\n \"clientEmail\": \"jsmith@example.com\",\n \"clientPhone\": \"<string>\",\n \"anonymous\": true,\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://clientapi.woku.app/v1/nps")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"score\": 9,\n \"flowId\": \"<string>\",\n \"npsToolId\": \"<string>\",\n \"clientEmail\": \"jsmith@example.com\",\n \"clientPhone\": \"<string>\",\n \"anonymous\": true,\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/nps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"score\": 9,\n \"flowId\": \"<string>\",\n \"npsToolId\": \"<string>\",\n \"clientEmail\": \"jsmith@example.com\",\n \"clientPhone\": \"<string>\",\n \"anonymous\": true,\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": [
"email must be a valid email",
"password must be at least 8 characters"
],
"error": "Bad Request"
}Captura una puntuación NPS (a nivel de empresa o específica de la herramienta)
curl --request POST \
--url https://clientapi.woku.app/v1/nps \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"score": 9,
"flowId": "<string>",
"npsToolId": "<string>",
"clientEmail": "jsmith@example.com",
"clientPhone": "<string>",
"anonymous": true,
"responseChannel": "my-crm",
"dispatchToken": "a1b2c3d4-..."
}
'import requests
url = "https://clientapi.woku.app/v1/nps"
payload = {
"score": 9,
"flowId": "<string>",
"npsToolId": "<string>",
"clientEmail": "jsmith@example.com",
"clientPhone": "<string>",
"anonymous": True,
"responseChannel": "my-crm",
"dispatchToken": "a1b2c3d4-..."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
score: 9,
flowId: '<string>',
npsToolId: '<string>',
clientEmail: 'jsmith@example.com',
clientPhone: '<string>',
anonymous: true,
responseChannel: 'my-crm',
dispatchToken: 'a1b2c3d4-...'
})
};
fetch('https://clientapi.woku.app/v1/nps', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://clientapi.woku.app/v1/nps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'score' => 9,
'flowId' => '<string>',
'npsToolId' => '<string>',
'clientEmail' => 'jsmith@example.com',
'clientPhone' => '<string>',
'anonymous' => true,
'responseChannel' => 'my-crm',
'dispatchToken' => 'a1b2c3d4-...'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://clientapi.woku.app/v1/nps"
payload := strings.NewReader("{\n \"score\": 9,\n \"flowId\": \"<string>\",\n \"npsToolId\": \"<string>\",\n \"clientEmail\": \"jsmith@example.com\",\n \"clientPhone\": \"<string>\",\n \"anonymous\": true,\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://clientapi.woku.app/v1/nps")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"score\": 9,\n \"flowId\": \"<string>\",\n \"npsToolId\": \"<string>\",\n \"clientEmail\": \"jsmith@example.com\",\n \"clientPhone\": \"<string>\",\n \"anonymous\": true,\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/nps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"score\": 9,\n \"flowId\": \"<string>\",\n \"npsToolId\": \"<string>\",\n \"clientEmail\": \"jsmith@example.com\",\n \"clientPhone\": \"<string>\",\n \"anonymous\": true,\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": [
"email must be a valid email",
"password must be at least 8 characters"
],
"error": "Bad Request"
}Autorizaciones
Clave API secreta de la empresa.
Cuerpo
Puntuación de NPS 0-10 (0-6 detractor, 7-8 pasivo, 9-10 promotor)
0 <= x <= 109
Procedencia de recolección. Las entradas históricas que la omiten conservan un contexto desconocido y no activan seguimiento.
standalone, flow Obligatorio para capturas de Flow; se valida contra la empresa y el instrumento.
Id opcional de la tool NPS. Con él, la captura es específica de la tool. Sin él, es a nivel de empresa.
Correo electrónico del encuestado. Omitir para una captura anónima.
Teléfono del cliente cuando no se proporciona email.
Si el envío es anónimo, no se almacena el email del cliente.
Canal de respuesta entrante. El valor predeterminado es 'api'; un valor proporcionado aquí REEMPLAZA 'api' (canal definido por el usuario). Se almacena en el NPS.
48"my-crm"
Token opaco de despacho de invitación reflejado desde el enlace (?dtoken=). Se consume para marcar que la invitación saliente fue respondida. Nunca se persiste.
64"a1b2c3d4-..."
Respuesta
NPS creado