# Yönlendirme programı

Bir **yönlendirme programı** yeni katılımcılar getirerek müşterilere veya şirket ortaklarına teşvikler ya da bonuslar sunarak ödül veren bir sistemdir.

Teknik açıdan bakıldığında, bir yönlendirme programı birkaç temel bileşen içerir:

1. Bir **davet bağlantısı**— kullanıcıların veya müşterilerin başkalarını programa davet etmesine olanak tanıyan benzersiz bir tanımlayıcı. Davet eden kişi bu bağlantıyı çeşitli kanallar aracılığıyla paylaşabilir (örneğin, bu makale bağlantıların bir WhatsApp botu üzerinden nasıl oluşturulacağını anlatacak, ancak yönlendirme programı bağlantıları tercih ettiğiniz herhangi bir mesajlaşma uygulaması üzerinden paylaşılabilir).
2. Bir **katılımcı veritabanı**, MaviBot ve Google Sheets işlevselliğinin entegrasyonu ile uygulanmış olup, hem davet edilen hem de davet eden kullanıcılar hakkındaki bilgilerin kaydedildiği yerdir.
3. Bir **yönlendirme izleme sistemi** yönlendirme bağlantıları aracılığıyla yeni katılımcı getirmeye ilişkin eylemleri izler. Sistem, tüm yönlendirmelere dair verileri saklar; böylece belirli bir yönlendirmeyi sistemde daha önce davet edilmiş bir kullanıcı olarak zaten mevcut olup olmadığını kontrol etmenizi sağlar.

{% hint style="success" %}
“Mavibot.ai’de Bot Oluşturmanın Temelleri” bölümlerini incelemenizi şiddetle öneririz <mark style="color:kırmızı;">**bağlantı**</mark> ve “Google Sheets” <mark style="color:kırmızı;">**bağlantı**</mark> chatbot akışınızı oluşturmadan önce.
{% endhint %}

## WhatsApp’ta Yönlendirme Sistemi

Oluşturulan botun işlevselliği, aşağıdaki bileşenlerden oluşan blokları içerecektir:

1. bir yönlendirme (affiliate) bağlantısının oluşturulması; <mark style="color:kırmızı;">**bağlantı**</mark>
2. yeni kullanıcının veritabanında zaten olup olmadığının kontrol edilmesi; <mark style="color:kırmızı;">**bağlantı**</mark>
3. davet eden kullanıcının yeni bir yönlendirme hakkında bilgilendirilmesi; <mark style="color:kırmızı;">**bağlantı**</mark>
4. kullanıcıların veritabanına kaydedilmesi; <mark style="color:kırmızı;">**bağlantı**</mark>
5. yönlendirme listesi talep edilmesi. <mark style="color:kırmızı;">**bağlantı**</mark>

### Yönlendirme bağlantısı oluşturma

Botun “link” komutu üzerine kullanıcıya göndereceği gömülü bir bağlantı içeren bir blok oluşturalım. Bunun için akışta iki yöntemden birini kullanarak yeni bir blok oluşturun:

1. Builder tuvalindeki boş bir alana çift tıklayın:

<figure><img src="/files/df6c8d44275090370d3ad38e3a99763a14770832" alt="" width="563"><figcaption><p>Fare tıklamasıyla blok nasıl oluşturulur</p></figcaption></figure>

2. kullanarak **"Kaydet" düğmesi** ekranın alt kısmında ve blok türünü seçerek:

<figure><img src="/files/5aa1e410168e6bad447f0b2774f31a73b2aa40e7" alt="" width="563"><figcaption><p>Seçilen türle blok nasıl oluşturulur</p></figcaption></figure>

Bundan sonra, bloğun koşuluna şu kelimeyi girin **“Link”** alanına aşağıdaki yöntemi girin ve eşleşme türünü olarak ayarlayın: **“Yazım hatalarını ve yanlışlıkları yok say”** (bu, kullanıcı yazım hataları veya diğer mesaj hataları durumunda yararlıdır):

<figure><img src="/files/c22e0b6cb597d4534142ecc92efda234cfad5fa8" alt="" width="310"><figcaption><p>Şekil 1</p></figcaption></figure>

