Entwicklung eines Zapier CLI Connectors

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) => { … }

Staging file mit Zapier CLI

Heute habe ich aus dem Bexio API ein Rechnungs-PDF gelesen und dieses über Zapier in Google Drive gespeichert. Beim Programmieren der Zapier CLI Application war viel Research und Hilfe des Support notwenig, um die zu ermöglichen.

Hier nun die Lösung für dieses Problem: Wenn ich ein File mit Base64 Codierung habe, muss ich dieses in ein Byte Array umwandeln und dann auf die Zapier Server speichern. Dies geschieht mit folgendem Code:

let fileContent = Buffer.from(fileContent,  'base64');
return z.stashFile(fileContent, fileContent.length, fileName, mimeType)
  .then(url => { return { file: url }});

Zum Schluss muss die URL retourniert werden. Mit dieser kann man dann im Google Drive oder Dropbox Connector weiterarbeiten.

Erste Webseite auf Arabisch mit Joomla

Da mit WordPress mehrsprachige Seiten nur mit viel Konfigurationsaufwand erstellbar sind, habe ich mit entschieden, die Webseite Joomla zu erstellen. Auf Youtube findet man ein paar Videos, die zeigen, wie dies funktioniert (Beispiel: https://www.youtube.com/watch?v=jnqVrAnVjDY ).

Wenn man nun eine Webseite in Arabisch erstellt, gibt es zu beachten, dass die Schreibweise nicht von links nach rechts, sonder von rechts nach links ist. Mit dem HTML Attribute dir=”rlt” wird der Browser dies mitgeteilt. Ebenfalls muss das ausgewählte Templates RTL unterstützen.

Anschliessend besteht immer noch das Problem, dass der Editor im CMS die arabischen Zeichen nicht korrekt darstellt. Alles in allem hat die Erstellung der Webseite gut funktioniert.

Die Webseite ist http://www.faduabakaly.com/ . Die Mehrsprachigkeit ist aber zurzeit deaktiviert.