Saltar para o conteúdo
megapromotingVamos falar

aichat.md — direção das interações

O que acontece com uma mensagem, desde o segundo em que chega até nós até ao momento em que alguém a marca como resolvida.

Um assistente que responde bem é fácil de mostrar numa demo. O que é difícil de mostrar, e o que realmente conta, é o percurso: como a mensagem chega, o que se faz para não responder duas vezes, quanto se espera antes de responder, de onde se tira a informação, que ferramenta é chamada, onde o agente pára e quem é chamado em seu lugar. Abaixo está o percurso real, com os números do código. Incluindo a parte dos comentários, que se comporta de forma completamente diferente de uma mensagem privada — e deve comportar-se de forma diferente.

Traseul

Nove etapas, pela ordem em que acontecem

  1. 01

    1. A entrada, no canal em que a pessoa escreveu

    Seis vias de entrada, com mecanismos diferentes. Messenger, Instagram Direct e WhatsApp Cloud API entram por webhook, no mesmo ponto de entrada, ramificado conforme o tipo de objeto. O widget do site entra diretamente por um percurso próprio. O Telegram não entra por webhook, mas por consulta contínua. E o 999.md não tem nem webhook nem consulta contínua — tem um relógio que verifica os threads a cada vinte segundos.

    Cada receção é escrita num registo de eventos, com o estado da assinatura criptográfica e com o conteúdo bruto, antes de qualquer coisa ser processada. O motivo é simples: quando uma mensagem “não chegou”, a primeira pergunta é se chegou até nós ou não, e a resposta tem de ser uma linha numa tabela, não uma suposição. O encaminhamento canal → agente é feito por uma tabela de correspondência entre o identificador da página e o serviço, por isso a mesma conta pode suportar vários agentes em canais diferentes.

  2. 02

    2. A deduplicação, antes de qualquer outra coisa

    O identificador da mensagem é colocado numa chave Redis com escrita condicional — se a chave já existir, a mensagem é duplicada e para aqui. O tempo de vida da chave é de 24 horas. Se o Redis não responder, passa-se para uma memória local com limiar de limpeza em 5.000 entradas, por isso a deduplicação não desaparece, apenas fica mais curta na memória.

    A janela foi de 120 segundos até 10 de julho de 2026, quando foi aumentada para 24 horas após um incidente de respostas duplicadas. O comentário que explica a alteração está escrito ao lado do valor, no código. Aqui também se ignoram os stickers e o botão de «like», que de outra forma se tornariam perguntas às quais o agente tentaria responder.

  3. 03

    3. O buffer — três mensagens escritas seguidas tornam-se uma única pergunta

    As pessoas não escrevem um parágrafo. Escrevem «olá», depois «tenho uma pergunta», depois a pergunta. Um assistente que responde a cada linha uma por uma é irritante e parece estúpido. Por isso as mensagens são reunidas num buffer para o par emissor–página, e o cronómetro é reiniciado a cada nova mensagem. Quando a pessoa se cala, responde-se uma vez, a tudo.

    No Messenger e no Instagram, a espera predefinida é de 15 segundos; no WhatsApp, de 5. Aceitam-se no máximo cinco mensagens no buffer — a sexta substitui a última — e o texto concatenado é cortado a 2.000 caracteres. O valor da espera é por agente, não global: lê-se da configuração do agente e pode ser reduzido a zero para um cenário em que a velocidade conta mais do que a coerência. Mesmo antes do envio, volta a verificar-se na base se entretanto o fio foi colocado em pausa — porque, nesses 15 segundos, pode ter entrado uma pessoa.

  4. 04

    4. A leitura das suas fontes

    A pergunta transforma-se num vetor e é procurada nos fragmentos que você carregou. A pesquisa é híbrida: combina a correspondência por palavras com a proximidade vetorial, na proporção de três para sete. Carregam-se até 300 fragmentos candidatos da base de conhecimento do agente, calcula-se a pontuação combinada para cada um e guardam-se os melhores — cinco nos canais de mensagens, dez no widget.

    O número de fragmentos é configurável por agente, entre 1 e 20. Os fragmentos são cortados na indexação a 1.200 caracteres. A seleção final é feita por classificação, não por um limiar absoluto de similaridade: ordena-se pela pontuação combinada e escolhem-se os primeiros. A configuração também tem um campo de limiar, mas no caminho de pesquisa o filtro efetivo mantém qualquer fragmento com pontuação acima de zero e corta por posição — dizemo-lo porque é a diferença entre o que está no painel e o que o código faz. Cada consulta pode ser registada com os fragmentos devolvidos e as suas pontuações, para que seja possível responder a «porque é que disse isto».

  5. 05

    5. As ferramentas — quando o agente precisa de fazer algo, não apenas de dizer

    Se a resposta exigir uma ação, o modelo chama uma ferramenta. Uma ferramenta é de três tipos: um webhook para o seu sistema, um fragmento de código executado de forma isolada, ou uma incorporada na plataforma. O ciclo modelo–ferramenta–modelo tem no máximo cinco rondas, em ambos os motores. Após cinco, para e responde com o que tem.

    O tempo máximo predefinido de uma ferramenta é de 15 segundos. As ferramentas incorporadas que existem hoje: pesquisa numa página web, hora atual, calculadora, escrita numa folha de cálculo Google, notificação de lead no Telegram, envio de SMS, seis ferramentas de marcação para um sistema externo de reservas, e três para o catálogo de uma loja — pesquisa, correspondência e ficha do produto. O catálogo lê em tempo real, com memória intermédia de dez minutos, até 30 páginas e tempo máximo de 20 segundos. Existe um conjunto de ferramentas marcadas como internas, cujo resultado nunca chega ao texto visto pelo cliente.

  6. 06

    6. A resposta, com o histórico à frente

    O modelo recebe a pergunta, os fragmentos encontrados, os resultados das ferramentas e o histórico da conversa — as últimas 25 mensagens no caminho principal, 50 no novo motor. A chamada tem tempo máximo de 120 segundos, com duas novas tentativas; a chamada depois das ferramentas, 90 segundos. A resposta segue pelo canal de onde veio a pergunta, na língua em que foi colocada.

    O novo motor de agentes é ativado por interruptor, por agente, por conta ou globalmente — não se muda tudo de uma vez. Assim, é possível comparar o comportamento antigo com o novo no mesmo tráfego, o que é a única forma honesta de dizer que algo é melhor.

  7. 07

    7. A passagem para um humano

    O fio tem um estado: bot ou humano. A transição pode ser feita de quatro maneiras. Por palavras-chave — uma lista de dezassete expressões em romeno, inglês e russo, com as palavras isoladas comparadas na fronteira da palavra, e as expressões por correspondência no texto. Por frustração — uma segunda lista, também de dezassete. Por repetição — a mesma pergunta feita três vezes nas últimas dez mensagens, contada apenas para mensagens com mais de dez caracteres. Ou pela decisão do modelo, que pode pedir a passagem com uma marca especial.

    O modo é por agente e está desativado por defeito — escolhe-se entre «desativado», «por palavras-chave» e «inteligente». Quando é acionado: o fio passa para «aguarda humano», regista-se o momento, o cliente recebe uma mensagem de confirmação na sua língua, e o agente cala-se. Não responde em paralelo, não completa, não pede desculpa. Cala-se, e pronto. Existe também o protocolo oficial de passagem da Meta, que transfere o controlo do fio para a caixa de entrada da página; o canal de reserva continua a guardar as mensagens mesmo quando o controlo está com um humano, para que o histórico não tenha falhas.

  8. 08

    8. Quando o operador responde a partir da página, o agente pára sozinho

    Se uma pessoa escrever ao cliente diretamente a partir da interface da Meta, a plataforma vê o eco dessa mensagem e coloca o fio em pausa automaticamente, sem que alguém carregue em nada. A duração predefinida é de 30 minutos, configurável entre cinco minutos e sete dias. É o caso mais fácil de passar despercebido quando se projeta um assistente: ninguém carrega num botão de tomada, a pessoa simplesmente responde e, se a plataforma não notar isso, o cliente recebe duas vozes de uma vez.

    O regresso tem três vias. A reativação automática após 30 minutos sem resposta humana — um ciclo verifica a cada minuto e reativa em lotes de até 50 fios, limpando também a memória da conversa para que o agente não continue uma conversa que não teve. A expiração da pausa, verificada separadamente. E o botão no painel: tomada, resolução, voltar ao bot, parar completamente o bot.

  9. 09

    9. O encerramento — e o que não se encerra sozinho

    O fio é marcado como resolvido manualmente, no painel, com notas de resolução e com uma mensagem de sistema escrita no histórico. Não existe encerramento automático por inatividade: um fio deixado aberto continua aberto. Escolhemos dizer isto em vez de deixar a impressão de que se limpa sozinho.

    O que, no entanto, se encerra sozinho são duas coisas: a reativação do agente após 30 minutos, descrita acima, e as escaladas enviadas no Telegram, que após 30 minutos sem resposta são marcadas como expiradas e devolvem o fio ao agente, com o motivo escrito. Por cima de tudo corre um indicador de tempo de resposta: acima de uma hora torna-se aviso, acima de quatro horas torna-se ultrapassagem. Colore, não fecha.

