Keptly
الالتزام النظامي

تصدير البيانات وحذف الحساب

صدّر كلّ ما يحفظه وَصل عن حسابك بصيغة JSON. احذف حسابك بفترة استرداد ٧ أيّام. كلاهما متوافق مع المواد ٢٠–٢٢ من نظام حماية البيانات الشخصيّة.

نظام حماية البيانات الشخصيّة يمنحك (بصفتك صاحب الحساب) الحق في:

١. الوصول إلى كلّ ما نحفظه عنك ٢. تصحيح ما هو خاطئ ٣. محو حسابك ٤. نقل بياناتك إلى مكان آخر

وَصل لديه نقاط API جاهزة للأربع. لا تحتاج تذكرة دعم.

تصدير كلّ شيء

النقطة: GET /api/me/export

تُرجع ملفّ JSON يحوي كلّ ما يخزّنه وَصل عن حسابك:

  • معلومات الشركة (الاسم، slug، الدولة، خطّة الفوترة، تواريخ التجربة)
  • كلّ المستخدمين على الحساب (البريد، الاسم، الصلاحيّة — كلمات المرور مستثناة)
  • كلّ الجهات (السجلّات الكاملة: الاسم، الجوّال، البريد، الدرجة، الملاحظات، إلخ.)
  • كلّ المحادثات + الرسائل (تاريخ الخيوط الكامل)
  • استهلاك الفوترة (عدد الاستخراجات لكلّ فترة)
  • سجلّات التدقيق (كلّ وصول للبيانات الشخصيّة في حسابك)

الصيغة wasl-export-v1 — مخطّط JSON مُرقَّم سنُبقيه مستقرّاً.

كيف تُشغّله

من لوحة التحكّم:

١. الإعدادات ← الحساب ← صدّر بياناتي ٢. اضغط؛ المتصفّح ينزّل ملفّ JSON باسم wasl-export-<your-slug>-<date>.json

أو عبر API (للوصول البرمجي أو السكربتات):

curl -H "Authorization: Bearer <your-token>" \
     -o my-export.json \
     https://wasl.sa/api/me/export

ما الذي ليس في التصدير

  • بيانات حسابات أخرى (بداهةً — نطاق صارم لكلّ حساب)
  • بيانات تدريب مزوّد الذكاء الاصطناعي (مزوّد الذكاء الاصطناعي لا يشاركها مع أحد)
  • تسجيلات Twilio الصوتيّة — تعيش في حسابك في Twilio لا عندنا؛ صدّرها من Twilio منفصلة
  • بيانات الدفع في Stripe — المثل؛ صدّرها من Stripe مباشرة
  • هاشات كلمات المرور — إجراء أمني، لا حذف متعمّد لبياناتك

التدقيق

كلّ استدعاء تصدير يكتب سجلّ تدقيق (EXPORT.TENANT_DATA). مفيد إذا سأل المنظِّم "متى آخر مرّة صدّر فيها مشغّل النظام بيانات الحساب X؟" — المسار موجود.

البيانات الإضافيّة في التدقيق تسجّل الأعداد (مثل "صُدِّرت ١٠,٠٠٠ جهة") لكنّها لا تسجّل المحتوى نفسه، للحفاظ على سجلّ التدقيق مدمجاً وخالياً من البيانات الشخصيّة.

حذف الحساب

النقطة: DELETE /api/me/account

حذف ناعم على مرحلتين بفترة استرداد ٧ أيّام.

المرحلة الأولى: تأشير للحذف (فوري)

عندما تستدعي النقطة:

١. Company.deletedAt يُضبَط على الآن ٢. Company.scheduledHardDeleteAt يُضبَط على الآن + ٧ أيّام ٣. وسيط المصادقة يرفض أيّ محاولة دخول بـ 410 ("الحساب مجدول للحذف") ٤. سجلّ تدقيق: DELETE.TENANT_ACCOUNT ٥. يصلك بريد تأكيد + بيان فترة الاسترداد

خلال نافذة الـ٧ أيّام:

  • بياناتك ما زالت في قاعدة البيانات (الحذف المتسلسل لم يُطلَق بعد)
  • استدعاءات API الجديدة تُرجع 410 Gone لحسابك
  • تقدر مراسلة الدعم لـاسترداد الحساب إن كان خطأً

المرحلة الثانية: الحذف النهائي (بعد ٧ أيّام)

cron يومي يفحص الحسابات حيث scheduledHardDeleteAt < now() و:

١. يستدعي prisma.company.delete({ where: { id } }) ٢. قواعد cascade تمسح: - كلّ مستخدمي الشركة - كلّ الجهات (وسلاسل الدمج عندها) - كلّ المحادثات + الرسائل - كلّ BillingUsage ٣. سجلّات AuditLog تستمرّ (المادّة ٢٢ج تتطلّب أن يبقى المسار بعد البيانات الأصليّة)

بعد الحذف النهائي:

  • معرّف حسابك ما عاد مرتبطاً بأيّ بيانات
  • سجلّ التدقيق يُظهر أنّ الحذف حدث، لكن لا توجد محتوى شخصي
  • بياناتك ليست في أيّ نسخة احتياطيّة أقدم من ٣٠ يوماً (النسخ الاحتياطيّة تنتهي صلاحيّتها)

من يقدر طلب الحذف

فقط صلاحيّة OWNER (المالك). المستخدمون الآخرون (مديرون، موظّفون) يحصلون على 403.

هذا يمنع الخطأ الداخلي (موظّف صغير لا يقدر حذف حساب الشركة بطريق الخطأ).

ماذا عن بيانات نظامي؟

نظامك هو المخزن المرجعي. نحن مُعالِج (Processor)؛ لم نمتلك البيانات أصلاً.

