Otomasyon

Kommo'da formüller ve hesap makinesi

Widget, belirtilen formülleri kullanarak Kommo'daki hesaplamaları otomatikleştirir

Ozellikler

Hesaplamaların otomasyonu
Basit ve karmaşık formüller
Tarihler ve ürünlerle çalışma
Mantıksal koşullar
Marj hesaplaması

Kurulum ve ayar kilavuzu

Widget ile calismak icin ayrintili kilavuz "Kommo'da formüller ve hesap makinesi"

Widget kurulumu

Bir işlem bot aşamasına geçtiğinde bot, hesaplama sonuçlarına göre alanı otomatik olarak dolduracaktır.

Dönüşüm hunisinde bir bot ayarlama:

  • Botun çalışacağı aşamayı seçin ve + Tetikleyici ekle'yi tıklayın.
  • Listede Salesbot'u seçin → koşulları yapılandırın → + Yeni bot ekle'yi tıklayın.
  • Bot ayarlarında Widget'lar bölümüne gidin → Formül'ü seçin.
  • Kalem simgesine tıklayın.
  • Sonucun yazılacağı alanı seçin.
  • Formülü girin. Örnek: lead['Ürün fiyatı'] - lead['Ürün maliyeti']
  • Gerekirse birden fazla formül ekleyin → adımları tekrarlayın.

Gerekirse aşağıdaki adımları ekleyin ve botu sonlandırın. Ardından bot ve huni ayarlarını kaydedin.

Gerçek zamanlı formüller

Gerçek zamanlı formüller, "Formüller" widget'ının genel ayarlarında yapılandırılır (Salesbot'ta değil).

  1. Formüller widget'ının genel ayarlarını açın.
  2. Ekle'yi tıklayın.
Ekle'ye tıklayın
  1. Sonucun kaydedileceği alanı girin/seçin.
Sonucu kaydetmek için bir alan seçin
  1. Formülü girin.
Formülü girin
  1. Ayarlarınızı kaydedin.

Ön tarafta nasıl çalışır:

  • İşlem kartı açıldıktan sonra formüller otomatik olarak yürütülür.
  • Bir karttaki alan değerlerini değiştirdiğinizde formüller otomatik olarak yeniden hesaplanır.
  • Sonuç anında aynı karttaki seçilen alanlara kaydedilir.
  • Yeniden hesaplama, giriş sırasında gereksiz yeniden hesaplamalardan kaçınmak için hafif bir gecikmeyle gerçekleştirilir.

Gerçek zamanlı formüller, işlem kartındaki çevrimiçi hesaplamalar için uygundur: marj, indirimler, ikramiyeler, maliyet, planlanan kar ve diğer türetilmiş göstergeler.

Matematiksel işlemler

Formüllerde her türlü matematik işlemini kullanabilirsiniz:

  • ekleme (+)
  • çıkarma (-)
  • çarpma (*)
  • bölme (/)

Formül iki değişkenle sınırlı değildir. Sonucu hesaplamak için gerekli sayıda alanı ve değeri kullanabilirsiniz.

Sabit değerler

Formüllerde sabit bir değer kullanmanız gerekiyorsa bunu bir tetikleyici kullanarak ayarlayabilirsiniz:

  1. Formül botuna gidin.
  2. Değişkenleri Ayarla'yı tıklayın.

3. Şunları belirterek yeni bir değişken oluşturun:

  • Ad (yalnızca Latin harfleri).
  • Değer (sayı veya metin).

Değişkenlerle çalışırken önemlidir:

Değişken bir sayı değilse onu sayısal bir türe dönüştürün:

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

Değişken metin değilse onu bir metin türüne dönüştürün:

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

Formüllerin doğru çalışması ve hesaplamalarda hataların önlenmesi için bu gereklidir.

Bundan sonra değişken Kommo alanlarıyla birlikte formüllerde kullanılabilir.

Formüllerdeki ipuçları

Formül giriş alanında hesaplamalarda kullanılabilecek alanların adlarını içeren ipuçları mevcuttur.

Bir araç ipucu görüntülemek için "[" simgesini girin. Bundan sonra, kullanılabilir alanların bir açılır listesi görünecektir.

Sayılarla doğru çalışma

Bazen Kommo değerleri metin olarak ele alır ve bu da ekleme yerine "yapıştırıcı" ile sonuçlanır (örneğin: 10+14+5 = 10145).

