Automatizacion

Fórmulas y calculadora en Kommo

El widget automatiza los cálculos en Kommo utilizando fórmulas específicas

Funciones

Automatización de cálculos.
Fórmulas simples y complejas.
Trabajar con fechas y productos.
Condiciones lógicas
Cálculo de margen

Guia de instalacion y configuracion

Guia detallada para trabajar con el widget "Fórmulas y calculadora en Kommo"

Configuración de widgets

Cuando una lead pasa a la etapa de bot, el bot completará automáticamente el campo según los resultados del cálculo.

Configurar un bot en un pipeline:

  • Seleccione la etapa donde funcionará el bot y haga clic en + Agregar activador.
  • En la lista, seleccione Salesbot → configure las condiciones → haga clic en + Agregar nuevo bot.
  • En la configuración del bot, vaya a la sección Widgets → seleccione Fórmula.
  • Haga clic en el icono del lápiz.
  • Seleccione el campo en el que se escribirá el resultado.
  • Ingrese la fórmula. Ejemplo: cliente potencial['Precio del producto'] - cliente potencial['Costo del producto']
  • Agregue varias fórmulas si es necesario → repita los pasos.

Si es necesario, agregue los siguientes pasos y finalice el bot. A continuación, guarde la configuración del bot y del pipeline.

Fórmulas en tiempo real

Las fórmulas en tiempo real se configuran en la configuración general del widget "Fórmulas" (no en Salesbot).

  1. Abra la configuración general del widget Fórmulas.
  2. Haga clic en Agregar.
Haga clic en Agregar
  1. Ingrese/seleccione el campo donde registrar el resultado.
Seleccione un campo para registrar el resultado
  1. Ingrese la fórmula.
Introduce la fórmula
  1. Guarde su configuración.

Cómo funciona en el frente:

  • Después de abrir una tarjeta de lead, las fórmulas se ejecutan automáticamente.
  • Cuando cambia los valores de los campos en una tarjeta, las fórmulas se recalculan automáticamente.
  • El resultado se registra inmediatamente en los campos seleccionados en la misma tarjeta.
  • El recálculo se realiza con un ligero retraso para evitar recálculos innecesarios al ingresar.

Las fórmulas en tiempo real son adecuadas para cálculos en línea en la tarjeta de leads: margen, descuentos, bonificaciones, costos, ganancias planificadas y otros indicadores derivados.

Operaciones matemáticas

Puedes utilizar cualquier operación matemática en las fórmulas:

  • adición (+)
  • resta (-)
  • multiplicación (*)
  • división (/)

La fórmula no se limita a dos variables. Puede utilizar cualquier número de campos y valores necesarios para calcular el resultado.

Valores constantes

Si necesita utilizar un valor constante en fórmulas, puede configurarlo mediante un activador:

  1. Vaya al bot de fórmula.
  2. Haga clic en Establecer variables.

3. Cree una nueva variable, especificando:

  • Nombre (solo letras latinas).
  • Valor (número o texto).

Importante al trabajar con variables:

Si la variable no es un número, conviértala a un tipo numérico:

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

Si la variable no es texto, conviértala a un tipo de texto:

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

Esto es necesario para que las fórmulas funcionen correctamente y evitar errores en los cálculos.

Después de esto, la variable se puede utilizar en fórmulas junto con los campos de Kommo.

Consejos en fórmulas

En el campo de entrada de fórmula, hay información sobre herramientas disponible con los nombres de los campos que se pueden utilizar en los cálculos.

Para mostrar información sobre herramientas, ingrese el símbolo "[". Después de esto, aparecerá una lista desplegable de campos disponibles.

Trabajo correcto con números.

A veces, Kommo trata los valores como texto, lo que da como resultado un "pegamento" en lugar de una suma (por ejemplo: 10+14+5 = 10145).

Para evitar esto, cada valor debe estar envuelto en parseInt().

Ejemplo:

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

Condiciones lógicas

Crear condiciones lógicas (if-else en una línea)

Ejemplo:

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

Aquí:

  • si campo1 = "éxito" → resultado "sí"
  • de lo contrario → resultado "no"

Se admiten varios operadores de comparación:

  • >= - mayor o igual a
  • <= - menor o igual
  • > - más
  • < - menos
  • !== - no igual

Ejemplo con condiciones:

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

Puede verificar los valores de los campos y devolver resultados diferentes.

Condiciones anidadas

Este ejemplo muestra una condición anidada (operador ternario): cuando se utiliza otra condición dentro de una condición.

🔹 Análisis de la fórmula:

lead['Расстояние до заказчика (в км)'] <= '10' ? '300р.' : (lead['Расстояние до заказчика (в км)'] <= '30' ? '1000' : '2000')
  1. Se comprueba la condición: si la distancia es ≤ 10 km → el resultado es “300 rub”.
  2. Si no se cumple la primera condición, se comprueba la segunda: si la distancia es ≤ 30 km → resultado “1000”.
  3. Si no se cumplen ambas condiciones: resultado predeterminado → “2000”.

