是否有 API 可用于从 MS Graph Bookings API 检索 Microsoft Bookings 中预订的可用时间段?

Is there an API available for retrieving available time slots for booking in Microsoft Bookings from the MS Graph Bookings API?

要求是在客户选择特定服务时在 Microsoft Booking 中列出可用的时间段。这将与当天为所选服务进行的所有预订、从事这些服务的工作人员的工作时间以及所选服务的时间范围相关。

例如服务A用时1小时,工作时间为08:00至17:00,时间段为08:00-09:00,09:00-10:00 等等。现在,假设有两个员工,并且他们都预订了空位 11:00 - 12:00,那么当我们显示可用空位时应该将其排除在外。此外,如果 11:00-12:00 仅预订了一名员工,则将其包括在可用时段中,因为一名员工可以免费提供服务。

按照 Use the Microsoft Bookings API in Microsoft Graph 中的 API 来实现此要求。有人可以帮助提供可用 API 的方法吗?

您可以使用下面的调用来获取 appointments on that particular date,它会为您提供许多属性,例如服务名称、staffmemberIds、客户名称、约会的开始和结束。在这次通话中,我首先获得了特定日期范围(2020 年 11 月 2 日)的预订预约,然后根据 serviceName 进行过滤,从而得到该特定日期的 serviceName 预约。您可以使用 $select 查询参数来获取特定属性。

来电是-

https://graph.microsoft.com/beta/bookingBusinesses/{bookingBusinessid}/calendarView?start=2020-11-02T00:00:00Z&end=2020-11-03T00:00:00Z&$select=customerName,serviceName,staffMemberIds,start,end&$filter=serviceName eq 'servicename'

您可以使用此电话获取 staff members 工作时间。

https://graph.microsoft.com/beta/bookingBusinesses/{BookingBusinessid}/staffMembers

你需要在你这边编码比较这2个数据并根据你的要求显示。

用实施的解决方法回答我的问题。感谢@Shiva-MSFTIdentity 的见解。

想法是在整个营业时间内显示特定步骤的可用时间段。源代码示例采用 C# 语言。可以使用的步骤是:

  1. 获取店铺营业时间。

    BookingBusiness businessObject = await graphServiceClient.BookingBusinesses[StoreName].Request().Select(x => new { x.BusinessHours }).GetAsync();

  2. 获取服务的详细信息,如持续时间、staffmemberIds 等

    BookingService serviceObject = await graphServiceClient.BookingBusinesses[StoreName].Services[serviceId].Request().GetAsync();

  3. 现在有了商店营业时间和服务持续时间,划分并创建多个持续时间长度的时间段。例如;如果商店营业时间为 08:00 - 17:00,则持续 60 分钟的服务时段为 08:00 - 09:00、09:00-10:00、11:00 - 12:00 等。如果考虑了postBuffer和preBuffers,请在此处包含它。

  4. 获取员工详细信息,并为所有提供所选服务的员工检查他们是否使用工作时间。如果不是,请存储他们的工作时间。

    IBookingBusinessStaffMembersCollectionPage staffMemberCollection = await graphServiceClient.BookingBusinesses[StoreName].StaffMembers.Request().GetAsync()

  5. 下一步是获取当天的约会。我们需要存储这些约会的详细信息 startTime、endTime、staffmemberIds。

    IBookingBusinessCalendarViewCollectionPage calendarView = await graphServiceClient.BookingBusinesses[StoreName].CalendarView.Request(queryOptions).Filter(filterString).GetAsync();

  6. 一旦我们收集了每个时间段所需的所有数据,

  • 检查约会是否在其中。如果是,请将 staffMemberIds 标记为已为空档预订。
  • 如果预订的工作人员人数等于提供服务的工作人员人数,则空档已预订。
  • 否则找到可以提供服务的待定员工列表,并根据他们的工作时间检查他们是否有空。
  • 如果至少有一名员工可用,请将空位标记为可用。否则,它被预订了。