# برنامج الإحالة

أ **برنامج إحالة** هو نظام يكافئ العملاء أو شركاء الشركة من خلال تقديم حوافز أو مكافآت مقابل جلب مشاركين جدد.

من الناحية التقنية، يتضمن برنامج الإحالة عدة مكونات رئيسية:

1. رابط **دعوة**—مُعرّف فريد يتيح للمستخدمين أو العملاء دعوة الآخرين للمشاركة في البرنامج. ويمكن للداعي مشاركة هذا الرابط عبر قنوات مختلفة (على سبيل المثال، ستغطي هذه المقالة إنشاء الروابط عبر روبوت واتساب، ولكن يمكن مشاركة روابط برنامج الإحالة عبر أي تطبيق مراسلة تفضله).
2. أ **قاعدة بيانات المشاركين**، ويتم تنفيذها عبر دمج وظائف MaviBot وGoogle Sheets، حيث يتم تسجيل معلومات كل من المستخدم المدعو والمستخدم الداعي.
3. أ **نظام تتبع الإحالات** الذي يراقب الإجراءات المتعلقة بجلب مشاركين جدد عبر روابط الإحالة. ويخزن النظام بيانات جميع الإحالات، مما يتيح لك التحقق مما إذا كانت إحالة معينة موجودة بالفعل في النظام كمستخدم مدعو سابقًا.

{% hint style="success" %}
نوصي بشدة بمراجعة الأقسام “أساسيات بناء الروبوت على Mavibot.ai” <mark style="color:red;">**رابط**</mark> و“Google Sheets” <mark style="color:red;">**رابط**</mark> قبل إنشاء تدفق الدردشة الآلية الخاص بك.
{% endhint %}

## نظام الإحالة في واتساب

ستتضمن وظائف الروبوت الذي يتم إنشاؤه كتلًا تتكون من المكونات التالية:

1. إنشاء رابط إحالة (تابع)؛ <mark style="color:red;">**رابط**</mark>
2. التحقق مما إذا كان المستخدم الجديد موجودًا بالفعل في قاعدة البيانات؛ <mark style="color:red;">**رابط**</mark>
3. إشعار المستخدم الداعي بإحالة جديدة؛ <mark style="color:red;">**رابط**</mark>
4. تسجيل المستخدمين في قاعدة البيانات؛ <mark style="color:red;">**رابط**</mark>
5. طلب قائمة الإحالات. <mark style="color:red;">**رابط**</mark>

### إنشاء رابط الإحالة

لننشئ كتلة تحتوي على رابط مضمّن سيرسله الروبوت إلى المستخدم عند الأمر “link”. وللقيام بذلك، أنشئ كتلة جديدة في التدفق باستخدام إحدى الطريقتين التاليتين:

1. انقر نقرًا مزدوجًا على مساحة فارغة في لوحة البناء:

<figure><img src="/files/c5e8de82c1c10bcabce302c1764b5ceaff7af06b" alt="" width="563"><figcaption><p>كيفية إنشاء كتلة بالنقر بالماوس</p></figcaption></figure>

2. باستخدام **زر "حفظ"** في أسفل الشاشة واختيار نوع الكتلة:

<figure><img src="/files/0cc185ddd809c0d665b543e67a22cd374c4fca2b" alt="" width="563"><figcaption><p>كيفية إنشاء كتلة بنوع محدد</p></figcaption></figure>

بعد ذلك، في شرط الكتلة، أدخل الكلمة **“Link”** واضبط نوع المطابقة على **“تجاهل الأخطاء المطبعية وعدم الدقة”** (وهذا مفيد في حال وجود أخطاء مطبعية من المستخدم أو أخطاء أخرى في الرسالة):

<figure><img src="/files/0bc6fcb0a22091f57d3353d21960059dc19c4f3c" alt="" width="310"><figcaption><p>شكل 1</p></figcaption></figure>

