Google calendar api Google CalDAV:重新创建会议

Google calendar api Google CalDAV:重新创建会议,google-calendar-api,caldav,Google Calendar Api,Caldav,一位用户报告了在Google calendar中镜像本地日历的问题:当通过CalDAV(=删除所有事件并使用PUT重新创建)刷新Google calendar时,一些PUT命令失败并显示“404未找到” 对于有组织者的事件(即会议),似乎会发生这种情况。它适用于没有组织者的简单事件。下面是失败的例子 我相信这是Google CalDAV的一个已知限制。问题是:在客户端或服务器中,可以做什么来支持这个用例 我想不出客户有什么解决办法。404错误太不具体,无法触发解决方法,即使客户机可以检测到它的根

一位用户报告了在Google calendar中镜像本地日历的问题:当通过CalDAV(=删除所有事件并使用PUT重新创建)刷新Google calendar时,一些PUT命令失败并显示“404未找到”

对于有组织者的事件(即会议),似乎会发生这种情况。它适用于没有组织者的简单事件。下面是失败的例子

我相信这是Google CalDAV的一个已知限制。问题是:在客户端或服务器中,可以做什么来支持这个用例

我想不出客户有什么解决办法。404错误太不具体,无法触发解决方法,即使客户机可以检测到它的根本原因,也没有其他方法可以重新创建事件,只有PUT失败


PUT/caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1
连接:TE
TE:拖车
主持人:apidata.googleusercontent.com
内容长度:928
内容类型:文本/日历;字符集=utf-8
用户代理:SyncEvolution
授权:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
发送请求行和标题:
发送请求主体:
正文块(928字节):
[开始:VCALENDAR
版本:2.0
PRODID:-//合成AG//非GML SyncML引擎V3.4.0.47///EN
开始:VTIMEZONE
TZID:美国/洛杉矶
开始:标准
DTSTART:20071104T020000
RRULE:FREQ=每月;间隔=12;BYDAY=1SU
TZOFFSETFROM:-0700
佐菲托:-0800
姓名:HNP
完:标准
开始:白天
DTSTART:20070311T020000
RRULE:FREQ=每月;间隔=12;BYDAY=2SU
TZOFFSETFROM:-0800
佐菲托:-0700
名称:HAP
完:白天
完:VTIMEZONE
开始:VEVENT
状态:已确认
最后修改:20120813T184814Z
DTSTAMP:20120813T184814Z
UID:4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz
序列:0
类别:公共
运输:不透明
摘要:测试事件
DTSTART;TZID=美国/洛杉矶:20120815T103000
DTEND;TZID=美国/洛杉矶:20120815T113000
与会者;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:
邮递员:约翰。doe@example.com
组织者;CN=Joan Doe:mailto:Joan。doe@example.com
完:维文特
完:VCALENDAR
]
发出请求;重试次数为1。
[状态行]
(我不知道SyncEvolution,但我最近使用谷歌日历的一些经验可能会有所启发。我不确定是否有令人满意的答案。)

这可能是一个问题(即使没有删除):

假设用户U放置了一个有与会者但U不是组织者的事件。发生的情况是U“窃取”事件(成为组织者)并在其他人的日历上插入(可能)事件的只读副本。注意:对于有与会者的活动,Google calendar将所有者/创建者/插入者作为组织者。UID然后由第一个提到它的与会者“持有”。由于谷歌日历上不能有重复的UID,因此其他与会者在后续的PUT中会出现错误

当从一个日历(但不是所有日历)中删除事件并且UID仍然被某人“持有”时,情况会变得更糟。或者,删除实际上并没有删除UID(这可能发生在google日历上)

缓解战略:

对于有组织者的活动,仅将其放入组织者的日历中


如果您无法完成上述操作(导致事件成为未连接的重复事件),请以某种方式通知UUID。

嗨,Patrick,您可以使用的解决方法是将用户添加为与会者。
PUT /caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1
Connection: TE
TE: trailers
Host: apidata.googleusercontent.com
Content-Length: 928
Content-Type: text/calendar; charset=utf-8
User-Agent: SyncEvolution
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sending request-line and headers:
Sending request body:
Body block (928 bytes):
[BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.47//EN
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=1SU
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:HNP
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=2SU
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:HAP
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
STATUS:CONFIRMED
LAST-MODIFIED:20120813T184814Z
DTSTAMP:20120813T184814Z
UID:4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz
SEQUENCE:0
CLASS:PUBLIC
TRANSP:OPAQUE
SUMMARY:test event
DTSTART;TZID=America/Los_Angeles:20120815T103000
DTEND;TZID=America/Los_Angeles:20120815T113000
ATTENDEE;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:
 mailto:john.doe@example.com
ORGANIZER;CN=Joan Doe:mailto:joan.doe@example.com
END:VEVENT
END:VCALENDAR
]
Request sent; retry is 1.
[status-line] < HTTP/1.1 201 Created

...

DELETE /caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1
Connection: TE
TE: trailers
Host: apidata.googleusercontent.com
Content-Length: 0
User-Agent: SyncEvolution
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sending request-line and headers:
Request sent; retry is 1.
[status-line] < HTTP/1.1 204 No Content

...

PUT /caldav/v2/patrick.ohly.estamos%40googlemail.com/events/4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz.ics HTTP/1.1
Connection: TE
TE: trailers
Host: apidata.googleusercontent.com
Content-Length: 928
Content-Type: text/calendar; charset=utf-8
User-Agent: SyncEvolution
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sending request-line and headers:
Sending request body:
Body block (928 bytes):
[BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.47//EN
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=1SU
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:HNP
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=2SU
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:HAP
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
STATUS:CONFIRMED
LAST-MODIFIED:20120813T184814Z
DTSTAMP:20120813T184814Z
UID:4fbbdbd8-c9de-4ce0-810a-01e3a438a35d-pohly-xyz
SEQUENCE:0
CLASS:PUBLIC
TRANSP:OPAQUE
SUMMARY:test event
DTSTART;TZID=America/Los_Angeles:20120815T103000
DTEND;TZID=America/Los_Angeles:20120815T113000
ATTENDEE;CN=John Doe;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:
 mailto:john.doe@example.com
ORGANIZER;CN=Joan Doe:mailto:joan.doe@example.com
END:VEVENT
END:VCALENDAR
]
Request sent; retry is 1.
[status-line] < HTTP/1.1 404 Not Found