defineConnectionProvider({ type: 'oauth', ... }) لن تحتاج إلى الترحيل.
defineConnectionProvider
عرّف كيفية الحصول على اتصالات تطبيقك
defineConnectionProvider
عرّف كيفية الحصول على اتصالات تطبيقك
يصف موفّر الاتصال عملية المصافحة الخاصة بـ OAuth التي يحتاجها تطبيقك. ينقر المستخدم على “إضافة اتصال” في إعدادات تطبيقك، ويُكمل شاشة موافقة المزوّد، ثم يتم إنشاء صف النقاط الرئيسية:
ConnectedAccount في مساحة عمله.يتطلّب الإعداد العملي ملفّين — موفّر الاتصال، وتصريح serverVariables مطابق في defineApplication يحتفظ ببيانات اعتماد عميل OAuth.src/connection-providers/linear-connection.ts
src/application.config.ts
nameهي سلسلة المعرّف الفريدة المستخدمة فيlistConnections({ providerName })(بصيغة kebab-case، ويجب أن تطابق^[a-z][a-z0-9-]*$).displayNameيظهر في علامة تبويب إعدادات كل تطبيق وفي قائمة أدوات الذكاء الاصطناعي.clientIdVariable/clientSecretVariableهي أسماء، وليست قيماً — ويجب أن تطابق المفاتيح المصرَّح بها فيdefineApplication.serverVariables. يُدخِل مسؤول الخادم القيم الفعليةclient_idوclient_secretعبر واجهة تسجيل التطبيق، ولا تُضمَّن أبدًا في مستودعك.- استخدم
serverVariables(وليسapplicationVariables) — بيانات اعتماد OAuth على مستوى الخادم، ويوجد تطبيق OAuth واحد لكل خادم Twenty. - إلى أن يتم ملء كلا
serverVariables، تعرض علامة تبويب إعدادات كل تطبيق تلميح “بحاجة إلى مسؤول الخادم” ويكون زر “إضافة اتصال” معطّلًا. type: 'oauth'هي القيمة الوحيدة المدعومة حاليًا. المميِّز متوافق مع الإصدارات المستقبلية: الأنواع المستقبلية ('pat'،'api-key'، …) ستضيف كُتل تهيئة فرعية جديدة إلى جانبoauth.
تشغيل دالة منطقية عند الاتصال
التفاعل فور إنشاء الاتصال
تشغيل دالة منطقية عند الاتصال
التفاعل فور إنشاء الاتصال
بعض المزوّدين يسلّمونك بيانات وقت الاتصال تحتاج إلى الاحتفاظ بها قبل أن يصبح الاتصال قابلاً للاستخدام — المثال الكلاسيكي هو Slack، حيث يحدّد رد OAuth معرّف الفريق يعمل الـ hook بشكل غير متزامن في مساحة العمل التي تجري الاتصال (يتم وضعه في قائمة الانتظار، ولا يُنتظر انتهاؤه)، لذلك لن يؤدي hook بطيء أو فاشل إلى حظر أو تعطيل رد نداء OAuth — اجعله قابلاً للتكرار دون آثار جانبية (idempotent) ويتولى إعادة المحاولات بنفسه. يتلقى المعالج:من هناك استخدم
team_id الخاص بمساحة العمل الذي ستُربط به الأحداث الواردة. عيِّن onConnectLogicFunction للإشارة إلى دالة منطقية في التطبيق نفسه (حسب universalIdentifier الخاص بها)، وسيتم تشغيلها مباشرة بعد إنشاء ConnectedAccount.src/connection-providers/slack-connection.ts
getConnection(connectedAccountId) لقراءة رمز الوصول الجديد واستدعاء واجهة برمجة تطبيقات المزوّد (على سبيل المثال، Slack auth.test) أو حفظ تعيين باستخدام مخزن المفاتيح والقيم.listConnections / getConnection
استخدم الاتصالات من دالة منطقية
listConnections / getConnection
استخدم الاتصالات من دالة منطقية
داخل معالج دالة منطقية، تُرجِع يحتوي كل اتصال على:
listConnections({ providerName }) صفوف ConnectedAccount الخاصة بهذا التطبيق للمزوّد المحدَّد، مع رموز وصول محدَّثة.src/logic-functions/handlers/create-linear-issue-handler.ts
النقاط الرئيسية:
- مرّر
{ providerName }للتصفية حسب المزوّد؛ واحذفه للحصول على كل الاتصالات التي يملكها هذا التطبيق عبر جميع المزوّدين. - يقوم الخادم بتحديث رمز الوصول بشفافية قبل الإرجاع. يرى معالجك دائمًا رمزًا صالحًا للاستخدام (أو سيكون
authFailedAtمُعيّنًا). getConnection(id)هي المعادِل لصف واحد.
رؤية خاصة بالمستخدم مقابل المشاركة على مستوى مساحة العمل
كيف يختار المستخدمون بين بيانات اعتماد خاصة ومشتركة
رؤية خاصة بالمستخدم مقابل المشاركة على مستوى مساحة العمل
كيف يختار المستخدمون بين بيانات اعتماد خاصة ومشتركة
عند نقر المستخدم “إضافة اتصال”، سيُطلب منه اختيار مستوى الرؤية:يُسمح بوجود اتصالات متعددة لكل (مستخدم، مزوّد)، لذا يمكن للمستخدم نفسه امتلاك “Linear شخصي” و”Linear للعمل” جنبًا إلى جنب.
- لي فقط — بيانات الاعتماد خاصة بالمستخدم الذي قام بالاتصال. ستتمكّن أي دالة منطقية تُستدعى بالنيابة عنه (مشغّل مسار HTTP مع
isAuthRequired: true) من رؤيتها؛ أمّا مشغّلات cron وأحداث قاعدة البيانات فلا. - مشتركة على مستوى مساحة العمل — يمكن لأي عضو في مساحة العمل استخدام بيانات الاعتماد. يمكن لمشغّلات cron/قاعدة البيانات رؤيتها أيضًا، لأنها لا تملك مستخدم طلب.
إعداد المزوّد لمرة واحدة
سجّل تطبيق OAuth الخاص بك لدى خدمة الطرف الثالث
إعداد المزوّد لمرة واحدة
سجّل تطبيق OAuth الخاص بك لدى خدمة الطرف الثالث
بالنسبة لكل موفّر اتصال، يحتاج مسؤول الخادم أولًا إلى تسجيل تطبيق OAuth لدى الطرف الثالث.
- انتقل إلى إعدادات المطوّر لدى المزوّد (مثل https://linear.app/settings/api/applications/new).
- عيّن Redirect URI إلى
\<SERVER_URL>/auth/apps/callback. - انسخ Client ID وClient Secret المُنشأين.
- افتح التطبيق المُثبَّت في Twenty كمسؤول خادم → عيّن القيم على
serverVariablesالمقابلة. - بعد ذلك، يمكن لأعضاء مساحة العمل إضافة الاتصالات من قسم الاتصالات الخاص بكل تطبيق.