בעת שילוב Directus בתשתית ארגונית, לעיתים קרובות נדרשת סנכרון עם מערכות הנהלת חשבונות כמו 1C, CRM או מאגרי נתונים של מחסנים. ממשקי REST ו-GraphQL הסטנדרטיים לא תמיד מכסים לוגיקה עסקית ספציפית — נדרשים מטפלי אירועים מותאמים אישית, נקודות קצה או ולידציה מורכבת. כאן נכנסות לתמונה הרחבות Directus מותאמות אישית: הן מרחיבות את הפונקציונליות ללא שינוי בליבה. דוגמה טיפוסית: כאשר נוצרת הזמנה, עלינו לשלוח נתונים ל-CRM, ליצור חשבונית PDF ולרשום את הרשומה. הרחבת Hook מטפלת בכך בכמה שורות של TypeScript, בעוד ש-Operation ב-Flows מפעיל את שרשרת הפעולות.
אנחנו מפתחים הרחבות Directus מותאמות אישית כבר למעלה מ-5 שנים, ומספקים יותר מ-30 פתרונות לסנכרון 1C, יצירת דוחות PDF ושילוב בוטים של Telegram. כל ההרחבות כתובות ב-TypeScript באמצעות ה-SDK הרשמי.
הרחבות Directus מותאמות אישית: סוגים ודוגמאות קוד
סוגי הרחבות
| סוג הרחבה | מטרה | דוגמת שימוש |
|---|---|---|
| Hook | מגיב לאירועים (יצירה, עדכון) | סנכרון הזמנות עם CRM |
| Endpoint | מוסיף נתיבי API מותאמים אישית | יצירת דוחות CSV |
| Operation | שלב עבור Flows (אוטומציה) | שליחת SMS דרך ספק |
| Interface | שדה מותאם אישית בפאנל הניהול | בורר צבעים |
| Display | עיבוד נתונים ברשימה | כרטיס עם תצוגה מקדימה |
הרחבות מותאמות אישית לעומת תוספים מוכנים
| פרמטר | הרחבה מותאמת אישית | תוסף מוכן |
|---|---|---|
| התאמה | כל לוגיקה עסקית | מוגבל להגדרות |
| מהירות פיתוח | 2–5 ימים | מיידי |
| תאימות עדכונים | מלאה (באמצעות SDK) | תלוי במפתח |
| נפח קוד | ללא קוד מיותר | לעיתים קרובות עמוס בתכונות |
כיצד הרחבות Hook מסנכרנות נתונים בזמן אמת?
הרחבות Hook נרשמות לאירועי action (אחרי שינוי) או filter (לפני שמירה). מקרה קלאסי: בעת יצירת הזמנה, שלח נתונים ל-CRM. קוד המטפל נראה כך:
// extensions/hooks/lifecycle-events/index.ts
import type { HookExtensionContext } from '@directus/types'
export default ({ action, filter, schedule, init }: HookExtensionContext) => {
action('items.create', async ({ collection, item, accountability }) => {
if (collection === 'orders') {
await fetch(process.env.CRM_WEBHOOK!, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
event: 'order_created',
orderId: item.id,
total: item.total
})
})
}
})
}אנו מוסיפים טיפול בשגיאות ומנגנון ניסיון חוזר לחוסן. לדוגמה, בפרויקט אחרון עם רשת קמעונאית, צמצמנו את זמן עיבוד ההזמנות מ-8 שניות ל-1.2 שניות על ידי העברת סנכרון ה-CRM ל-Hook אסינכרוני עם ניסיון חוזר והסרת כפילויות.
מהי הרחבת Endpoint וכיצד יוצרים אחת?
הרחבות Endpoint מאפשרות להוסיף נתיבי Express מותאמים אישית. לדוגמה, דוח מכירות עם סינון לפי תאריך:
// extensions/endpoints/reports/index.ts
import type { EndpointExtensionContext } from '@directus/types'
import { Router } from 'express'
export default (router: Router, { services, getSchema }: EndpointExtensionContext) => {
router.get('/sales', async (req, res) => {
const schema = await getSchema()
const { ItemsService } = services
const ordersService = new ItemsService('orders', { schema, accountability: req.accountability })
const orders = await ordersService.readByQuery({
filter: { status: { _eq: 'completed' } },
fields: ['id', 'total', 'date_created']
})
const totalRevenue = orders.reduce((sum, o) => sum + (o.total || 0), 0)
res.json({ totalOrders: orders.length, totalRevenue })
})
}אנו מוסיפים באופן שגרתי דפדוף, מיון וקאשינג. כל נקודות הקצה עוברות בדיקות עומס.
כיצד הרחבות Operation מאוטמות תהליכים עסקיים?
הרחבות Operation משמשות ב-Flows. הן מורכבות משני קבצים: לוגיקת שרת וממשק משתמש עבור בונה ה-Flows.
// extensions/operations/send-sms/index.ts (сервер)
export default {
id: 'send-sms',
handler: async ({ phone, message }, context) => {
const response = await fetch('https://api.sms-provider.com/send', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SMS_API_KEY}`
},
body: JSON.stringify({ to: phone, text: message })
})
if (!response.ok) throw new Error('SMS failed')
return { sent: true }
}
} // extensions/operations/send-sms/app.ts (UI)
export default {
id: 'send-sms',
name: 'Send SMS',
icon: 'sms',
description: 'Отправить SMS через провайдера',
options: [
{
field: 'phone',
type: 'string',
meta: {
interface: 'input',
required: true
}
},
{
field: 'message',
type: 'text',
meta: {
interface: 'input-multiline',
required: true
}
}
]
} מדוע הרחבות מותאמות אישית עדיפות על תוספים מוכנים?
תוספים מוכנים לעיתים קרובות מפספסים את המטרה: הם או עמוסים מדי או חסרי פונקציונליות. הרחבות מותאמות אישית נכתבות בדיוק למשימה. לדוגמה, Hook יכול לא רק לשלוח נתונים ל-CRM אלא גם לבדוק כפילויות, בעוד ש-Endpoint יכול ליצור דוחות מסוננים מורכבים. אתה מקבל בדיוק את מה שאתה צריך, ללא קוד מת.
הפרויקטים שלנו מראים שפתרונות מותאמים אישית מקצרים את זמן האינטגרציה בממוצע ב-40% בהשוואה להתאמה של תוספים מוכנים. יתרה מכך, הסיכון לכשלי עדכון יורד ב-60%. עבור תרחישים נפוצים, יש לנו תבניות מוכנות — צור קשר כדי לקבל אותן.
שלבי פיתוח הרחבות במפתח מלא
- ניתוח דרישות (יום אחד) — ראיון עם הלקוח, זיהוי נקודות אינטגרציה ופורמטי נתונים.
- אב טיפוס (יום אחד) — יצירת שלד Hook ובדיקת Endpoint, הסכמה על ה-API.
- פיתוח (1–3 ימים) — קוד, בדיקות יחידה, אינטגרציה עם שירותים חיצוניים.
- סביבת בדיקות (יום אחד) — פריסה לסביבת בדיקות, אימות עם נתונים אמיתיים.
- תיעוד (חצי יום) — README מפורט, מדריך התקנה והגדרה.
דוגמה למבנה תיקיות
extensions/
├── hooks/sync-to-crm/
│ ├── index.ts
│ └── package.json
├── endpoints/reports/
│ ├── index.ts
│ └── package.json
מה כלול בפיתוח הרחבות מותאמות אישית
- קוד מקור במאגר שלך (TypeScript, עם הערות).
- תיעוד התקנה, הגדרה ושימוש.
- בדיקות בסביבת בדיקות.
- אחריות לתיקון באגים למשך חודש.
- ייעוץ בנושא אינטגרציה ותמיכה שוטפת.
לוחות זמנים ועלות משוערת
פיתוח הרחבה בודדת (Hook או Endpoint) אורך 2 עד 4 ימים. ערכת מקיפה של שלוש הרחבות (Hook + Endpoint + Operation) אורכת 3–5 ימים. העלות מחושבת באופן אישי לפי מורכבות. צור קשר לקבלת הערכה מדויקת.
הזמן פיתוח הרחבה מותאמת אישית וקבל פתרון במפתח מלא עם תיעוד ואחריות.







