אילו בעיות פותר ממשק אינטרנט CRM מותאם אישית?
תארו לעצמכם: יש לכם 50 מנהלי מכירות, כל אחד מנהל לקוחות באקסל או בראש שלו. עסקאות הולכות לאיבוד, לידים לא מטופלים, דוחות לוקחים שבועות להרכבה. ממשק אינטרנט ל-CRM מותאם אישית פותר את זה – אבל רק אם הוא מעוצב לפי תהליכי העבודה שלכם, לא לפי תבנית.
הצוות שלנו יישם למעלה מ-15 מערכות CRM לחברות B2B במשך 6 שנים, כך שאנחנו מכירים את הטעויות האופייניות ויודעים איך להימנע מהן. אנחנו מפתחים ממשקי אינטרנט ל-CRM מאפס על React ו-Laravel: מאב-טיפוס ועד לסביבת ייצור. במאמר זה, נפרק את הארכיטקטורה האופיינית, הישויות המרכזיות והמלכודות.
המשימה העיקרית היא לא לקודד כפתורים, אלא לבנות לוגיקה: מי רואה אילו עסקאות, איך המשפך נע, אילו התראות קריטיות. בלי זה, אפילו ממשק יפה הוא חסר תועלת. הפרויקט מתחיל בסקר של התהליכים הנוכחיים – תוך 2-3 ימים אנחנו אוספים דרישות ומציעים ארכיטקטורה.
אחד הלקוחות שלנו – מפיץ מוצרי אלקטרוניקה – איבד עד 15% מהלידים כי מנהלים לא ראו את היסטוריית השיחות. פתרון: ממשק עם רישום אוטומטי של כל הפעילויות. חודש אחד לאחר היישום, הנשירה ירדה ל-3%.
למה CRM מותאם אישית משתלם יותר מפתרונות מוכנים?
מערכות CRM מוכנות (amoCRM, Bitrix24) מציעות סט תכונות סטנדרטי, אבל ההתאמה שלהן לפרטי העסק דורשת לעיתים קרובות שינויים יקרים ומגבילה גמישות. פיתוח מותאם אישית על React ו-Laravel מאפשר:
- לייעל את המשפך לשלבי מכירה ספציפיים: לדוגמה, עבור מפיץ – שלבים "בקשת הצעת מחיר", "משא ומתן על מחיר", "משלוח".
- לשלב כל תוכנה חיצונית: טלפוניה, 1C, מסרונים, קמפיינים בדוא"ל.
- להרחיב פונקציונליות ללא קשר למגבלות רישוי.
במקביל, עלות הבעלות הכוללת של CRM מותאם אישית בתוך שנה מתבררת כנמוכה יותר מהתשלום החודשי עבור פתרון מוכן עם סט דומה של אינטגרציות. לפי הנתונים שלנו, חברות חוסכות עד 40% על רישיונות כשהן עוברות לפיתוח מותאם אישית.
סט אופייני של ישויות והיישום שלהן
ב-CRM מותאם אישית, מבחינים בחמש ישויות עיקריות. עבור כל אחת, אנחנו מיישמים מודול נפרד עם CRUD, סינון ויחסים.
| ישות | מטרה | שדות לדוגמה |
|---|---|---|
| אנשי קשר | אנשים פרטיים עם היסטוריית אינטראקציה | שם, דוא"ל, טלפון, מקור |
| חברות | ישויות משפטיות שאליהן מקושרים אנשי קשר | שם, ח.פ., כתובת |
| עסקאות | מכירות פוטנציאליות ופעילות עם סטטוסים | סכום, stage_id, responsible_id |
| משימות | מטלות עם מועדים המקושרות לעסקאות/אנשי קשר | כותרת, due_date, אחראי |
| פעילויות | יומן תקשורת (שיחות, דוא"ל, פגישות) | סוג, גוף, happened_at |
פיתוח מותאם אישית על React ו-Laravel מסתגל לשינויים עסקיים פי 2-3 מהר יותר ממערכות CRM מוכנות. לדוגמה, הוספת שדה חדש או שלב במשפך אורכת שעות, לא ימים.
איך אנחנו מתכננים CRM עבור העסק שלכם?
תהליך העבודה מחולק לשישה שלבים:
- אנליטיקה – ראיונות עם משתמשי מפתח, זיהוי תרחישים ונקודות כאב. (2-3 ימים)
- אב-טיפוס – מוקאפים אינטראקטיביים ב-Figma המאושרים על ידי הלקוח. (3-5 ימים)
- פיתוח צד שרת – Laravel (PHP 8.3+) עם RESTful API, PostgreSQL, Redis לקאש ותורים.
- פיתוח צד לקוח – React 18 + TypeScript, TanStack Table לטבלאות, @dnd-kit למשפך.
- אינטגרציות – טלפוניה (Asterisk, Miko), דוא"ל (SMTP/API), מסרונים (Telegram, WhatsApp).
- בדיקות והשקה – CI/CD, בדיקות עומס, ניטור.
לאימות זהות, אנחנו משתמשים ב-Laravel Policies – מנגנון סטנדרטי המספק בקרת גישה גמישה: מנהל רואה רק את העסקאות שלו, מפקח רואה את כל העסקאות במחלקה שלו.
ארכיטקטורת מסד נתונים ו-API
מסד הנתונים בנוי על PostgreSQL עם סכמה מנורמלת. דוגמה לטבלאות ראשיות:
CREATE TABLE contacts (
id BIGSERIAL PRIMARY KEY,
company_id BIGINT REFERENCES companies(id),
name VARCHAR(255) NOT NULL,
email VARCHAR(255),
phone VARCHAR(50),
source VARCHAR(64),
responsible_id BIGINT REFERENCES users(id),
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE deals (
id BIGSERIAL PRIMARY KEY,
contact_id BIGINT REFERENCES contacts(id),
company_id BIGINT REFERENCES companies(id),
title VARCHAR(255) NOT NULL,
amount DECIMAL(14,2),
currency CHAR(3) DEFAULT 'RUB',
stage_id BIGINT REFERENCES pipeline_stages(id),
responsible_id BIGINT REFERENCES users(id),
closed_at DATE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
ה-API בנוי על עקרונות RESTful. דוגמה למשאב עסקאות:
GET /api/deals?stage_id=2&responsible_id=5
POST /api/deals
PATCH /api/deals/{id}
DELETE /api/deals/{id}
POST /api/deals/{id}/move # смена стадии {
"id": 1042,
"stage_id": 4,
"stage": {
"id": 4,
"name": "Переговоры"
},
"updated_at": "2024-01-15T14:22:00Z",
"activity": {
"id": 3891,
"type": "stage_change",
"body": "Стадия изменена: Квалификация → Переговоры",
"user_id": 12
}
} משפך עם גרירה ושחרור
משפך המכירות מוצג כלוח Kanban. אנחנו משתמשים בספריית @dnd-kit לגרירת כרטיסים בין עמודות. עדכון אופטימי הוא טכניקה מרכזית: הכרטיס משנה מיקום באופן מיידי ללא המתנה לתגובת השרת. במקרה של שגיאה, אנחנו מבצעים רולבק.
import { DndContext, DragEndEvent, closestCenter } from '@dnd-kit/core';
import { SortableContext } from '@dnd-kit/sortable';
const Pipeline: React.FC<{ stages: Stage[]; deals: Deal[] }> = ({ stages, deals }) => {
const moveDeal = useMutation({
mutationFn: ({ dealId, stageId }) => api.patch(`/deals/${dealId}/move`, { stage_id: stageId }),
onMutate: async ({ dealId, stageId }) => {
await queryClient.cancelQueries({ queryKey: ['deals'] });
const prev = queryClient.getQueryData(['deals']);
queryClient.setQueryData(['deals'], (old: Deal[]) => old.map(d => d.id === dealId ? { ...d, stage_id: stageId } : d) );
return { prev };
},
onError: (_, __, context) => queryClient.setQueryData(['deals'], context?.prev),
});
return (
<DndContext collisionDetection={closestCenter} onDragEnd={moveDeal.mutate}>
<div className="flex gap-4 overflow-x-auto p-4">
{stages.map(stage => (
<KanbanColumn key={stage.id} stage={stage} deals={deals.filter(d => d.stage_id === stage.id)} />
))}
</div>
</DndContext>
);
}; ניהול הרשאות גישה
CRM דורש הרשאות מפורטות. ב-Laravel זה מיושם דרך מחלקות Policy וסקופים גלובליים של מודלים.
class DealPolicy {
public function view(User $user, Deal $deal): bool {
if ($user->hasRole('admin')) return true;
if ($user->hasRole('team_lead')) {
return $deal->responsible->team_id === $user->team_id;
}
return $deal->responsible_id === $user->id;
}
}
class Deal extends Model {
public function scopeVisibleTo(Builder $query, User $user): Builder {
if ($user->hasRole('admin')) return $query;
if ($user->hasRole('team_lead')) {
return $query->whereHas('responsible', fn($q) => $q->where('team_id', $user->team_id)
);
}
return $query->where('responsible_id', $user->id);
}
} מה כלול בפיתוח CRM מותאם אישית
עלות הפרויקט כוללת:
- מפרט טכני ואב-טיפוס ממשק אינטראקטיבי
- פיתוח צד שרת (Laravel + PostgreSQL + Redis)
- פיתוח צד לקוח (React 18 + TypeScript)
- אינטגרציה עם טלפוניה (Asterisk, Miko), דוא"ל (SMTP/API), מסרונים
- תיעוד API ומדריך למשתמש
- הדרכת עובדים (2-3 שעות)
- 3 חודשי תמיכה באחריות לאחר ההשקה
בנוסף, אנחנו יכולים לחבר גרסת מובייל (PWA או React Native) ולהקים אנליטיקת BI.
לוח זמנים והערכת עלות
MVP עם משפך, כרטיסי איש קשר/עסקה, משימות ואנליטיקה בסיסית אורך 4-6 שבועות. הוספת אינטגרציות (טלפוניה, דוא"ל), דוחות מתקדמים ותפקידים אורכת עוד 3-4 שבועות. גרסת מובייל מוסיפה 3-4 שבועות.
העלות מחושבת באופן אישי לאחר ניתוח תהליכי העבודה שלכם. צרו קשר כדי לדון בפרויקט שלכם ולקבל הערכה ראשונית. הזמינו הדגמה של ארכיטקטורת ה-CRM שלנו על הנתונים שלכם – זה אורך לא יותר משעה.







