BETA

Variante em streaming de POST /chat: mesma autenticação, mesmos parâmetros de entrada, mesmo processamento (IA + busca + persistência da conversa) — a diferença é que a resposta é entregue como uma sequência de eventos Server-Sent Events (SSE) à medida que o modelo a vai gerando, em vez de um único JSON ao final.

Este endpoint consome tokens de IA da conta do cliente, igual ao /chat.

Este endpoint está sujeito a um flag de habilitação do lado do servidor (chatai.streaming). Se estiver desabilitado, o endpoint responde com um JSON de erro (STREAMING_DISABLED) em vez de abrir o stream — sua integração deve conseguir fazer fallback para POST /chat nesse caso.

Informação do recurso
AutenticaçãoObrigatória (Token de API, Bearer)
Scopemapaprop-chat-ai
HTTP MethodPOST
Responsetext/event-stream (SSE). Se o streaming estiver desabilitado ou a validação de entrada falhar, application/json
Version1

URL do recurso

https://mapaprop.app/api/action/mapaprop-chat-ai-v1/chat/stream

Parâmetros

Idênticos aos de POST /chat: message (obrigatório), questionId, leadName, leadEmail, leadPhone, sessionId, mode, propertyIds, useVectorSearch, searchCriteria, propertyActive, searchContext, customerSearch, sourceUrl. Veja essa página para o detalhe completo de cada um.

Código de exemplo

POST /api/action/mapaprop-chat-ai-v1/chat/stream HTTP/1.1
Host: mapaprop.app
Content-Type: application/json
Authorization: Bearer {access_token}
Accept: text/event-stream

{
    "message": "¿Tenés departamentos de 2 ambientes en Palermo?",
    "questionId": 481203
}

Resposta

A resposta é um stream de eventos SSE. Cada evento é uma linha data: {json}\n\n. O campo type de cada evento indica como interpretá-lo:

typeQuando apareceCampos do payload
text-deltaTurno de chat livre (sem contexto de busca ativo). Um ou vários por turno, à medida que o modelo gera texto.text (string): o fragmento de texto a concatenar.
bridgeTurno de chat livre: o modelo decidiu oferecer buscar imóveis ou encaminhar para contato humano, em vez de continuar conversando.bridgeType (string): switch_to_property_search ou offer_human_contact. message (string): texto sugerido para exibir.
search-resultTurno de busca/imóvel/sem-resultados (quando você enviou propertyIds, useVectorSearch ou propertyActive). É emitido uma única vez, logo antes do evento done.payload (object): a resposta completa, com a MESMA forma do JSON de POST /chat (response, action, success, propertyIds, buttons, allPropertyIds, hasMoreResults, focusedPropertyId, focusedPropertyCode, searchCriteria, tokensUsed, error). Este payload é a versão autoritativa: se você exibiu texto aos poucos com os text-delta, substitua-o por payload.response ao receber este evento.
doneSempre o último evento do stream.questionId (int): o ID da conversa (pode ser -1 se o salvamento falhar). inputTokens (int), outputTokens (int).
errorErro em nível de stream. Não tentar novamente automaticamente.errorCode (string), message (string).

Diferente do POST /chat, aqui o evento done inclui sim questionId. É a forma mais simples de obter o ID da conversa se você estiver usando o modo streaming.

Um turno de chat livre é: zero ou mais text-delta, opcionalmente um bridge, e sempre termina em done. Um turno de busca/imóvel/sem-resultados é: um único search-result seguido de done (não emite text-delta nem bridge).

Gate de validação anterior ao stream

Se faltar o campo message, ou se o streaming estiver desabilitado do lado do servidor, o endpoint responde com um JSON normal (não SSE) antes de abrir o stream — seu cliente HTTP pode tratá-lo como uma resposta de erro comum.

ErroCausa
STREAMING_DISABLEDO modo streaming não está habilitado neste ambiente. Faça fallback para POST /chat.
REQUIRED_INPUT — "message is required"Falta o campo message no body.

Exemplo de resposta

Turno de chat livre:

data: {"type":"text-delta","text":"Hola! "}

data: {"type":"text-delta","text":"En qué puedo ayudarte hoy?"}

data: {"type":"done","questionId":481203,"inputTokens":410,"outputTokens":38}

Turno de busca:

data: {"type":"search-result","payload":{"response":"Encontré 3 departamentos de 2 ambientes en Palermo.","action":"show_properties","success":true,"propertyIds":[2601234,2601987,2602111],"hasMoreResults":false,"tokensUsed":{"input":812,"output":143,"total":955}}}

data: {"type":"done","questionId":481203,"inputTokens":812,"outputTokens":143}

Resposta quando o streaming está desabilitado (JSON, não SSE):

{
    "error": "STREAMING_DISABLED",
    "message": "El modo streaming no está habilitado en este entorno."
}