Bunu önlemek için her değerin parseInt() içine sarılması gerekir.

Örnek:

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

Mantıksal koşullar

Mantıksal koşullar oluşturma (tek satırda if-else)

Örnek:

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

Burada:

  • eğer alan1 = "başarılı" → sonuç "evet"
  • aksi takdirde → sonuç "hayır"

Çeşitli karşılaştırma operatörleri desteklenir:

  • >= - büyük veya eşittir
  • <= - küçük veya eşit
  • > - daha fazlası
  • < - daha az
  • !== - eşit değil

Koşullu örnek:

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

Alan değerlerini kontrol edip farklı sonuçlar döndürebilirsiniz.

İç içe koşullar

Bu örnek, bir koşulun içinde başka bir koşulun kullanıldığı iç içe geçmiş bir koşulu (üçlü operatör) gösterir.

🔹 Formülün analizi:

lead['Расстояние до заказчика (в км)'] <= '10' ? '300р.' : (lead['Расстояние до заказчика (в км)'] <= '30' ? '1000' : '2000')
  1. Durum kontrol edilir: mesafe ≤ 10 km ise → sonuç “300 rub.” olur.
  2. İlk koşul karşılanmazsa ikincisi kontrol edilir: mesafe ≤ 30 km ise → sonuç “1000”.
  3. Her iki koşul da karşılanmazsa: varsayılan sonuç → “2000”.

Temel olarak bu, "eğer - aksi takdirde - aksi takdirde" ifadesinin bir benzeridir:

  • 10 km'ye kadar → 300 ovma.
  • 11'den 30 km'ye → 1000
  • 30 km'den fazla → 2000

Ondalık basamakların sınırlandırılması

Bazen hesaplamaların sonucu çok sayıda ondalık basamağa sahip bir sayı olabilir. Sayılarını sınırlamak için .toFixed(x) işlevini kullanın; burada:

x, kalması gereken ondalık basamak sayısıdır.

Örnek:

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

Toplam = 105, miktar = 7 ise sonuç 15,00 (virgülden sonra 2 basamak) olacaktır.

Alan tuşları

İşlemler (potansiyel müşteri):

  • lead['ID'] — anlaşma kimliği
  • lead['Başlık'] — Ticari isim
  • lead['Bütçe'] — Bütçe
  • lead['status_id'] — durum kimliği
  • lead['pipeline_id'] — huni kimliği
  • lead['status_name'] — Durum adı
  • lead['pipeline_name'] — Huni adı
  • lead['Sorumlu'] - sorumlu kişinin tam adı
  • lead['Field'] — Ek işlem alanı

İletişim:

  • contact['ID'] — Kişi Kimliği
  • contact['Name'] — kişi adı
  • contact['Name'] — İsim
  • contact['Soyadı'] — Soyadı
  • iletişim['Sorumlu'] - sorumlu kişinin tam adı
  • contact['Field'] — Ek iletişim alanı

Şirket:

  • şirket['ID'] — şirket kimliği
  • şirket['İsim'] — Şirket adı
  • şirket['Sorumlu'] - sorumlu kişinin tam adı
  • şirket['Alan'] — Ek şirket alanı

Son fatura:

  • last_invoice['Durum'] — Durum
  • last_invoice['Yasal. yüz'] - Jur. yüz
  • last_invoice['Ödeyen'] — Ödeyen
  • last_invoice['KDV türü'] — KDV türü
  • last_invoice['Ödeme tarihi'] — Ödeme tarihi
  • last_invoice['Fatura öğeleri'] — Fatura öğeleri
  • last_invoice['Fatura öğeleri']?.length — Öğe sayısı
  • last_invoice['Yorum'] — Yorum
  • last_invoice['Maliyet'] — Maliyet
  • last_invoice['Ödeme bağlantısı'] - Ödeme bağlantısı
  • last_invoice['Harici tanımlayıcı'] — Harici tanımlayıcı
  • last_invoice['Eksik KDV nedeni'] — Eksik KDV nedeni
  • last_invoice['Tedarikçi'] — Tedarikçi
  • last_invoice['Vergi sistemi'] — Vergi sistemi
  • last_invoice['Anlaşmaya bağlantı'] - Anlaşmaya bağlantı
  • last_invoice['Şifreli ödeme bağlantısı'] — Şifreli ödeme bağlantısı