Asistentul magazinuluiSe potrivește cu aparatul meu?Spune-mi modelul aparatului.Verific variantele din catalog.Catalog conectat · informație verificatăEchipa poate prelua conversația.
Schemă explicativă · mesaj, context, acțiune, predare

Comentarii

Os comentários: por que não são mensagens e por que não são tratados como mensagens

Uma mensagem privada tem um único leitor. Um comentário tem todos os leitores da página, incluindo a concorrência, incluindo alguém à procura de um motivo para escândalo. Uma boa resposta em privado pode ser um desastre em público — por exemplo, um preço, uma disponibilidade ou a confirmação de que alguém é mesmo vosso cliente. Por isso os comentários têm um percurso separado, regras separadas e um valor predefinido que pende para a discrição.

Como um comentário entra no sistema

A página subscreve-se a campos diferentes nas duas redes: no Facebook ao fluxo da página, no Instagram explicitamente aos comentários e aos comentários das transmissões em direto. Chegam ao mesmo ponto de entrada que as mensagens, mas por um ramo separado, reconhecido pela presença de uma lista de alterações em vez de uma lista de mensagens. O formato difere entre redes e é detetado separadamente para cada uma. Lê-se também o comentário-pai, para saber se é uma resposta a outro comentário, e a publicação ou o material em que apareceu.

