في دليل LimeSurvey بنينا استبياناً عربياً طويلاً يرسل رابطه إلى المشاركين، وهذا ما تحتاجه في استطلاعات الرأي والأبحاث، ولكن هناك نوعاً آخر من الأسئلة يحتاجه فريق المنتج كل يوم: سؤال قصير يظهر للمستخدم داخل التطبيق بعد أن يستخدم ميزة جديدة، أو نموذج من ثلاثة أسئلة ترسله لعملائك في رسالة، وهنا يدفع كثير من الفرق اشتراكات شهرية في خدمات مثل Typeform. وفي هذا المقال من مرحلة المستندات والنماذج والتوقيع والحجز سوف نثبت Formbricks، وهو أداة استبيانات مفتوحة المصدر تعمل بالرابط وداخل المواقع والتطبيقات، ونختبر دعمه للعربية واتجاه الكتابة من اليمين إلى اليسار RTL بصراحة، ونرى أين تحفظ الإجابات.
وسوف نناقش في هذا المقال ما يلي:
- ما هو Formbricks، والفرق بين الاستبيان بالرابط Link Survey والاستبيان داخل الموقع أو التطبيق.
- الترخيص كما في المستودع: AGPL للنواة، وترخيص Enterprise لمجلد
ee. - ما الذي تشغله فعلاً في الإصدار 6، وتثبيته بال Docker Compose بإصدارات محددة، ومشكلة واجهتنا في أول تشغيل.
- استبيان عربي: ما الذي يعمل مباشرة، وما الذي تحتاج أن تترجمه بنفسك.
- أين تذهب الإجابات، وكيف تضع الاستبيان داخل موقعك.
- متى تختار Formbricks ومتى يبقى LimeSurvey أنسب، وما تغيره قبل الإنتاج.
ما هو Formbricks؟
Formbricks منصة استبيانات Surveys ونماذج Forms تصف نفسها بأنها منصة لإدارة تجربة العملاء Experience Management، وتنشر الاستبيان بطريقتين، والصورة التالية تبينهما: الأولى الاستبيان بالرابط Link Survey، وهو صفحة مستقلة على سيرفرك ترسل رابطها بالبريد أو المحادثة أو رمز QR، ولا يحتاج أي تعديل في تطبيقك، والثانية الاستبيان داخل الموقع أو التطبيق Website and App Survey، حيث تضيف مكتبة Formbricks إلى الكود، فيظهر السؤال للمستخدم المناسب عندما يقوم بفعل معين، مثل الضغط على زر الترقية، وفي الحالتين تعود الإجابات إلى سيرفرك:

وقد يتساءل البعض: لماذا لا نكتفي بنموذج HTML بسيط في التطبيق يحفظ الإجابات في جدول؟ والإجابة أن هذا يكفي لسؤال واحد ثابت، ولكنه يصبح عبئاً عندما تريد أن تغير الأسئلة دون إصدار جديد، وأن تحدد من يرى الاستبيان وكم مرة، وأن تضع منطقاً شرطياً Conditional Logic بين الأسئلة، وأن تقرأ النتائج في لوحة جاهزة، وهذه هي الأجزاء التي تقدمها الأداة.
الترخيص كما في المستودع
قرأنا ملف الترخيص عند الإصدار 6.0.2 بتاريخ 1 أكتوبر 2026، وهو يقسم الكود كما يلي: كل ما في المجلد apps/web/modules/ee يخضع لترخيص Enterprise، الذي يسمح بتعديل الكود وتجربته للتطوير والاختبار، ولا يسمح باستخدامه في الإنتاج دون اشتراك، ومجلدات مكتبات JavaScript وAndroid وiOS وال API تحت ترخيص MIT إن وجدت، وكل ما سوى ذلك تحت AGPLv3. ولاحظ أن الكود كله في Docker Image واحد، والفرق في المفتاح: الميزات التي في مجلد ee لا تعمل دون رخصة.
وبحسب صفحة الترخيص في التوثيق فالنسخة المجتمعية Community Edition تشمل الاستبيانات بالرابط وداخل المواقع والتطبيقات، والاستبيانات متعددة اللغات، أما الدخول الموحد SSO بال OIDC وSAML، والفرق Teams والصلاحيات، وسجلات التدقيق Audit Logs، وإدارة جهات الاتصال Contacts والشرائح Segments، والحصص Quotas، وإخفاء عبارة «Powered by Formbricks»، فكلها في Enterprise. وقد شرحنا معنى AGPL وما يلزمك به في مقال التراخيص.
ما الذي تشغله فعلاً في الإصدار 6؟
قد تتوقع أن أداة استبيانات تحتاج تطبيق ويب وقاعدة بيانات فقط، ولكن ملف docker-compose.yml في الإصدار 6 يشغل الخدمات التي في الصورة التالية، وقد قسنا استهلاك الذاكرة لكل منها في التجربة وهي بلا حمل:

