Реализация синхронизации бронирований с Outlook Calendar
Outlook Calendar — стандарт в корпоративной среде. Синхронизация бронирований с Outlook актуальна для B2B-сервисов, консалтинга, медицинских клиник, где специалисты работают в Microsoft 365.
Microsoft Graph API
Outlook Calendar управляется через Microsoft Graph API. Авторизация через Microsoft Identity Platform (Azure AD):
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model\Event as GraphEvent;
class OutlookCalendarService
{
private Graph $graph;
public function __construct(string $accessToken)
{
$this->graph = new Graph();
$this->graph->setAccessToken($accessToken);
}
public function createEvent(Booking $booking): string
{
$event = new GraphEvent();
$event->setSubject("{$booking->service->name} — {$booking->customer_name}");
$event->setBody([
'contentType' => 'HTML',
'content' => $this->buildHtmlBody($booking),
]);
$event->setStart([
'dateTime' => $booking->starts_at->toIso8601String(),
'timeZone' => 'Russian Standard Time',
]);
$event->setEnd([
'dateTime' => $booking->ends_at->toIso8601String(),
'timeZone' => 'Russian Standard Time',
]);
$created = $this->graph
->createRequest('POST', '/me/events')
->attachBody($event)
->setReturnType(GraphEvent::class)
->execute();
return $created->getId();
}
}
OAuth2 flow для Microsoft 365
Регистрация приложения в Azure Portal, scope Calendars.ReadWrite:
Route::get('/integrations/outlook/connect', function () {
$url = 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' .
http_build_query([
'client_id' => config('services.microsoft.client_id'),
'scope' => 'Calendars.ReadWrite offline_access',
'redirect_uri' => route('integrations.outlook.callback'),
'response_type' => 'code',
]);
return redirect($url);
});
Отличие от Google Calendar
- Используется Microsoft Graph, а не Calendar API
- Временные зоны передаются по имени Windows (Russian Standard Time, не Europe/Moscow)
- Для корпоративных аккаунтов авторизация через Tenant ID, не
common - Microsoft Graph Webhooks для получения изменений работают через подписки с обязательным валидационным challenge
Сроки
Синхронизация с Outlook Calendar через Microsoft Graph: 3–5 рабочих дней.







