2017-05-23 6 views
0

Ich habe derzeit eine Anwendung ausgeführt, die Daten zwischen Asana und Zendesk übergibt.Asana API Sync Fehler

Ich habe Webhooks für alle mein Projekt in Asana erstellt und alle Projektereignisse werden an meinen Webhook-Endpunkt gesendet, der die Anfrage überprüft und versucht, das Ereignis zu identifizieren und Zendesk mit relevanten Daten abhängig vom Ereignistyp zu aktualisieren (Einige Ereignisse aren nicht benötigt).

Allerdings habe ich die folgende Anfrage aus den Webhooks worden Empfang erst vor kurzem:

"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" 
    } 
    ] 

Jetzt, da ich nicht die API für Event-Updates abfragen ich reagieren, wenn die Ereignisse mit mir kommen, ich habe nicht Wenn Sie einen Sync-Schlüssel verwenden, schlägt die Dokumentation vor, dass dies nur beim Abrufen von Ereignissen erforderlich ist. Muss ich einen verwenden, wenn ich auch Webhooks verwende?

Was fehlt mir?

Vielen Dank im Voraus für Anregungen.

Antwort

0

Sie haben Recht, Sie müssen keinen Synchronisierungsschlüssel für Webhooks erfassen - wir versuchen proaktiv, mit ihnen Kontakt aufzunehmen, wenn sich etwas in Asana ändert, und wir verfolgen die Ereignisse, die noch nicht über Webhooks verteilt wurden (Im Wesentlichen ähnlich wie wir den Sync-Key-Server aktualisieren, sobald Webhooks erfolgreich zugestellt wurden).

Grundsätzlich passiert hier, dass unsere Ereigniswarteschlangen aus irgendeinem Grund erkennen, dass ein Problem mit ihrem internen Zustand vorliegt. Dies bedeutet, dass Ereignisse nicht aufgezeichnet wurden oder Webhooks nach einer langen Zeit nicht geliefert wurden. Unsere Events und Webhooks versuchen, Änderungen im Sinne eines Best-Effort-Ansatzes zu verfolgen, und es gibt einige Dinge, die mit unseren Produktionsmaschinen passieren können, die diese Art von Problemen verursachen können, wie zum Beispiel eine Maschine, die zu einer unpassenden Zeit stirbt.

Leider ist die einzige Möglichkeit, in einen guten Zustand zurückzukehren, ein vollständiger Scan der Projekte, die Sie verfolgen, was mit you may need to manually re-fetch them. gemeint ist Grundsätzlich eine robuste Implementierung der Synchronisierung von Asana mit externen Ressourcen wie folgt aussieht:

  • eine diff-Funktion, die eine bestimmte Aufgabe und externe Ressource gegeben, was Zustand erkennt veraltet einen Merge/Patch-Auflösung (dh „Make Zendesk aussehen wie Asana“ oder verschieden ist zwischen jeder Ressource und wählt)
  • Das Empfangen eines Webhooks führt diesen Diff/Patch-Prozess für diese eine Aufgabe "live" aus.
  • In regelmäßigen Abständen (beim Starten des Skripts, oder wenn Webhooks/Ereignisse verpasst werden und eine Fehlermeldung wie diese angezeigt wird) aktualisieren Sie alle Ressourcen, die möglicherweise übersehen wurden, indem Sie das gesamte Projekt scannen und den Diff/Patch für jede Aufgabe ausführen. Das ist teurer, sollte aber deutlich seltener sein.