Automacao

Fórmulas e calculadora em Kommo

O widget automatiza cálculos no Kommo usando fórmulas especificadas

Recursos

Automação de cálculos
Fórmulas simples e complexas
Trabalhando com datas e produtos
Condições lógicas
Cálculo de margem

Guia de instalacao e configuracao

Guia detalhado para trabalhar com o widget "Fórmulas e calculadora em Kommo"

Configuração de widget

Quando uma transação passa para o estágio de bot, o bot preencherá automaticamente o campo com base nos resultados do cálculo.

Configurando um bot em um funil:

  • Selecione o estágio onde o bot funcionará e clique em + Adicionar gatilho.
  • Na lista, selecione Salesbot → configure as condições → clique em + Adicionar novo bot.
  • Nas configurações do bot, vá para a seção Widgets → selecione Fórmula.
  • Clique no ícone de lápis.
  • Selecione o campo no qual o resultado será escrito.
  • Insira a fórmula. Exemplo: lead['Preço do produto'] - lead['Custo do produto']
  • Adicione várias fórmulas, se necessário → repita as etapas.

Se necessário, adicione as etapas a seguir e encerre o bot. Em seguida, salve as configurações do bot e do funil.

Fórmulas em tempo real

As fórmulas em tempo real são configuradas nas configurações gerais do widget “Fórmulas” (não no Salesbot).

  1. Abra as configurações gerais do widget Fórmulas.
  2. Clique em Adicionar.
Clique em Adicionar
  1. Insira/selecione o campo onde registrar o resultado.
Selecione um campo para registrar o resultado
  1. Insira a fórmula.
Insira a fórmula
  1. Salve suas configurações.

Como funciona na frente:

  • Após a abertura de um cartão de transação, as fórmulas são executadas automaticamente.
  • Quando você altera os valores dos campos em um cartão, as fórmulas são recalculadas automaticamente.
  • O resultado é imediatamente registrado nos campos selecionados do mesmo cartão.
  • O recálculo é realizado com um ligeiro atraso para evitar recálculos desnecessários ao entrar.

As fórmulas em tempo real são adequadas para cálculos online no cartão de transação: margem, descontos, bônus, custo, lucro planejado e outros indicadores derivados.

Operações matemáticas

Você pode usar qualquer operação matemática em fórmulas:

  • adição (+)
  • subtração (-)
  • multiplicação (*)
  • divisão (/)

A fórmula não se limita a duas variáveis. Você pode usar qualquer número de campos e valores necessários para calcular o resultado.

Valores constantes

Se precisar usar um valor constante em fórmulas, você pode defini-lo usando um gatilho:

  1. Vá para o bot de fórmula.
  2. Clique em Definir variáveis.

3. Crie uma nova variável, especificando:

  • Nome (somente letras latinas).
  • Valor (número ou texto).

Importante ao trabalhar com variáveis:

Se a variável não for um número, converta-a para um tipo numérico:

chislo(lead['Название поля с типом текст'])

Se a variável não for texto, converta-a para um tipo de texto:

text(lead['Название поля с типом число'])

Isso é necessário para que as fórmulas funcionem corretamente e para evitar erros nos cálculos.

Depois disso, a variável pode ser utilizada em fórmulas junto com os campos Kommo.

Dicas em fórmulas

No campo de entrada da fórmula, estão disponíveis dicas de ferramentas com os nomes dos campos que podem ser usados ​​nos cálculos.

Para exibir uma dica de ferramenta, insira o símbolo "[". Depois disso, uma lista suspensa de campos disponíveis aparecerá.

Trabalho correto com números

Às vezes o Kommo trata os valores como texto, o que resulta em uma “cola” em vez de adição (por exemplo: 10+14+5 = 10145).

Para evitar isso, cada valor deve ser agrupado em parseInt().

Exemplo:

parseInt(lead['Сумма в договоре']) - parseInt(lead['Бюджет'])

Condições lógicas

Criando condições lógicas (if-else em uma linha)

Exemplo:

lead['поле1'] == 'успех' ? 'да' : 'нет'

Aqui:

  • se campo1 = "sucesso" → resultado "sim"
  • caso contrário → resultado "não"

Vários operadores de comparação são suportados:

  • >= - maior ou igual a
  • <= - menor ou igual
  • > - mais
  • < - menos
  • !== - diferente

Exemplo com condições:

lead['Расстояние до заказчика (в км)'] <= '50' ? '300р.' : '250р.'

Você pode verificar os valores dos campos e retornar resultados diferentes.

Condições aninhadas

