Все записи

Как устроен виджет свободных слотов

Виджет свободных слотов это страница, на которой другой человек выбирает время для встречи с вами. Идея не новая, но в нашем случае у неё есть особенность: занятое время берётся сразу из всех подключённых календарей.

Откуда берётся свободное время

Сначала мы берём рабочие часы, которые вы указали. Из них вычитаем всё, что занято в любом из выбранных календарей. Затем убираем запас до и после встреч, если он задан, и нарезаем то, что осталось, на отрезки нужной длительности.

Звучит как простая операция над интервалами, и в целом так и есть. Но есть детали.

  • События со статусом «свободен» не считаются занятыми. Отпуск коллеги в общем календаре не мешает вам провести встречу.
  • Приглашения, на которые вы ещё не ответили, по умолчанию занимают время. Это можно изменить.
  • События на весь день обычно не занимают время, если вы не отметили обратное. Иначе день рождения друга закрывал бы всю запись на этот день.
  • Всё считается в вашем часовом поясе, а показывается в поясе того, кто записывается.

Когда двое записываются одновременно

Страница показывает слоты, посчитанные на момент открытия, но за это время всё могло измениться. Поэтому при нажатии на слот мы проверяем его заново, причём по свежим данным из календарей, а не по своей копии. Если слот занят, человек сразу увидит соседние варианты.

Чтобы двое не успели забрать один и тот же слот, он на короткое время закрепляется за тем, кто начал запись. Если запись не завершилась, слот снова становится свободным.

Самый неудобный случай связан с медленными сервисами. Иногда календарь сообщает об изменениях с задержкой, и в этот промежуток кто-то может записаться на время, которое вы только что заняли. Здесь мы честно выбираем сторону человека, а не красоты: сразу присылаем вам сообщение о пересечении, а не пытаемся отменить запись сами.

Почему выбора немного

Первая версия показывала все возможные слоты на месяц вперёд. Выглядело внушительно, но пользоваться было неудобно: на экране оказывалось несколько десятков кнопок, и люди закрывали страницу, не выбрав ничего.

Теперь виджет показывает ближайшие две недели и не больше нескольких вариантов в день, равномерно распределённых по свободному времени. Остальное доступно по кнопке. Запись стала заканчиваться заметно чаще, и это, пожалуй, главный урок этой работы: человеку легче выбрать из шести вариантов, чем из шестидесяти.

Что дальше

Виджет постепенно включается для всех участников беты. Следующий шаг это общая запись, когда свободное время считается сразу для нескольких человек. Математика там та же, а вот вопрос о том, чьи рабочие часы важнее, придётся решать настройками.