curl --request POST \
--url https://clientapi.woku.app/v1/forms/{id}/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"anonymous": false,
"answers": {
"field-uuid-1": "John Doe",
"field-uuid-2": 5
},
"email": "respondent@example.com",
"phone": "+56912345678",
"responseChannel": "my-crm",
"dispatchToken": "a1b2c3d4-..."
}
'import requests
url = "https://clientapi.woku.app/v1/forms/{id}/responses"
payload = {
"anonymous": False,
"answers": {
"field-uuid-1": "John Doe",
"field-uuid-2": 5
},
"email": "respondent@example.com",
"phone": "+56912345678",
"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({
anonymous: false,
answers: {'field-uuid-1': 'John Doe', 'field-uuid-2': 5},
email: 'respondent@example.com',
phone: '+56912345678',
responseChannel: 'my-crm',
dispatchToken: 'a1b2c3d4-...'
})
};
fetch('https://clientapi.woku.app/v1/forms/{id}/responses', 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/forms/{id}/responses",
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([
'anonymous' => false,
'answers' => [
'field-uuid-1' => 'John Doe',
'field-uuid-2' => 5
],
'email' => 'respondent@example.com',
'phone' => '+56912345678',
'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/forms/{id}/responses"
payload := strings.NewReader("{\n \"anonymous\": false,\n \"answers\": {\n \"field-uuid-1\": \"John Doe\",\n \"field-uuid-2\": 5\n },\n \"email\": \"respondent@example.com\",\n \"phone\": \"+56912345678\",\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/forms/{id}/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"anonymous\": false,\n \"answers\": {\n \"field-uuid-1\": \"John Doe\",\n \"field-uuid-2\": 5\n },\n \"email\": \"respondent@example.com\",\n \"phone\": \"+56912345678\",\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/forms/{id}/responses")
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 \"anonymous\": false,\n \"answers\": {\n \"field-uuid-1\": \"John Doe\",\n \"field-uuid-2\": 5\n },\n \"email\": \"respondent@example.com\",\n \"phone\": \"+56912345678\",\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"
}Enviar una respuesta de formulario
Registra una respuesta para el formulario. Las respuestas se validan contra la definición del formulario antes de almacenarse. Los encuestados en cuarentena son rechazados con 429.
curl --request POST \
--url https://clientapi.woku.app/v1/forms/{id}/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"anonymous": false,
"answers": {
"field-uuid-1": "John Doe",
"field-uuid-2": 5
},
"email": "respondent@example.com",
"phone": "+56912345678",
"responseChannel": "my-crm",
"dispatchToken": "a1b2c3d4-..."
}
'import requests
url = "https://clientapi.woku.app/v1/forms/{id}/responses"
payload = {
"anonymous": False,
"answers": {
"field-uuid-1": "John Doe",
"field-uuid-2": 5
},
"email": "respondent@example.com",
"phone": "+56912345678",
"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({
anonymous: false,
answers: {'field-uuid-1': 'John Doe', 'field-uuid-2': 5},
email: 'respondent@example.com',
phone: '+56912345678',
responseChannel: 'my-crm',
dispatchToken: 'a1b2c3d4-...'
})
};
fetch('https://clientapi.woku.app/v1/forms/{id}/responses', 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/forms/{id}/responses",
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([
'anonymous' => false,
'answers' => [
'field-uuid-1' => 'John Doe',
'field-uuid-2' => 5
],
'email' => 'respondent@example.com',
'phone' => '+56912345678',
'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/forms/{id}/responses"
payload := strings.NewReader("{\n \"anonymous\": false,\n \"answers\": {\n \"field-uuid-1\": \"John Doe\",\n \"field-uuid-2\": 5\n },\n \"email\": \"respondent@example.com\",\n \"phone\": \"+56912345678\",\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/forms/{id}/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"anonymous\": false,\n \"answers\": {\n \"field-uuid-1\": \"John Doe\",\n \"field-uuid-2\": 5\n },\n \"email\": \"respondent@example.com\",\n \"phone\": \"+56912345678\",\n \"responseChannel\": \"my-crm\",\n \"dispatchToken\": \"a1b2c3d4-...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/forms/{id}/responses")
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 \"anonymous\": false,\n \"answers\": {\n \"field-uuid-1\": \"John Doe\",\n \"field-uuid-2\": 5\n },\n \"email\": \"respondent@example.com\",\n \"phone\": \"+56912345678\",\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.
Parámetros de ruta
Id del formulario
Cuerpo
Si esta respuesta es anónima
false
Respuestas con clave por id de campo
{
"field-uuid-1": "John Doe",
"field-uuid-2": 5
}
Email del encuestado, obligatorio cuando el formulario identifica a los clientes por email y la respuesta no es anónima
"respondent@example.com"
Teléfono del encuestado (obligatorio cuando el formulario identifica clientes por teléfono y la respuesta no es anónima)
"+56912345678"
Canal de respuesta entrante. El valor predeterminado es 'api'; un valor proporcionado aquí REEMPLAZA 'api' (canal definido por el usuario). Se almacena en la respuesta.
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
Respuesta de formulario creada