İlgili İşlem Formülleri

İlgili anlaşmalarla çalışmak için lead['contact_leads'] (iletişim anlaşmaları) ve lead['company_leads'] (şirket anlaşmaları) dizilerini kullanabilirsiniz.

Formül örnekleri:

Başarılı işlemlerin sayısı (durum 142):

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

Başarılı işlemlerin toplamı (durum 142, bütçelerin toplamı):

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

Sayısal alana göre işlem miktarı:

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

Kapatılan işlemlerin sayısı (durum 143):

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

Belirli bir durumdaki işlem sayısı (örnek durum kimliği: 123123):

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

ℹ️Şirkete göre saymanız gerekiyorsa lead['contact_leads'] ifadesini lead['company_leads'] ile değiştirin. 123123 durumuna sahip örnekte, dönüşüm huninizden istenen durumun kimliğini belirtin.

Notlar

Formüllerde bulunan değişkenler lead['notes'] (tüm işlem notlarının bir dizisi) ve lead['last_note_text']'dir (son notun metni).

Örnekler:

Son notun metni:

lead['last_note_text']

Son gelen aramanın süresi (saniye cinsinden):

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

Son giden aramanın süresi (saniye cinsinden):

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

Son gelen aramanın tarihi:

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

Son giden aramanın tarihi:

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

Alanlarla işlemler

Sayısal:

Sayı ekleme:

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

Çıkarma:

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

Çarpma:

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

Bölüm:

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

Sayıları kelimelere dönüştürme:

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

Metin:

Dizeleri birleştirme:

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

Uzayla birleştirme:

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

Bir satırı 3 karakterlik bloklara bölme:

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

Bayraklar:

Değer: 'Evet' (işaretliyse) veya boş (işaretli değilse).

Listeler:

Metin olarak okuyun ve yazın.

Çok listeler:

Değerler metin olarak okunur, birden fazla değer ;

Mallarla çalışmak

Tüm listelerin toplamı (Fiyat türü):

lead['list_sum']

Belirli bir listeye ilişkin tutar:

lead['list_sums'][ID]

Anahtara göre fiyatın yer aldığı alanın değeri (örnek: lead['list_sum_123'], burada 123 alan kimliğidir):

lead['list_sum_ID']

Listeden alan adına göre anahtar:

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

Tarihlerle çalışma

Tarih farkı (gün olarak):

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

Geçerli tarih ile alandaki tarih arasındaki fark:

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

7 gün ekleyin:

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

Tarih güncellemesi +1 gün (gün - gün, A - ay, y - yıl):

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

Geçerli tarih:

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

Geçerli tarih + 7 gün:

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

Türleri değiştirme

Metin → sayı:

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

Numara → metin:

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

Tam ad için durumlar

Gerekli durumda tam ad:

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

Karmaşık formüller

Parantezli işlemler:

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

Koşullar:

>10 ise 1, değilse 0:

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

Eşitlik kontrolü:

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

Metinle:

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

Seçeneklerle birlikte:

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

Fonksiyonlar

Widget, kişileri ve şirketleri fırsatlara otomatik olarak bağlamak için işlevler sağlar:

Kişileri bağlama

  • Kişiyi Telefonla ekleyin - kişiyi telefon numarasına göre arayın
  • Kişiyi e-postayla ekleyin - kişiyi e-posta adresine göre arayın
  • Özel alana göre kişi ekleyin - Kişiyi herhangi bir özel alana göre arayın (örneğin, TIN, dahili kimlik vb.)

Şirketleri bağlama

  • Bir şirketi özel alana göre ekleyin - herhangi bir özel alana (örneğin, TIN, dahili kimlik vb.) göre bir şirketi arayın.

Bu işlevleri kullanarak kişileri/şirketleri otomatik olarak bulabilir ve anlaşmalara ekleyebilir veya bulunamazsa yenilerini oluşturabilirsiniz. Bunu Salesbot'u kullanarak ayarlayabilirsiniz.

Telefon veya e-postayla bağlamayı ayarlama

Alan seçiminde İşlevler bölümünü bulun:

Bölüm Alan seçiminde işlevler

Formülde, kişi oluşturmak için telefon veya e-posta almanız gereken alanı girmeniz gerekir:

Kişi oluşturmak için alana girme

Özel bir alan kullanarak bağlamayı ayarlama

