update_template) segue uma regra só: cria o que falta, atualiza
o que existe e nunca apaga. O resto desta página são as consequências dessa
regra, que não se deduzem dos campos do JSON e são onde um assistente erra.
O bloco que você manda vale por inteiro
Só os blocos presentes são considerados. Mandar{ "tags": [...] } mexe só nas
tags; o funil, as automações e o agente nem são lidos como mudança.
Mas o bloco enviado é a lista completa daquele tipo. Se o projeto tem dez tags
e você manda tags com uma, as outras nove viram órfãs.
Para acrescentar um item:
- pegue a lista que veio no
get_template; - acrescente o item;
- devolva a lista inteira.
O que fica de fora não é apagado
O que existe no projeto e não veio no bloco enviado volta emorphans, intacto.
Para apagar de verdade, uma pessoa usa o painel, onde estão as travas de exclusão
(por exemplo, não dá para excluir coluna com leads).
Ao reportar, diga “ficou de fora sem ser apagado”, não “órfão”.
Como cada item é reconhecido
Para decidir se um item do bloco é novo ou já existe, a escrita usa uma chave de identidade:
Se a chave casa com um item do projeto, ele é atualizado. Se não casa, um
item novo é criado.
Renomear
Coluna, tag e departamento renomeiam pelo slug. Mande o item com oslug
que veio no get_template e o name novo:
langchain, como veio do get_template, na mesma escrita.
Assim as tools passam a usar o nome novo, numa versão não publicada do agente.
Sem isso, a tool continua com o nome antigo e é descartada, com nota, na próxima
vez que o bloco langchain for enviado. Vale o mesmo para tag e departamento.
Sem o slug, a escrita procura pelo nome. “Qualificação” não existe, então nasce
uma coluna nova, e “Triagem” vira órfã.
Propriedade e skill também têm slug e renomeiam do mesmo jeito. Nos blocos
identificados pelo nome (follow-ups, webhooks, conversões e outros), mudar o nome
cria um item novo.
Quando um item sem slug casa pelo nome, a escrita grava um slug nele na hora. Na
próxima leitura ele já vem com slug.
Ambíguos
Se o projeto tem dois itens com o mesmo nome e o bloco não diz qual é qual (semslug), nenhum dos dois é tocado. Eles voltam em ambiguous, com a
contagem.
Não tente resolver sozinho. Com o slug de cada um (veio no get_template), a
escrita consegue mexer em um deles. Sem slug, peça à pessoa para renomear um
deles no painel.
Campo omitido não mexe; endereço vazio não grava (com uma exceção)
- Campo omitido (a chave não veio): o valor atual fica como está.
- Endereço vazio não grava por cima. Vale para
urlde webhook, webhook de integração e MCP;webhook_url,headers,query_paramsebody_paramsde ação personalizada;headersde MCP; e os headers das tools nolangchain.config. Vazio quer dizer “não trouxe”, nunca “apague”. - Exceção: as chaves de IA. A chave do modelo e a do LangSmith dentro de
langchain.config(model.api_key,settings.tracing.api_key) e as chavesapi_keyeeleven_labs_api_keydo blocollm_attendantsó são mantidas quando o campo não vem (nollm_attendant,nulltambém mantém).""(string vazia) grava vazio por cima, e o agente para de responder. Omita o campo ou devolva o valor que veio noget_template; nunca mande""nem um texto de exemplo no lugar da chave. - Endereço preenchido manda, inclusive por cima do que o cliente configurou no painel, sem pedir confirmação.
llm_attendant, null também não grava: não dá para limpar um campo
do agente pelo template.
Ligada ou desligada
Toda automação tem um estado. No JSON éstatus (ACTIVE ou INACTIVE); na
ação personalizada e na mensagem rápida é is_active (true ou false).
- Pergunte antes de ligar. Ligar faz a automação agir sobre conversa real. Nunca ligue algo “para já ficar pronto”.
- Ligar exige endereço. Webhook, webhook de integração, MCP e ação personalizada só ligam se houver endereço (no bloco ou já gravado). Sem ele, o item fica desligado e uma nota explica.
Referências por nome
Vários blocos apontam para colunas, tags e departamentos pelo nome, nunca pelo id. A escrita traduz o nome para o item deste projeto. Se o nome não existir no projeto (nem no estado final desta escrita):
Uma coluna criada no mesmo envio já vale como referência: mande
columns e
conversions juntos.
O agente
- Bloco
langchain: cria uma versão nova, não publicada. Os leads continuam com a versão no ar até alguém publicar no painel. Diga isso a quem pediu. - Se o config enviado é igual ao atual, nenhuma versão é criada.
- A chave do modelo e a do LangSmith que já estão no agente são mantidas só
quando o campo não vem.
""apaga a chave (veja a exceção acima). Como oget_templatejá devolve as chaves preenchidas, devolver o bloco como veio é seguro. - A aprovação humana fica sempre desligada, com nota se o bloco tentar ligar.
- Se havia uma versão por publicar e o bloco foi gravado por cima dela, uma nota avisa. Confira antes de publicar.
- Tools cujo alvo não existe no projeto (uma coluna que sumiu, por exemplo) não entram, com nota.
- Projeto no motor antigo: o bloco
langchainé ignorado, com nota. A escrita nunca migra de motor.
Templates da Meta
Pelo MCP, o blocometa_templates não cria nem altera nada:
- template que já existe nunca é atualizado (o estado dele é da Meta);
- template que falta não é enviado. A nota lista quais faltam e sugere
submit_meta_templates: true, opção que o MCP não tem. O envio à Meta é feito por uma pessoa, no painel.
Repetir é seguro
Aplicar o mesmo template duas vezes não produz escrita na segunda: os campos são comparados e só o que mudou é gravado. Uma escrita interrompida no meio deixa o projeto incompleto, não quebrado; reenviar conserta.Como ler a resposta
Depois de ler, chame
get_template de novo: a resposta não traz a revision nova,
e é a releitura que vira o snapshot.
Armadilhas
- Mandar um bloco com um item só transforma o resto em órfãos. Sempre devolva a lista inteira.
- Renomear sem
slugcria um item novo em vez de renomear. - Renomear sem o bloco
langchaindeixa as tools do agente com o nome antigo. - Preencher
url“para completar” troca o endereço do cliente. - Mandar
"api_key": ""nolangchain.configapaga a chave do modelo ou do LangSmith e derruba o agente. Omita o campo ou devolva o valor lido. - Ligar junto com a criação, sem perguntar. Omita o estado e a automação nasce desligada.
- Propriedade:
valuessó valem comis_enum: true. Propriedade de texto livre já preenchida em algum contato não vira lista (nota com a contagem). Valor retirado da lista continua existindo. Veja Propriedades. - Skill num projeto no LangChain Agent: o bloco
skillsacrescenta ao agente só as skills que ele ainda não tem. Para mudar o texto de uma skill que o agente já tem, altere a tool dela no blocolangchain. - Departamento novo nasce sem membros. Membros são adicionados no painel.
- Fluxo existente: só o estado muda pelo MCP. O desenho é do editor.