3.1 KiB
ClientFlow v4928.1.4.9 — Opportunity Reply Assistant
Objetivo
Reduzir o atrito entre ClientFlow e Chatwoot. O operador passa a gerar e enviar mensagens comerciais a partir da tarefa, usando modelos e anexos já ligados à oportunidade.
O Chatwoot continua a ser o canal técnico de envio, mas o ClientFlow passa a ser o cockpit operacional.
O que foi adicionado
Modelos de mensagem
Novo catálogo em app/message_templates.py:
SEND_INFO_EQUIPMENT_LISTSEND_PRICE_LISTSEND_QUOTESEND_PROFORMASEND_INVOICEREQUEST_FISCAL_DATAREQUEST_PAYMENT_PROOFCONFIRM_PAYMENT_RECEIVEDFOLLOW_UP_QUOTE
Os modelos são determinísticos e editáveis antes do envio.
Serviço de resposta
Novo serviço app/reply_assistant_service.py:
- carrega tarefa, oportunidade e documentos associados;
- escolhe modelo por ação;
- gera rascunho editável;
- valida prontidão antes de enviar;
- bloqueia anexos que não pertencem à oportunidade;
- envia mensagem pública no Chatwoot;
- regista comunicação outbound;
- regista evento na timeline;
- pode concluir a tarefa após envio.
UI na tarefa
A página da tarefa ganhou o bloco Resposta ao cliente:
- seletor de modelo;
- seleção de anexos da oportunidade;
- botão Gerar rascunho;
- textarea editável;
- botão Enviar;
- botão Enviar e concluir tarefa.
Chatwoot
app/chatwoot_client.py ganhou:
send_public_message();send_public_message_with_attachments().
O envio continua protegido por:
CHATWOOT_WRITE_ENABLED=true
CHATWOOT_BASE_URL=...
CHATWOOT_ACCOUNT_ID=...
CHATWOOT_API_TOKEN=...
Auditoria
Foi adicionada a tabela message_drafts para guardar rascunhos gerados e estado do envio.
Cada envio cria também um registo em communications com:
direction = outbound;source_system = chatwoot;conversation_id;task_id;opportunity_id;metadata.template_code;metadata.attachments;metadata.chatwoot_result.
Timeline
Ao enviar uma mensagem, o ClientFlow cria um evento reply_sent na timeline da oportunidade.
Regras de segurança
- Um documento só pode ser anexado se pertence à mesma oportunidade da tarefa.
- Envio de documentos fiscais exige cliente fiscal minimamente preenchido.
- Documentos sem
external_idnão são anexados automaticamente. - Nesta versão, PDF automático está limitado a documentos Jasmin suportados pelo serviço existente:
quotationeinvoice. - O LLM não é usado para decidir preço, documento ou anexo.
LLM
Foi adicionada a opção:
CLIENTFLOW_REPLY_LLM_ENABLED=false
Nesta versão fica desativada. A arquitetura fica preparada para uma versão seguinte onde o LLM apenas adapte o texto, mantendo oportunidade/documentos como fonte de verdade.
Endpoints novos
POST /tasks/{task_id}/reply-draft
POST /tasks/{task_id}/send-reply
Rollback
A alteração é aditiva. Para rollback funcional:
- manter
CHATWOOT_WRITE_ENABLED=falsepara bloquear envio; - remover/ignorar o bloco UI de resposta;
- a tabela
message_draftspode permanecer sem afetar o fluxo antigo.