تذكير تجديد الاشتراك على واتساب
قبل انتهاء اشتراك العميل بسبعة أيام، ذكّره على واتساب وأخبر فريقك.
كيف تعمل
المشغّل: جدول زمني — كل يوم الساعة 10:00
- اقرأ جدول العملاء (name, phone, plan, renews_on, reminded).
- احتفظ بمن يتجدد اشتراكهم بعد 7 أيام بالضبط ولم يُذكَّروا بعد.
- أرسل قالب واتساب فيه اسم الباقة وتاريخ التجديد.
- علّمهم بأنهم ذُكِّروا وأرسل القائمة لفريقك على تيليجرام.
المخطط
مشغّل تطبيق كود
الكود
كود JavaScript المستخدم في خطوات Code، وهو مضمَّن بالفعل في القالب بالأسفل.
// Clients sheet columns: name | phone | plan | renews_on (YYYY-MM-DD) | reminded
// Keeps clients whose renewal is exactly 7 days away and who haven't been reminded yet.
const DAYS_BEFORE = 7;
const target = new Date();
target.setDate(target.getDate() + DAYS_BEFORE);
const day = target.toISOString().slice(0, 10);
return $input.all()
.map((item) => item.json)
.filter((r) => r.phone && String(r.renews_on).slice(0, 10) === day && String(r.reminded).toLowerCase() !== "yes")
.map((r) => ({ json: { ...r, phone: String(r.phone).replace(/[^0-9]/g, "") } }));ابنِها بأداتك
اختر أداتك — نفس الأتمتة، خطوة بخطوة.
انسخه والصقه مباشرة في مساحة عمل n8n (Ctrl+V)، أو حمّله واستخدم Import from File. بعد ذلك اربط حساباتك واستبدل كل قيمة تبدأ بـ YOUR_.
عرض الكود (231 سطر)
{
"name": "تذكير تجديد الاشتراك على واتساب (Flowngn)",
"nodes": [
{
"parameters": {
"content": "## تذكير تجديد الاشتراك على واتساب\nقبل انتهاء اشتراك العميل بسبعة أيام، ذكّره على واتساب وأخبر فريقك.\n\n**Setup**\n1. Open each node and connect your own credentials.\n2. Replace every YOUR_… placeholder.\n3. Test once, then activate.\n\nFree template from Flowngn",
"height": 260,
"width": 340
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Setup notes",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-420,
-60
]
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 10
}
]
}
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Every day 10:00",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
0,
0
]
},
{
"parameters": {
"operation": "read",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "Clients",
"mode": "name"
},
"options": {}
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Read clients",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
300,
0
]
},
{
"parameters": {
"jsCode": "// Clients sheet columns: name | phone | plan | renews_on (YYYY-MM-DD) | reminded\n// Keeps clients whose renewal is exactly 7 days away and who haven't been reminded yet.\nconst DAYS_BEFORE = 7;\nconst target = new Date();\ntarget.setDate(target.getDate() + DAYS_BEFORE);\nconst day = target.toISOString().slice(0, 10);\n\nreturn $input.all()\n .map((item) => item.json)\n .filter((r) => r.phone && String(r.renews_on).slice(0, 10) === day && String(r.reminded).toLowerCase() !== \"yes\")\n .map((r) => ({ json: { ...r, phone: String(r.phone).replace(/[^0-9]/g, \"\") } }));"
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Renewing in 7 days",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
600,
0
]
},
{
"parameters": {
"operation": "sendTemplate",
"phoneNumberId": "YOUR_PHONE_NUMBER_ID",
"recipientPhoneNumber": "={{ $json.phone }}",
"template": "YOUR_RENEWAL_TEMPLATE|ar",
"components": {
"component": [
{
"type": "body",
"bodyParameters": {
"parameter": [
{
"type": "text",
"text": "={{ $json.name }}"
},
{
"type": "text",
"text": "={{ $json.plan }}"
},
{
"type": "text",
"text": "={{ $json.renews_on }}"
}
]
}
}
]
}
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Send reminder",
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
900,
0
]
},
{
"parameters": {
"operation": "update",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "Clients",
"mode": "name"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"phone": "={{ $('Renewing in 7 days').item.json.phone }}",
"reminded": "yes"
},
"matchingColumns": [
"phone"
]
},
"options": {}
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Mark reminded",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
1200,
0
]
},
{
"parameters": {
"chatId": "YOUR_CHAT_ID",
"text": "=Renewal reminder sent: {{ $('Renewing in 7 days').item.json.name }} ({{ $('Renewing in 7 days').item.json.plan }}), renews {{ $('Renewing in 7 days').item.json.renews_on }}",
"additionalFields": {
"appendAttribution": false
}
},
"id": "45821f1c-89e8-43ba-a4e7-feb0390d7b0e",
"name": "Tell the team",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1500,
0
]
}
],
"connections": {
"Every day 10:00": {
"main": [
[
{
"node": "Read clients",
"type": "main",
"index": 0
}
]
]
},
"Read clients": {
"main": [
[
{
"node": "Renewing in 7 days",
"type": "main",
"index": 0
}
]
]
},
"Renewing in 7 days": {
"main": [
[
{
"node": "Send reminder",
"type": "main",
"index": 0
}
]
]
},
"Send reminder": {
"main": [
[
{
"node": "Mark reminded",
"type": "main",
"index": 0
}
]
]
},
"Mark reminded": {
"main": [
[
{
"node": "Tell the team",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"meta": {
"templateCredsSetupCompleted": false
},
"tags": []
}في Make، أنشئ سيناريو جديدًا وأضف هذه الوحدات بالترتيب:
- Schedule the scenario: Every day 10:00
- Google Sheets › Search Rows
- Tools › Set variable / Iterator + Array aggregator (same logic as the Code step)
- WhatsApp Business Cloud › Send a Template Message
- Google Sheets › Update a Row
- Telegram Bot › Send a Text Message or a Reply
- كل تشغيل لوحدة يستهلك عمليات (operations) في Make — والباقة المجانية تتضمن حصة شهرية.
- دوال Make المدمجة (map و sum و formatDate…) تغني عن معظم خطوات Code؛ وللمنطق المعقد استخدم وحدة كود.
- قد تختلف أسماء الوحدات والخطوات قليلًا مع تحديث Make و Zapier لتطبيقاتهما.
في Zapier، أنشئ Zap جديدًا وأضف هذه الخطوات بالترتيب:
- Schedule by Zapier — Every day 10:00
- Google Sheets — Lookup Spreadsheet Rows (or Code by Zapier)
- Code by Zapier — Run JavaScript (paste the code from the Code section)
- WhatsApp — Send Template Message
- Google Sheets — Update Spreadsheet Row
- Telegram — Send Message
- الـ Zaps التي فيها أكثر من خطوتين تحتاج باقة Zapier مدفوعة.
- الـ Webhooks والفلاتر/المسارات و Code by Zapier ميزات مدفوعة في بعض باقات Zapier.
- Code by Zapier يشغّل JavaScript: أعد استخدام الكود بالأعلى، مع قراءة المدخلات من inputData بدلًا من $json.
- قد تختلف أسماء الوحدات والخطوات قليلًا مع تحديث Make و Zapier لتطبيقاتهما.
نصائح
- امسح عمود reminded عندما يجدد العميل، حتى يخرج تذكير الشهر القادم.
أتمتات مشابهة
المالية والإدارةمتوسط
سجّل مصروفاتك برسالة لبوت تيليجرام
أرسل "12.50 غداء" إلى البوت فتُحفظ فورًا في Google Sheet.
Telegram → Google Sheets3 س/شهر
المالية والإدارةسهل
ملخص التدفق النقدي الأسبوعي على تيليجرام
كل أحد، اعرف الداخل والخارج والصافي وأكبر مصروفات الأسبوع على تيليجرام.
Google Sheets → Telegram2 س/شهر
المالية والإدارةسهل
تنبيه فوري عند فشل دفعة في Stripe
اعرف بالمدفوعات الفاشلة فورًا وسجّلها للمتابعة.
Stripe → Slack → Google Sheets2 س/شهر