# One farewell per conversation: the check reserved the effect, the declaration settles it
key = f"farewell:{conversation.conversation_id}"
decision = conversation.check("farewell", purpose="service", effect_key=key)
if decision.decision == "allow" and decision.effect and decision.effect.state == "none":
try:
send(farewell)
conversation.declare.effect(key, "done")
except TimeoutError:
conversation.declare.effect(key, "unknown_outcome") # never sent again on its own// One farewell per conversation: the check reserved the effect, the declaration settles it
const key = `farewell:${convo.id}`;
const decision = await convo.check("farewell", { purpose: "service", effectKey: key });
if (decision.decision === "allow" && decision.effect?.state === "none") {
try {
await send(farewell);
convo.declare.effect(key, "done");
} catch {
convo.declare.effect(key, "unknown_outcome"); // never sent again on its own
}
}curl --request POST \
--url https://{space}.{region}.api.niadra.com/v1/coordination/declare \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"agent": "<string>",
"detail": {
"lease_s": 43200,
"intents": [
"<string>"
],
"level": "<string>"
},
"kind": "case.opened",
"object": {
"id": "<string>",
"namespace": "<string>",
"type": "<string>"
},
"subject": {
"value": "<string>",
"scope": "<string>"
}
}
'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
agent: '<string>',
detail: {lease_s: 43200, intents: ['<string>'], level: '<string>'},
kind: 'case.opened',
object: {id: '<string>', namespace: '<string>', type: '<string>'},
subject: {value: '<string>', scope: '<string>'}
})
};
fetch('https://{space}.{region}.api.niadra.com/v1/coordination/declare', 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://{space}.{region}.api.niadra.com/v1/coordination/declare",
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([
'agent' => '<string>',
'detail' => [
'lease_s' => 43200,
'intents' => [
'<string>'
],
'level' => '<string>'
],
'kind' => 'case.opened',
'object' => [
'id' => '<string>',
'namespace' => '<string>',
'type' => '<string>'
],
'subject' => [
'value' => '<string>',
'scope' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$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://{space}.{region}.api.niadra.com/v1/coordination/declare"
payload := strings.NewReader("{\n \"agent\": \"<string>\",\n \"detail\": {\n \"lease_s\": 43200,\n \"intents\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n },\n \"kind\": \"case.opened\",\n \"object\": {\n \"id\": \"<string>\",\n \"namespace\": \"<string>\",\n \"type\": \"<string>\"\n },\n \"subject\": {\n \"value\": \"<string>\",\n \"scope\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
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://{space}.{region}.api.niadra.com/v1/coordination/declare")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"agent\": \"<string>\",\n \"detail\": {\n \"lease_s\": 43200,\n \"intents\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n },\n \"kind\": \"case.opened\",\n \"object\": {\n \"id\": \"<string>\",\n \"namespace\": \"<string>\",\n \"type\": \"<string>\"\n },\n \"subject\": {\n \"value\": \"<string>\",\n \"scope\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{space}.{region}.api.niadra.com/v1/coordination/declare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent\": \"<string>\",\n \"detail\": {\n \"lease_s\": 43200,\n \"intents\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n },\n \"kind\": \"case.opened\",\n \"object\": {\n \"id\": \"<string>\",\n \"namespace\": \"<string>\",\n \"type\": \"<string>\"\n },\n \"subject\": {\n \"value\": \"<string>\",\n \"scope\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"accepted": true,
"decision_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"detail": "<string>",
"request_id": "<string>",
"type": "about:blank"
}Declarar o que aconteceu
Depois de agir: um caso aberto ou fechado, um contato feito, como um efeito terminou, um compromisso, uma transferência, uma supressão adicionada ou levantada. Com Idempotency-Key.
# One farewell per conversation: the check reserved the effect, the declaration settles it
key = f"farewell:{conversation.conversation_id}"
decision = conversation.check("farewell", purpose="service", effect_key=key)
if decision.decision == "allow" and decision.effect and decision.effect.state == "none":
try:
send(farewell)
conversation.declare.effect(key, "done")
except TimeoutError:
conversation.declare.effect(key, "unknown_outcome") # never sent again on its own// One farewell per conversation: the check reserved the effect, the declaration settles it
const key = `farewell:${convo.id}`;
const decision = await convo.check("farewell", { purpose: "service", effectKey: key });
if (decision.decision === "allow" && decision.effect?.state === "none") {
try {
await send(farewell);
convo.declare.effect(key, "done");
} catch {
convo.declare.effect(key, "unknown_outcome"); // never sent again on its own
}
}curl --request POST \
--url https://{space}.{region}.api.niadra.com/v1/coordination/declare \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"agent": "<string>",
"detail": {
"lease_s": 43200,
"intents": [
"<string>"
],
"level": "<string>"
},
"kind": "case.opened",
"object": {
"id": "<string>",
"namespace": "<string>",
"type": "<string>"
},
"subject": {
"value": "<string>",
"scope": "<string>"
}
}
'const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
agent: '<string>',
detail: {lease_s: 43200, intents: ['<string>'], level: '<string>'},
kind: 'case.opened',
object: {id: '<string>', namespace: '<string>', type: '<string>'},
subject: {value: '<string>', scope: '<string>'}
})
};
fetch('https://{space}.{region}.api.niadra.com/v1/coordination/declare', 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://{space}.{region}.api.niadra.com/v1/coordination/declare",
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([
'agent' => '<string>',
'detail' => [
'lease_s' => 43200,
'intents' => [
'<string>'
],
'level' => '<string>'
],
'kind' => 'case.opened',
'object' => [
'id' => '<string>',
'namespace' => '<string>',
'type' => '<string>'
],
'subject' => [
'value' => '<string>',
'scope' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$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://{space}.{region}.api.niadra.com/v1/coordination/declare"
payload := strings.NewReader("{\n \"agent\": \"<string>\",\n \"detail\": {\n \"lease_s\": 43200,\n \"intents\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n },\n \"kind\": \"case.opened\",\n \"object\": {\n \"id\": \"<string>\",\n \"namespace\": \"<string>\",\n \"type\": \"<string>\"\n },\n \"subject\": {\n \"value\": \"<string>\",\n \"scope\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
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://{space}.{region}.api.niadra.com/v1/coordination/declare")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"agent\": \"<string>\",\n \"detail\": {\n \"lease_s\": 43200,\n \"intents\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n },\n \"kind\": \"case.opened\",\n \"object\": {\n \"id\": \"<string>\",\n \"namespace\": \"<string>\",\n \"type\": \"<string>\"\n },\n \"subject\": {\n \"value\": \"<string>\",\n \"scope\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{space}.{region}.api.niadra.com/v1/coordination/declare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent\": \"<string>\",\n \"detail\": {\n \"lease_s\": 43200,\n \"intents\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n },\n \"kind\": \"case.opened\",\n \"object\": {\n \"id\": \"<string>\",\n \"namespace\": \"<string>\",\n \"type\": \"<string>\"\n },\n \"subject\": {\n \"value\": \"<string>\",\n \"scope\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"accepted": true,
"decision_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"detail": "<string>",
"request_id": "<string>",
"type": "about:blank"
}Autorizações
nia_sk_...
Cabeçalhos
Obrigatório. Guardado por 24 horas com o hash do corpo: a mesma chave com o mesmo corpo devolve a primeira resposta, e a mesma chave com outro corpo devolve 409 conflict.
1 - 256Corpo
- CaseOpened
- CaseClosed
- LeaseDeclared
- TaskLockDeclared
- ContactMade
- EffectDeclared
- CommitmentMade
- CommitmentWithdrawn
- CommitmentDecided
- HandoffDeclared
- SuppressionAdded
- SuppressionLifted
O que aconteceu, depois do fato: um tipo de declaração, com os campos do tipo em detail (a especificação de coordenação, 5).
1 - 256Uma posse ou um caso, detidos pelo agente que declara. level é por padrão o nível menos restritivo do espaço.
Show child attributes
Show child attributes
"case.opened"Um objeto de negócio num sistema de registro.
Show child attributes
Show child attributes
Um identificador de um sujeito num canal ou sistema: um telefone, um e-mail, um id do CRM.
Show child attributes
Show child attributes