عند حذف حسابك في وَصل:

  • نسختنا من بيانات الجهات والمحادثات تُحذَف (كما ورد أعلاه)
  • سجلّاتك في النظام تبقى في نظامك (Salesforce، HubSpot، إلخ.) — هذه بياناتك، في نظامك، تخضع لشروط نظامك
  • بيانات اعتماد الموصلات تُحذَف مع حسابك، فلا نقدر دفع تحديثات بعد ذلك

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

طلبات أصحاب البيانات للأفراد

أحياناً عميلٌ (عميلك أنت، لا حسابك في وَصل) يراسلك قائلاً "احذفني من سجلّاتك بحسب نظام حماية البيانات الشخصيّة." كيف يمرّ هذا عبر وَصل؟

النمط الأنظف:

١. عميلك يراسلك (أنت المُتحكِّم — Controller) ٢. تتأكّد منه ثمّ تتّخذ الإجراء ٣. في لوحة وَصل، اذهب لتلك الجهة واضغط حذف الجهة (زرّ في الواجهة — مخطّط حاليّاً، لم يُشحَن بعد؛ الآن تواصل مع الدعم وسنفعلها عبر DB مباشرة) ٤. الجهة + كلّ محادثاتها تُحذَف من وَصل ٥. تحذف أيضاً من نظامك (Salesforce / HubSpot / إلخ.)

نعمل على واجهة تسمح للموظّفين بفعلها بضغطة واحدة. حاليّاً، الدعم يتعامل مع حذف العملاء واحداً واحداً عبر إجراء DB مباشر — وقت التنفيذ عادةً ٢٤ ساعة.

دورة حذف البيانات الدوريّة (الحذف السلبي)

إن لم تحذف نشطاً، وَصل ما زال يحذف بيانات العملاء بحسب المادّة ٦ (تقليل البيانات):

  • المحادثات + الرسائل: تُحذَف بعد ٣٠ يوماً (قابل للضبط لكلّ حساب عبر env var)
  • الجهات بدون محادثات حيّة: تُحذَف في المرحلة الثانية من الدورة
  • سجلّ التدقيق: لا يُحذَف أبداً (المادّة ٢٢ج)

تعمل كـ cron يومي كلّ ٢٤ ساعة. حدّ لكلّ دورة: ٥,٠٠٠ محادثة + ٥,٠٠٠ جهة (حتّى لا يُمحى حساب فيه مليون سجلّ منتهي في عمليّة واحدة؛ ستأخذ ٢٠٠ يوم للمسح الكامل، لكن عمليّاً كلّ حساب لديه < ١٠٠ ألف سجلّ منتهي).

تقدر معاينة ما هو على وشك أن يُحذَف:

GET /api/admin/retention-preview
GET /api/admin/contact-retention-preview

(نقاط لإدارة المنصّة — وصول مشغّل المنصّة فقط.)

تحتاج تجاوز الحذف الدوري لحفظ قانوني؟

إن كان عندك عميل تحت حفظ قانوني (تقاضٍ، إيقاف تنظيمي) بياناته يجب ألّا تُحذَف تلقائيّاً:

PATCH /api/contacts/<id>
Content-Type: application/json

{ "retainUntil": "2027-12-31T00:00:00Z" }

دورة الحذف تتجاوز الجهات حيث retainUntil في المستقبل. استخدمها بحذر — هذه للامتثال القانوني، لا "قد أحتاج هذه الجهة يوماً ما."

خصوصيّة نقطة الحذف نفسها

عندما تستدعي DELETE /me/account:

  • عنوان IP + user-agent يُسجَّلان في التدقيق (تتبّع جنائي)
  • معرّف المستخدم يُسجَّل
  • الوقت + تاريخ الحذف النهائي المجدول يُسجَّلان

هذه تبقى حتّى بعد الحذف النهائي للحساب — تُثبِت (للمنظِّم) أنّك طلبت الحذف بإيجابيّة.

أسئلة شائعة

هل أقدر إلغاء الحذف خلال نافذة الـ٧ أيّام؟

  • نعم — راسل support@wasl.sa من بريد المالك المسجَّل وسنستردّه. وقت التنفيذ: ٢٤ ساعة.

ماذا عن النسخ الاحتياطيّة؟

  • نسخ Postgres الاحتياطيّة ليليّة بفترة احتفاظ ٣٠ يوماً. خلال ٣٠ يوماً بعد الحذف النهائي، يمكن نظريّاً استرداد بياناتك من النسخ الاحتياطيّة. بعد ٣٠ يوماً، تنتهي صلاحيّة النسخ وبياناتك تذهب نهائيّاً.
  • إن طالب منظِّم بحذف أبكر (مثلاً كجزء من طلب صاحب بيانات مُصعَّد)، يمكننا الحذف يدويّاً من النسخ الاحتياطيّة — تواصل مع الدعم.

ما الفرق بين حذف حسابي وإلغاء الاشتراك؟

  • إلغاء الاشتراك: يوقف الفوترة، يصبح الحساب في حالة "ملغى"، البيانات محفوظة ٣٠ يوماً، تقدر إعادة الاشتراك.
  • حذف الحساب: لا رجعة فيه بعد ٧ أيّام، البيانات تذهب، لا تقدر الاسترداد.

هل حذف حسابي يوقف عمل وكيل البناء اليومي؟

  • ذاك عمليّة وَصل الداخليّة، غير مرتبطة بحسابك. cron البناء اليومي يستمرّ على وَصل بصرف النظر عن دورة حياة أيّ حساب.

التالي


هل تحتاج مساعدة؟

إذا لم تجد إجابة سؤالك في الوثائق، تواصل مع فريق الدعم مباشرة.

support@keptly.net
Data export & account deletion — Keptly docs