Otomasi

Rumus dan kalkulator di Kommo

Widget mengotomatiskan perhitungan di Kommo menggunakan rumus yang ditentukan

Fitur

Otomatisasi perhitungan
Rumus sederhana dan kompleks
Bekerja dengan tanggal dan produk
Kondisi logis
Perhitungan margin

Panduan instalasi dan konfigurasi

Panduan lengkap untuk menggunakan widget "Rumus dan kalkulator di Kommo"

Pengaturan widget

Ketika suatu lead berpindah ke tahap bot, maka bot akan secara otomatis mengisi kolom tersebut berdasarkan hasil perhitungan.

Menyiapkan bot di pipeline:

  • Pilih tahap di mana bot akan bekerja dan klik + Tambahkan pemicu.
  • Dalam daftar, pilih Salesbot → konfigurasikan kondisi → klik + Tambahkan bot baru.
  • Di pengaturan bot, buka bagian Widget → pilih Formula.
  • Klik pada ikon pensil.
  • Pilih bidang di mana hasilnya akan ditulis.
  • Masukkan rumusnya. Contoh: prospek['Harga produk'] - prospek['Biaya produk']
  • Tambahkan beberapa rumus jika perlu → ulangi langkahnya.

Jika perlu, tambahkan langkah-langkah berikut dan hentikan bot. Selanjutnya, simpan pengaturan bot dan pipeline.

Rumus waktu nyata

Rumus real-time dikonfigurasikan di setelan umum widget “Rumus” (bukan di Salesbot).

  1. Buka pengaturan umum widget Rumus.
  2. Klik Tambahkan.
Klik Tambah
  1. Masuk/pilih bidang tempat mencatat hasilnya.
Pilih bidang untuk mencatat hasilnya
  1. Masukkan rumusnya.
Masukkan rumusnya
  1. Simpan pengaturan Anda.

Cara kerjanya di bagian depan:

  • Setelah membuka kartu lead, rumus dijalankan secara otomatis.
  • Saat Anda mengubah nilai bidang di kartu, rumus dihitung ulang secara otomatis.
  • Hasilnya langsung dicatat di kolom yang dipilih di kartu yang sama.
  • Penghitungan ulang dilakukan dengan sedikit penundaan untuk menghindari penghitungan ulang yang tidak perlu saat masuk.

Rumus realtime cocok untuk penghitungan online di kartu lead: margin, diskon, bonus, biaya, keuntungan yang direncanakan, dan indikator turunan lainnya.

Operasi matematika

Anda dapat menggunakan operasi matematika apa pun dalam rumus:

  • tambahan (+)
  • pengurangan (-)
  • perkalian (*)
  • divisi (/)

Rumusnya tidak terbatas pada dua variabel. Anda dapat menggunakan sejumlah bidang dan nilai berapa pun yang diperlukan untuk menghitung hasilnya.

Nilai konstan

Jika Anda perlu menggunakan nilai konstan dalam rumus, Anda dapat menyetelnya menggunakan pemicu:

  1. Buka bot formula.
  2. Klik Tetapkan Variabel.

3. Buat variabel baru, tentukan:

  • Nama (hanya huruf Latin).
  • Nilai (angka atau teks).

Penting saat bekerja dengan variabel:

Jika variabelnya bukan angka, ubahlah menjadi tipe numerik:

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

Jika variabelnya bukan teks, ubahlah menjadi tipe teks:

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

Hal ini diperlukan agar rumus dapat bekerja dengan benar dan mencegah kesalahan dalam perhitungan.

Setelah ini, variabel tersebut dapat digunakan dalam rumus bersama dengan bidang Kommo.

Petunjuk dalam rumus

Pada kolom input rumus, tersedia tooltips dengan nama kolom yang dapat digunakan dalam penghitungan.

Untuk menampilkan tooltip, masukkan simbol "[". Setelah ini, daftar drop-down bidang yang tersedia akan muncul.

Pekerjaan yang benar dengan angka

Terkadang Kommo memperlakukan nilai sebagai teks, yang menghasilkan “lem” alih-alih penambahan (misalnya: 10+14+5 = 10145).

Untuk menghindari hal ini, setiap nilai harus dibungkus dengan parseInt().