Esencialmente, esto es un análogo de "si - de lo contrario, si - de lo contrario":

  • Hasta 10 km → 300 frotar.
  • De 11 a 30 km → 1000
  • Más de 30 km → 2000

Limitación de decimales

A veces, el resultado de los cálculos puede ser un número con una gran cantidad de decimales. Para limitar su número, utilice la función .toFixed(x), donde:

x es el número de decimales que deben permanecer.

Ejemplo:

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

Si suma = 105, cantidad = 7, entonces el resultado será 15,00 (2 decimales).

Claves de campo

Leads (cliente potencial):

  • cliente potencial['ID'] - ID de la oferta
  • plomo['Título'] — Nombre comercial
  • plomo['Presupuesto'] — Presupuesto
  • lead['status_id'] - ID de estado
  • lead['pipeline_id'] - ID del pipeline
  • lead['status_name'] — Nombre del estado
  • lead['pipeline_name'] — Nombre del pipeline
  • líder['Responsable'] - nombre completo de la persona responsable
  • lead['Field'] — Campo de lead adicional

Contacto:

  • contacto['ID'] — ID de contacto
  • contacto['Nombre'] — nombre del contacto
  • contacto['Nombre'] — Nombre
  • contacto['Apellido'] — Apellido
  • contacto['Responsable'] - nombre completo de la persona responsable
  • contact['Field'] — Campo de contacto adicional

Empresa:

  • empresa['ID'] - ID de la empresa
  • empresa['Nombre'] — Nombre de la empresa
  • empresa['Responsable'] - nombre completo de la persona responsable
  • empresa['Field'] — Campo de empresa adicional

Última factura:

  • last_invoice['Estado'] — Estado
  • last_invoice['Legal. cara'] - Jur. rostro
  • last_invoice['Pagador'] — Pagador
  • last_invoice['tipo de IVA'] — tipo de IVA
  • last_invoice['Fecha de pago'] — Fecha de pago
  • last_invoice['Elementos de factura'] — Elementos de factura
  • last_invoice['Artículos de factura']?.length — Número de artículos
  • last_invoice['Comentario'] — Comentar
  • last_invoice['Cost'] — Costo
  • last_invoice['Enlace de pago'] - Enlace de pago
  • last_invoice['Identificador externo'] — Identificador externo
  • last_invoice['Motivo de la falta del IVA'] — Motivo de la falta del IVA
  • last_invoice['Proveedor'] — Proveedor
  • last_invoice['Sistema tributario'] — Sistema tributario
  • last_invoice['Enlace al lead'] - Enlace al lead
  • last_invoice['Enlace de pago cifrado'] — Enlace de pago cifrado

Fórmulas de leads relacionadas

Para trabajar con ofertas relacionadas, puede utilizar las matrices lead['contact_leads'] (ofertas de contacto) y lead['company_leads'] (ofertas de empresa).

Ejemplos de fórmulas:

Número de leads exitosas (estado 142):

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

Suma de leads exitosas (estado 142, suma de presupuestos):

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

Cantidad de leads por campo numérico:

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

Número de leads cerradas (estado 143):

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

Número de leads en un determinado estado (ejemplo de ID de estado: 123123):

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

ℹ️Si necesita contar por empresa, reemplace cliente potencial['contact_leads'] por cliente potencial['company_leads']. En el ejemplo con estado 123123, especifique el ID del estado deseado de su pipeline.

Notas

Las variables disponibles en las fórmulas son lead['notes'] (una matriz de todas las notas de lead) y lead['last_note_text'] (el texto de la última nota).

Ejemplos:

Texto de la última nota:

lead['last_note_text']

Duración de la última llamada entrante (en 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

Duración de la última llamada saliente (en 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

Fecha de la última llamada entrante:

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) : ''

Fecha de la última llamada saliente:

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) : ''

Operaciones con campos

Numérico:

Sumar números:

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

Sustracción:

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

Multiplicación:

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

División:

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

Convertir números a palabras:

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

Texto:

Concatenar cadenas:

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

Unirse con el espacio:

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

Dividir una línea en bloques de 3 caracteres:

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

Banderas:

Valor: 'Sí' (si está marcado) o vacío (si no está marcado).

Listas:

Leer y escribir como texto.

Multilistas:

Los valores se leen como texto, varios valores se separan por ;

trabajando con bienes

Suma de todas las listas (tipo de precio):

lead['list_sum']

Cantidad para una lista específica:

lead['list_sums'][ID]

El valor del campo con el precio por clave (ejemplo: cliente potencial['list_sum_123'], donde 123 es el ID del campo):

lead['list_sum_ID']

Introduzca por nombre de campo de la lista:

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

Trabajar con fechas

Diferencia de fechas (en días):

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

Diferencia entre la fecha actual y la fecha del campo:

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

Añadir 7 días:

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

Actualización de fecha +1 día (d - días, M - meses, y - años):

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

Fecha actual:

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

Fecha actual + 7 días:

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

Cambiar tipos

Texto → número:

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

Número → texto:

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

Casos para nombre completo

Nombre completo en el caso requerido:

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

Fórmulas complejas

Operaciones entre paréntesis:

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

