Реалізація синхронізації бронювань з Google Calendar

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація синхронізації бронювань з Google Calendar
Середня
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація синхронізації бронювань з Google Calendar

Синхронізація бронювань з Google Calendar дозволяє майстрам та адміністраторам бачити розклад у звичному інструменті, отримувати сповіщення від Google та керувати часом через інтерфейс Calendar. Нові бронювання з сайту автоматично з'являються в календарі.

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 та дає додатку права https://www.googleapis.com/auth/calendar.events:

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');
});

Терміни

Одностороння синхронізація (сайт → Google Calendar): 2–3 дні. Двостороння з webhook: 4–6 днів.