Contoh:

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

Kondisi logis

Membuat kondisi logis (if-else dalam satu baris)

Contoh:

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

Di Sini:

  • jika field1 = "sukses" → hasil "ya"
  • jika tidak → hasil "tidak"

Berbagai operator perbandingan didukung:

  • >= - lebih besar dari atau sama dengan
  • <= - kurang dari atau sama
  • > - lebih lanjut
  • < - kurang
  • !== - tidak sama

Contoh dengan ketentuan:

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

Anda dapat memeriksa nilai bidang dan mengembalikan hasil yang berbeda.

Kondisi bersarang

Contoh ini menunjukkan kondisi bersarang (operator ternary) - ketika kondisi lain digunakan dalam satu kondisi.

🔹 Analisis rumus:

lead['Расстояние до заказчика (в км)'] <= '10' ? '300р.' : (lead['Расстояние до заказчика (в км)'] <= '30' ? '1000' : '2000')
  1. Syaratnya dicentang: jika jarak ≤ 10 km → hasilnya “300 gosok.”
  2. Jika syarat pertama tidak terpenuhi, syarat kedua dicentang: jika jarak ≤ 30 km → hasilnya “1000”.
  3. Jika kedua kondisi tidak terpenuhi: hasil default → “2000”.

Pada dasarnya, ini adalah analogi dari “jika - sebaliknya jika - sebaliknya”:

  • Hingga 10 km → 300 gosok.
  • Dari 11 hingga 30 km → 1000
  • Lebih dari 30 km → 2000

Batasan tempat desimal

Terkadang hasil perhitungan bisa berupa angka dengan jumlah desimal yang banyak. Untuk membatasi jumlahnya, gunakan fungsi .toFixed(x), dengan:

x adalah jumlah angka desimal yang tersisa.

Contoh:

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

Jika jumlah = 105, besaran = 7, maka hasilnya adalah 15,00 (2 desimal).

Kunci bidang

Lead (prospek):

  • lead['ID'] — ID lead
  • lead['Judul'] — Nama dagang
  • lead['Anggaran'] — Anggaran
  • lead['status_id'] — ID status
  • lead['pipeline_id'] — ID pipeline
  • lead['status_name'] — Nama status
  • lead['pipeline_name'] — Nama pipeline
  • memimpin['Bertanggung Jawab'] - nama lengkap orang yang bertanggung jawab
  • lead['Field'] — Bidang lead tambahan

Kontak:

  • contact['ID'] — ID Kontak
  • contact['Name'] — nama kontak
  • kontak['Nama'] — Nama
  • contact['Nama Belakang'] — Nama belakang
  • contact['Responsible'] - nama lengkap orang yang bertanggung jawab
  • contact['Field'] — Bidang kontak tambahan

Perusahaan:

  • perusahaan['ID'] — ID perusahaan
  • perusahaan['Nama'] — Nama perusahaan
  • perusahaan['Bertanggung Jawab'] - nama lengkap orang yang bertanggung jawab
  • company['Field'] — Bidang perusahaan tambahan

Faktur terakhir:

  • faktur_terakhir['Status'] — Status
  • last_invoice['Hukum. wajah'] - Jur. menghadapi
  • last_invoice['Pembayar'] — Pembayar
  • last_invoice['VAT type'] — Jenis PPN
  • last_invoice['Tanggal pembayaran'] — Tanggal pembayaran
  • last_invoice['Item faktur'] — Item faktur
  • last_invoice['Item faktur']?.length — Jumlah item
  • last_invoice['Komentar'] — Komentar
  • last_invoice['Biaya'] — Biaya
  • last_invoice['Tautan pembayaran'] - Tautan pembayaran
  • last_invoice['External identifier'] — Pengidentifikasi eksternal
  • last_invoice['Alasan hilangnya PPN'] — Alasan hilangnya PPN
  • last_invoice['Pemasok'] — Pemasok
  • last_invoice['Sistem perpajakan'] — Sistem perpajakan
  • last_invoice['Tautan ke lead'] - Tautan ke lead
  • last_invoice['Tautan pembayaran terenkripsi'] - Tautan pembayaran terenkripsi

Rumus Lead Terkait

