Asana API 同步错误

Asana API Sync Error

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

我在 Asana 中为我的所有项目创建了 webhook,所有项目事件都发送到我的 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 事件更新我在事件到达时做出反应,我没有考虑使用同步密钥,文档建议只有在轮询时才需要事件。使用 Webhooks 时是否也需要使用一个?

我错过了什么?

提前感谢您的任何建议。

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

基本上这里发生的事情是,出于某种原因,我们的事件队列检测到它们的内部状态存在问题。这意味着事件没有被记录,或者 webhooks 在很长一段时间后没有被传递。我们的事件和 webhook 试图以最大努力的方式跟踪变化,我们的生产机器可能会发生一些事情,这些事情可能会导致这类问题,比如机器在不合时宜的时候死机。

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

  • 一个 diff 函数,在给定特定任务和外部资源的情况下,检测每个资源之间哪些状态已过时或不同,并选择 merge/patch 解决方案(即 "Make Zendesk look like Asana")
  • 接收 webhook 以 "live" 方式为该任务运行 diff/patch 进程。
  • 定期(例如,在脚本启动时,或者当缺少 webhooks/events 并且您收到这样的错误消息时)通过扫描整个项目更新所有可能丢失的资源并执行 diff/patch 对于每个任务。这更贵,但应该更罕见。