Ошибка синхронизации API Asana
В настоящее время у меня запущено приложение, которое передает данные между Asana и Zendesk.
У меня есть веб-хуки, созданные для всего моего проекта в Асане, и все события проекта отправляются в конечную точку моего веб-хука, которая проверяет запрос и пытается идентифицировать событие и обновляет 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 также?
Что мне не хватает?
Спасибо заранее за любые предложения.
1 ответ
Вы правы, вам не нужно отслеживать ключ синхронизации для веб-крючков - мы активно пытаемся связаться с ними, когда что-то изменится в Asana, и мы отслеживаем события, которые еще не были доставлены через веб-крючков (по сути, аналогично нам обновлять ключ синхронизации на стороне сервера всякий раз, когда веб-хуки были успешно доставлены).
По сути, здесь происходит то, что по какой-то причине наши очереди событий обнаруживают проблему с их внутренним состоянием. Это означает, что события не были записаны, или веб-крючки не были доставлены после долгого времени. Наши события и веб-зацепки пытаются отслеживать изменения с максимальной отдачей, и есть некоторые вещи, которые могут произойти с нашими производственными машинами, которые могут вызвать такие проблемы, как машина, умирающая в неподходящее время.
К сожалению, единственный способ вернуться в хорошее состояние - это выполнить полное сканирование отслеживаемых проектов, что и подразумевается под you may need to manually re-fetch them.
По сути, надежная реализация синхронизации Asana с внешними ресурсами выглядит следующим образом:
- Функция сравнения, которая, учитывая конкретную задачу и внешний ресурс, определяет, какое состояние устарело или отличается между каждым ресурсом, и выбирает разрешение слияния / исправления (т. Е. "Сделать Zendesk похожим на Asana")
- Получение webhook запускает этот процесс diff/patch для этой одной задачи "вживую".
- Периодически (например, при запуске скрипта или когда пропущены веб-хуки / события, и вы получаете сообщение об ошибке, подобное этому) обновляйте все ресурсы, которые могли быть упущены, сканируя весь проект, и выполняйте diff/patch для каждой задачи. Это дороже, но должно быть значительно реже.