Untuk menangani lead terkait, Anda dapat menggunakan array lead['contact_leads'] (lead kontak) dan lead['company_leads'] (lead perusahaan).

Contoh rumus:

Jumlah lead yang berhasil (status 142):

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

Jumlah lead yang berhasil (status 142, jumlah anggaran):

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

Jumlah lead berdasarkan kolom numerik:

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

Jumlah lead yang ditutup (status 143):

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

Jumlah lead dalam status tertentu (contoh ID status: 123123):

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

ℹ️Jika Anda perlu menghitung berdasarkan perusahaan, ganti lead['contact_leads'] dengan lead['company_leads']. Pada contoh dengan status 123123, tentukan ID status yang diinginkan dari pipeline Anda.

Catatan

Variabel yang tersedia dalam rumus adalah lead['notes'] (array semua catatan lead) dan lead['last_note_text'] (teks catatan terakhir).

Contoh:

Teks catatan terakhir:

lead['last_note_text']

Длина последнего входящего звонка (в секундах):

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

Durasi panggilan keluar terakhir (dalam detik):

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

Tanggal panggilan masuk terakhir:

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

Tanggal panggilan keluar terakhir:

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

Operasi dengan bidang

Numerik:

Menambahkan nomor:

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

Pengurangan:

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

Perkalian:

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

Divisi:

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

Mengubah angka menjadi kata:

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

Teks:

String gabungan:

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

Bergabung dengan ruang:

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

Membagi garis menjadi blok yang terdiri dari 3 karakter:

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

Bendera:

Nilai: 'Ya' (jika dicentang) atau kosong (jika tidak dicentang).

Daftar:

Membaca dan menulis sebagai teks.

Multilist:

Nilai dibaca sebagai teks, beberapa nilai dipisahkan oleh ;

Bekerja dengan barang

Jumlah semua daftar (Jenis harga):

lead['list_sum']

Jumlah untuk daftar tertentu:

lead['list_sums'][ID]

Nilai kolom dengan harga berdasarkan kunci (contoh: lead['list_sum_123'], dengan 123 adalah ID kolom):

lead['list_sum_ID']

Kunci menurut nama bidang dari daftar:

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

Bekerja dengan tanggal

Perbedaan tanggal (dalam hari):

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

Perbedaan antara tanggal sekarang dan tanggal di kolom:

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

Tambahkan 7 hari:

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

Pembaruan tanggal +1 hari (h - hari, M - bulan, y - tahun):

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

Tanggal sekarang:

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

Tanggal sekarang + 7 hari:

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

Mengubah tipe

Teks → nomor:

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

Nomor → teks:

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

Kasus untuk nama lengkap

Nama lengkap jika diperlukan:

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

Rumus yang rumit

Operasi dengan tanda kurung:

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

Kondisi:

Jika >10, maka 1, jika tidak 0:

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

Pemeriksaan kesetaraan:

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

Dengan teks:

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

Dengan opsi:

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

Fungsi

Widget ini menyediakan fungsi untuk menghubungkan kontak dan perusahaan secara otomatis ke lead:

Menghubungkan kontak

  • Lampirkan kontak melalui Telepon - mencari kontak berdasarkan nomor telepon
  • Lampirkan kontak melalui email - mencari kontak berdasarkan alamat email
  • Lampirkan kontak berdasarkan bidang khusus - cari kontak berdasarkan bidang khusus apa pun (misalnya, TIN, ID internal, dll.)

Menghubungkan perusahaan

  • Lampirkan perusahaan berdasarkan bidang khusus - cari perusahaan berdasarkan bidang khusus apa pun (misalnya, TIN, ID internal, dll.)

Dengan menggunakan fungsi ini, Anda dapat secara otomatis menemukan dan melampirkan kontak/perusahaan ke lead, atau membuat yang baru jika tidak ditemukan. Anda dapat mengaturnya menggunakan Salesbot.

Menyiapkan pengikatan melalui telepon atau email

Di pilihan bidang, temukan bagian Fungsi:

Bagian Fungsi dalam pemilihan bidang

Dalam rumus, Anda harus memasukkan bidang yang ingin Anda gunakan untuk mengambil telepon atau email untuk membuat kontak:

