متغيرات البيئة
ما يفعله كل إعداد في ملفات .env الخاصة بواجهة API والواجهتين الأماميتين، وأيها تحتاج إليه.
لحزمة الحزمة الكاملة
أين توجد الإعدادات
| الملف | يقرؤه | يحتوي على أسرار |
|---|---|---|
back-end/.env | واجهة API، مع yarn dev وداخل Docker Compose | نعم. لا تضفه إلى المستودع أبدًا. |
storefront/.env | الموقع: قيم NEXT_PUBLIC_* وقت البناء، وREVALIDATE_SECRET وAPI_INTERNAL_URL على خادمه | REVALIDATE_SECRET فقط، وهو لا يصل إلى المتصفح أبدًا |
admin-dashboard/.env | لوحة المنظّم، وقت البناء | لا. كل القيم عامة. |
.env بجوار docker-compose.yml | Docker Compose للحزمة الكاملة، وحاوية واجهة API التي تقرؤه قبل back-end/.env | REVALIDATE_SECRET على خادم مفتوح للإنترنت، وOWNER_PASSWORD عندما تضعه هناك |
أنشئ ملف كل تطبيق من .env.example الموجود بجانبه، وهو يشرح كل متغير: cp .env.example .env. تعمل الأمثلة كما هي للتشغيل المحلي، ولا يحتاج تشغيل Docker Compose إلى أي ملف.
أين توجد الإعدادات
ملف واحد هو .env في مجلد الموقع. تُقرأ قيم NEXT_PUBLIC_* فيه عند بناء الموقع وهي عامة، فلا تضع فيها سرًا أبدًا. أما REVALIDATE_SECRET وAPI_INTERNAL_URL فيقرؤهما خادم الموقع نفسه وقت التشغيل ولا يصلان إلى المتصفح أبدًا. أنشئه من .env.example الذي يشير إلى واجهة API على http://localhost:8000: cp .env.example .env. مع Docker مرّر قيم NEXT_PUBLIC_* بـ --build-arg والمتغيرين الآخرين بـ -e.
أين توجد الإعدادات
ملف واحد هو .env في مجلد لوحة التحكم، يُقرأ عند بناء لوحة التحكم. كل قيمة فيه عامة، فلا يحوي سرًا أبدًا: مفاتيح المزودين في .env الخاص بواجهة API. أنشئه من .env.example الذي يشير إلى واجهة API على http://localhost:8000: cp .env.example .env. مع Docker مرّر القيم نفسها بـ --build-arg.
أين توجد الإعدادات
ملف واحد هو .env في مجلد واجهة API، تقرؤه واجهة API عند yarn dev، وتقرؤه الحاوية عندما تضيف --env-file .env -e NODE_ENV=production إلى docker run. يحوي أسرارًا: لا تضفه إلى المستودع أبدًا. أنشئه من .env.example الذي يشرح كل متغير ويعمل كما هو للتشغيل المحلي: cp .env.example .env.
تضبط صورة Docker قيمًا افتراضية خاصة بها، لذلك يعمل docker run من دون ملف: SQLite في /data/database.sqlite، والملفات المرفوعة في /data/uploads، وملفات CSV المصدّرة في /data/exports، وCORS_ORIGIN للتطبيقين الأماميين المحليين، وFRONTEND_URL=http://localhost:3031، وSTOREFRONT_URL=http://localhost:3030، وPUBLIC_API_URL=http://localhost:8000، وPUBLIC_MEDIA_URL=http://localhost:8000/media، وSEED_DEMO_DATA=false. وتستطيع تغيير أي منها بـ -e.
أساسيات واجهة API
تتحقق واجهة API من JWT_SECRET، ومن CORS_ORIGIN في الإنتاج، قبل أن تبدأ. إذا كان أحدهما ناقصًا أو غير صالح، تتوقف وتطبع سطرًا واحدًا يوضح ما يجب إصلاحه.
| المتغير | وظيفته |
|---|---|
NODE_ENV | development محليًا، وهو ينشئ الجداول ويحدّثها عند بدء التشغيل. وproduction على خادم مباشر، وهو لا يلمس الجداول أبدًا. |
PORT | منفذ واجهة API، وهو 8000. تشير إليه الواجهتان الأماميتان. |
DB_TYPE | sqlite (القيمة الافتراضية عند عدم الضبط) أو mysql. |
SQLITE_DATABASE | مسار ملف SQLite، وهو ./database.sqlite في .env.example. |
JWT_SECRET | يوقّع كل تسجيل دخول، ورموز QR للتذاكر ما دام TICKET_SECRET غير مضبوط. مطلوب. تُقبل قيمة المثال خارج الإنتاج فقط. |
JWT_EXPIRATION | مدة بقاء تسجيل الدخول، وهي 7d عند عدم الضبط. |
CORS_ORIGIN | عنوانا الموقع ولوحة التحكم، مفصولان بفاصلة. إذا لم يُضبط فلا يُسمح إلا بـ http://localhost:3030 وhttp://localhost:3031، وليس بكل الأصول أبدًا؛ مطلوب في الإنتاج. |
FRONTEND_URL | عنوان اللوحة، وهو الأصل الوحيد الذي تقبله اتصالاتها المباشرة (الإشعارات وتغييرات الصلاحيات)، وقيمته http://localhost:3031 عند عدم الضبط. |
STOREFRONT_URL | عنوان الموقع: ترجع إليه صفحات الدفع المشترين، وتربط إليه رسائل التذاكر، وتحدّث واجهة API صفحات الموقع من خلاله. |
PUBLIC_API_URL | العنوان العام لواجهة API نفسها، ويُستخدم في الروابط الموقّعة لملفات PDF للتذاكر وملفات التقويم وملفات CSV المصدّرة، وفي عنوان العودة من PayPal. |
REVALIDATE_SECRET | اختياري. القيمة نفسها لـ REVALIDATE_SECRET في .env الخاص بالموقع. بوجودها تخبر واجهة API الموقع بإعادة بناء صفحة فعالية أو مكان أو منظّم فور نشرها أو تعديلها أو إلغائها أو نفاد تذاكرها؛ ومن دونها تتحدث هذه الصفحات من تلقاء نفسها خلال ساعة. |
STOREFRONT_INTERNAL_URL | اختياري. المكان الذي تصل منه واجهة API إلى الموقع عندما يختلف عن STOREFRONT_URL، كما داخل Docker (http://storefront:3030). |
TICKET_SECRET | اختياري. يوقّع رمز QR لكل تذكرة وروابط التنزيل؛ وإن لم يُضبط يُستخدم JWT_SECRET. اضبطه مرة واحدة قبل أن تبيع: تغييره لاحقًا يُبطل كل رمز QR صدر. |
EXPORT_DIR | اختياري. المكان الذي تُكتب فيه ملفات CSV المصدّرة قبل تنزيلها، وهو ./exports عند عدم الضبط. |
TRUST_PROXY | اختياري. عدد الوسطاء العكسيين أمام واجهة API، حتى تحسب حدود تسجيل الدخول ونموذج التواصل ومسح الباب الزائر الحقيقي. |
RATE_LIMIT_LOGIN | اختياري. عدد محاولات الدخول الفاشلة التي يمكن لعنوان واحد القيام بها خلال 15 دقيقة قبل 429، وهو 10 افتراضيًا. |
SEED_DEMO_DATA | تقرؤه صورة Docker فقط، على وحدة تخزين ليس فيها قاعدة بيانات بعد: true ينشئها بالمنظّمين التجريبيين الأربعة وحساباتهم، وfalse بالجداول فقط، وبعدها تنشئ واجهة API مساحة عملك الخاصة من متغيرات المالك أدناه. |
ولّد JWT_SECRET خاصًا بك بالأمر:
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"كل ميزة اختيارية أدناه تبقى متوقفة ما دامت أسطرها في .env.example معلّقة كتعليقات.
مساحة عملك ومالكها
تُقرأ فقط في قاعدة بيانات ليس فيها حساب موظف ولا مساحة عمل (جداول yarn db:sync، أو وحدة تخزين Docker بدأت بـ SEED_DEMO_DATA=false). حينئذ ينشئ أول تشغيل لواجهة API منها الأدوار وإعدادات الموقع وأنواع الفعاليات ومساحة عمل واحدة ومالكها، مرة واحدة. وبمجرد وجود أي حساب موظف تُتجاهل.
OWNER_EMAIL=you@your-domain.com
OWNER_PASSWORD=a-long-password-of-your-own
OWNER_NAME=Your Name
WORKSPACE_NAME=Your organisation| المتغير | وظيفته |
|---|---|
OWNER_EMAIL | بريد تسجيل دخول المالك إلى اللوحة. |
OWNER_PASSWORD | 10 أحرف على الأقل. مع NODE_ENV=production تُرفض قيمة المثال من .env.example وكلمة مرور الحسابات التجريبية. لا تُطبع أبدًا، ويمكن حذفها بأمان بعد وجود المالك. |
OWNER_NAME | اختياري، وهو Owner عند عدم الضبط. يُغيَّر لاحقًا من الملف الشخصي للمالك. |
WORKSPACE_NAME | اختياري، وهو Ticketory عند عدم الضبط. اسم مؤسستك، ويُغيَّر لاحقًا من الإعدادات ثم عام. |
في Docker Compose للحزمة الكاملة يمكن وضعها في .env بجانب docker-compose.yml مع SEED_DEMO_DATA=false: يمرّر Compose ذلك الملف إلى واجهة API أولًا ثم back-end/.env، وتتقدم قيمة الأخير حيث يضبط الاثنان قيمة. وبدون هذه المتغيرات تبدأ واجهة API وتقول أيها يجب ضبطه.
المدفوعات
ينقل الدفع المشتري إلى صفحة Stripe أو PayPal نفسها، فلا تُكتب بيانات البطاقة على موقعك أبدًا. يُعرض كل مزوّد متى ضُبطت مفاتيحه. استخدم مفاتيح الاختبار أولًا: فهي لا تحرّك أي مال.
STRIPE_SECRET_KEY=sk_test_your_key
STRIPE_WEBHOOK_SECRET=whsec_your_secret
PAYPAL_CLIENT_ID=your-client-id
PAYPAL_CLIENT_SECRET=your-client-secret
PAYPAL_WEBHOOK_ID=your-webhook-id
PAYPAL_ENV=sandbox| المتغير | وظيفته |
|---|---|
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | صفحة Checkout المستضافة من Stripe. المفتاح الذي يبدأ بـ sk_test_ أو rk_test_ هو وضع الاختبار. خطاف الويب هو https://<your-api>/api/webhooks/stripe، ويرسل checkout.session.completed وcheckout.session.async_payment_succeeded وcheckout.session.async_payment_failed وrefund.updated. |
PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET, PAYPAL_WEBHOOK_ID | PayPal. خطاف الويب هو https://<your-api>/api/webhooks/paypal (PAYMENT.CAPTURE.COMPLETED وPAYMENT.CAPTURE.DENIED وPAYMENT.CAPTURE.REFUNDED)، ويوضع معرّفه في PAYPAL_WEBHOOK_ID. |
PAYPAL_ENV | sandbox أو live. عدم الضبط يعني sandbox. |
PAYMENTS_SIMULATOR | الدفع الاختباري، الذي يدفع الطلب من دون تحويل أي مال. auto (الافتراضي) يعرضه ما دام لا يوجد مفتاح حي، فتُبقيه مفاتيح الاختبار؛ وon أو off يتقدمان على ذلك. |
التذاكر المجانية لا تحتاج إلى شيء من هذا: الطلب الذي لا شيء فيه للدفع يُؤكَّد عند الدفع، بمفاتيح أو بدونها. لا تفرض تيكيتوري أي ضريبة بنفسها، فأعدّ الضريبة لبلدك قبل استلام مدفوعات حقيقية.
البريد الإلكتروني
تُرسل التذاكر ورموز التسجيل وإعادة ضبط كلمة المرور وأخبار الاسترداد وتذكيرات الفعاليات عبر Resend متى ضُبط المتغيران. وإلى ذلك الحين يُكتب كل بريد في سجل واجهة API بدلًا من إرساله، وهناك يُقرأ رمز التسجيل في تثبيت جديد (مع Docker: docker compose logs api).
RESEND_API_KEY=re_your_key
MAIL_FROM=Ticketory <tickets@your-domain.com>
EVENT_REMINDER_HOURS=24EVENT_REMINDER_HOURS هو المدة قبل الفعالية التي يخرج فيها تذكيرها: القيمة 24 عند عدم الضبط، وأقصاها 168 (أسبوع)، و0 يوقف التذكيرات. كل بريد عن طلب (التذاكر والاستردادات وإشعار الإلغاء والتذكير) يُكتب باللغة التي قُدّم بها الطلب.
استخدم MySQL بدلًا من SQLite
أنشئ قاعدة بيانات فارغة، ثم اضبط المشغّل والاتصال في ملف .env الخاص بواجهة API:
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE=ticketoryثم شغّل yarn seed للبيانات التجريبية، أو yarn db:sync للجداول بلا بيانات. لا تنشئ واجهة API العاملة الجداول ولا تحدّثها بنفسها إلا مع NODE_ENV=development، لذلك مع NODE_ENV=production يجب تشغيل أحد هذين الأمرين قبل أول تشغيل (yarn seed:prod أو yarn db:sync:prod بعد yarn build). تفعل صورة Docker ذلك بنفسها على SQLite فقط: وعلى MySQL شغّله مرة واحدة بنفسك.
الصور والملفات المرفوعة
تقدّم واجهة API الصور التجريبية بنفسها، من public/media/ticketory (رموز الأنواع والشعارات وشعار المساعد والصور التجريبية للاستوديو)، على /media/ticketory/…. أما الملفات المرفوعة من اللوحة (صور الأماكن الفارغة للاستوديو والصور المرفقة بسؤال للمساعد) والمفاهيم التي أنهاها الاستوديو فتُخزَّن على قرص واجهة API تحت MEDIA_UPLOAD_DIR وتُقدَّم على /media/uploads/…، ما لم تُضبط حاوية تخزين.
PUBLIC_MEDIA_URL=http://localhost:8000/media
MEDIA_UPLOAD_DIR=./public/media/uploadsPUBLIC_MEDIA_URL هو العنوان الذي يُصل به إلى /media من المتصفح. يُبنى منه كل عنوان صورة، وتنقل واجهة API المحفوظة منها إليه عند بدئها، فنقل واجهة API يُبقي كل صورة. على الخادم وجّه MEDIA_UPLOAD_DIR إلى تخزين دائم؛ ومع Docker يكون في وحدة تخزين البيانات.
لإرسال الملفات المرفوعة إلى Cloudflare R2 أو أي حاوية متوافقة مع S3، اضبط المتغيرات الخمسة كلها. وأعطِ التطبيقين الأماميين المضيف العام للحاوية عبر NEXT_PUBLIC_MEDIA_HOSTNAME (ومع Docker Compose عبر MEDIA_HOSTNAME) حتى يغيّر Next.js أحجام تلك الصور.
R2_ACCESS_KEY_ID=your-r2-access-key-id
R2_SECRET_ACCESS_KEY=your-r2-secret-access-key
R2_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com
R2_BUCKET_NAME=your-bucket-name
R2_PUBLIC_URL=https://your-public-url.r2.devتُحوَّل الصور إلى JPEG عند الرفع، بعرض لا يزيد على 1920 بكسل. وتُقبل مقاطع الفيديو بصيغ MP4 أو WebM أو MOV أو M4V، حتى 150 ميغابايت.
الموقع ولوحة المنظّم
تُضمَّن كل قيمة NEXT_PUBLIC_* في كود JavaScript الذي يحمّله المتصفح، ويستطيع أي شخص يفتح الصفحة قراءتها. لا تضع فيها سرًا أبدًا، وأعد البناء (أو أعد تشغيل yarn dev) بعد تغيير أي منها.
| المتغير | التطبيق | وظيفته |
|---|---|---|
NEXT_PUBLIC_API_BASE_URL | كلاهما | عنوان واجهة API مع /api، وهو http://localhost:8000/api افتراضيًا. |
NEXT_PUBLIC_SITE_URL | كلاهما | العنوان العام للموقع، وهو http://localhost:3030 افتراضيًا. في الموقع تُبنى منه العناوين الأساسية وبدائل اللغات وبطاقات المشاركة وrobots.txt وخريطة الموقع؛ وفي اللوحة رابط «عرض الموقع» ومعاينات الفعاليات. |
NEXT_PUBLIC_DASHBOARD_URL | كلاهما | عنوان اللوحة. في الموقع، هو المكان الذي ترسل إليه «بِع التذاكر» وروابط المنظّم المنظِّمَ ليسجّل الدخول (http://localhost:3031). وفي اللوحة، هو أساس الصورة التي تظهر عند مشاركة رابط اللوحة؛ وإذا تُرك فارغًا يُستخدم domain.url في src/config/brand.config.ts. |
NEXT_PUBLIC_MEDIA_HOSTNAME | كلاهما | اختياري. مضيفو https الذين يقدّمون الصور، مفصولين بفواصل: المضيف العام لحاويتك، مثل pub-1234.r2.dev، أو نطاق واجهة API، أو الاثنان. تُغيَّر أحجام الصور عليها بواسطة Next.js؛ وأي صورة أخرى تُحمَّل كما هي. مضيفون فقط، من دون https://. اتركه فارغًا ما دامت واجهة API تعمل على localhost. |
NEXT_PUBLIC_WEBSOCKET_BASE_URL | لوحة التحكم | عنوان واجهة API من دون /api، للإشعارات المباشرة. |
NEXT_PUBLIC_MAP_STYLE_LIGHT, NEXT_PUBLIC_MAP_STYLE_DARK | لوحة التحكم | أنماط بلاطات الخرائط اختيارية. وعند عدم الضبط يرسم المظهر الفاتح نمط Positron من OpenFreeMap ويرسم المظهر الداكن نمط Dark منه، وكلاهما لا يحتاج إلى مفتاح. |
NEXT_PUBLIC_PLACE_SEARCH_URL | لوحة التحكم | البحث عن الأماكن في أداة اختيار الخريطة بمحرر الأماكن، وهو https://photon.komoot.io/api عند عدم الضبط. تصلح أي خدمة ترميز جغرافي تجيب بالشكل نفسه. |
REVALIDATE_SECRET | الموقع | للخادم فقط، ويُقرأ وقت التشغيل. هو السر الذي ترسله واجهة API إلى POST /api/revalidate في الموقع بعد تغيّر فعالية؛ والقيمة نفسها كما في .env الخاص بواجهة API. وإذا كان فارغًا يرفض ذلك المسار كل استدعاء وتتحدث الصفحات خلال ساعة. |
API_INTERNAL_URL | الموقع | اختياري، للخادم فقط، ويُقرأ وقت التشغيل. المكان الذي يصل منه خادم الموقع نفسه إلى واجهة API (عناوين صفحات الفعاليات، والعرض الأول لصفحات الفعاليات والأماكن، وخريطة الموقع) عندما لا يصلح عنوان المتصفح من داخله، كما في Docker (http://api:8000/api في Docker Compose). اتركه بلا ضبط في غير ذلك. |
BUILD_STANDALONE | كلاهما | القيمة true تجعل yarn build يُخرج خادمًا مستقلًا بذاته، وهي القيمة التي تضبطها ملفات Dockerfile. اتركه غير مضبوط في غير ذلك. |
علامات التسويق في الموقع هي أيضًا قيم NEXT_PUBLIC_*: Google Tag Manager (NEXT_PUBLIC_GTM_ID) وGA4 (NEXT_PUBLIC_GA4_MEASUREMENT_ID) وMeta وTikTok وSnapchat وPinterest، يُفعَّل كل منها بمعرّف واحد؛ والمعرّف الفارغ لا يحمّل أي سكربت. وNEXT_PUBLIC_ANALYTICS_CURRENCY (USD افتراضيًا) هي العملة المرسلة مع أسعار التذاكر، وNEXT_PUBLIC_ANALYTICS_DEBUG=true يسجّل كل حدث متتبَّع في وحدة تحكم المتصفح.
خيارات Docker Compose
لا تحتاج إلى ضبط أي شيء للتشغيل المحلي. لتغيير شيء، ضعه في ملف .env بجوار docker-compose.yml وشغّل docker compose up --build مرة أخرى: تُضمِّن الواجهات الأمامية هذه القيم.
| المتغير | القيمة الافتراضية | وظيفته |
|---|---|---|
SITE_PORT | 3030 | منفذ الموقع على جهازك. |
ADMIN_PORT | 3031 | منفذ لوحة التحكم على جهازك. |
API_PORT | 8000 | منفذ واجهة API على جهازك. |
SITE_URL, ADMIN_URL, API_URL | العناوين المحلية على هذه المنافذ | العنوان الذي يصل منه المتصفح إلى كل تطبيق. اضبط الثلاثة عند تشغيل التطبيقات على نطاقاتك الخاصة. |
MEDIA_HOSTNAME | فارغ | مضيفو https الذين يقدّمون الصور، مفصولين بفواصل: المضيف العام لحاويتك (مع متغيرات R2_* في back-end/.env)، أو نطاق واجهة API نفسها، أو الاثنان. |
REVALIDATE_SECRET | قيمة محلية | السر الذي تتشاركه واجهة API والموقع، فيصل أي تغيير تجريه في اللوحة إلى صفحات الموقع فورًا. اضبط قيمتك العشوائية الطويلة على خادم مفتوح للإنترنت. |
SEED_DEMO_DATA | true | false يبدأ بجداول فارغة بدلًا من المنظّمين التجريبيين الأربعة، ومع ضبط متغيرات المالك تنشئ واجهة API مساحة عملك الخاصة ومالكها. وهو يهم فقط على وحدة تخزين جديدة. |
OWNER_EMAIL, OWNER_PASSWORD, OWNER_NAME, WORKSPACE_NAME | فارغ | مالك مساحة عملك واسمها، ويُقرآن فقط في قاعدة بيانات ليس فيها حساب موظف: انظر «مساحة عملك ومالكها» أعلاه. |
NEXT_PUBLIC_GTM_ID, NEXT_PUBLIC_GA4_MEASUREMENT_ID, NEXT_PUBLIC_META_PIXEL_ID, NEXT_PUBLIC_TIKTOK_PIXEL_ID, NEXT_PUBLIC_SNAPCHAT_PIXEL_ID, NEXT_PUBLIC_PINTEREST_TAG_ID | فارغ | وسوم التسويق في الموقع، وكلها اختيارية. |
NEXT_PUBLIC_ANALYTICS_CURRENCY, NEXT_PUBLIC_ANALYTICS_DEBUG | USD, false | العملة المرسلة مع كل سعر يُتتبَّع، وتسجيل كل حدث في وحدة تحكم المتصفح. |
NEXT_PUBLIC_MAP_STYLE_LIGHT, NEXT_PUBLIC_MAP_STYLE_DARK, NEXT_PUBLIC_PLACE_SEARCH_URL | فارغ | بلاطات خريطة لوحة التحكم وبحث الأماكن؛ وإذا تُرك فارغًا استُخدم OpenFreeMap وPhoton. |
غيّر منفذًا عندما يستخدمه برنامج آخر بالفعل، مثل ADMIN_PORT=3041. وكل من CORS_ORIGIN وFRONTEND_URL وSTOREFRONT_URL وPUBLIC_API_URL وPUBLIC_MEDIA_URL في واجهة API، وعناوين واجهة API والموقع واللوحة في التطبيقين الأماميين، تُبنى من المنافذ والعناوين الثلاثة، فتتبعها من تلقاء نفسها.
تقرأ حاوية واجهة API هذا .env أولًا ثم back-end/.env إن وُجد، وتتقدم قيمة الأخير حيث يضبط الاثنان قيمة، فتُضبط المفاتيح الاختيارية في مكان واحد لـ yarn dev ولـ Docker معًا. ويتقدم ملف compose في القيم التي تختلف داخل الحاوية: مسار قاعدة البيانات ومجلدا الرفع والتصدير والمنفذ وNODE_ENV=production والعناوين أعلاه. وقاعدة البيانات والملفات المرفوعة وملفات CSV المصدّرة موجودة في وحدة التخزين ticketory-data.
ميزات الذكاء الاصطناعي
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
تشغيل مساعد الفعاليات بالذكاء الاصطناعي واستوديو الأماكن بالذكاء الاصطناعي: مفاتيح المزوّدين ونموذج الصور.
خادم MCP
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
السماح لوكلاء البرمجة وعملاء MCP الآخرين باستخدام أدوات المساعد: المفتاح ونقطة النهاية.
وضع العرض التجريبي
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
مفتاح العرض العام، ولماذا يبقى مغلقًا عند منظّم حقيقي.