Conversas

As conversas agrupam mensagens relacionadas. O AgentSend agrupa automaticamente as mensagens com base em cabeçalhos de email padrão para que seus agentes sempre tenham o contexto completo de uma conversa.

Visão Geral

Toda conversa de email no AgentSend é organizada em uma conversa. Uma conversa coleta todas as mensagens relacionadas — o email original, cada resposta e cada resposta de resposta — em um único objeto de conversa ordenado. Isso facilita para os agentes lerem o histórico completo antes de compor uma resposta.

As conversas são criadas automaticamente. Quando o AgentSend recebe ou envia uma mensagem que inicia uma nova conversa, uma conversa é criada. Quando uma resposta chega, o AgentSend a associa à conversa existente e adiciona a nova mensagem.

As conversas são limitadas a uma caixa de entrada. A mesma cadeia de emails recebida por duas caixas de entrada diferentes produzirá dois objetos de conversa separados.

Como o Agrupamento Funciona

O AgentSend segue o modelo padrão de agrupamento de emails usado por todos os principais clientes de email. Quando uma resposta chega, o AgentSend inspeciona os cabeçalhos In-Reply-To and References para identificar a qual conversa existente a mensagem pertence. Se uma correspondência for encontrada, a mensagem é adicionada a essa conversa. Se nenhuma correspondência for encontrada, uma nova conversa é criada.

Você também pode associar explicitamente uma mensagem a uma conversa incluindo o campo threadId ao enviar. Isso é útil quando você está iniciando um acompanhamento do lado do seu agente e quer mantê-lo agrupado com uma conversa anterior, mesmo que o destinatário inicie uma nova cadeia de respostas.

💡

Sempre leia o threadId dos payloads de webhook recebidos e passe-o de volta ao responder. Isso garante o agrupamento correto mesmo quando os destinatários mudam a linha de assunto.

Algoritmo de correspondência

  1. Check the In-Reply-To contra todos os IDs de mensagem conhecidos na caixa de entrada.
  2. Se não houver correspondência, analise a lista do cabeçalho References da direita (mais recente) para a esquerda.
  3. Se ainda não houver correspondência, crie uma nova conversa para esta mensagem.

Propriedades da Conversa

Cada objeto de conversa possui os seguintes campos:

Propriedade Tipo Descrição
id string Identificador único da conversa.
inboxId string A caixa de entrada à qual esta conversa pertence.
subject string Linha de assunto da primeira mensagem na conversa.
messageCount integer Número total de mensagens nesta conversa.
lastMessageAt string (ISO 8601) Data e hora da mensagem mais recente.
createdAt string (ISO 8601) Data e hora de quando a conversa foi criada.

Listando Conversas

Recupere todas as conversas de uma caixa de entrada usando uma requisição GET . Os resultados são ordenados por lastMessageAt decrescente para que as conversas mais ativas apareçam primeiro.

javascript
// GET /inboxes/{id}/threads?limit=20&offset=0
const res = await fetch(
  `https://api.agentsend.io/inboxes/${inboxId}/threads?limit=20&offset=0`,
  { headers: { "x-api-key": process.env.AGENTSEND_API_KEY } }
);

const { data, total } = await res.json();

for (const thread of data) {
  console.log(thread.id, thread.subject, thread.messageCount);
}

Parâmetros de consulta

Parâmetro Tipo Padrão Descrição
limit integer 20 Número máximo de conversas a retornar. Máximo 100.
offset integer 0 Número de conversas a pular para paginação.

Obtendo Mensagens da Conversa

Busque todas as mensagens em uma conversa em ordem cronológica. Isso fornece ao seu agente o histórico completo da conversa que ele precisa para compor uma resposta contextualizada.

javascript
// GET /threads/{id}/messages
const res = await fetch(
  `https://api.agentsend.io/threads/${threadId}/messages`,
  { headers: { "x-api-key": process.env.AGENTSEND_API_KEY } }
);

const { data } = await res.json();

// Build a conversation history for your LLM
const history = data.map(msg => ({
  role: msg.direction === "outbound" ? "assistant" : "user",
  content: msg.bodyText,
}));

console.log(`Loaded ${history.length} messages from thread`);

As mensagens dentro de uma conversa são retornadas em ordem cronológica crescente (sentAt mais antiga primeiro). Isso corresponde à ordem natural esperada pela maioria das APIs de conversa de LLM.

Respondendo em uma Conversa

Para continuar uma conversa existente, inclua o threadId ao enviar uma mensagem. O AgentSend definirá automaticamente os cabeçalhos In-Reply-To and References corretos para que a resposta apareça no cliente de email do destinatário como parte da mesma conversa.

javascript
// POST /inboxes/{id}/messages — reply within an existing thread
await fetch(`https://api.agentsend.io/inboxes/${inboxId}/messages`, {
  method: "POST",
  headers: {
    "x-api-key": process.env.AGENTSEND_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    to: ["customer@example.com"],
    subject: "Re: Your support request",
    bodyText: "Thanks for reaching out! Here is the information you requested...",
    threadId: "thrd_abc123", // ties this message to the existing conversation
  }),
});

Se você omitir threadId, a mensagem de saída iniciará uma nova conversa mesmo se você usar a mesma linha de assunto. Sempre passe o threadId ao continuar uma conversa.

Casos de Uso

As conversas desbloqueiam um conjunto de fluxos de trabalho que requerem memória em múltiplas trocas de email.