Memasuki bidang untuk membuat kontak

Menyiapkan pengikatan menggunakan bidang khusus

Untuk menautkan kontak atau perusahaan menggunakan bidang khusus, pilih bidang yang diinginkan dari daftar bidang yang tersedia di antarmuka widget.

Contoh 1: Tautkan kontak menggunakan kolom TIN:

  1. Pilih "Opsi" → "Lampirkan kontak menggunakan bidang khusus" → pilih bidang "TIN" dari daftar
  2. Dalam rumusnya, tunjukkan kolom lead untuk mengambil nilai TIN: return lead["TIN"]

Contoh 2: Tautkan perusahaan menggunakan kolom "ID Internal":

  1. Pilih "Opsi" → "Lampirkan perusahaan berdasarkan bidang khusus" → pilih bidang "ID Internal" dari daftar
  2. Dalam rumusnya, tunjukkan kolom lead tempat mendapatkan ID: return lead["Internal ID"]

Jika kontak atau perusahaan dengan nilai bidang yang ditentukan tidak ditemukan, sistem akan secara otomatis membuat entitas baru dengan nilai ini dan menautkannya ke lead.

Konversi mata uang

Fungsi convertCurrency() tersedia dalam rumus untuk konversi mata uang otomatis dengan kurs resmi Bank Sentral Federasi Rusia.

Format fungsi: menunggu convertCurrency(amount, "source_currency", "target_currency")

Mata uang yang didukung (54 mata uang)

Mata uang utama dunia:

  • USD - dolar AS
  • EUR - Euro
  • GBP - Poundsterling
  • CHF – franc Swiss
  • CNY - Yuan Tiongkok
  • JPY - Yen Jepang
  • RUB - rubel Rusia

Mata uang populer: AUD (Dolar Australia), CAD (Dolar Kanada), NZD (Dolar Selandia Baru), HKD (Dolar Hong Kong), SGD (Dolar Singapura), TRY (Lira Turki), INR (Rupee India), BRL (Real Brasil), ZAR (Rand Afrika Selatan), KRW (Won Korea Selatan)

Mata uang CIS: KZT (tenge Kazakhstan), BYN (rubel Belarusia), UAH (hryvnia Ukraina), AZN (manat Azerbaijan), AMD (dram Armenia), GEL (lari Georgia), KGS (som Kyrgyz), MDL (leu Moldova), TJS (Tajik somoni), TMT (manat Turkmenistan), UZS (Jumlah Uzbekistan)

Mata uang Eropa: PLN (Zloty Polandia), CZK (Krone Ceko), HUF (Forint Hongaria), RON (Leu Rumania), RSD (Dinar Serbia), DKK (Krone Denmark), NOK (Krone Norwegia), SEK (Krona Swedia)

Mata uang Asia: THB (Baht Thailand), VND (Dong Vietnam), IDR (Rupiah Indonesia), MMK (Myanmar Kyat), BDT (Bangladeshi Taka)

Timur Tengah: AED (Dirham Uni Emirat Arab), SAR (Riyal Saudi), QAR (Qatar Riyal), OMR (Rial Oman), BHD (Dinar Bahrain), EGP (Pound Mesir), IRR (Rial Iran)

Dan lain-lain: DZD, MNT, BOB, CUP, NGN, ETB, XDR

Contoh penggunaan

Contoh 1: Ubah 100 dolar menjadi rubel

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

Contoh 2: Konversikan anggaran lead dari dolar ke euro

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

Contoh 3: Hitung 15% anggaran dan konversikan ke dolar

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

Contoh 4: Konversi antara mata uang CIS (tenge ke rubel)

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

Fitur pekerjaan

  • Nilai tukar diperbarui secara otomatis sekali sehari dari API Bank Sentral Federasi Rusia
  • Hasilnya dibulatkan menjadi 2 tempat desimal
  • Kursus di-cache untuk eksekusi cepat (permintaan berulang diselesaikan secara instan)
  • Konversi antar mata uang apa pun (tidak harus melalui rubel)
  • Jika ada kesalahan, kembalikan jumlah aslinya

Fungsi konversi mata uang menggunakan kurs resmi Bank Sentral Federasi Rusia, yang diperbarui setiap hari.