体式 API 同步错误



>我目前有一个应用程序正在运行,可以在Asana和Zendesk之间传递数据。

我已经为我在 Asana 中的所有项目创建了网络钩子,所有项目事件都发送到我的 webhook 端点,该端点验证请求并尝试识别事件并根据事件类型使用相关数据更新 Zendesk(某些事件不是必需的)。

但是,我最近收到了来自Webhooks的以下请求:

"events": [
{
"action": "sync_error",
"message": "There was an error with the event queue, which may have resulted in missed events. If you are keeping resources in sync, you may need to manually re-fetch them.",
"created_at": "2017-05-23T16:29:13.994Z"
}
]

现在,因为我不轮询 API 以获取事件更新,所以我会在事件到达时做出反应,我没有考虑使用 Sync 键,文档建议仅在轮询事件时才需要这样做。使用网络钩子时也需要使用一个吗?

我错过了什么?

提前感谢您的任何建议。

你是对的,你不需要跟踪 webhook 的同步密钥 - 当 Asana 发生变化时,我们会主动尝试与他们联系,并且我们会跟踪尚未跨 webhook 交付的事件(本质上,类似于我们在成功交付 webhook 时更新同步密钥服务器端)。

基本上,这里发生的事情是,由于某种原因,我们的事件队列检测到其内部状态存在问题。这意味着事件没有被记录,或者 webhook 在很长一段时间后没有被传递。我们的事件和 webhook 试图尽最大努力跟踪更改,我们的生产机器可能会发生一些事情,从而导致此类问题,例如机器在不合时宜的时间死亡。

不幸的是,恢复良好状态的唯一方法是对您正在跟踪的项目进行全面扫描,这就是you may need to manually re-fetch them.的意思 基本上,将Asana同步到外部资源的强大实现如下所示:

  • 一个差异函数,给定特定任务和外部资源,检测每个资源之间的状态已过时或不同,并选择合并/补丁解决方案(即"使 Zendesk 看起来像体式")
  • 接收 webhook 会以"实时"方式为该任务运行该差异/修补过程。
  • 定期(例如,在脚本启动时,或者当 webhook/事件丢失并且您收到这样的错误消息时)通过扫描整个项目来更新可能错过的所有资源,并为每个任务执行差异/修补。这更昂贵,但应该更罕见。

最新更新