本页尚未翻译;您正在阅读葡萄牙语原文。
ADR 0247 — Uma mensagem, vários destinatários
- Status: aceito
- Data: 2026-11-03
- Referencia: os ADRs 0163 (responder ao aceitar) e 0191 (fila por agente). Revisa a RN-584 e a RN-631 (um destinatário só por mensagem). Nenhum ADR é editado.
Contexto
AT-717 (EP-031): o @ do composer. O dono decidiu em 02/11 que @po @arquiteto manda a MESMA mensagem aos dois. Até aqui a mensagem tinha um destinatário, escolhido no seletor "Para" (RN-631), e o chat.message não dizia a quem foi.
Decisão
- Rota nova
POST /projects/:projectId/sessions/:sessionId/messages(developer), corpo{ text, destinatarios: string[] (1 a 7), anexos? }, 202 com{ mensagemId, entregas: [{ agente, entrega: 'turno'|'enfileirada'|'recusada', motivo? }] }. A rota de um agente só (.../agents/:agent/message) não muda. - UM
chat.messagecompayload.destinatarios. A rota de um agente passa a gravar[agent], e o log diz a quem cada mensagem foi. - Uma entrega por agente, com o MESMO
mensagemId, pelo caminho que já existe (agent/messagedo engine,TurnoAssincrono, fila RN-673, recusas nomeadas). Não há fila nova. A recusa de um destinatário (não conversacional, inativo, fila cheia) virarecusadacom o motivo e não derruba os outros. Sessão encerrada continua 409sessao_encerrada(RN-581), antes de qualquer entrega. - O
mensagemIdcompartilhado pede escopo por agente na fila:chat.message_delivered(ator = o agente) echat.message_cancelled(agenteno payload) só fecham a cópia do agente a que se referem. Evento antigo semagentevale para todos. - Reidratação: o
chat.messagejá entra como mensagem do usuário na história de todo agente; os destinatários o leem como a eles dirigido e para quem não é destinatário nada muda.
Consequências
- Cada destinatário paga um turno; a tela acompanha mais de um turno (lane web).
- Os agentes que não são destinatários continuam sem ler ao vivo; só na reidratação.
- A RN-584 (recusa nomeada) e a RN-631 (seletor de um destino) seguem valendo por destinatário.