Este exemplo mostra uma condição aninhada (operador ternário) - quando outra condição é usada dentro de uma condição.

🔹 Análise da fórmula:

lead['Расстояние до заказчика (в км)'] <= '10' ? '300р.' : (lead['Расстояние до заказчика (в км)'] <= '30' ? '1000' : '2000')
  1. A condição é verificada: se a distância for ≤ 10 km → o resultado é “300 esfregar.”
  2. Se a primeira condição não for atendida, verifica-se a segunda: se a distância for ≤ 30 km → resultado “1000”.
  3. Se ambas as condições não forem atendidas: resultado padrão → “2000”.

Essencialmente, isto é um análogo de “se - caso contrário, se - caso contrário”:

  • Até 10 km → 300 rublos.
  • De 11 a 30 km → 1000
  • Mais de 30 km → 2000

Limitação de casas decimais

Às vezes, o resultado dos cálculos pode ser um número com um grande número de casas decimais. Para limitar seu número, use a função .toFixed(x), onde:

x é o número de casas decimais que devem permanecer.

Exemplo:

(lead['Сумма'] / lead['Количество']).toFixed(2)

Se soma = 105, quantidade = 7, então o resultado será 15,00 (2 casas decimais).

Chaves de campo

Transações (lead):

  • lead['ID'] — ID do negócio
  • lead['Título'] — Nome comercial
  • lead['Orçamento'] — Orçamento
  • lead['status_id'] — ID do status
  • lead['pipeline_id'] — ID do funil
  • lead['status_name'] — Nome do status
  • lead['pipeline_name'] — Nome do funil
  • lead['Responsible'] - nome completo do responsável
  • lead['Field'] — Campo de transação adicional

Contato:

  • contato['ID'] — ID do contato
  • contato['Nome'] — nome do contato
  • contato['Nome'] — Nome
  • contato['Sobrenome'] — Sobrenome
  • contato['Responsável'] - nome completo do responsável
  • contact['Field'] — Campo de contato adicional

Empresa:

  • empresa['ID'] — ID da empresa
  • empresa['Nome'] — Nome da empresa
  • empresa['Responsável'] - nome completo do responsável
  • empresa['Campo'] — Campo adicional da empresa

Última fatura:

  • last_invoice['Status'] — Status
  • last_invoice['Legal. cara'] - Jur. face
  • last_invoice['Pagador'] — Pagador
  • last_invoice['Tipo de IVA'] — tipo de IVA
  • last_invoice['Data de pagamento'] — Data de pagamento
  • last_invoice['Itens da fatura'] — Itens da fatura
  • last_invoice['Itens da fatura']?.length — Número de itens
  • last_invoice['Comentário'] - Comentário
  • last_invoice['Custo'] — Custo
  • last_invoice['Link de pagamento'] - Link de pagamento
  • last_invoice['Identificador externo'] — Identificador externo
  • last_invoice['Motivo da falta de IVA'] — Motivo da falta de IVA
  • last_invoice['Fornecedor'] — Fornecedor
  • last_invoice['Sistema tributário'] — Sistema tributário
  • last_invoice['Link to deal'] - Link para o negócio
  • last_invoice['Link de pagamento criptografado'] - Link de pagamento criptografado

Fórmulas de transação relacionadas

Para trabalhar com negócios relacionados, você pode usar as matrizes lead['contact_leads'] (negócios de contato) e lead['company_leads'] (negócios da empresa).

Exemplos de fórmulas:

Número de transações bem-sucedidas (status 142):

lead['contact_leads'].filter(l => l['status_id'] == 142).length

Soma das transações bem-sucedidas (status 142, soma dos orçamentos):

lead['contact_leads'].filter(l => l['status_id'] == 142).reduce((sum, l) => sum + (parseInt(l['price']) || 0), 0)

Quantidade de transações por campo numérico:

getLeadsFieldSum(lead['contact_leads'], 'Название_числового_поля')

Número de transações fechadas (status 143):

lead['contact_leads'].filter(l => l['status_id'] == 143).length

Número de transações em um determinado status (exemplo de ID de status: 123123):

lead['contact_leads'].filter(l => l['status_id'] == 123123).length

ℹ️Se precisar contar por empresa, substitua lead['contact_leads'] por lead['company_leads']. No exemplo com status 123123, especifique o ID do status desejado do seu funil.

Notas

As variáveis ​​disponíveis nas fórmulas são lead['notes'] (uma matriz de todas as notas de transação) e lead['last_note_text'] (o texto da última nota).

Exemplos:

Texto da última nota:

lead['last_note_text']

Duração da última chamada recebida (em segundos):