Só os comentários novos desencadeiam algo

A Meta envia o mesmo evento para várias ações. Só a adição de um comentário inicia o agente. A edição, a eliminação, a ocultação e a reexibição são registadas e param aí. A alteração do número de gostos é ignorada sem deixar rasto, porque, caso contrário, o registo seria puro ruído.

Quatro filtros antes de o agente ver o texto

Os comentários da própria página são descartados — caso contrário o agente responderia a si mesmo, sem fim. Os comentários já processados são descartados pelo identificador único do comentário, que tem uma restrição de unicidade na base de dados. Os comentários vazios, os de no máximo dois caracteres e os formados apenas por emoji são descartados. E os textos que contêm números de telefone longos ou endereços web passam por um filtro de spam com quatro padrões e são parados, marcados como tal.

Público ou privado: o valor predefinido é privado

Cada agente tem quatro interruptores separados, dois para Facebook e dois para Instagram: resposta pública ligada ou desligada, resposta privada ligada ou desligada. Por cima deles está um modo geral com três posições — desligado, automático, ou com aprovação. Quando a configuração falta ou não pode ser lida, o valor de reserva no código não é «responder publicamente», mas «não responder publicamente, responder em privado». É uma escolha deliberada: um erro de configuração não pode lançar texto no muro público de alguém.

Agente desligado significa comentários desligados

Se o assistente estiver arquivada, inativa, desativada ou pausada, ou se o bot estiver desligado a partir da conta do cliente, o modo de comentários passa automaticamente para «desligado», independentemente do que estiver escrito nos interruptores de comentários. Um único local para desligar, e não quatro para memorizar.

O que não é respondido publicamente, e quão forte é a regra

A instrução dada ao modelo para uma resposta pública é explícita: no máximo duas frases, tom curto e amigável, convite a mensagem privada para detalhes, e proibição de dar informações detalhadas ou preços em público. Acima disso, um limite rígido: a resposta pública é cortada aos 300 caracteres. Acima de ambos, o texto livre que vocês escrevem como instruções próprias, separadamente para o público e para o privado. Dizemos honestamente quão forte é a regra: é uma instrução de prompt mais um limite de comprimento, não um filtro determinístico que pudesse garantir que um preço nunca aparece. Quando a garantia tem de ser forte, desliga-se a resposta pública e deixa-se apenas a privada, ou passa-se para o modo com aprovação.

Uma única vez a cada 30 segundos, na mesma publicação

A resposta pública tem um contador por publicação: no máximo uma a cada 30 segundos. O motivo é o que acontece quando uma publicação ganha tração — trinta comentários em dois minutos, e a página enche-se de respostas idênticas de um robô, por baixo de cada um. O contador limpa-se sozinho, mantendo as últimas mil publicações monitorizadas.

O Instagram não permite mensagem privada num subcomentário

É uma regra da plataforma, não nossa, e é verificada em três lugares diferentes do código, nos três caminhos pelos quais se poderia chegar a uma mensagem privada. Quando o comentário tem um pai e a rede é Instagram, o envio para privado é ignorado e o motivo exato é escrito no registo. Não se tenta e não falha em silêncio — é ignorado, explicitamente.

De comentário para conversa

A transição faz-se pelo mecanismo oficial: a mensagem privada é enviada usando o identificador do comentário como destinatário, não o identificador da pessoa. A partir desse momento existe um fio de mensagens normal, com todas as regras acima — buffer, fontes, ferramentas, passagem para um humano. O fio é marcado como proveniente de comentários, e o comentário recebido é guardado no histórico da conversa com um tipo próprio, para se ver de onde tudo começou.

