Реализация синхронизации бронирований с 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 дней.