Referência interna do desenvolvedor. A linha de base da evidência é o pacote completo de auditoria emdocs/voiceflux/, especialmente os documentos 01, 04, 07, 09, 11 e 12 maisvoiceflux-audit-manifest.json.
Mapa de rotas
Todos os IDs de perfil e de agente fornecidos pelos clientes são revalidados na organização ativa. Os diagnósticos de trabalho selecionam apenas status, metadados de provedor/modelo, contagens de tentativas, duração, código de falha segura e carimbos de data/hora. Eles nunca retornam texto de mensagem,
failureDetail, audioStorageKey ou audioUrl.
VoiceFluxSettingsUpdateSchema exclui intencionalmente includedAudioSeconds; os inquilinos não podem conceder-se subsídio de provedor.
Persistência
Modelos principais:OrganizationVoiceFluxSettings: ativação de direitos, estado da assinatura Stripe, perfil padrão, retenção, subsídio incluído.VoiceFluxProfile: estilo estruturado com escopo de organização/agente.VoiceFluxSynthesisJob: ciclo de vida idempotente e diagnóstico seguro.VoiceFluxUsagePeriod: UTC mensalmente incluído, comprado e usado segundos de áudio.
Agent.voiceRepliesEnabled e Conversation.voiceFluxEnabled. A fila requer ambos os campos mais Conversation.isAiEnabled.
A resolução de perfil executa consultas indexadas separadas e aplica agent profile > organization default > built-in defaults. Não substitua filtros diretos organizationId, agentId, conversationId ou messageId por filtros de relação.
Fluxo de tempo de execução
handle-chat-message/handler.tspersists the normal text answer.enqueueVoiceFluxForMessage(messageId)validates emergency/provider state, three-layer activation, channel support, commercial entitlement, and available allowance.- A deterministic SHA-256 idempotency key includes message, selected profile/style, and fixed model policy.
- BullMQ queue
voiceflux-synthesizerunsprocessVoiceFluxJobinapps/workers-services. - The worker synthesizes OGG/Opus, measures actual duration, reserves usage atomically, uploads privately, and delivers through the existing channel adapter.
- Any safe failure delivers the already-persisted original text. An uncertain
DELIVERINGretry favors text over duplicate audio.
sendVoice, anexo de áudio do Messenger e anexo de áudio do Instagram.
Política de modelo fixo
As constantes de back-end são codificadas e não podem ser configuradas pelo locatário ou pelo ambiente:gemini-3.1-flash-tts-preview é tratado como estável e operacional e é a única linha de base de preço/capacidade. Nenhuma ramificação além dos dois IDs listados acima é permitida. As alterações exigem a atualização do pacote de auditoria docs/voiceflux completo e dos testes de política do provedor.
Medição e retenção
A duração é medida a partir da saída OGG/Opus gerada e arredondada para um segundo inteiro.meterVoiceFluxAudioSeconds usa uma transação e updateMany condicional para reservar subsídio atomicamente. O consumo do provedor ainda será medido se a síntese for concluída após outra solicitação simultânea esgotar o limite de entrega.
Os objetos carregados recebem expiresAt. O trabalhador VoiceFlux verifica a coluna de expiração indexada a cada hora, exclui até 100 objetos S3 expirados por lote e limpa referências de armazenamento. A configuração de armazenamento ausente desativa a limpeza sem excluir registros de auditoria de trabalho.
Faturamento e Stripe
VoiceFlux é um módulo de crescimentolevel_2+. O Checkout copia organizationId e growthModuleKey nos metadados da assinatura. Os eventos de conclusão de checkout e webhook de assinatura sincronizam a lista de módulos de assinatura base e OrganizationVoiceFluxSettings.stripeSubscriptionId/status. Assinaturas de complementos inativas ou excluídas desativam o VoiceFlux da organização.
O webhook continua sendo a fonte comercial da verdade. A UI não pode ativar o VoiceFlux quando a elegibilidade do plano ou o estado do complemento estão ausentes.
Contrato de front-end
Alvos de dramaturgo obrigatórios:Pegadinhas
- Nunca suprima a resposta de texto normal, a menos que o trabalho do VoiceFlux tenha sido enfileirado com sucesso.
- Nunca registre texto de resposta bruto, credenciais, cargas de provedor, URLs de áudio ou detalhes de erros internos.
- Não tente novamente os trabalhos de síntese do BullMQ independentemente do adaptador do provedor; o adaptador possui o teto exato da tentativa de modelo.
- Não exponha os IDs dos modelos como configurações do produto.
- Não adicione gravações permitidas ao esquema de configurações públicas.
- Mantenha o tratamento de cancelamento do Stripe sincronizado com a ativação da organização.