Modo com aprovação: o agente escreve, o humano publica

Quando o modo é «com aprovação», a resposta gerada não avança. É guardada como rascunho, em انتظار, e aparece numa fila no painel, com contador. A partir daí é aprovada ou rejeitada, peça por peça. A publicação aprovada passa por uma ponte interna protegida por uma comparação de assinatura em tempo constante — uma resposta aprovada não pode ser injetada de fora.

O que um humano pode fazer, manualmente

Ocultar um comentário, com o mecanismo adequado a cada rede, e marcar o estado na base de dados. Eliminar, com marcação de eliminado. Ocultar em massa, no máximo 25 comentários num lote. Fechar os comentários num conteúdo do Instagram. E ocultar os comentários de uma transmissão em direto, por uma rota separada. São ações manuais, não automáticas. Não existe uma lista de palavras proibidas que oculte comentários sozinha, e não afirmamos que exista.

Predarea

Quando o agente já não tem nada a dizer

A escalada não é uma falha do agente. É a sua função mais importante, porque a única coisa pior do que um assistente que não sabe é um assistente que não sabe e continua a falar. O que se segue é como é feita a passagem, quem é notificado, o que acontece com a resposta humana e como o agente regressa.

O cartão que vai para o grupo do Telegram

Uma ferramenta incorporada envia o caso para um grupo, com um cabeçalho que diz logo que tipo de caso é: urgência, pedido de operador, denúncia de abuso, escalada de cliente insatisfeito, novo lead, ou nova conversa. O tipo é detetado a partir do texto, com padrões separados para cada um. A mensagem do cliente é anexada verbatim ao cartão — quem assume vê exatamente o que o cliente escreveu, não um resumo.

A tomada de controlo é uma corrida, e é tratada como uma corrida

O cartão tem dois estados: aberto e bloqueado. A tomada é feita com uma escrita condicionada que muda o estado apenas se ainda estava aberto, e o código verifica efetivamente quantas linhas foram modificadas. Dois operadores que carregam no mesmo segundo não o tomam ambos. O segundo percebe que já foi tomado, não chega a escrever em paralelo.

A resposta do operador é reescrita na língua do cliente

O operador escreve em grupo, na sua língua e no seu estilo, por vezes de forma telegráfica. Antes da entrega, o texto é reescrito na língua em que o cliente fala e no tom do agente, sem adicionar factos novos. O que o operador diz continua a ser o que é transmitido; só a forma muda. O encaminhamento da resposta para a conversa certa faz-se com base na mensagem a que foi respondido e, se isso faltar, com base no único caso bloqueado por esse operador — e é recusado explicitamente se tiver dois, em vez de se adivinhar.

Quem é notificado, e o que já não é notificado

O painel recebe uma notificação em tempo real através de uma ligação permanente. As pausas acionadas por regras enviam notificação por email ou no Telegram, à escolha — são os únicos dois canais aceites no código. Dizemos também o que já não funciona: a notificação por email para um fio tomado por uma pessoa foi desativada intencionalmente em julho de 2026, e a rota interna ficou como resposta vazia. Se você depender desse email, ele não chega. Preferimos que saiba isto aqui.

As regras de pausa, para além das palavras-chave

Podem ser escritas regras que colocam o fio em pausa ao aparecer um número de telefone, um endereço de email, um conjunto de palavras de até cem, ou a um pedido explícito de uma pessoa. Sobre elas, dois tipos avaliados pelo modelo: intenção e sentimento. A duração da pausa é entre um minuto e sete dias; o valor zero significa pausa até que alguém a levante manualmente.

Cada mudança de mão é registada

Existe um registo de tomadas com seis ações distintas: tomada por uma pessoa, tomada por um bot, reativação automática, tomada por um operador, libertação por um operador e retoma por um agente. Não é uma coluna de estado que é sobrescrita — é um histórico. Quando alguém pergunta "quem estava a falar com o cliente àquela hora", a resposta é uma linha, não uma reconstituição.

O que não existe, para que você não se baseie no que não está

Não existe distribuição automática para couriers ou equipas de campo; procurámos em todo o código e não existe. Não existe encerramento automático das conversas por inatividade. Não existe uma lista global de palavras proibidas para comentários. O que existe são os quatro acionadores de passagem, a escalada no Telegram com tomada atómica, as regras de pausa, e a reativação automática aos 30 minutos.

Fiecare afirmație de pe această pagină a fost citită din codul platformei — 66 citări cu fișier și linie, păstrate în depozitul nostru. Le parcurgem împreună, la cerere.