使用 Domino 数据服务 REST 创建房间预订 API

Create room reservations using Domino data services REST API

我一直在尝试使用 Domino 数据服务 REST 创建房间预订API,但我似乎错过了一个技巧。

向文档端点发送 POST 请求我能够提交并创建一个显示在房间和资源视图中的预订文档,但底层房间在注释客户端中仍显示为可用。

这是请求正文的示例:

   {
  "@authors": [
    "CN=Andrew Jones/O=MyCorp",
    ""
  ],
  "@form": "Reservation",
  "From": "CN=Andrew Jones/O=MyCorp",
  "Chair": "CN=Andrew Jones/O=MyCorp",
  "AltChair": "CN=Andrew Jones/O=MyCorp",
  "Principal": "CN=Andrew Jones/O=MyCorp",
  "SequenceNum": 1,
  "OrgState": "5",
  "ResourceType": "1",
  "ResourceName": "Room/Office",
  "ROOM": "Room/Office@MyCorp",
  "Capacity": 1,
  "AppointmentType": "3",
  "StartTimeZone": "Z=0$DO=1$DL=3 -1 1 10 -1 1$ZX=47$ZN=GMT",
  "EndTimeZone": "Z=0$DO=1$DL=3 -1 1 10 -1 1$ZX=47$ZN=GMT",
  "TOPIC": "Test",
  "SendTo": "CN=Room/O=Office",
  "SelectedRR": "CN=Room/O=Office",
  "$BusyName":"CN=Room/O=Office",
  "Encrypt": "0",
  "Categories": "",
  "RouteServers": "CN=dominonode/O=MyCorp",
  "DeliveredDate": { "data":"2017-03-09T12:38:34Z","type":"datetime"},
  "StartDate": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "StartTime": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "StartDateTime": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "EndDate": {"data":"2017-03-09T21:00:00Z","type":"datetime"},
  "EndTime": {"data":"2017-09-03T21:00:00Z","type":"datetime"},
  "EndDateTime": {"data":"2017-03-09T21:00:00Z","type":"datetime"},
  "CalendarDateTime": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "UpdateSeq": 1,
  "Author": "CN=Andrew Jones/O=MyCorp",
  "ResourceOwner": "",
  "ReservedFor": "CN=Andrew Jones/O=MyCorp",
  "ReservedBy": "CN=Andrew Jones/O=MyCorp",
  "RQStatus": "A",
  "Purpose": "API Test",
  "NoticeType": "A",
  "Step": 3,
  "Site": "Office",
  "ReserveDate": {"data":"2017-03-09T20:00:00Z","type":"datetime"}
}

This question suggests I should instead be trying to create a Calendar event but everything I send seems to get rejected with bad request, including the sample

我还查看了 another question,这表明我需要创建一个约会,然后是一个房间的通知文件,但是虽然我可以创建这些文件,但它似乎并没有创建一个预订.

有没有人试过这个并让它工作,或者我只是加入了大象的墓地?

我建议注册一个特殊的"user"作为预订代理。然后您可以使用日历 API 预订任何房间。我认为这种方法比数据 API.

更有效

详情:

  • 注册一个新的"user"作为预订代理。让我们调用用户"Room Agent/MyCorp"。用户的邮件文件为"mail/ragent.nsf".

  • 确保日历 API 在具有 "mail/ragent.nsf" 副本的邮件服务器上启用。

  • 当有人使用您的平板电脑应用程序预订房间时,该应用程序会发送请求在客房代理的日历上创建活动(POST /mail/ragent.nsf/api/calendar/events).新活动应将房间包含在与会者列表中。

  • 日历API向房间(实际上是资源数据库)发送邀请。只要房间还没有被预订,资源数据库就会接受邀请并且房间在那个时间段内变得繁忙。

这使您不必处理数据 API 和资源数据库的复杂性。您的平板电脑应用程序只需要知道邮件服务器主机名、邮件文件名和房间代理的凭据。我也喜欢能够 "audit" 来自您的平板电脑应用程序的所有预订的想法。您将能够在房间代理的邮件文件中找到所有事件和通知(接受或拒绝)。

一个缺点是预订不会是即时的,但资源数据库应该能够在几秒钟内接受邀请。

顺便说一句,这里有一些示例 JSON 输入用于您的 POST 请求:

{
  "events":[
    {
      "summary":"Calendar API test",
      "location":"test",
      "description":"test",
      "start":{"date":"2018-01-01","time":"13:00:00","utc":true},
      "end":{"date":"2018-01-01","time":"14:00:00","utc":true},
      "organizer":{"email":"ragent@mycorp.com"},
      "attendees":[
        {
          "role":"req-participant",
          "userType":"room",
          "status":"needs-action",
          "rsvp":true,
          "email":"room@mycorp.com"
        }
      ]
    }
  ]
}

为与会者指定 "userType":"room" 很重要。否则,资源库将不会接受邀请。