Реалізація синхронізації бронювань з 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 флоу для 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 робочих днів.







