Assistentes que respondem nos canais onde os vossos clientes escrevem, com base na vossa informação, e que passam a conversa a uma pessoa quando ultrapassam o seu papel.
Implementamos assistentes de texto na nossa plataforma, aichat.md, que funciona em produção. O trabalho inclui canais ligados com código próprio, uma base de conhecimentos indexada, ferramentas que executam nos seus sistemas e um caminho de passagem para um humano registado na base de dados.
Já construídoServiciul se sprijină pe o platformă proprie aflată în producție, nu pe o promisiune. `https://aichat.md` răspunde public (307 către `/ro`, verificat 06.09.2026), iar comportamentele descrise mai jos sunt citite din schema bazei de date și din rutele platformei, cu fișier și linie: pragurile căutării, tipurile de unelte și timpul lor maxim, stările firului de discuție, jurnalul de preluare. A doua implementare proprie citată este funcția de catalog de magazin (`storeCatalog.service.js` plus trei unelte încorporate), scrisă ca funcție de platformă în locul uneltelor per client. Ce nu susține dovada spunem la fel de explicit: mesajele din șablon WhatsApp nu există în cod, deci nu promitem mesaje proactive în afara ferestrei de 24 de ore.
Um assistente útil não é o que escreve bem, mas o que está ligado à informação real da empresa e sabe onde parar. O nosso trabalho começa no canal onde os vossos clientes escrevem e termina na pessoa que assume a conversa quando o assistente já não tem mais nada a dizer. Entre ambos colocamos o conhecimento, as ferramentas e os limites.
A plataforma em que construímos é aichat.md, feita por nós e em produção. Isso muda a natureza do serviço: não integramos uma caixa negra alheia, mas configuramos um sistema em que podemos ler qualquer limiar e alterar qualquer comportamento. Quando dizemos que a resposta usa, por defeito, cinco fragmentos dos vossos documentos, com limiar de semelhança 0,70 e 30% de ponderação na correspondência de palavras, são valores do esquema da base de dados, não uma descrição de brochura.
Os canais com código próprio, verificados a 06.09.2026, são seis: Facebook Messenger, Instagram Direct, Telegram, 999.md, o widget do site e WhatsApp Business através da Cloud API no Graph v22.0. Cada um tem o seu próprio módulo, não uma caixa assinalada — e as diferenças entre eles contam na prática: o Messenger pode mostrar um carrossel de produtos, o Instagram não, porque a Meta não fornece modelos genéricos no Instagram.
A parte que os clientes subestimam é a passagem para uma pessoa. Em aichat ela não é uma promessa, mas um estado na base de dados: o fio é `bot` ou `human`, o registo de passagem distingue a passagem por uma pessoa, o regresso ao bot e a reativação automática, e o fio tem separadamente um estado de cumprimento do tempo de resposta — `ok`, `warning`, `breached`. No fim do mês, pode mostrar-se quantas conversas foram assumidas e em quanto tempo.
Qué incluye
El trabajo, por componentes
Ligamos o canal e verificamos o que acontece quando fica em silêncio
Seis canais têm código próprio na plataforma: Messenger, Instagram Direct, Telegram, 999.md, widget web e WhatsApp Business Cloud API no Graph v22.0. A ligação Meta faz-se através de Embedded Signup. Em cada canal verificamos também o caso mau, não apenas a primeira mensagem bem-sucedida: um token de página expirado para o canal em silêncio, não com erro visível, por isso a plataforma tem monitorização de tokens e notificação na expiração.
Indexamos o conhecimento e fixamos os limiares de pesquisa
Os documentos e as páginas são divididos em fragmentos com hash de conteúdo e embeddings `text-embedding-3-small`. Os valores predefinidos que iniciamos e depois ajustamos: cinco fragmentos por pergunta, limiar de semelhança 0,70, pesquisa híbrida, peso 0,30 na correspondência de palavras, atribuição da fonte ativada. Cada consulta pode ser registada com os fragmentos devolvidos, as pontuações e os tempos — por isso, a pergunta “porque respondeu assim” tem resposta com dados, não com suposições.
Ligamos as ferramentas aos sistemas que executam
Uma ferramenta pode ser um webhook para o vosso sistema, com método e cabeçalhos à escolha, um pedaço de código JavaScript executado pela plataforma, ou uma ferramenta incorporada na plataforma. Cada uma tem um tempo máximo de execução, por defeito 15 segundos. A consequência prática, dita antes do contrato e não depois: uma integração que responde em 40 segundos tem de ser feita de forma assíncrona, não forçada na conversa.
Catálogo vivo, ligado ao endereço da loja
Para lojas existem três ferramentas incorporadas — `store_catalog_search`, `store_catalog_match`, `store_catalog_product` — sobre um serviço comum de catálogo. Para WooCommerce, a Store API é pública, portanto a loja liga-se com o endereço do site, sem chaves de acesso. Antes, o catálogo era escrito como ferramenta separada para cada cliente; tornou-se função da plataforma precisamente porque a variante com ferramentas escritas em nome do cliente não podia ser mantida.
Entrega a um humano, com registo
A conversa tem estado explícito `bot` ou `human`. O registo de tomada de controlo conhece três ações: tomada de controlo por uma pessoa, regresso ao bot e reativação automática. Separadamente, a conversa tem estado de cumprimento do tempo de resposta: `ok`, `warning`, `breached`. O módulo de tomada de controlo da plataforma tem fila e funções. Definimos logo na primeira conversa quem assume e em quanto tempo, porque este estado é medido desde a primeira conversa, não é acrescentado mais tarde.
Voz na conversa escrita
A nota vocal recebida no WhatsApp ou Telegram é transcrita com `whisper-1` e entra na conversa como texto. A resposta pode voltar como voz, através de `tts-1` ou do ElevenLabs, com definições de estabilidade e semelhança por voz. Para quem dita em vez de escrever — um artesão em obra, um motorista — essa é a diferença entre um canal utilizável e um canal decorativo.
Tradução na conversa, hoje num só sentido
A resposta do operador pode ser reescrita na língua do cliente, com o tom do agente e sem acrescentar factos. O sentido inverso — a mensagem do cliente traduzida para o operador — não existe no código na data da verificação, por isso o operador lê o original. Dizemo-lo porque é a diferença entre uma equipa que pode servir um cliente russo ou inglês e uma que pensa que pode.
O comportamento em mensagens duplas e em rajadas
O webhook da Meta realmente reenvia a mesma mensagem: a deduplicação faz-se pelo identificador da mensagem, com 120 segundos de memória. E quando alguém escreve três linhas seguidas, elas acumulam-se num tampão de 15 segundos e recebem uma única resposta, a tudo o que a pessoa escreveu, não três respostas parciais.
O modelo não está preso a um fornecedor
As chamadas passam por um gateway próprio em `api.megapromoting.com/v1`, que fala o formato OpenAI para todos os fornecedores por trás. O modelo é escolhido por assistente e pode ser alterado sem reescrever a integração. Para embeddings usamos `text-embedding-3-small`.
Qué aspecto tiene
El recorrido, paso a paso.
01
Escolhemos o canal e a pessoa que assume
Um canal, um público, um resultado visado. Na mesma conversa estabelece-se quem assume os fios marcados `human` e em quanto tempo. Entregamos: a lista dos cenários que o assistente cobre e a lista explícita dos que não cobre.
02
Ligamos as fontes e verificamos o que sai delas
Os documentos e as páginas entram como fontes de conhecimento. Nos catálogos verificamos os produtos extraídos um a um onde o preço conta. Entregamos: as fontes indexadas, os limiares de pesquisa definidos para o seu caso e um conjunto de perguntas de controlo com as respostas obtidas.
03
Ligamos as ferramentas e testamos o caso lento
Webhook para CRM ou ERP, código para transformações próprias, ferramenta incorporada para o que já existe. Testamos o caso lento e o caso de erro, não apenas o feliz, porque o limite de 15 segundos é o que decide. Entregamos: as ferramentas configuradas e o comportamento documentado no ultrapassar do limite.
04
Abrimos o canal com a monitorização ligada
O canal entra em funcionamento com a monitorização do token ativa e com a tomada de controlo humana treinada pelo menos uma vez num caso real. Entregamos: acesso ao painel, o procedimento de tomada de controlo e os pontos em que o sistema para por si.
05
Lemos os registos e ajustamos
Depois das primeiras conversas reais, olha para o registo de consultas: o que encontrou, com que pontuação, em quanto tempo. A partir daí ajusta-se o limiar, o número de fragmentos ou o texto da fonte. Entregamos: a lista das alterações feitas e o motivo de cada uma.
Drumul unui mesaj
Os dados
Qué tocamos, dónde están y cuánto se quedan
Las preguntas que hace cualquiera que tenga un delegado de protección de datos — hechas aquí antes de que las haga él.
Onde ficam as conversas
MySQL, no próprio servidor em Microsoft Azure. O esquema tem mais de 80 tabelas modeladas em Prisma, com tabelas separadas para os fios Meta, os fios Telegram, os fios 999.md, comentários, etiquetas, notas internas e registo de auditoria.
Os tokens de canal são guardados encriptados
O token do WhatsApp é armazenado encriptado com Fernet, com reversão para texto simples apenas para os registos antigos. As mensagens têm o seu próprio módulo de encriptação no serviço de canais. Existe monitorização de tokens e notificação na expiração.
O que o widget vê e de onde
O widget tem uma lista de origens permitidas por assistente. O comportamento predefinido tem de ser conhecido: se a lista estiver vazia, a verificação passa — é uma escolha de compatibilidade com instalações antigas, escrita tal como está no código. Isto significa que a restrição por domínio é configurada explicitamente em cada implementação que a exija; nós configuramo-la, não a presumimos.
Que dados pessoais entram sem que os peça
O campo livre de uma conversa pode conter qualquer coisa — um número de telefone, um endereço, um problema médico. Não se pode parar tecnicamente, mas pode-se tratar: define-se o que se guarda, durante quanto tempo, quem tem acesso e o que se instrui a equipa a não pedir no canal. O registo de tratamentos da implementação é escrito ao mesmo tempo que a implementação, não depois.
Prazo de retenção
É definido por implementação e escrito na política publicada do cliente. A regra que aplicamos a nós e também exigimos nos projetos: se uma alteração de código mudar o que é recolhido, para quem chega ou durante quanto tempo se guarda, a política publicada é alterada no mesmo commit.
Un caso
Uma pergunta de preço que começa no Instagram e termina com uma pessoa
A situação
Uma loja com catálogo online recebia perguntas de preço nas DMs do Instagram e no Messenger. As mesmas cinco perguntas, o dia todo, e a resposta correta já existia no site.
Qué construimos
Ligámos os dois canais, indexámos as fontes e ligámos o catálogo através das ferramentas incorporadas da loja, que para WooCommerce leem a Store API pública — portanto sem chaves de acesso na plataforma. Definimos o buffer de concatenação, para que três mensagens escritas em sequência se tornassem uma única pergunta, e escrevemos explicitamente o que o assistente não pode fazer. No Messenger ativámos o carrossel de produtos, com as três condições de que depende; no Instagram ficámos com texto mais imagem, porque a Meta não oferece aí modelos genéricos.
Qué salió
As perguntas de preço e disponibilidade recebem resposta com o produto exibido e link. O que sai do catálogo passa para o estado `human` e chega à pessoa designada, com todo o contexto da conversa. O registo de consultas mostra o que o assistente encontrou, com que pontuação e em quanto tempo, portanto o ajuste é feito com base em dados.
Qué no dice el caso
O resultado depende da qualidade do catálogo. Um preço incorreto no site torna-se um preço incorreto na conversa — o assistente lê a fonte, não a corrige. E não medimos a redução do volume de trabalho da equipa, por isso não a afirmamos como resultado.
Perguntas
Lo que nos pregunta la gente antes de llamar
Pode ele escrever primeiro no WhatsApp a um cliente que não escreveu há uma semana?
Não. E a razão está na Meta mais uma falta real nossa, ditas ambas. Fora da janela de 24 horas desde a última mensagem do cliente, a Meta rejeita o texto livre com o erro 131047, e a plataforma marca a mensagem como falhada e mostra o erro em vez de fingir que saiu. O envio fora da janela exige mensagens de modelo aprovadas pela Meta, e essas não existem no nosso código — uma pesquisa pelo tipo `template` em todo o código devolve zero resultados. Portanto: resposta dentro da janela de 24 horas, sim; campanha proativa no WhatsApp, não, até serem implementados os modelos.
Em que canais funciona, de facto, hoje?
Seis, com código próprio verificado em 06.09.2026: Facebook Messenger, Instagram Direct, Telegram, 999.md, widget web e WhatsApp Business Cloud API. Uma auditoria interna mais antiga encontrou código também para SMS e e-mail; não os reverificámos nesta data, por isso não os incluímos como disponíveis sem uma verificação na implementação concreta. Um canal surgido entretanto não se presume conectado.
A integração com 999.md é oficial?
Não é uma integração de parceiro com API pública. Funciona com a sessão da sua conta: a plataforma pede-lhe o valor do cookie de sessão do seu browser e usa-o para ler e responder a mensagens. A consequência prática, dita de antemão: se 999.md alterar o mecanismo de sessão, a integração para e tem de ser reconectada. Quem não aceitar esse risco não deve começar nesse canal.
Como sabe a resposta e o que faz quando não a sabe?
Procure nas suas fontes com uma pesquisa híbrida — por defeito cinco fragmentos, limiar 0,70, 30% de ponderação por palavras, o resto semântico — e pode anexar a fonte à resposta. Quando não encontra, o caminho previsto é a passagem para humano: o fio passa para o estado `human`, e o registo indica quem assumiu e quando. Existe também o retorno automático ao bot, igualmente como ação registada.
Pode mostrar produtos com foto e preço?
No Messenger, sim — carrossel de cartões. No Instagram, não: a Meta não oferece modelos genéricos no Instagram, por isso aí fica texto mais foto. O carrossel exige três coisas ao mesmo tempo: estar ativado na configuração do assistente, a ferramenta devolver pelo menos dois produtos, e a instrução do assistente pedir lista com preço e link — porque o detetor olha para o texto do agente, não apenas para os dados. Se faltar qualquer uma das três, o carrossel não se constrói. Nós configuramos as três, mas é útil saber porquê.
Quem responde ao cliente que escreve em russo à equipa que fala romeno?
A resposta do operador pode ser reescrita automaticamente na língua do cliente, preservando o tom do agente e sem acrescentar factos — isso funciona. O sentido inverso, a mensagem do cliente traduzida para o operador, não existe no código na data da verificação. Na prática: o cliente recebe resposta na sua língua, mas o operador lê a mensagem original. Se também precisarem do outro sentido, isso é um trabalho a fazer, não uma definição a marcar.
O que acontece se um cliente enviar a mesma mensagem duas vezes?
Não recebe duas respostas. As duplicatas são filtradas pelo identificador da mensagem, com 120 segundos de memória — o webhook da Meta realmente reenvia. E as mensagens escritas uma a seguir à outra são agregadas num buffer de 15 segundos e recebem uma única resposta, a todas.
Com que modelo de IA responde e o que acontece se eu quiser outro?
As chamadas passam por um gateway próprio em `api.megapromoting.com/v1`, que fala o formato OpenAI para todos os fornecedores por detrás; o modelo é escolhido por assistente. Mudar o modelo não exige reescrever a integração. Para embeddings usamos `text-embedding-3-small`; mudar o modelo de embedding, por outro lado, exige reindexar as fontes — não é a mesma coisa.
O que este serviço não faz?
Não faz voz ao telefone — essa é outra plataforma nossa, Kallina, e é outro trabalho. Não envia mensagens proativas no WhatsApp, pelo motivo acima. Não gera PDFs e não anexa as fotografias recebidas a uma encomenda — na data da verificação, a fotografia recebida apenas é assinalada. E não garantimos percentagens de redução do volume de trabalho: não temos a medição, por isso não a afirmamos.
20 delas são código e ficheiros dos nossos repositórios. Não publicamos o nome nem a linha: juntos, numa única página, descreveriam com demasiada precisão como estão construídos sistemas que não são só nossos. Percorremo-los consigo, no repositório, a pedido — a verificação continua possível, só que se faz numa conversa.