في الصورة أعلاه لاحظ التالي:
- formbricks هو تطبيق الويب ولوحة الإدارة وصفحات الاستبيانات، وحجم ال Image وحدها 2.54 GB عندنا، فاحسب مساحة القرص قبل التثبيت.
- postgres من Image باسم pgvector لأن الإصدار 6 يستخدم إضافة pgvector، وفيها الاستبيانات والإجابات وبيانات الخدمات الأخرى.
- spicedb من مشروع AuthZed، ويحفظ الصلاحيات: من يستطيع أن يرى أي مساحة عمل Workspace وأي استبيان، وقد أصبح جزءاً أساسياً في الإصدار 6.
- hub وcube لبيانات الملاحظات Feedback والتحليلات، وكلاهما يقرأ من قاعدة البيانات نفسها.
- S3 اختياري، ولكن دونه يظهر تحذير في المحرر بأن رفع الملفات قد يفشل، أي أن سؤال رفع ملف لن يعمل.
ولا يذكر دليل التثبيت حداً أدنى للذاكرة أو المعالج، ومجموع ما قسناه نحو 1 GB دون حمل، لذلك لا ننصح بأقل من 2 GB للسيرفر، ويفضل 4 GB إذا كانت معه خدمات أخرى.
التثبيت بال Docker Compose
شغلنا التجربة على Docker Engine 29.8.0، والمنفذ مربوط بالعنوان 127.0.0.1، واسم المشروع lab-office2-fb لأنه اسم بيئة التجربة عندنا. وإذا لم يكن Docker مثبتاً فقد شرحنا تثبيت Docker على Ubuntu. وأول خطوة أن ننزل ملفات الإصدار نفسه الذي نشغله، لا ملفات الفرع الرئيسي، والسبب أن ملف Compose يتغير بين الإصدارات:
mkdir formbricks && cd formbricks
V=6.0.2
RAW=https://raw.githubusercontent.com/formbricks/formbricks/$V/docker
curl -fsSLO $RAW/docker-compose.yml
curl -fsSLO $RAW/authzed-postgres-bootstrap.sh
mkdir -p cube/schema
curl -fsSL -o cube/cube.js $RAW/cube/cube.js
curl -fsSL -o cube/schema/FeedbackRecords.js $RAW/cube/schema/FeedbackRecords.jsتثبيت الإصدارات وعنوان التطبيق
ملف Compose الرسمي يستخدم latest لتطبيق Formbricks ولخدمة hub، وpg18 لقاعدة البيانات، وهذا يعني أن أي إعادة تشغيل بعد docker compose pull قد ترفعك إلى إصدار لم تقرأ ملاحظاته، لذلك نثبت الإصدارات، ونربط المنفذ ب 127.0.0.1، ونضع عنوان التطبيق، ثم ننشئ الأسرار الثلاثة التي يتركها الملف فارغة:
sed -i 's|image: pgvector/pgvector:pg18|image: pgvector/pgvector:0.8.7-pg18|; s|ghcr.io/formbricks/formbricks:latest|ghcr.io/formbricks/formbricks:6.0.2|; s|ghcr.io/formbricks/hub${HUB_IMAGE_REF:-:latest}|ghcr.io/formbricks/hub:0.8.7|; s|- 3000:3000|- "127.0.0.1:28302:3000"|' docker-compose.yml
sed -i '/WEBAPP_URL:/s|WEBAPP_URL:.*|WEBAPP_URL: "http://127.0.0.1:28302"|; /NEXTAUTH_URL:/s|NEXTAUTH_URL:.*|NEXTAUTH_URL: "http://127.0.0.1:28302"|' docker-compose.yml
for k in NEXTAUTH_SECRET ENCRYPTION_KEY CRON_SECRET; do
v=$(openssl rand -hex 32); sed -i "/$k:\$/s/$k:.*/$k: $v/" docker-compose.yml
doneفي الإعداد أعلاه لاحظ التالي:
- اخترنا
hub:0.8.7لأنه الإصدار الذي يشير إليهlatestفي وقت التجربة، وقد تأكدنا من ذلك بمقارنة البصمة Digest للوسمين في سجل ghcr.io، وكذلكformbricks:6.0.2. - خدمة redis في الملف الرسمي مثبتة أصلاً ببصمة Digest، وcube بالوسم
1.7.47-1، وspicedb بالوسمv1.52.0، فلم نغيرها. WEBAPP_URLهو العنوان الذي تبنى منه روابط الاستبيانات، وفي الإنتاج يكون عنوان HTTPS العام مثلhttps://forms.example.com.ENCRYPTION_KEYيشفر بعض البيانات في القاعدة، فإذا فقدته بعد التشغيل لا تستطيع قراءتها، لذلك يحفظ مع النسخ الاحتياطي.
بعد ذلك ننشئ ملف .env بالأسرار التي يقرأها الملف من المتغيرات، بالأسماء نفسها التي يكتبها سكربت التثبيت الرسمي formbricks.sh:
umask 077
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 32)
HUB_API_KEY=$(openssl rand -hex 32)
CUBEJS_API_SECRET=$(openssl rand -hex 32)
CUBEJS_JWT_ISSUER=formbricks-web
CUBEJS_JWT_AUDIENCE=formbricks-cube
AUTHZED_TOKEN=$(openssl rand -hex 32)
AUTHZED_DATABASE_PASSWORD=$(openssl rand -hex 32)
AUTHZED_ENABLED=true
AUTHZED_CONSISTENCY=fully_consistent
FORMBRICKS_AUTHZED_V6_MIGRATION_ACKNOWLEDGED=true
EOF
docker compose -p lab-office2-fb up -dأول تشغيل: خطأ في متغيرات AuthZed
نزلت ال Images وبدأت القاعدة وredis، ثم توقف التشغيل بهذا السطر:
service "formbricks-migrate" didn't complete successfully: exit 1وعند قراءة سجل الخدمة:
docker logs lab-office2-fb-formbricks-migrate-1 2>&1 | head -3Invalid environment variables:
- AUTHZED_ENDPOINT: AUTHZED_ENDPOINT is required when AuthZed is enabled
- AUTHZED_SYSTEM_KEY: AUTHZED_SYSTEM_KEY is required when AuthZed is enabled {والسبب أن خدمة الترحيل formbricks-migrate تقرأ ملف .env فترى AUTHZED_ENABLED=true، ولكن قسم environment الخاص بها لا يحتوي على AUTHZED_ENDPOINT وAUTHZED_SYSTEM_KEY، فهذان المتغيران معرفان بقيم افتراضية في خدمة formbricks وخدمات AuthZed فقط. والحل أن نضيفهما إلى .env بالقيم الافتراضية نفسها التي في الملف، ثم نعيد التشغيل:
printf 'AUTHZED_ENDPOINT=spicedb:50051\nAUTHZED_SYSTEM_KEY=formbricks\n' >> .env
docker compose -p lab-office2-fb up -d
docker compose -p lab-office2-fb ps -a --format 'table {{.Service}}\t{{.Image}}\t{{.Status}}'والمخرج سوف يكون كما يلي:
SERVICE IMAGE STATUS
authzed-db-bootstrap pgvector/pgvector:0.8.7-pg18 Exited (0) 51 minutes ago
authzed-initialize ghcr.io/formbricks/formbricks:6.0.2 Exited (0) 51 minutes ago
cube ghcr.io/formbricks/cube:1.7.47-1 Up 51 minutes (healthy)
formbricks ghcr.io/formbricks/formbricks:6.0.2 Up 51 minutes
formbricks-migrate ghcr.io/formbricks/formbricks:6.0.2 Exited (0) 51 minutes ago
hub ghcr.io/formbricks/hub:0.8.7 Up 51 minutes (healthy)
hub-migrate ghcr.io/formbricks/hub:0.8.7 Exited (0) 51 minutes ago
postgres pgvector/pgvector:0.8.7-pg18 Up 52 minutes (healthy)
redis valkey/valkey@sha256:e0eb7c480958d32bdc4357a74bdd70653ae15f2f9b4c93c4a5a9fad1dc471c84 Up 52 minutes (healthy)
spicedb authzed/spicedb:v1.52.0 Up 51 minutes (healthy)
spicedb-migrate authzed/spicedb:v1.52.0 Exited (0) 51 minutes agoولاحظ أن الخدمات الخمس التي حالتها Exited (0) طبيعية، فهي تعمل مرة واحدة لإنشاء الجداول والصلاحيات ثم تنتهي، أما إذا رأيت Exited (1) فاقرأ سجلها قبل أي شيء.
الحساب الأول والمنظمة
عند فتح http://127.0.0.1:28302 تظهر صفحة ترحيب ثم صفحة Create Administrator، وأول حساب ينشأ هو مدير النظام، ثم تطلب الأداة اسم المنظمة Organization، ثم دعوة الأعضاء، وهنا ظهرت لنا رسالة SMTP not configured، لأننا لم نضع إعدادات البريد، فتخطينا الدعوات. ولاحظ أن ملف Compose يعطل التحقق من البريد واستعادة كلمة المرور بالمتغيرين EMAIL_VERIFICATION_DISABLED وPASSWORD_RESET_DISABLED، وهذا مناسب للتجربة فقط، أما في الإنتاج فاضبط SMTP كما في مقال البريد التفاعلي، ثم أعد تفعيل الخاصيتين حتى يستطيع المستخدم استعادة حسابه.
استبيان عربي: ما الذي يعمل وما الذي تترجمه بنفسك
هذا هو الجزء الذي يهم القارئ العربي أكثر من غيره، لذلك اختبرناه مرتين.
المرة الأولى: أسئلة عربية في استبيان لغته الافتراضية الإنجليزية
أنشأنا استبياناً من الصفر Start from scratch، وكتبنا ثلاثة أسئلة بالعربية: سؤال نصي مفتوح، وتقييم بالنجوم، واختيار واحد من خيارين، ثم نشرناه بالرابط. والنتيجة أن النص العربي يظهر صحيحاً، ولكن الصفحة كلها من اليسار إلى اليمين، وكلمة Required وزر Next بالإنجليزية، كما في الصورة التالية:

والسبب أن Formbricks يحدد اتجاه الصفحة ولغة العبارات الثابتة من لغة الاستبيان، لا من النص الذي تكتبه، وقد قرأنا الاتجاه في المتصفح فكان ltr للعنوان والسؤال، وlang=en-US للصفحة.
المرة الثانية: العربية لغة افتراضية للاستبيان
من Settings ثم Survey Languages في مساحة العمل أضفنا اللغة Arabic (Saudi Arabia) بالرمز ar-SA، وجعلناها في الحقل Default survey language، ولاحظ ما تقوله الصفحة: الاستبيانات الجديدة تنشأ بهذه اللغة، أما الاستبيانات الموجودة فتبقى بلغتها، لذلك أنشأنا استبياناً جديداً بالأسئلة نفسها، فأصبحت المعاينة في المحرر من اليمين إلى اليسار مباشرة:

ثم فتحنا رابط الاستبيان كمشارك، وكتبنا إجابة تجمع العربية والإنجليزية، فظهرت الصفحة من اليمين إلى اليسار، والعبارات الثابتة مثل «مطلوب» و«مشغل بواسطة» بالعربية:


ولكن عند إرسال الإجابة ظهرت صفحة الشكر بالإنجليزية:

وخلاصة ما وجدناه في الاختبارين:
| الجزء | اللغة الافتراضية en-US | اللغة الافتراضية ar-SA |
|---|---|---|
| اتجاه الصفحة | من اليسار إلى اليمين | من اليمين إلى اليسار |
| العبارات الثابتة (مطلوب، مشغل بواسطة) | إنجليزية | عربية |
| نصوص الأزرار Next وBack | إنجليزية | إنجليزية حتى تكتبها في Block settings |
| بطاقة النهاية Ending Card | إنجليزية | إنجليزية حتى تعدلها، ومعها زر Create your own Survey |
| لوحة الإدارة | لا توجد واجهة عربية، فملفات لغات لوحة الإدارة في apps/web/locales خمسة عشر ملفاً ليس بينها العربية، بينما ملفات صفحة الاستبيان في packages/surveys/locales تشمل ar-EG | |
لذلك قم بتغيير اللغة الافتراضية لمساحة العمل إلى العربية قبل أن تنشئ أول استبيان، ثم اكتب نصوص الأزرار في إعدادات كل كتلة Block settings، وعدل بطاقة النهاية، وراجع الاستبيان من الرابط قبل أن ترسله، وإذا احتجت الاستبيان نفسه بالعربية والإنجليزية فميزة تعدد اللغات Multi-language متاحة في النسخة المجتمعية بحسب التوثيق.
أين تذهب الإجابات؟
بعد إرسال الإجابة تظهر في صفحة الملخص Summary مع عدد المشاهدات والبدايات ونسبة الإكمال والوقت، ويمكن تنزيلها CSV من زر Download:

ولنتأكد أن الإجابة على سيرفرنا فعلاً، قرأناها مباشرة من قاعدة البيانات:
docker exec lab-office2-fb-postgres-1 psql -U postgres -d formbricks -c \
"select id, finished, language, data::text, meta::text from \"Response\" where \"surveyId\"='cmuzxfvoa000b01o0z2vlqbvk';" id | finished | language | data | meta
---------------------------+----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cmuzxlbo1000d01o0c1pzvb0w | t | ar-SA | {"hnf1uf6ttjvdtlxko91g4mpa": "نستخدم Mattermost للمحادثة لأنه على سيرفر الشركة، ونحتاج أداة استبيانات مثله.", "k13jgqhts4czh1pvvhb91ph7": "على سيرفر الشركة", "x4rs3abuedm9jkv46mnem4qs": 4} | {"url": "http://127.0.0.1:28302/s/cmuzxfvoa000b01o0z2vlqbvk", "locale": "en-US", "pagePath": "/s/cmuzxfvoa000b01o0z2vlqbvk", "timezone": "Asia/Riyadh", "userAgent": {"os": "Windows", "device": "desktop", "browser": "Chrome Headless"}, "screenWidth": 800, "screenHeight": 600, "viewportWidth": 1100, "viewportHeight": 760}
(1 row)في المخرج أعلاه لاحظ التالي:
- الإجابات في العمود
dataبصيغة JSON، والمفتاح هو معرف السؤال، والقيمة هي الإجابة كما كتبها المشارك. - العمود
languageهوar-SA، أي لغة الاستبيان التي رآها المشارك. - العمود
metaيحفظ رابط الصفحة والمنطقة الزمنية ونوع الجهاز والمتصفح وأبعاد الشاشة، ولا يوجد فيه عنوان IP، لأننا لم نفعل خيار Capture IP address في إعدادات الاستبيان، وفي الإعدادات نفسها خيار Anonymize responses الذي يوقف حفظ الدولة والجهاز أيضاً، فقم بتفعيله إذا كان الاستبيان لا يحتاج هذه البيانات.
وبهذا الشكل تبقى الإجابات في قاعدة بياناتك، ولا تخرج إلا إذا أضفت أنت تكاملاً Integration يرسلها إلى خدمة أخرى.
الاستبيان داخل موقعك أو تطبيقك
من Settings ثم Web & Mobile SDK تجد معرف مساحة العمل Workspace ID وعنوان الاتصال، ومع اختيار Website يعطيك Formbricks هذا الكود من تثبيتنا لتضعه في الصفحة:
<!-- START Formbricks Surveys -->
<script type="text/javascript">
!function(){
var appUrl = "http://127.0.0.1:28302";
var workspaceId = "cmuzwgsgh000101o0usloswvn";
var t=document.createElement("script");t.type="text/javascript",t.async=!0,t.src=appUrl+"/js/formbricks.umd.cjs";var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(t,e),setTimeout(function(){window.formbricks.setup({workspaceId: workspaceId, appUrl: appUrl})},500)}();
</script>
<!-- END Formbricks Surveys -->ولاحظ أن ملف المكتبة formbricks.umd.cjs يحمل من سيرفرك أنت عبر appUrl، لا من خدمة خارجية، وأن appUrl في الإنتاج يجب أن يكون عنوان HTTPS العام، لأن الموقع الذي يعمل على HTTPS لن يحمل ملفاً من عنوان HTTP. وبعد ذلك تحدد في الاستبيان نوع Website & App Survey، والفعل Action الذي يظهره، وهناك أيضاً مكتبات لتطبيقات الجوال بحسب الصفحة نفسها، والتفاصيل في دليل البداية للاستبيانات داخل التطبيقات.
Formbricks أم LimeSurvey؟
الأداتان تحفظان الإجابات على سيرفرك، والفرق في نوع الاستبيان الذي صممت له كل منهما:
- Formbricks: نقاط القوة: الاستبيانات القصيرة داخل المنتج، وتحديد من يرى السؤال ومتى، ومحرر حديث، وصفحة استبيان من اليمين إلى اليسار عندما تكون العربية لغته. نقاط الضعف: إحدى عشرة خدمة في ملف Compose ومساحة كبيرة للقرص، ولا توجد لوحة إدارة بالعربية، وجزء من الميزات في Enterprise.
- LimeSurvey: نقاط القوة: الاستبيانات الطويلة والأبحاث بالرابط، وتثبيت بخدمتين فقط كما في دليل LimeSurvey. نقاط الضعف: ليس مصمماً لإظهار سؤال داخل تطبيقك عند فعل معين.
فإذا كان هدفك أن تسأل مستخدمي تطبيقك في اللحظة المناسبة فاختر Formbricks، وإذا كان هدفك استبياناً طويلاً يرسل للجمهور فابدأ ب LimeSurvey، لأنه أخف بكثير على السيرفر.
قبل التشغيل الفعلي
- HTTPS: ضع Formbricks خلف Reverse Proxy مثل Caddy، واجعل
WEBAPP_URLوNEXTAUTH_URLعنوان HTTPS العام، ولا تقم بفتح المنفذ 3000 للإنترنت. - البريد SMTP: للدعوات واستعادة كلمة المرور والتنبيهات، ثم أعد تفعيل التحقق من البريد.
- تخزين الملفات: إذا احتجت سؤال رفع ملف أو شعاراً للاستبيان فاضبط تخزين S3 كما في توثيق رفع الملفات.
- النسخ الاحتياطي: ينص دليل التثبيت على أن يدخل ملف
.envوVolume قاعدة البيانات في النسخ الاحتياطي، ونضيف إليهماdocker-compose.ymlلأن فيهENCRYPTION_KEYوNEXTAUTH_SECRET، واختبر الاستعادة كما في قاعدة 3-2-1. - التحديث: غير رقم الإصدار يدوياً بعد قراءة ملاحظات الإصدار، والسبب أن الإصدار 6 نفسه أضاف خدمات جديدة إلى ملف Compose، وأي تحديث كبير قد يفعل ذلك مرة أخرى.
مشكلات شائعة وحلولها
الخدمة formbricks-migrate تنتهي بالرمز 1
اقرأ سجلها بالأمر docker logs، فإذا ذكر AUTHZED_ENDPOINT وAUTHZED_SYSTEM_KEY فأضفهما إلى .env كما في قسم التثبيت، وإذا ذكر متغيراً آخر فالغالب أنه سر لم تنشئه.
تحذير File storage not set up في المحرر
هذا تحذير وليس خطأ، ومعناه أن رفع الملفات من المشاركين أو رفع الصور في المحرر لن يعمل حتى تضبط تخزين S3، أما بقية أنواع الأسئلة فتعمل.
الأزرار وصفحة الشكر بالإنجليزية في استبيان عربي
نصوص الأزرار وبطاقة النهاية من محتوى الاستبيان نفسه، فاكتبها في Block settings وفي Ending card، وإذا كانت الصفحة كلها من اليسار إلى اليمين فلغة الاستبيان الافتراضية ليست العربية.
لا تصل الدعوات إلى أعضاء الفريق
السبب أن SMTP غير مضبوط، والأداة تخبرك بذلك عند الدعوة، ويمكنك نسخ رابط الدعوة من إعدادات المنظمة وإرساله بنفسك إلى أن تضبط البريد.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- Formbricks يجمع الاستبيان بالرابط والاستبيان داخل الموقع أو التطبيق، والإجابات تبقى في PostgreSQL على سيرفرك، ومكتبة الموقع تحمل من سيرفرك أيضاً.
- الترخيص AGPLv3 للنواة، ومجلد
apps/web/modules/eeتحت ترخيص Enterprise لا يستخدم في الإنتاج دون اشتراك، وفيه SSO والفرق وسجلات التدقيق وجهات الاتصال. - الإصدار 6 يشغل إحدى عشرة خدمة، منها ست دائمة، واستهلكت نحو 1 GB من الذاكرة دون حمل، وحجم Image التطبيق وحدها 2.54 GB.
- ثبت الإصدارات بدل
latest، وإذا فشلتformbricks-migrateبسبب AuthZed فأضفAUTHZED_ENDPOINTوAUTHZED_SYSTEM_KEYإلى.env. - العربية تعمل جيداً في صفحة الاستبيان عندما تكون لغته الافتراضية، والاتجاه يصبح من اليمين إلى اليسار، ولكن الأزرار وبطاقة النهاية تترجمها بنفسك، ولوحة الإدارة بلا عربية.
ولحجز المواعيد اقرأ أي أداة حجز مواعيد تناسب عيادتك أو فريقك؟، وفي المقالات القادمة من هذه المرحلة سوف نتحدث عن تحويل ملفات PDF وتحريرها.
دليلتثبيت LimeSurvey للاستبيانات على خادمككيف تشغل LimeSurvey على سيرفرك وتنشئ استبيانات بالعربية، فتبقى إجابات المشاركين عندك لا عند خدمة خارجية.
دليلالتوقيع الإلكتروني على سيرفرك: DocuSeal أم Documenso؟ما الفرق بين التوقيع الإلكتروني والرقمي، وكيف توقع مستنداتك على سيرفرك وتتحقق أن الملف لم يتغير بعد التوقيع.
دليلTransactional Email: كيف تصل رسائل تطبيقك في وقتهالماذا تفصل رسائل تطبيقك مثل استعادة كلمة المرور عن النشرات البريدية، وكيف ترسلها بحيث تصل في وقتها ولا تذهب إلى Spam.
دليلالنسخ الاحتياطي بقاعدة 3-2-1 واختبار الاستعادةكيف تحدد كم بيانات تقبل أن تخسر، وتبني نسخاً لا يستطيع المخترق حذفها، وتتأكد أنك تستطيع استعادتها فعلاً.سجل التحديثات
- أكتوبر 2026: كتابة المقال، والتجربة العملية على Formbricks 6.0.2 مع hub 0.8.7 وcube 1.7.47-1 وspicedb v1.52.0 وpgvector 0.8.7 على PostgreSQL 18، واختبار الاستبيان العربي باللغتين الافتراضيتين en-US وar-SA.
- أكتوبر 2026: إضافة رابط مقال أدوات حجز المواعيد.