Der Einstieg in die Zapier CLI Plattform (https://github.com/zapier/zapier-platform-cli) war schwierig. Zapier dokumentiert viel, doch fehlen meistens gute Beispiel, die komplexer sind und einem helfen Lösungen zu finden. Eine gute Beispiel Applikation ist der One-Drive Connector von Zapier (https://github.com/zapier/zapier-platform-example-app-onedrive).
Während der Programmierung einer Zapier CLI Applikation trifft man auf folgende Herausforderungen:
- Was sind die verschiedenen Typen von Konnektoren?
- Wie muss die Applikation strukturiert sein?
- Wie erkennen Triggers neue Datensätze?
- Wie kann ich eine Id durch den expliziten Wert ersetzen?
Typen von Konnektoren
Zapier Konnektoren können Suchen (Search), Schreiben (Create) und neue Datensätze erkennen (Trigger). Dies ist hier beschrieben: https://github.com/zapier/zapier-platform-cli#triggerssearchescreates
Strukturieren der Applikation
Grundsätzlich kann die Applikation mit ihrer verschiedenen Konnektoren (Create, Search, Trigger) auf zwei Arten strukturieren:
- Mit Ressourcen im Verzeichnis ressources
- Mit den Konnektoren in den Verzeichnissen creates, searches und triggers
Der Vorteil der Ressourcen Lösung ist, dass man alle Funktionen und Konfigurationen in einer Datei erstellen kann. Dies ist sicherlich gut für kleinere Applikations, doch bei grösseren Applikationen hat dies den Nachteil, dass nur jeweils 1 Trigger, Search und Create definiert werden kann.
Erkennen neuer Datensätze bei Triggers
Damit bei Trigger neue Datensätze erkannt werden, setzt Zapier standardmässig auf die Deduplication der Id. Dies ist hier beschrieben: https://zapier.com/developer/documentation/v2/deduplication/ Wichtig zu wissen ist, dass bei einem Update Trigger, nicht auf die Id des Datensatzes deduplizieren kann, sondern man die Id um z.B. die Update Zeit ergänzen muss. Dies hat den Nachteil, dass die original Id des Datensatzen umbenannt werden muss, z.B. in ContactId bei einem Kontakt.
Wie kann ich eine Id durch den expliziten Wert ersetzen
Wenn der API eine Id und keine Wert zurückgibt, kann dies je nach Anwendungsfalls ungenügend sein. Wenn man z.B. den Wert auf Slack versenden möchte, ist die Id das falsche Ergebnis. Um eine Id nach dem API Call aufzulösen, stellt Zapier dehydration zur Verfügung (https://github.com/zapier/zapier-platform-cli#dehydration).
In diesem Beispiel wird für eine Land-Id der Namen des Landes geholt (Id: 1 => Schweiz).
In einem Trigger oder Search:
const hydrators = require('../hydrators'); company.country = z.dehydrate(hydrators.getCountryName, {countryId: company.country_id});
In in der Datei hydrators.js:
const getCountryName = (z, bundle) => { … }