Özel bir alan kullanarak bir kişiyi veya şirketi bağlamak için widget arayüzündeki mevcut alanlar listesinden istediğiniz alanı seçin.

Örnek 1: TIN alanını kullanarak bir kişiyi bağlayın:

  1. "Seçenekler" → "Özel alan kullanarak kişi ekleyin" seçeneğini seçin → listeden "TIN" alanını seçin
  2. Formülde TIN değerinin alınacağı işlem alanını belirtin: iade müşteri adayı["TIN"]

Örnek 2: "Dahili Kimlik" alanını kullanarak bir şirketi bağlayın:

  1. "Seçenekler" → "Şirketi özel alana göre ekle"yi seçin → listeden "Dahili Kimlik" alanını seçin
  2. Formülde, kimliğin nereden alınacağı işlem alanını belirtin: iade müşteri adayı["Dahili Kimlik"]

Belirtilen alan değerine sahip bir ilgili kişi veya şirket bulunamazsa sistem otomatik olarak bu değere sahip yeni bir varlık oluşturacak ve bunu anlaşmaya bağlayacaktır.

Para birimi dönüştürme

convertCurrency() işlevi, Rusya Federasyonu Merkez Bankası'nın resmi kurları üzerinden otomatik para birimi dönüştürme formüllerinde mevcuttur.

İşlev biçimi: wait ConvertCurrency(amount, "source_currency", "target_currency")

Desteklenen para birimleri (54 para birimi)

Başlıca dünya para birimleri:

  • USD - ABD doları
  • EUR - Avro
  • GBP - İngiliz sterlini
  • CHF – İsviçre frangı
  • CNY — Китайский юань
  • JPY — Японская иена
  • RUB — Российский рубль

Popüler para birimleri: AUD (Avustralya Doları), CAD (Kanada Doları), NZD (Yeni Zelanda Doları), HKD (Hong Kong Doları), SGD (Singapur Doları), TRY (Türk Lirası), INR (Hindistan Rupisi), BRL (Brezilya Reali), ZAR (Güney Afrika Randı), KRW (Güney Kore Wonu)

BDT para birimleri: KZT (Kazakistan tengesi), BYN (Belarus rublesi), UAH (Ukrayna Grivnası), AZN (Azerbaycan manatı), AMD (Ermeni Dramı), GEL (Gürcü larisi), KGS (Kırgız somu), MDL (Moldavya leyi), TJS (Tacik somonisi), TMT (Türkmen manatı), UZS (Özbek toplamı)

Avrupa para birimleri: PLN (Polonya Zlotisi), CZK (Çek Kronu), HUF (Macar Forinti), RON (Romanya Leyi), RSD (Sırp Dinarı), DKK (Danimarka Kronu), NOK (Norveç Kronu), SEK (İsveç Kronu)

Asya para birimleri: THB (Tayland Bahtı), VND (Vietnam Dongu), IDR (Endonezya Rupiahı), MMK (Myanmar Kyat), BDT (Bangladeş Takası)

Orta Doğu: AED (Birleşik Arap Emirlikleri Dirhemi), SAR (Suudi Riyali), QAR (Katar Riyali), OMR (Umman Riyali), BHD (Bahreyn Dinarı), EGP (Mısır Poundu), IRR (İran Riyali)

Ve diğerleri: DZD, MNT, BOB, CUP, NGN, ETB, XDR

Kullanım örnekleri

Örnek 1: 100 doları rubleye dönüştürün

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

Örnek 2: İşlem bütçesini dolardan avroya dönüştürün

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

Örnek 3: Bütçenin %15'ini hesaplayın ve dolara dönüştürün

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

Örnek 4: BDT para birimleri arasında dönüştürme (tenge'den ruble'ye)

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

İşin özellikleri

  • Döviz kurları, Rusya Federasyonu Merkez Bankası'nın API'sinden günde bir kez otomatik olarak güncellenir.
  • Sonuç 2 ondalık basamağa yuvarlanır
  • Hızlı yürütme için kurslar önbelleğe alınır (yinelenen istekler anında tamamlanır)
  • Herhangi bir para birimi arasında dönüşüm (ruble aracılığıyla olması gerekmez)
  • Bir hata varsa orijinal tutarı döndürür

Para birimi dönüştürme işlevi, Rusya Federasyonu Merkez Bankası'nın günlük olarak güncellenen resmi oranlarını kullanır.