lead['notes'].filter(n => n['note_type'] == 'call_in').length ? parseInt(lead['notes'].filter(n => n['note_type'] == 'call_in').sort((a, b) => a['created_at'] - b['created_at']).pop()['params']['duration']) : 0

Duração da última chamada realizada (em segundos):

lead['notes'].filter(n => n['note_type'] == 'call_out').length ? parseInt(lead['notes'].filter(n => n['note_type'] == 'call_out').sort((a, b) => a['created_at'] - b['created_at']).pop()['params']['duration']) : 0

Data da última chamada recebida:

lead['notes'].filter(n => n['note_type'] == 'call_in').length ? new Date(lead['notes'].filter(n => n['note_type'] == 'call_in').sort((a, b) => a['created_at'] - b['created_at']).pop()['created_at'] * 1000).toISOString().replace('T', ' ').slice(0, 16) : ''

Data da última chamada realizada:

lead['notes'].filter(n => n['note_type'] == 'call_out').length ? new Date(lead['notes'].filter(n => n['note_type'] == 'call_out').sort((a, b) => a['created_at'] - b['created_at']).pop()['created_at'] * 1000).toISOString().replace('T', ' ').slice(0, 16) : ''

Operações com campos

Numérico:

Adicionando números:

lead['Поле1'] + lead['Поле2']

Subtração:

lead['Поле1'] - lead['Поле2']

Multiplicação:

lead['Поле1'] * lead['Поле2']

Divisão:

lead['Поле1'] / lead['Поле2']

Convertendo números em palavras:

numToRuWords(lead['Поле'])

Texto:

Concatenando strings:

lead['Поле1'] + lead['Поле2']

Unindo-se ao espaço:

lead['Поле1'] + ' ' + lead['Поле2']

Dividindo uma linha em blocos de 3 caracteres:

addDivider(lead['Поле'], '.', 3)

Sinalizadores:

Valor: 'Sim' (se marcado) ou vazio (se desmarcado).

Listas:

Leia e escreva como texto.

Multilistas:

Os valores são lidos como texto, vários valores são separados por;

Trabalhando com mercadorias

Soma de todas as listas (tipo de preço):

lead['list_sum']

Valor para uma lista específica:

lead['list_sums'][ID]

O valor do campo com o preço por chave (exemplo: lead['list_sum_123'], onde 123 é o ID do campo):

lead['list_sum_ID']

Chave por nome de campo da lista:

lead['e_IDсписка_1_Название']

Trabalhando com datas

Diferença de data (em dias):

(dateToTime(lead['Поле1']) - dateToTime(lead['Поле2']))/3600/24

Diferença entre a data atual e a data do campo:

(Math.floor(Date.now()/1000) - dateToTime(lead['Поле']))/3600/24

Adicionar 7 dias:

datePlusSeconds(lead['Поле'], 3600*24*7)

Atualização de data +1 dia (d - dias, M - meses, y - anos):

updateDate(lead['Поле'], 1, 'd')

Data atual:

new Date(Date.now()).toISOString().split('T')[0]

Data atual + 7 dias:

new Date(Date.now() + 7 * 86400000)

Alterando tipos

Texto → número:

chislo(lead['Поле'])

Número → texto:

text(lead['Поле'])

Casos para nome completo

Nome completo no caso obrigatório:

namePad(contact['ФИО'], 'родительный')

Fórmulas complexas

Operações com parênteses:

lead['Поле1'] * (lead['Поле2'] - lead['Поле3'])

Condições:

Se >10, então 1, caso contrário 0:

(lead['Поле'] > 10) ? 1 : 0

Verificação de igualdade:

(lead['Поле'] == 'тип 1') ? 'Если условие выполнено' : 'Если условие не выполнено'

Com texto:

(lead['Поле'] === 'Текст') ? 'Если условие выполнено' : 'Если условие не выполнено'

Com opções:

((lead['Поле']=='1') ? 'Вариант1' : '') + ((lead['Поле']=='2') ? 'Вариант2' : '') + ((lead['Поле']=='3') ? 'Вариант3' : '')

Funções

O widget fornece funções para vincular automaticamente contatos e empresas a negócios:

Vinculando contatos

  • Anexar contato por telefone - pesquise um contato por número de telefone
  • Anexar contato por e-mail - pesquise um contato por endereço de e-mail
  • Anexar um contato por campo personalizado - pesquise um contato por qualquer campo personalizado (por exemplo, TIN, ID interno, etc.)

Vinculando empresas

  • Anexar uma empresa por campo personalizado - pesquise uma empresa por qualquer campo personalizado (por exemplo, TIN, ID interno, etc.)

