מאסטר מקדיש עד 30 דקות ביום להעברה ידנית של הזמנות ל-Google Calendar. שגיאות, כפילויות ורשומות שאבדו הם כאבי ראש נפוצים עבור סלונים, מרפאות ומרכזי חינוך. העתקה ידנית גוזלת עד 15 שעות בחודש — זמן שיכול היה להיות מושקע בלקוחות. האינטגרציה מחזירה את עצמה תוך מספר חודשים.
אוטומציה עם Google Calendar API מבטלת שגיאות וכפילויות. לקוחות מקבלים לוחות זמנים מדויקים, ועובדים מקבלים זמן פנוי. אנו מיישמים סנכרון סוהר: הזמנות חדשות מהאתר מופיעות אוטומטית בלוח השנה, ושינויים מהלוח משתקפים באתר. בבסיס עומדים Google Calendar API v3, Google Calendar API, OAuth2 והתראות Webhook.
כיצד פועל סנכרון דו-כיווני עם Google Calendar?
בסנכרון חד-כיווני, האתר שולח אירועים אך אינו מקבל עדכונים מהלוח. כאשר מאסטר מזיז פגישה ידנית או אדמין משנה את השעה, הנתונים מתפצלים. סנכרון דו-כיווני פותר זאת באמצעות Webhook: התראות Google Push מודיעות לשרת שלנו על כל שינוי, ואנו מעדכנים את מסד הנתונים של האתר.
כיצד Google מודיע על שינויים?
Google Calendar משתמש ב-Push Notifications. לאחר הרשמה לערוץ, Google שולח בקשת POST ל-Webhook שלך בכל שינוי באירוע. השרת שלך מעבד זאת ומסנכרן את הנתונים. פרטים בתיעוד של Google.| סוג סנכרון | זמן יישום | דרישות |
|---|---|---|
| חד-כיווני (אתר → Google Calendar) | 2–3 ימים | אסימון OAuth2 של המאסטר |
| דו-כיווני (עם Webhook) | 4–6 ימים | כתובת URL ציבורית ל-webhook, תמיכה ב-push |
מדוע סנכרון API עדיף על העברה ידנית?
שכפול ידני גוזל זמן ויוצר שגיאות. אינטגרציית API מבטלת טעויות אנוש: אירוע נוצר שניות לאחר ההזמנה. סנכרון דו-כיווני דרך Webhook שומר על נתונים מעודכנים ללא מעורבות המאסטר. חיסכון ממוצע בזמן אדמין — 10 שעות בחודש.
מה כלול בעבודה?
אנו מספקים היקף עבודה מלא כך שתקבל סנכרון אמין ללא הפתעות נסתרות.
| מה כלול | תיאור |
|---|---|
| הגדרת OAuth2 | חיבור חשבונות מאסטר, אחסון מאובטח של אסימונים |
| יישום CRUD לאירועים | יצירה, עדכון ומחיקה של הזמנות בלוח השנה |
| מטפל Webhook | קבלת שינויים מ-Google Calendar וסנכרון עם האתר |
| ניטור | מעקב אחר שגיאות, התראות על תקלות |
| תיעוד | תיאורי שיטות API והוראות למאסטרים |
| בדיקות | כיסוי תרחישים עיקריים, טיפול בשגיאות |
לצוות שלנו ניסיון של 7+ שנים באינטגרציות Google API, עם יישום של למעלה מ-50 פרויקטי סנכרון עבור סלונים, מרפאות ומרכזי חינוך. אנו מבטיחים פעילות יציבה 24/7 — מהנדסי Google Cloud מוסמכים מבטיחים תצורה נכונה של כל הרכיבים.
כיצד לחבר סנכרון: הוראות שלב-אחר-שלב
- סיכום על רשימת המאסטרים והלוחות הזמינים.
- אנו מגדירים הרשאת OAuth2 עבור כל מאסטר.
- פריסת מטפל ה-Webhook על השרת שלך.
- ביצוע בדיקות עם הזמנות אמיתיות.
- השקה וניטור.
Google Calendar API
OAuth2 משמש להרשאה ו-Google Calendar API v3:
use Google\Client;
use Google\Service\Calendar;
class GoogleCalendarService
{
private Calendar $calendar;
public function __construct(string $accessToken)
{
$client = new Client();
$client->setAccessToken($accessToken);
$this->calendar = new Calendar($client);
}
public function createEvent(Booking $booking): string
{
$event = new Calendar\Event([
'summary' => "📅 {$booking->service->name} — {$booking->customer_name}",
'description' => $this->buildDescription($booking),
'start' => [
'dateTime' => $booking->starts_at->toRfc3339String(),
'timeZone' => 'Europe/Moscow',
],
'end' => [
'dateTime' => $booking->ends_at->toRfc3339String(),
'timeZone' => 'Europe/Moscow',
],
'attendees' => [
['email' => $booking->customer_email],
],
'reminders' => [
'useDefault' => false,
'overrides' => [
['method' => 'email', 'minutes' => 1440],
['method' => 'popup', 'minutes' => 60],
],
],
'extendedProperties' => [
'private' => ['booking_id' => (string) $booking->id],
],
]);
$created = $this->calendar->events->insert('primary', $event);
return $created->getId();
}
public function updateEvent(Booking $booking): void
{
$event = $this->calendar->events->get('primary', $booking->google_event_id);
$event->setStart(new Calendar\EventDateTime([
'dateTime' => $booking->starts_at->toRfc3339String(),
]));
$event->setEnd(new Calendar\EventDateTime([
'dateTime' => $booking->ends_at->toRfc3339String(),
]));
$this->calendar->events->update('primary', $booking->google_event_id, $event);
}
public function deleteEvent(string $eventId): void
{
$this->calendar->events->delete('primary', $eventId);
}
} הרשאת OAuth2 למאסטרים
כל מאסטר מאשר דרך Google ומעניק לאפליקציה את ההיקף use Google\Client; use Google\Service\Calendar; class GoogleCalendarService { private Calendar $calendar; public function __construct(string $accessToken) { $client = new Client(); $client->setAccessToken($accessToken); $this->calendar = new Calendar($client); } public function createEvent(Booking $booking): string { $event = new Calendar\Event([ 'summary' => "📅 {$booking->service->name} — {$booking->customer_name}", 'description' => $this->buildDescription($booking), 'start' => [ 'dateTime' => $booking->starts_at->toRfc3339String(), 'timeZone' => 'Europe/Moscow', ], 'end' => [ 'dateTime' => $booking->ends_at->toRfc3339String(), 'timeZone' => 'Europe/Moscow', ], 'attendees' => [ ['email' => $booking->customer_email], ], 'reminders' => [ 'useDefault' => false, 'overrides' => [ ['method' => 'email', 'minutes' => 1440], ['method' => 'popup', 'minutes' => 60], ], ], 'extendedProperties' => [ 'private' => ['booking_id' => (string) $booking->id], ], ]); $created = $this->calendar->events->insert('primary', $event); return $created->getId(); } public function updateEvent(Booking $booking): void { $event = $this->calendar->events->get('primary', $booking->google_event_id); $event->setStart(new Calendar\EventDateTime([ 'dateTime' => $booking->starts_at->toRfc3339String(), ])); $event->setEnd(new Calendar\EventDateTime([ 'dateTime' => $booking->ends_at->toRfc3339String(), ])); $this->calendar->events->update('primary', $booking->google_event_id, $event); } public function deleteEvent(string $eventId): void { $this->calendar->events->delete('primary', $eventId); } } :
Route::get('/integrations/google-calendar/connect', function () {
$client = new Google\Client();
$client->setScopes([\Google\Service\Calendar::CALENDAR_EVENTS]);
$client->setState(auth()->id());
return redirect($client->createAuthUrl());
});
Route::get('/integrations/google-calendar/callback', function (Request $request) {
$client = new Google\Client();
$tokens = $client->fetchAccessTokenWithAuthCode($request->code);
User::find($request->state)->update([
'google_calendar_token' => encrypt(json_encode($tokens)),
]);
return redirect('/settings/integrations')->with('success', 'Google Calendar подключён');
});
סנכרון דו-כיווני דרך Webhook
Google Calendar Push Notifications מאפשרות לקבל התראות על שינויים בלוח השנה:
// Подписка на уведомления
$this->calendar->events->watch('primary', new Calendar\Channel([
'id' => Str::uuid(),
'type' => 'web_hook',
'address' => 'https://example.com/webhooks/google-calendar',
]));
// Обработчик уведомлений
Route::post('/webhooks/google-calendar', function (Request $request) {
$channelId = $request->header('X-Goog-Channel-ID');
SyncGoogleCalendarChanges::dispatch($channelId);
return response('ok');
}); לוח זמנים וכיצד להתחיל
צור קשר לייעוץ והערכה של הפרויקט שלך. נציע את הפתרון האופטימלי לצרכים שלך. הזמן אינטגרציה סוהרת: חד-כיוונית ב-2–3 ימים, דו-כיוונית ב-4–6 ימים. העלות מחושבת באופן אישי. קבל ייעוץ — כתוב לנו.
תמיכה ואמינות אינטגרציה
לאחר ההשקה, אנו מספקים תמיכה למשך 30 יום ללא עלות. אנו מנטרים את זמינות ה-webhook, מרעננים אסימוני OAuth2 עם פקיעתם ומגיבים במהירות לשינויים ב-Google Calendar API. אם Google מעדכן את פורמט ההתראות או מציג מגבלות קצב חדשות — אנו מתאימים את הפתרון ללא עלות נוספת. ניסיון מצטבר בפרויקטים אמיתיים מאפשר לנו לצפות תקלות אופייניות בשלב הפיתוח ולמזער סיכונים לעסק שלך. צור קשר — נעזור לבנות אוטומציית הזמנות אמינה ונוחה.