Kullanıcının kim tarafından yönlendirildiğini belirlemek için bot, aşağıdaki şablonu kullanarak bir bağlantı oluşturur: [https://wa.me/(bot'a bağlı](https://wa.me/%28your) telefon numaranız)text=Size%20#{phone}%20tarafından%20önerildiniz%20😌Merhaba

<figure><img src="/files/0e5fc04dfecea55e438543e61c84f52a7fc37ce6" alt=""><figcaption><p>Şekil 2 Akış bloğuna bağlantı nasıl eklenir</p></figcaption></figure>

Şablon bağlantıya daha yakından bakalım: [https://wa.me/(bot'a bağlı](https://wa.me/%28your) bot'a bağlı telefon numarası)?text=Size%20#{phone}%20tarafından%20önerildiniz%20😌Merhaba, burada:

1. Parantez içindeki "(bot'a bağlı telefon numaranız)" kısmını ilgili telefon numarasıyla değiştirin;
2. \#{phone}, ortaklık bağlantısını talep eden kullanıcının telefon numarasıyla otomatik olarak değiştirilir.

Oluşturulan bağlantıyı blok metni olarak değil, bir ek olarak göndeririz — bildirim içeren tıklanabilir bir bağlantı (bkz. Şekil 2 ve Şekil 3):

* bir ek eklemeyi seçin
* &#x20;tür olarak Link'i seçin ve 'Attachment URL' alanına yapıştırın:

<figure><img src="/files/14cf509b21cbb0cc727a1753a946dfa6e0032c07" alt="" width="323"><figcaption><p>Resim 3. Ek -> tür -> bağlantı</p></figcaption></figure>

Bu durumda, bağlantı görsel olarak kısaltılmış görünür:

![Şekil 4. WhatsApp'ta görünüm](https://lh5.googleusercontent.com/vW_tS8GIDqDbN0PkdgQsa6xeeiBBfxuC4Qp8QuzXRz98yI4fphKEUIE22MiBcq4q_RvlQLlAEtlVzcL-hln5DbHaM-F1tuSBNp9y5zhvR5efRmjzDbcTlox5AUDvhnVorlBEdYsX)

Bağlantı işlevini **"Test Bot"** özelliğini kullanarak test edelim.

<figure><img src="/files/00e2d9e660fa7633bc1f77654f7ea8a44831d8ec" alt="" width="237"><figcaption><p>Şekil 5. Bot nasıl test edilir</p></figcaption></figure>

Sonuç şu: bağlantı, kullanıcıyı telefon numaranızla ilgili mesajlaşma uygulaması sohbetine yönlendirir:

<figure><img src="/files/2e2fef0827bfef2277fd330769c4ccfee10718ed" alt="" width="563"><figcaption><p>Bağlantı işlevini test etme</p></figcaption></figure>

Bu şekilde, potansiyel kullanıcıların chatbot’a erişmek için kullanabileceği bir davet bağlantısını başarıyla oluşturmuş oldunuz. Ayrıca, bu bağlantıya tıklandığında kullanıcı önceden doldurulmuş bir mesajla sohbet penceresine yönlendirilir. (Bkz. Şekil 6)

![Şekil 6. WhatsApp'ta doldurulmuş mesaj](https://lh5.googleusercontent.com/60e0Pcv5362t53lD5Y0evDiAAmeyCoL-eSg_1wXPsgFiKw-Nn0Zmb3WUwBE16lCBr84e56RB863VJd8GFW4kqZAsXMRzEEIFum_ThIdbr58IqV9_JP-kp3IVnfNZoAsJ7d_n4OI4)

### Kullanıcı doğrulaması&#x20;

**Bir blokta işlevler ve düzenli ifadelerin kullanılması**

Doğrulama ve veritabanına giriş komutu yalnızca bot, kullanıcının mesajında bir telefon numarası bulursa çalışacaktır. Bu nedenle, alınan ifadeyi parçalara ayırmak gerekir.

Bunun için **splitter()** fonksiyonu kullanılır.

{% tabs %}
{% tab title="Splitter() fonksiyonu" %}
**splitter(str, s, n)** -  bir dizgeyi parçalara ayırır. Fonksiyon bir dizi eleman döndürür. <br>

Parametreler:

<mark style="color:kırmızı;">**!**</mark> <mark style="color:kırmızı;">**str**</mark> <mark style="color:kırmızı;"></mark><mark style="color:kırmızı;">- özgün dizge</mark>

<mark style="color:kırmızı;">**!**</mark> <mark style="color:kırmızı;">**s**</mark> <mark style="color:kırmızı;"></mark><mark style="color:kırmızı;">- dizge ayırıcı</mark>

**n** - maksimum eleman sayısı
{% endtab %}

{% tab title="Örnek" %}
Dizge ayırma fonksiyonu:

<figure><img src="/files/f5f802d3f53382e0a1ecfcf5d4e2c796e1411a08" alt=""><figcaption><p>Şekil 8. Dizgenin bölünmesi</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Sonraki adımda, botun dizgedeki rakam dizisinin gerçekten bir telefon numarası olup olmadığını doğrulaması gerekir. Bunun için aşağıdaki düzenli ifadeleri kullanırız:

* Genel telefon numarası: `^(\+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$`
* <mark style="color:kırmızı;">**Rus numarasını değiştirin!**</mark> Yalnızca Rus telefon numarası: `^((\+7|7|8)+([0-9]){10})$`

<figure><img src="/files/f9fac6d8231b531216abce68fec32dc530e7f772" alt="" width="500"><figcaption><p>Şekil 9. Telefon numarası için düzenli ifade</p></figcaption></figure>

{% hint style="info" %}
Düzenli ifadelerle çalışma hakkında daha fazla bilgi için lütfen "Düzenli İfadeler" başlıklı makaleye bakın. <mark style="color:kırmızı;">**bağlantı**</mark>
{% endhint %}

Bot, rakam dizisinin gerçekten bir telefon numarası olduğunu doğruladıktan sonra, onu mesajdan bir değişken olarak kaydedin (örneğin, #{reff}).

**Kullanıcının telefon numarasını veritabanında bir yönlendirme olarak kontrol etme**

Şimdi, bağlantıya tıklayan kullanıcının telefon numarasının zaten bir yönlendirme olup olmadığını kontrol etmek gerekir (daha önce biri tarafından davet edilmiş ve veritabanımıza kaydedilmiş). Bunun için akışta bir sütun arama işlevi olan bir blok oluşturun.

Sütun arama işlevini kullanmak için **"API Request"** öğesine tıklayın; burada aşağıdaki parametre değerlerini ayarlamanız gerekir:

<figure><img src="/files/2c6ead4703f2a31b6459068d1a894346e4d36b13" alt="" width="337"><figcaption><p>Şekil 9</p></figcaption></figure>

<mark style="color:kırmızı;">**!**</mark>**&#x20;İşlev URL'si**: <https://store.salebot.pro/function/findcell> <mark style="color:kırmızı;">**bağlantı**</mark>

<mark style="color:kırmızı;">**!**</mark>**&#x20;JSON** **istek parametreleri:**&#x20;

**{ "id": "your\_table\_id", "find": "text\_to\_search", "col": search\_in\_column\_number, "return": return\_column\_number, "creds\_path": "auth\_credentials\_dosyanızın\_yolu" }**

Yanıt parametreleri:

"status": "1" — değer bulundu

"status": "0" — değer bulunamadı

"data" — bulunan değer

"cell\_number" — bulunan hücre konumu

{% tabs %}
{% tab title="Sütuna göre arama yapın ve tüm satırdan metni görüntüleyin" %}
return parametresi 0 olarak ayarlanmalıdır.\
\&#xNAN;**{ "id": "your\_table\_id", "find": "text\_to\_search", "col": 2, "return": 0 }**\
Yanıt: {"status":"1","data":{"0":"\u0441\u043e\u043b\u043d\u0446\u0435","1":"\u0440\u0430\u0441\u0441\u0432\u0435\u0442","2":"\u043a\u0440\u044b\u0448\u0430","3":"","4":"\u043d\u0435\u0431\u043e"},"cell\_number":{"row":4,"col":1, "col\_letter":"A"}}\
Yanıt dökümü:&#x20;

data — yanıt

data|0 — Hücre 1

data|1 — Hücre 2

data|2 — Hücre 3

data|3 — Hücre 4

cell\_number|row — satır&#x20;

cell\_number|col — sütun&#x20;
{% endtab %}
{% endtabs %}

{% hint style="info" %}
Tablolarla çalışma için mevcut işlevler hakkında daha fazla bilgi edinmek için lütfen "Google Sheets" başlıklı makaleye bakın. <mark style="color:kırmızı;">**bağlantı**</mark>
{% endhint %}

### Bildirim bloğu

Yönlendirme bağlantısını paylaşan kullanıcıya, yeni bir müşterinin bağlantıyı başarıyla takip ettiğini bildirmek için özel bir blok oluşturacağız. Yeni bir yönlendirmenin oluşturulduğuna dair bildirim göndermek için aşağıdaki istek parametrelerini kullanın (tür: **POST - JSON**):

<figure><img src="/files/6a241fc252c91ca831d266ecf33e3b7d013461bd" alt="" width="357"><figcaption></figcaption></figure>

İstekler şu **POST** yöntemi kullanılarak şu URL'ye gönderilir: **`https://chatter.salebot.pro/api/{api_key}/{action}`** Burada:

* **`api_key`** projenizin API erişim anahtarıdır; proje ayarlarından alınabilir (bkz. Şekil 11).

<figure><img src="/files/371f12a0c718728ec80f581fb5a60992c73291f7" alt="" width="563"><figcaption><p>Şekil 11.</p></figcaption></figure>

Erişim anahtarını **#{api\_key}**&#x67;eçerli oluşturulan erişim belirtecini saklayan değişkeni kullanarak alabilirsiniz. **Kullanmadan önce belirteci oluşturmayı unutmayın.**

<mark style="color:kırmızı;">**!**</mark>**&#x20;İstek URL'si:** [**https://chatter.salebot.pro/api/#{api\_key}/whatsapp\_message**](https://chatter.salebot.pro/api/#{api_key}/whatsapp_message) <mark style="color:kırmızı;">**bağlantı**</mark>

<figure><img src="/files/bb84bcb1934a82ee646626ad7e8b4f24e71dd4fe" alt="" width="563"><figcaption><p>Şekil 12. Whatsapp'ta bildirim</p></figcaption></figure>

{% hint style="info" %}
API istek işlevleri hakkında daha fazla ayrıntıyı burada bulabilirsiniz. <mark style="color:kırmızı;">**bağlantı**</mark>
{% endhint %}

### Davet edilen ve davet eden kullanıcıları veritabanına ekleme

Bunu yapmak için, belirli sütunlara satır satır giriş yapmayı kullanacağız; bu işlem **mapping** işlevini kullanın.

{% hint style="danger" %}
ile yapılır. Tablo başlığı doldurulmuş olmalıdır (ilk satırda en az bir hücre).
{% endhint %}

<mark style="color:kırmızı;">**!**</mark>**&#x20;İşlev URL'si** <https://store.salebot.pro/function/gsheets> <mark style="color:kırmızı;">**bağlantı**</mark>

<mark style="color:kırmızı;">**!**</mark>**&#x20;JSON** **istek parametreleri:**&#x20;

{ "id": "your\_table\_id", "mapping": { "a": "#{variable}", "b": "#{another\_variable}", "d": "düz metin" } }

Satırları ilk sayfaya değil de başka bir sayfaya yazmak istiyorsanız, isteğe **list\_name** parametresini ekleyin:

{ "id": "your\_table\_id", "mapping": { "a": "düz metin", "b": "#{variable}" }, "list\_name": "SheetName" }

Parametreler:

* **id** — tablo tanımlayıcısı\*
* **a, b, c, d** — sütun adları
* **list\_name** — sayfa adınız (örneğin, "Sheet2")

\*Gerçek tablo kimliğinizle değiştirdiğinizden emin olun.

> Yanıt örneği:  **{"number\_row":8}**

İstek başarıyla çalışırsa, yanıt satır numarasını içerecektir; bunu kaydedip sonraki işlemler için kullanabilirsiniz.

### Yönlendirme listesini görüntüleme

Kullanıcıların yönlendirme listelerini görüntülemesine olanak tanıyan ek bir komutu bot'a ekleyelim.

Bir sütundaki belirtilen tüm değerleri bulmak için **findcell** işlevini **"find\_all"**&#x70;arametresiyle kullanın. Bu, belirtilen **"find\_all"** değerin **"col"** sütunundaki tüm görünümlerini bulacak ve **"return"** sütunundan benzersiz değerlerin bir listesini dize olarak döndürecektir.

<mark style="color:kırmızı;">**!**</mark>**&#x20;İşlev URL'si:**  <https://store.salebot.pro/function/findcell> <mark style="color:kırmızı;">**bağlantı**</mark>

<mark style="color:kırmızı;">**!**</mark>**&#x20;JSON istek parametreleri:**&#x20;

{ "id": "table\_id", "find\_all": "search\_value", "list\_name": "sheet\_name", "col": "search\_in\_column\_number", "return": "return\_values\_column\_number", "find": "!" }

<figure><img src="/files/12890101c69e1efa9c084327d0429dd56603afb4" alt="" width="449"><figcaption></figcaption></figure>

Kaydedilen değerlerde şunu belirtin:

list → Liste

quantity → Miktar

Kullanıcıya şu mesajı gösterin:*"#{spisok} kişiyi yönlendirdiniz, toplam yönlendirme sayınız: #{quantity}"*

Diğer mesajlaşma uygulamalarında, böyle bir yönlendirme sistemini uygulamak daha da kolaydır çünkü davet edenin verileri bağlantı geçişi sırasında gizli bir parametre olarak iletilir, bu nedenle yeni kullanıcının şu şekilde bir mesaj göndermesine gerek kalmaz *“Bu numara tarafından davet edildim.”*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/tr/nasil-yapilir.../yonlendirme-programi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