Usando essas funções, você pode encontrar e anexar automaticamente contatos/empresas a negócios ou criar novos, caso não sejam encontrados. Você pode configurar isso usando o Salesbot.

Configurando vinculação por telefone ou e-mail

Na seleção de campos, encontre a seção Funções:

Seção Funções na seleção de campo

Na fórmula você precisa inserir um campo do qual você precisa pegar o telefone ou e-mail para criar um contato:

Inserindo um campo para criar um contato

Configurando a vinculação usando um campo personalizado

Para vincular um contato ou empresa usando um campo personalizado, selecione o campo desejado na lista de campos disponíveis na interface do widget.

Exemplo 1: Vincule um contato usando o campo TIN:

  1. Selecione "Opções" → "Anexar um contato usando um campo personalizado" → selecione o campo "TIN" da lista
  2. Na fórmula, indique o campo de transação do qual será obtido o valor do TIN: return lead["TIN"]

Exemplo 2: Vincule uma empresa usando o campo "ID interno":

  1. Selecione "Opções" → "Anexar empresa por campo personalizado" → selecione o campo "ID interno" da lista
  2. Na fórmula, indique o campo da transação de onde obter o ID: return lead["Internal ID"]

Caso não seja encontrado um contato ou empresa com o valor do campo especificado, o sistema criará automaticamente uma nova entidade com este valor e vinculará-a ao negócio.

Conversão de moeda

A função convertCurrency() está disponível em fórmulas para conversão automática de moeda às taxas oficiais do Banco Central da Federação Russa.

Formato da função: await convertCurrency(amount, "source_currency", "target_currency")

Moedas suportadas (54 moedas)

Principais moedas mundiais:

  • USD - dólar americano
  • EUR - Euro
  • GBP - Libra esterlina
  • CHF – franco suíço
  • CNY - Yuan Chinês
  • JPY - iene japonês
  • RUB - rublo russo

Moedas populares: AUD (dólar australiano), CAD (dólar canadense), NZD (dólar neozelandês), HKD (dólar de Hong Kong), SGD (dólar de Cingapura), TRY (lira turca), INR (rúpia indiana), BRL (real brasileiro), ZAR (rand sul-africano), KRW (won sul-coreano)

Moedas da CEI: KZT (tenge do Cazaquistão), BYN (rublo bielorrusso), UAH (hryvnia ucraniana), AZN (manat do Azerbaijão), AMD (dram armênio), GEL (lari georgiano), KGS (som do Quirguistão), MDL (leu da Moldávia), TJS (somoni tadjique), TMT (manat do Turcomenistão), UZS (soma uzbeque)

Moedas europeias: PLN (Zloty Polaco), CZK (Coroa Checa), HUF (Forint Húngaro), RON (Leu Romeno), RSD (Dinar Sérvio), DKK (Coroa Dinamarquesa), NOK (Coroa Norueguesa), SEK (Coroa Sueca)

Moedas asiáticas: THB (Baht tailandês), VND (Dong vietnamita), IDR (Rupia indonésia), MMK (Kyat de Mianmar), BDT (Taka de Bangladesh)

Oriente Médio: AED (Dirham dos Emirados Árabes Unidos), SAR (Rial Saudita), QAR (Rial do Qatar), OMR (Rial de Omã), BHD (Dinar do Bahrein), EGP (Libra Egípcia), IRR (Rial Iraniano)

E outros: DZD, MNT, BOB, CUP, NGN, ETB, XDR

Exemplos de uso

Exemplo 1: converta 100 dólares em rublos

await convertCurrency(100, "USD", "RUB")

Exemplo 2: Converta o orçamento da transação de dólares para euros

await convertCurrency(lead["Бюджет"], "USD", "EUR")

Exemplo 3: Calcule 15% do orçamento e converta para dólares

await convertCurrency(lead["price"] * 0.15, "RUB", "USD")

Exemplo 4: conversão entre moedas da CEI (tenge para rublos)

await convertCurrency(10000, "KZT", "RUB")

Características do trabalho

  • As taxas de câmbio são atualizadas automaticamente uma vez por dia a partir da API do Banco Central da Federação Russa
  • O resultado é arredondado para 2 casas decimais
  • Os cursos são armazenados em cache para execução rápida (solicitações repetidas são concluídas instantaneamente)
  • Conversão entre quaisquer moedas (não necessariamente em rublos)
  • Se houver erro, retorna o valor original

A função de conversão de moeda utiliza as taxas oficiais do Banco Central da Federação Russa, que são atualizadas diariamente.