Condiciones:

Si >10, entonces 1, en caso contrario 0:

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

Control de igualdad:

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

Con texto:

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

Con opciones:

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

Funciones

El widget proporciona funciones para vincular automáticamente contactos y empresas a acuerdos:

Vincular contactos

  • Adjuntar contacto por teléfono: buscar un contacto por número de teléfono
  • Adjuntar contacto por correo electrónico: buscar un contacto por dirección de correo electrónico
  • Adjuntar un contacto por campo personalizado: busque un contacto por cualquier campo personalizado (por ejemplo, TIN, ID interno, etc.)

Vinculando empresas

  • Adjuntar una empresa por campo personalizado: busque una empresa por cualquier campo personalizado (por ejemplo, TIN, ID interno, etc.)

Con estas funciones, puede buscar y adjuntar automáticamente contactos/empresas a acuerdos, o crear nuevos si no los encuentra. Puedes configurar esto usando Salesbot.

Configurar el enlace por teléfono o correo electrónico

En la selección de campos, busque la sección Funciones:

Funciones de sección en la selección de campos

En la fórmula, debe ingresar un campo desde el cual debe tomar el teléfono o el correo electrónico para crear un contacto:

Ingresar un campo para crear un contacto

Configurar el enlace usando un campo personalizado

Para vincular un contacto o empresa mediante un campo personalizado, seleccione el campo deseado de la lista de campos disponibles en la interfaz del widget.

Ejemplo 1: Vincular un contacto usando el campo TIN:

  1. Seleccione "Opciones" → "Adjuntar un contacto usando un campo personalizado" → seleccione el campo "TIN" de la lista
  2. En la fórmula, indique el campo de lead del cual tomar el valor TIN: devolver cliente potencial["TIN"]

Ejemplo 2: Vincule una empresa utilizando el campo "ID interno":

  1. Seleccione "Opciones" → "Adjuntar empresa por campo personalizado" → seleccione el campo "ID interno" de la lista
  2. En la fórmula, indique el campo de lead de donde obtener el ID: return lead["ID interno"]

Si no se encuentra un contacto o empresa con el valor del campo especificado, el sistema creará automáticamente una nueva entidad con este valor y la vinculará al lead.

Conversión de moneda

La función convertCurrency() está disponible en fórmulas para la conversión automática de moneda a los tipos de cambio oficiales del Banco Central de la Federación de Rusia.

Formato de función: await convertCurrency(monto, "moneda_fuente", "moneda_destino")

Monedas admitidas (54 monedas)

Principales monedas del mundo:

  • USD - dólar estadounidense
  • EUR - Euro
  • GBP - Libra esterlina
  • CHF – franco suizo
  • CNY - Yuan chino
  • JPY - yen japonés
  • RUB - Rublo ruso

Monedas populares: AUD (dólar australiano), CAD (dólar canadiense), NZD (dólar neozelandés), HKD (dólar de Hong Kong), SGD (dólar de Singapur), TRY (lira turca), INR (rupia india), BRL (real brasileño), ZAR (rand sudafricano), KRW (won surcoreano)

Monedas de la CEI: KZT (tenge kazajo), BYN (rublo bielorruso), UAH (grivna ucraniana), AZN (manat azerbaiyano), AMD (dram armenio), GEL (lari georgiano), KGS (som kirguís), MDL (leu moldavo), TJS (somoni tayiko), TMT (manat turcomano), UZS (suma uzbeka)

Monedas europeas: PLN (zloty polaco), CZK (corona checa), HUF (forint húngaro), RON (leu rumano), RSD (dinar serbio), DKK (corona danesa), NOK (corona noruega), SEK (corona sueca)

Monedas asiáticas: THB (baht tailandés), VND (dong vietnamita), IDR (rupia indonesia), MMK (kyat de Myanmar), BDT (taka bangladesí)

Medio Oriente: AED (Dirham de los Emiratos Árabes Unidos), SAR (Riyal saudí), QAR (Rial de Qatar), OMR (Rial omaní), BHD (Dinar de Bahréin), EGP (Libra egipcia), IRR (Rial iraní)

Y otros: DZD, MNT, BOB, CUP, NGN, ETB, XDR

Ejemplos de uso

Ejemplo 1: Convertir 100 dólares a rublos

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

Ejemplo 2: Convertir el presupuesto de la lead de dólares a euros

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

Ejemplo 3: Calcular el 15% del presupuesto y convertirlo a dólares

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

Ejemplo 4: Conversión entre monedas de la CEI (tenges a rublos)

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

Características del trabajo

  • Los tipos de cambio se actualizan automáticamente una vez al día desde la API del Banco Central de la Federación de Rusia.
  • El resultado se redondea a 2 decimales.
  • Los cursos se almacenan en caché para una ejecución rápida (las solicitudes repetidas se completan instantáneamente)
  • Conversión entre cualquier moneda (no necesariamente a través de rublos)
  • Si hay un error, devuelve el importe original.

La función de conversión de moneda utiliza los tipos de cambio oficiales del Banco Central de la Federación de Rusia, que se actualizan diariamente.