لتحديد من أحال المستخدم، ينشئ الروبوت رابطًا باستخدام القالب التالي: [https://wa.me/(رقم](https://wa.me/%28your) الهاتف المرتبط بالروبوت)text=You%20were%20recommended%20by%20#{phone}%20😌Hello

<figure><img src="/files/cc392bc53597c946d7c4894bbce5c22b7bac221a" alt=""><figcaption><p>شكل 2 كيفية إدراج رابط في كتلة من التدفق</p></figcaption></figure>

لنلقِ نظرة أقرب على رابط القالب: [https://wa.me/(رقم](https://wa.me/%28your) رقم الهاتف المرتبط بالروبوت)?text=You%20were%20recommended%20by%20#{phone}%20😌Hello، حيث:

1. استبدل الأقواس "(رقم هاتفك المرتبط بالروبوت)" برقم الهاتف المقابل؛
2. يتم استبدال #{phone} تلقائيًا برقم هاتف المستخدم الذي طلب رابط الشريك الخاص به.

نرسل الرابط الذي تم إنشاؤه ليس كنص داخل الكتلة، بل كمرفق — رابط قابل للنقر مع إشعار (انظر الشكل 2 والشكل 3):

* اختر إدراج مرفق
* &#x20;حدّد النوع — Link، والصقه في حقل 'عنوان URL للمرفق':

<figure><img src="/files/59bdad62a31c97f1ade5da52cacdba8f0c07ded6" alt="" width="323"><figcaption><p>الصورة 3. المرفق -> النوع -> الرابط</p></figcaption></figure>

في هذه الحالة، سيظهر الرابط بصريًا مختصرًا:

![شكل 4. العرض في واتساب](https://lh5.googleusercontent.com/vW_tS8GIDqDbN0PkdgQsa6xeeiBBfxuC4Qp8QuzXRz98yI4fphKEUIE22MiBcq4q_RvlQLlAEtlVzcL-hln5DbHaM-F1tuSBNp9y5zhvR5efRmjzDbcTlox5AUDvhnVorlBEdYsX)

لنختبر وظيفة الرابط باستخدام ميزة **"Test Bot"** .

<figure><img src="/files/40b335a5bf6a56397f22918fe4ee3b23c7f09098" alt="" width="237"><figcaption><p>شكل 5. كيفية اختبار روبوت</p></figcaption></figure>

إليك النتيجة: يوجه الرابط المستخدم إلى محادثة المراسلة المناسبة مع رقم هاتفك:

<figure><img src="/files/9236886947b44f47e2931b7fdc8c052e6671ecff" alt="" width="563"><figcaption><p>اختبار وظيفة الرابط</p></figcaption></figure>

بهذه الطريقة، تكون قد أنشأت بنجاح رابط دعوة يمكن للمستخدمين المحتملين استخدامه للوصول إلى الدردشة الآلية. بالإضافة إلى ذلك، عند النقر على هذا الرابط، يُعاد توجيه المستخدم إلى نافذة الدردشة مع رسالة مُعبأة مسبقًا. (انظر الشكل 6)

![شكل 6. رسالة مُعبأة في واتساب](https://lh5.googleusercontent.com/60e0Pcv5362t53lD5Y0evDiAAmeyCoL-eSg_1wXPsgFiKw-Nn0Zmb3WUwBE16lCBr84e56RB863VJd8GFW4kqZAsXMRzEEIFum_ThIdbr58IqV9_JP-kp3IVnfNZoAsJ7d_n4OI4)

### التحقق من المستخدم&#x20;

**استخدام الدوال والتعابير النمطية داخل كتلة**

لن يعمل أمر التحقق والإدخال في قاعدة البيانات إلا إذا وجد الروبوت رقم هاتف في رسالة المستخدم. لذلك، من الضروري تقسيم العبارة المستلمة إلى أجزاء.

ولهذا، تُستخدم الدالة **splitter()** .

{% tabs %}
{% tab title="الدالة splitter()" %}
**splitter(str, s, n)** - تقسّم سلسلة نصية إلى أجزاء. وتُرجع الدالة مصفوفة من العناصر. <br>

المعلمات:

<mark style="color:red;">**!**</mark> <mark style="color:red;">**str**</mark> <mark style="color:red;"></mark><mark style="color:red;">- السلسلة الأصلية</mark>

<mark style="color:red;">**!**</mark> <mark style="color:red;">**s**</mark> <mark style="color:red;"></mark><mark style="color:red;">- فاصل السلسلة النصية</mark>

**n** - الحد الأقصى لعدد العناصر
{% endtab %}

{% tab title="مثال" %}
دالة تقسيم السلسلة النصية:

<figure><img src="/files/e13a63bab41f639f3e3c2d4e08b78e0e52653e6b" alt=""><figcaption><p>شكل 8. تقسيم السلسلة النصية</p></figcaption></figure>
{% endtab %}
{% endtabs %}

بعد ذلك، يحتاج الروبوت إلى التحقق مما إذا كان تسلسل الأرقام في السلسلة هو بالفعل رقم هاتف. وللقيام بذلك، نستخدم التعابير النمطية التالية:

* رقم هاتف عام: `^(\+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$`
* <mark style="color:red;">**Поменять русский номер!**</mark> رقم هاتف روسي فقط: `^((\+7|7|8)+([0-9]){10})$`

<figure><img src="/files/5c286d1e0a12f76fefd62fdeeaa209e4f5471005" alt="" width="500"><figcaption><p>شكل 9. التعبير النمطي لرقم الهاتف</p></figcaption></figure>

{% hint style="info" %}
للحصول على معلومات حول العمل بالتعابير النمطية، يُرجى الرجوع إلى المقال بعنوان "Regular Expressions." <mark style="color:red;">**رابط**</mark>
{% endhint %}

بعد أن يتحقق الروبوت من أن تسلسل الأرقام هو بالفعل رقم هاتف، احفظه من الرسالة كمتغير (على سبيل المثال، #{reff}).

**التحقق من رقم هاتف المستخدم كإحالة في قاعدة البيانات**

الآن من الضروري التحقق مما إذا كان رقم هاتف المستخدم الذي اتبع الرابط هو بالفعل إحالة (تمت دعوته سابقًا بواسطة شخص ما وتم تسجيله في قاعدة البيانات لدينا). وللقيام بذلك، أنشئ كتلة في التدفق مع وظيفة البحث في عمود.

استخدم وظيفة البحث في العمود بالنقر على **"API Request"** في الكتلة، حيث تحتاج إلى ضبط قيم المعلمات التالية:

<figure><img src="/files/4f629e99f1578227f2d41384655ac9d40716bfcc" alt="" width="337"><figcaption><p>شكل 9</p></figcaption></figure>

<mark style="color:red;">**!**</mark>**&#x20;عنوان URL للدالة**: <https://store.salebot.pro/function/findcell> <mark style="color:red;">**رابط**</mark>

<mark style="color:red;">**!**</mark>**&#x20;JSON** **معلمات الطلب:**&#x20;

**{ "id": "your\_table\_id", "find": "text\_to\_search", "col": column\_number\_to\_search\_in, "return": column\_number\_to\_return, "creds\_path": "path\_to\_your\_auth\_credentials\_file" }**

معلمات الاستجابة:

"status": "1" — تم العثور على القيمة

"status": "0" — لم يتم العثور على القيمة

"data" — القيمة التي تم العثور عليها

"cell\_number" — موقع الخلية التي تم العثور عليها

{% tabs %}
{% tab title="البحث حسب العمود وعرض النص من الصف بأكمله" %}
يجب تعيين معلمة return إلى 0.\
\&#xNAN;**{ "id": "your\_table\_id", "find": "text\_to\_search", "col": 2, "return": 0 }**\
Response: {"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"}}\
Response breakdown:&#x20;

data — الاستجابة

data|0 — الخلية 1

data|1 — الخلية 2

data|2 — الخلية 3

data|3 — الخلية 4

cell\_number|row — الصف&#x20;

cell\_number|col — العمود&#x20;
{% endtab %}
{% endtabs %}

{% hint style="info" %}
لمعرفة المزيد عن الدوال المتاحة للعمل مع الجداول، راجع المقال بعنوان "Google Sheets." <mark style="color:red;">**رابط**</mark>
{% endhint %}

### كتلة الإشعار

لإشعار المستخدم الذي شارك رابط الإحالة بأن عميلًا جديدًا اتبع الرابط بنجاح، سننشئ كتلة مخصصة. لإرسال إشعار بإنشاء إحالة جديدة، استخدم معلمات الطلب التالية (النوع: **POST - JSON**):

<figure><img src="/files/7ebc441300eafcde820e92e5111ed32f798a5dd9" alt="" width="357"><figcaption></figcaption></figure>

تُجرى الطلبات باستخدام **POST** الطريقة إلى عنوان URL: **`https://chatter.salebot.pro/api/{api_key}/{action}`** حيث:

* **`api_key`** هو مفتاح الوصول إلى API الخاص بمشروعك، ويمكن الحصول عليه من إعدادات المشروع (انظر الشكل 11).

<figure><img src="/files/49d6928720dcd45ef94d878de6964a92e6832d78" alt="" width="563"><figcaption><p>شكل 11.</p></figcaption></figure>

يمكنك استرجاع مفتاح الوصول باستخدام المتغير **#{api\_key}**، الذي يخزن رمز الوصول المُنشأ حاليًا. **لا تنسَ إنشاء الرمز قبل استخدامه.**

<mark style="color:red;">**!**</mark>**&#x20;عنوان URL للطلب:** [**https://chatter.salebot.pro/api/#{api\_key}/whatsapp\_message**](https://chatter.salebot.pro/api/#{api_key}/whatsapp_message) <mark style="color:red;">**رابط**</mark>

<figure><img src="/files/c1eca3534059287406bd84281fd8be7d9d493eaf" alt="" width="563"><figcaption><p>شكل 12. إشعار في واتساب</p></figcaption></figure>

{% hint style="info" %}
Пيمكنك العثور على مزيد من التفاصيل حول وظائف طلبات API هنا. <mark style="color:red;">**رابط**</mark>
{% endhint %}

### إضافة المستخدمين المدعوّين والداعين إلى قاعدة البيانات

للقيام بذلك، سنستخدم الإدخال سطرًا بسطر في أعمدة محددة، ويتم ذلك باستخدام **التعيين** .

{% hint style="danger" %}
يجب أن يحتوي الجدول على ترويسة مُعبأة (خلية واحدة على الأقل في الصف الأول).
{% endhint %}

<mark style="color:red;">**!**</mark>**&#x20;عنوان URL للدالة** <https://store.salebot.pro/function/gsheets> <mark style="color:red;">**رابط**</mark>

<mark style="color:red;">**!**</mark>**&#x20;JSON** **معلمات الطلب:**&#x20;

{ "id": "your\_table\_id", "mapping": { "a": "#{variable}", "b": "#{another\_variable}", "d": "plain text" } }

إذا كنت تريد كتابة الصفوف ليس في الورقة الأولى، فأضف المعلمة **list\_name** إلى الطلب:

{ "id": "your\_table\_id", "mapping": { "a": "plain text", "b": "#{variable}" }, "list\_name": "SheetName" }

المعلمات:

* **id** — معرّف الجدول\*
* **a, b, c, d** — أسماء الأعمدة
* **list\_name** — اسم الورقة الخاصة بك (مثلًا، "Sheet2")

\*تأكد من استبدالها بمعرّف الجدول الفعلي الخاص بك.

> مثال على الاستجابة:  **{"number\_row":8}**

إذا تم تنفيذ الطلب بنجاح، فستتضمن الاستجابة رقم الصف، والذي يمكنك حفظه واستخدامه في العمليات اللاحقة.

### عرض قائمة الإحالات

لنضف أمرًا إضافيًا إلى الروبوت يتيح للمستخدمين عرض قائمة إحالاتهم.

للعثور على جميع القيم المحددة في عمود، استخدم **findcell** الدالة مع المعلمة **"find\_all"**. سيؤدي ذلك إلى تحديد جميع حالات **"find\_all"** القيمة في **العمود المحدد** وإرجاع قائمة بالقيم الفريدة من **"return"** العمود كسلسلة نصية.

<mark style="color:red;">**!**</mark>**&#x20;عنوان URL للدالة:**  <https://store.salebot.pro/function/findcell> <mark style="color:red;">**رابط**</mark>

<mark style="color:red;">**!**</mark>**&#x20;معلمات طلب JSON:**&#x20;

{ "id": "table\_id", "find\_all": "search\_value", "list\_name": "sheet\_name", "col": "column\_number\_to\_search\_in", "return": "column\_number\_to\_return\_values\_from", "find": "!" }

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

في القيم المحفوظة، حدّد:

list → قائمة

quantity → الكمية

للمستخدم، اعرض الرسالة:*"لقد أحلت #{spisok}، وإجمالي إحالاتك: #{quantity}"*

في برامج المراسلة الأخرى، يكون تنفيذ مثل هذا النظام للإحالة أسهل، لأن بيانات الداعي تُمرَّر كمعلمة مخفية أثناء الانتقال عبر الرابط، لذا لا يحتاج المستخدم الجديد إلى إرسال رسالة مثل *“لقد تمت دعوتي بهذا الرقم.”*


---

# 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/ar/kyfyh-.../brnamj-alihalh.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.
