订阅Webhook以获取变更通知
适用于:仅适用于OneDrive上的消费类笔记本** **
通过订阅Webhook服务随时了解用户在OneNote中所做的变更。
如果您拥有提供公开端点的web应用程序或web服务,那么,当用户在OneDrive上的OneNote笔记本发生变更时,您就可以收到近实时通知。
在您的某个用户拥有的笔记本中发生变更时发送通知。 此类变更包括笔记本层次结构中任何层面发生的变更,包括页面内容变更。
通知不包含关于变更或用户的任何详细信息。 通知会在发生变更时提醒您,以便您的事件处理程序可以查询具体详细信息。 Webhooks服务不支持针对特定类型的变更或资源的精细订阅。
通知作为包含JSON对象的POST请求发送,如以下示例所示。
{
"value":[
{
"subscriptionId":"client-id-of-your-registered-application",
"userId":"id-of-the-user-who-owns-the-changed-resource"
}
]
}
您的服务必须以下列HTTP状态代码中的一种代码立即回应通知:
- 200 OK
- 202 接受
- 204 无内容
如果我们没有收到响应,我们会通过指数回退重试几次,最终丢弃该信息。
有关通知的详细信息
通知的范围仅限于用户拥有的内容,无论由谁进行变更。 对于用户的共享内容所做的变更,系统不会发出通知。 因此,如果Bob(并非您的用户)对Alice(您的用户)拥有的笔记本进行变更,您将收到关于Alice用户ID的通知。 如果Alice对Bob的笔记本进行变更,您不会收到通知。
通知中的userId与OneNote API响应的X-AuthenticatedUserId标题中返回的ID相符。
针对短时间内进行的变更发送的多项通知可能被合并为一项通知。
通知通常在变更后的几分钟内发送。 这种延迟确保变更可被用于API,即使变更在客户端立即可用。
通知工作流
典型的高级通知工作流如下所示:
- 对其中一位用户拥有的笔记本进行变更。
- OneNote将一个或多个POST请求发送到您的注册回调URL。 每个POST请求表示一项或多项变更。
- 您的服务用200、202或204HTTP状态代码响应每个POST请求。
- 通知会在您的回调API中触发一个事件处理程序。
- 您可以查询OneNote服务了解详细变更内容。
根据最近变更内容的时间戳进行查询是确保您掌握所有变更内容的最佳方式。 存储结果中的最近lastModifiedTime时间戳,然后在下一次变更查询中使用该时间戳。
此请求使用lastModifiedTime属性返回自您存储时间戳以来发生变更的所有页面:
GET ../me/notes/pages?filter=lastModifiedTime%20ge%20{stored-iso-8601-timestamp}
您查询变更后可使用最新lastModifiedTime更新您已经存储的时间戳。
备注
Webhooks服务不可被用作同步机制。 如果无法发送或接收通知,您应定期查询变更内容。
订阅Webhook服务
如需订阅OneNote Webhook服务,您需要:
注册属于公共端点(HTTP或HTTPS) 的回调URL,您将通过该URL接收来自OneNote Webhooks服务的HTTP POST请求。 Webhooks服务不会遵循HTTP重定向。
为您的应用程序请求以下权限:
wl.offline_access
(Microsoft帐户权限)office.onenote
适用于OneNote API的office.onenote_create
、office.onenote_update_by_app
或office.onenote_update
,取决于您的应用程序具备哪些功能
当您准备订阅时,请通过邮箱@onenotedev与我们联系。 我们的团队成员将与您合作完成设置。
由于您的用户在您的应用程序中完成了注册,所以,您应代表他们调用OneNote API(例如:GET ../me/notes/notebooks)。 此项调用将会:
- 确保OneNote为用户注册回调通知。
- 允许您检索并存储用户的ID,该ID将被返回到X-AuthenticatedUserId响应标头。
过期模型
对于webhook通知,我们会为您的用户的ID完成注册。 特定用户进行的每次交互都会将该用户的注册期限延长六个月。
如果您在六个月内没有代表用户调用OneNote API,六个月后,注册状态将变为非活跃状态。 您不会收到关于非活跃用户的通知,包括卸载您的应用程序或撤销其权限的用户。
由于变更通知不包含关于用户或变更的详细信息,因此降低了用户隐私面临的潜在风险。 无论您何时代表非活跃用户调用OneNote API,非活跃用户都会得到重新注册。