Ошибка синхронизации API Asana

В настоящее время у меня запущено приложение, которое передает данные между Asana и Zendesk.

У меня есть веб-перехватчики, созданные для всех моих проектов в Asana, и все события проекта отправляются в конечную точку моего веб-перехватчика, которая проверяет запрос и пытается идентифицировать событие и обновить 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?

Что мне не хватает?

Спасибо заранее за любые предложения.


person Olly Warren    schedule 23.05.2017    source источник


Ответы (1)


Вы правы, вам не нужно отслеживать ключ синхронизации для веб-перехватчиков — мы активно пытаемся связаться с ними, когда что-то меняется в Asana, и мы отслеживаем события, которые еще не были доставлены через веб-перехватчики (по сути, сродни чтобы мы обновляли ключ синхронизации на стороне сервера всякий раз, когда веб-перехватчики были успешно доставлены).

По сути, здесь происходит то, что по какой-то причине наши очереди событий обнаруживают проблему с их внутренним состоянием. Это означает, что события не записывались или веб-перехватчики не доставлялись спустя долгое время. Наши события и веб-перехватчики пытаются отслеживать изменения в максимально возможном смысле, и есть некоторые вещи, которые могут произойти с нашими производственными машинами, которые могут вызвать такого рода проблемы, например, машина отключается в неподходящее время.

К сожалению, единственный способ вернуться в нормальное состояние — это выполнить полное сканирование проектов, которые вы отслеживаете, что и подразумевается под you may need to manually re-fetch them. По сути, надежная реализация синхронизации Asana с внешними ресурсами выглядит так:

  • Функция сравнения, которая с учетом конкретной задачи и внешнего ресурса определяет, какое состояние устарело или отличается для каждого ресурса, и выбирает разрешение слияния/исправления (например, «Сделайте Zendesk похожим на Asana»).
  • Получение веб-перехватчика запускает этот процесс сравнения/исправления для этой задачи в «живом» режиме.
  • Периодически (скажем, при запуске сценария или когда веб-перехватчики/события пропущены и вы получаете подобное сообщение об ошибке) обновляйте все ресурсы, которые могли быть пропущены, сканируя весь проект, и выполняйте diff/patch для каждой задачи. Это дороже, но должно быть значительно реже.
person Matt    schedule 24.05.2017