Skip to main content

Envio de Mensagens

Esta página documenta como enviar mensagens para o agente e receber respostas via webhook.

Add Message

Envia uma mensagem para ser processada pelo agente em uma sessão ativa.

Endpoint

POST https://api.tech4.ai/agent/v2/conversation/{session_id}/message

Headers

x-client-key: YOUR_API_KEY
Content-Type: application/json

Parâmetros

NomeTipoObrigatórioDescrição
session_iduuidSim(Path) ID da sessão ativa
typestringNãoTipo de mensagem: text, audio, document, image, video. Padrão: text
textobjectCondicionalObrigatório quando type=text. Ver Objeto text
audioobjectCondicionalObrigatório quando type=audio. Ver Objeto de mídia
documentobjectCondicionalObrigatório quando type=document. Ver Objeto de mídia
imageobjectCondicionalObrigatório quando type=image. Ver Objeto de mídia
videoobjectCondicionalObrigatório quando type=video. Ver Objeto de mídia

Objeto text

NomeTipoObrigatórioDescrição
bodystringSimConteúdo textual da mensagem

Objeto de mídia

Aplica-se para audio, document, image e video.

NomeTipoObrigatórioDescrição
iduuidCondicionalID do arquivo previamente enviado via Upload File.
captionstringNãoLegenda ou mensagem associada ao arquivo

Exemplos de Requisições

Mensagem de Texto

curl -X POST https://api.tech4.ai/agent/v2/conversation/550e8400-e29b-41d4-a716-446655440000/message \
-H "x-client-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "text",
"text": {
"body": "Olá, você pode me ajudar?"
}
}'

Mensagem de Áudio

curl -X POST https://api.tech4.ai/agent/v2/conversation/550e8400-e29b-41d4-a716-446655440000/message \
-H "x-client-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "audio",
"audio": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"caption": "Mensagem de voz do cliente"
}
}'

Mensagem com Documento

curl -X POST https://api.tech4.ai/agent/v2/conversation/550e8400-e29b-41d4-a716-446655440000/message \
-H "x-client-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "document",
"document": {
"id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"caption": "Contrato assinado"
}
}'

Mensagem com Imagem

curl -X POST https://api.tech4.ai/agent/v2/conversation/550e8400-e29b-41d4-a716-446655440000/message \
-H "x-client-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "image",
"image": {
"id": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"caption": "Foto do problema"
}
}'

Mensagem com Vídeo

curl -X POST https://api.tech4.ai/agent/v2/conversation/550e8400-e29b-41d4-a716-446655440000/message \
-H "x-client-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "video",
"video": {
"id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"caption": "Demonstração do problema"
}
}'

Respostas da API

Sucesso (202 Accepted)

Mensagem aceita para processamento.

{
"status": "processing",
"message_id": "d4e5f6a7-b8c9-0123-def4-56789012345",
"detail": "message sent successfully"
}

Requisição Inválida (400 Bad Request)

A sessão está fechada.

{
"status": "session_closed",
"detail": "Session is closed"
}

Não Encontrado (404 Not Found)

A sessão não existe.

{
"detail": "Session not found"
}

Conflito (409 Conflict)

Mensagem duplicada detectada.

{
"detail": "Message duplicate detected"
}

Webhook Response

Após processar a mensagem, o agente envia a resposta para o webhook configurado na abertura da conversa.

Estrutura do Webhook

CampoTipoDescrição
responseobjectResposta do agente com role ("assistant") e content (array de conteúdos)
relation_message_idsarrayLista de UUIDs das mensagens consideradas no processamento
session_iduuidID da sessão
metadataobjectMetadados opcionais (ver Objeto metadata)
statusstringStatus do processo: done ou fail
detailstringMensagem detalhando o resultado

Objeto metadata

CampoTipoDescrição
functionsarrayLista de funções solicitadas (ver Funções especiais)
session_infoobjectDados coletados durante a sessão (ex: informações de contato)

Funções Especiais

O agente pode solicitar a execução de funções especiais através do campo metadata.functions. Para mais detalhes, consulte a documentação do Response Objects.

Transferência de Habilidade Externa

Quando o agente identifica a necessidade de transbordo para uma habilidade externa:

{
"name": "external_skill_transfer",
"parameters": {
"external_skill_name": "pagamentos",
"external_skill_id": "96db1376-1ce6-4dc7-a09d-e04e68f6bed2",
"user_id": "123e4567-e89b-12d3-a456-426614174000",
"reason": "o cliente deseja efetuar o pagamento de um boleto pendente"
}
}

Encerramento de Conversa

Quando o agente decide finalizar a conversa:

{
"name": "end_chat",
"parameters": {
"reason": "Cliente pagou o boleto e agradeceu."
}
}

Exemplos de Webhook

Webhook - Sucesso

{
"response": {
"role": "assistant",
"content": [
{
"type": "text",
"text": {
"body": "Sua fatura do mês é:"
}
},
{
"type": "document",
"document": {
"id": "4c80b53a-a667-4edd-b943-d1e9dc387009",
"url": "https://storage.example.com/files/fatura.pdf",
"expiration_time": "2025-09-26T20:53:48.368151+00:00",
"file_name": "fatura_outubro.pdf"
}
}
]
},
"relation_message_ids": [
"b15c35a4-da85-4d58-842c-cff5a1f0b45a",
"4ab9a72d-5497-4a76-8bbf-a0025c6ad09f"
],
"session_id": "8d1a4259-c4d0-45b8-845b-b290c0264754",
"metadata": {
"functions": [
{
"name": "external_skill_transfer",
"parameters": {
"external_skill_name": "pagamentos",
"external_skill_id": "96db1376-1ce6-4dc7-a09d-e04e68f6bed2",
"user_id": "123e4567-e89b-12d3-a456-426614174000",
"reason": "o cliente deseja efetuar o pagamento de um boleto pendente"
}
}
],
"session_info": {
"contact": {
"name": "João Silva",
"cpf": "123.456.789-00"
}
}
},
"status": "done",
"detail": "response generated successfully"
}

Webhook - Falha

{
"relation_message_ids": [
"b15c35a4-da85-4d58-842c-cff5a1f0b45a",
"4ab9a72d-5497-4a76-8bbf-a0025c6ad09f"
],
"session_id": "8d1a4259-c4d0-45b8-845b-b290c0264754",
"metadata": null,
"status": "fail",
"detail": "fail to generate response"
}

Boas Práticas

Recomendações
  • Valide o webhook: Certifique-se de que seu webhook retorna status 200
  • Armazene message_id: Use para rastreamento e debugging
  • Use caption: Adicione contexto aos arquivos de mídia
  • Monitore relation_message_ids: Entenda quais mensagens foram processadas juntas
Atenção
  • Arquivos enviados por URL devem estar acessíveis publicamente
  • URLs de download de arquivos gerados pelo agente expiram após o tempo indicado em expiration_time
  • Seu webhook deve responder em até 30 segundos

Próximos Passos

Explore mais sobre: