Listas de opções
Responde a uma lista de opções que a VI mostrou na conversa, busca dentro dela e consulta o estado.
Quando o pedido é ambíguo ("aumente o preço do mouse" e existem sete mouses), a VI não chuta: mostra uma lista de opções na conversa e espera o clique. Cada lista tem um selection_id e uma ou mais posições (slot), por exemplo "qual produto". Estas três rotas deixam uma interface própria renderizar a lista e devolver a escolha. O ciclo de vida da lista é pending (esperando), answered (respondida) ou expired (venceu).
Responder a uma lista
Envia a escolha do administrador. Depois de aceita, a VI retoma a ação que estava esperando e grava a continuação na conversa. Se a ação for destrutiva, a resposta pede aprovação (requires_approval) em vez de executar.
/api/v1/admin/intelligence/sessions/{id}/selectionAdminResponder a uma lista de opções
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
selection_idstringobrigatóriochoicesobject{"slot": "id-do-registro"}.multi_choicesobject{"slot": ["id1", "id2"]}. No máximo 200 ids por envio.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/intelligence/sessions/$SESSION_ID/selection" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"selection_id": "sel_01",
"choices": {
"produto": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d"
}
}'Resposta
{
"status": "answered",
"messages": [
{ "role": "assistant", "content": "Preço do Mouse Gamer atualizado.", "created_at": "2026-10-11T21:10:00Z" }
],
"selection": {
"selection_id": "sel_01",
"status": "answered",
"chosen": { "produto": { "id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d", "label": "Mouse Gamer Titan" } }
},
"requires_approval": false
}Campos da resposta
statusstringmessagesarrayrole, content, created_at, id).selectionobjectselection_id, status, chosen (uma escolha por posição) e chosen_multi.requires_approvalbooleantrue quando falta o "sim" de uma ação destrutiva.approval_tokenstringduplicateboolean409 de uma lista já respondida: true quando result repete a primeira submissão (a ação rodou exatamente uma vez).continue_in_chatstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["intelligence_use_chat","manage_settings"]} |
| 404 | Conversa ou lista de opções inexistente (os dois casos são indistinguíveis de propósito). | {"error":"não encontrei essa lista de opções..."} (devolvido em português) |
| 400 | Escolha incompleta, posição desconhecida, mais de 200 ids, corpo ilegível ou id que não está mais na lista. | {"error":"escolha incompleta: falta escolher o produto"} (devolvido em português) |
| 409 | Lista já respondida, vencida ou ação recusada por regra de dados (cupom em uso, valor acima do teto, sem permissão). | {"error":"...","status":"answered"} (a lista respondida traz também selection, o resumo, e result com duplicate: true, a primeira resposta) ou {"error":"...","status":"expired"} |
| 502 | A ação retomada falhou; a lista volta a pending e o clique pode ser repetido. | {"error":"não consegui aplicar a ação agora..."} |
Buscar dentro da lista
Quando a lista mostra poucas opções (6 por página), esta rota busca outras dentro da mesma posição, com paginação, ordenação e filtros. Só uma busca por lista pode estar em andamento.
/api/v1/admin/intelligence/sessions/{id}/selection/searchAdminBuscar dentro de uma lista de opções
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
selection_idstringobrigatórioslotstringobrigatórioquerystringobrigatóriooffsetintegerpadrão: 0limitintegerorderstringinclude_inactivebooleanpadrão: falsefiltersarray{"field", "op", "value", "value2"}. op é um de eq, ne, gt, gte, lt, lte, between, is_null, not_null, zero, contains.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/intelligence/sessions/$SESSION_ID/selection/search" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"selection_id": "sel_01",
"slot": "produto",
"query": "mouse",
"offset": 6
}'Resposta
{
"slot": "produto",
"query": "mouse",
"offset": 6,
"page_size": 6,
"candidates": [
{ "id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d", "label": "Mouse Gamer Titan", "sublabel": "SKU MG-01", "score": 0.91 }
],
"total_found": 7
}Campos da resposta
slotstringquerystringoffsetintegerpage_sizeintegercandidatesarrayid, label, sublabel, thumb, badges, score.total_foundintegerempty_hintstringfacetsarraykey, label, options). Devolva a opção escolhida em filters.Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["intelligence_use_chat","manage_settings"]} |
| 404 | Conversa ou lista de opções inexistente (os dois casos são indistinguíveis de propósito). | {"error":"não encontrei essa lista de opções..."} (devolvido em português) |
| 400 | Busca vazia, entidade desconhecida ou corpo ilegível. | {"error":"não entendi a busca enviada"} (devolvido em português) |
| 429 | Já há uma busca em andamento nesta lista. | {"error":"uma busca já está em andamento..."} (devolvido em português) |
Ler o estado da lista
Devolve o estado atual da lista. Use ao reabrir uma conversa para saber se um cartão antigo ainda está esperando resposta (interactive: true) ou já foi respondido.
/api/v1/admin/intelligence/sessions/{id}/selection/{selectionId}AdminLer o estado de uma lista de opções
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Parâmetros de caminho
iduuidobrigatórioselectionIdstringobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/admin/intelligence/sessions/$SESSION_ID/selection/$SELECTION_ID" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"selection_id": "sel_01",
"session_id": "a0cb371d-96ba-4406-afa1-057ba2594bb6",
"status": "pending",
"interactive": true,
"destructive": false,
"slots": [
{ "key": "produto", "entity": "product", "query": "mouse", "multi": false, "total_found": 7, "page_size": 6, "candidates": [] }
],
"created_at": "2026-10-11T21:09:00Z",
"expires_at": "2026-10-11T22:09:00Z"
}Campos da resposta
statusstringpendingansweredexpiredinteractivebooleantrue só quando status é pending. Só então candidates vem preenchido.destructivebooleanaction_labelstringslotsarraykey, entity, label, query, multi, total_found, page_size, candidates, chosen.chosenobjectcreated_atstringexpires_atstringanswered_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["intelligence_use_chat","manage_settings"]} |
| 404 | Conversa ou lista de opções inexistente (os dois casos são indistinguíveis de propósito). | {"error":"não encontrei essa lista de opções..."} (devolvido em português) |