تذكير بموعد الإيجار على واتساب
قبل موعد الإيجار بثلاثة أيام، يصل كل مستأجر تذكير مهذب على واتساب بالمبلغ والتاريخ.
كيف تعمل
المشغّل: جدول زمني — كل يوم الساعة 10:00
- اقرأ جدول Tenants (المستأجر، الهاتف، الوحدة، الإيجار، يوم الاستحقاق).
- احتفظ بالمستأجرين النشطين الذين يستحق إيجارهم بعد 3 أيام.
- أرسل لكل منهم قالب واتساب بالوحدة والمبلغ وتاريخ الاستحقاق.
المخطط
مشغّل تطبيق كود
الكود
كود JavaScript المستخدم في خطوات Code، وهو مضمَّن بالفعل في القالب بالأسفل.
// Tenants sheet columns: tenant | phone | unit | rent | due_day (1-31) | status
// Keeps active tenants whose rent is due in 3 days.
const due = new Date(Date.now() + 3 * 24 * 60 * 60 * 1000);
const dueDay = due.getDate();
const lastDay = new Date(due.getFullYear(), due.getMonth() + 1, 0).getDate();
return $input.all()
.map((item) => item.json)
.filter((t) => String(t.status).toLowerCase() === "active" && t.phone)
// A due_day of 31 in a 30-day month falls on the last day.
.filter((t) => Math.min(Number(t.due_day), lastDay) === dueDay)
.map((t) => ({
json: {
phone: String(t.phone).replace(/[^0-9]/g, ""),
tenant: t.tenant,
unit: t.unit,
rent: t.rent,
due_date: due.toISOString().slice(0, 10),
},
}));ابنِها بأداتك
اختر أداتك — نفس الأتمتة، خطوة بخطوة.
انسخه والصقه مباشرة في مساحة عمل n8n (Ctrl+V)، أو حمّله واستخدم Import from File. بعد ذلك اربط حساباتك واستبدل كل قيمة تبدأ بـ YOUR_.
عرض الكود (162 سطر)
{
"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": "47157a09-cc7b-46e4-a14f-bed2240b4e25",
"name": "Setup notes",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-420,
-60
]
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 10
}
]
}
},
"id": "47157a09-cc7b-46e4-a14f-bed2240b4e25",
"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": "Tenants",
"mode": "name"
},
"options": {}
},
"id": "47157a09-cc7b-46e4-a14f-bed2240b4e25",
"name": "Read tenants",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
300,
0
]
},
{
"parameters": {
"jsCode": "// Tenants sheet columns: tenant | phone | unit | rent | due_day (1-31) | status\n// Keeps active tenants whose rent is due in 3 days.\nconst due = new Date(Date.now() + 3 * 24 * 60 * 60 * 1000);\nconst dueDay = due.getDate();\nconst lastDay = new Date(due.getFullYear(), due.getMonth() + 1, 0).getDate();\n\nreturn $input.all()\n .map((item) => item.json)\n .filter((t) => String(t.status).toLowerCase() === \"active\" && t.phone)\n // A due_day of 31 in a 30-day month falls on the last day.\n .filter((t) => Math.min(Number(t.due_day), lastDay) === dueDay)\n .map((t) => ({\n json: {\n phone: String(t.phone).replace(/[^0-9]/g, \"\"),\n tenant: t.tenant,\n unit: t.unit,\n rent: t.rent,\n due_date: due.toISOString().slice(0, 10),\n },\n }));"
},
"id": "47157a09-cc7b-46e4-a14f-bed2240b4e25",
"name": "Rent due in 3 days",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
600,
0
]
},
{
"parameters": {
"operation": "sendTemplate",
"phoneNumberId": "YOUR_PHONE_NUMBER_ID",
"recipientPhoneNumber": "={{ $json.phone }}",
"template": "YOUR_RENT_REMINDER_TEMPLATE|ar",
"components": {
"component": [
{
"type": "body",
"bodyParameters": {
"parameter": [
{
"type": "text",
"text": "={{ $json.tenant }}"
},
{
"type": "text",
"text": "={{ $json.unit }}"
},
{
"type": "text",
"text": "={{ $json.rent }}"
},
{
"type": "text",
"text": "={{ $json.due_date }}"
}
]
}
}
]
}
},
"id": "47157a09-cc7b-46e4-a14f-bed2240b4e25",
"name": "Send reminder",
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
900,
0
]
}
],
"connections": {
"Every day 10:00": {
"main": [
[
{
"node": "Read tenants",
"type": "main",
"index": 0
}
]
]
},
"Read tenants": {
"main": [
[
{
"node": "Rent due in 3 days",
"type": "main",
"index": 0
}
]
]
},
"Rent due in 3 days": {
"main": [
[
{
"node": "Send reminder",
"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
- كل تشغيل لوحدة يستهلك عمليات (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
- الـ Zaps التي فيها أكثر من خطوتين تحتاج باقة Zapier مدفوعة.
- الـ Webhooks والفلاتر/المسارات و Code by Zapier ميزات مدفوعة في بعض باقات Zapier.
- Code by Zapier يشغّل JavaScript: أعد استخدام الكود بالأعلى، مع قراءة المدخلات من inputData بدلًا من $json.
- قد تختلف أسماء الوحدات والخطوات قليلًا مع تحديث Make و Zapier لتطبيقاتهما.
نصائح
- أضف طرق الدفع (InstaPay، تحويل بنكي) في القالب.
أتمتات مشابهة
العقاراتمتوسط
أرسل الوحدات الجديدة للمشترين المناسبين على واتساب
عند إضافة وحدة، تصل لكل مشترٍ موافق على التواصل تطابق منطقته ونوعه وميزانيته على واتساب.
Google Sheets → WhatsApp8 س/شهر
العقاراتسهل
استفسارات العقارات مباشرة إلى هاتف الوكيل
استفسارات الموقع والبوابات العقارية تُحفظ كعملاء محتملين وتصل الوكيل على تيليجرام خلال ثوانٍ.
Webhook → Google Sheets → Telegram5 س/شهر
تطبيقات المنطقةمتقدم
تحديثات شحنات بوسطة للعملاء على واتساب
يصل العميل رسالة واتساب عند استلام شحنته من بوسطة، وخروجها للتوصيل، وتسليمها.
Bosta → Google Sheets → WhatsApp10 س/شهر