awork Pfeilomat Middleware API

Interactive Swagger UI · OpenAPI spec: https://awork-pfeilomat-middleware.hw-api-tools.net/openapi.json

Integration

FileMaker Kunden- und Projekt-Webhook

Dieser Endpoint nimmt Kunden- oder Projekt-Daten aus FileMaker entgegen, speichert sie lokal und versucht danach direkt die Synchronisation nach awork.

POST /webhooks/filemaker

Headers

Content-Type: application/json
Accept: application/json
Authorization: Bearer <WEBHOOK_TOKEN>

Empfehlung

FileMaker sollte operation: "upsert" senden. Dadurch kann derselbe Datensatz mehrfach übertragen werden, ohne doppelte Projekte zu erzeugen.

Request Body

{
  "entity_type": "project",
  "record_id": "WF_2_0_Job_137680",
  "operation": "upsert",
  "data": {
    "filemaker_project_id": "WF_2_0_Job_137680",
    "job_number": "HA/EQ/2026/002/000",
    "project_name": "new EQ Media Sponsoring",
    "filemaker_client_id": "WF_2_0_Ad_4010",
    "client_name": "Hassia",
    "filemaker_product_id": "PRD_0057",
    "product_name": "Elisabethen Quelle",
    "kapatool_active": 1,
    "client_is_active": 1,
    "created_by_email": "paulina.wiehrdt@huth-wenzel.de",
    "filemaker_status": "Aktuell"
  }
}

Kunden-Request

{
  "entity_type": "customer",
  "record_id": "12345",
  "operation": "upsert",
  "data": {
    "filemaker_client_id": "WF_LBS_BY",
    "client_name": "LBS Bayern",
    "is_active": true
  }
}

Inaktive Kunden werden in awork nicht geloescht, sondern mit Pfeilomat inaktiv markiert. Bei Reaktivierung wird der Tag entfernt.

Pflichtregeln

  • entity_type muss customer oder project sein.
  • record_id muss identisch mit data.filemaker_project_id sein.
  • operation ist create, update, upsert oder delete.
  • kapatool_active und client_is_active akzeptieren 1, 0, true, false, "true", "false".

awork Status-Mapping

FileMaker awork
Aktuell Noch nicht gestartet
Fertig Abgeschlossen

Die Middleware setzt den echten awork-Projektstatus per /projects/{projectId}/changestatus.

awork Sync

processed
Lokal gespeichert und direkt nach awork synchronisiert.
queued
Lokal gespeichert, awork Sync wird per Queue erneut versucht.
disabled
Lokal gespeichert, awork Sync ist serverseitig deaktiviert.

Erfolgreich: erstellt

201 Created

{
  "message": "FileMaker project webhook created local records.",
  "webhook_event_id": 1378,
  "status": "processed",
  "operation": "upsert",
  "entity_type": "project",
  "record_id": "WF_2_0_Job_137680",
  "project_id": 5896,
  "created": true,
  "awork_sync": {
    "status": "processed"
  }
}

Erfolgreich: aktualisiert

200 OK

{
  "message": "FileMaker project webhook updated local records.",
  "webhook_event_id": 1378,
  "status": "processed",
  "operation": "upsert",
  "entity_type": "project",
  "record_id": "WF_2_0_Job_137680",
  "project_id": 5896,
  "created": false,
  "awork_sync": {
    "status": "processed"
  }
}

Fehlerfälle

Status Bedeutung
400 Ungültiges JSON, Antwort: Malformed JSON.
401 Fehlender oder falscher Bearer Token.
422 Validierungsfehler, z. B. fehlende Pflichtfelder oder abweichende IDs.
404 Nur bei operation: "update" oder operation: "delete", wenn das Projekt lokal nicht existiert.
409 Nur bei operation: "create", wenn das Projekt lokal bereits existiert.
503 Lokale Datenbank-Persistierung war nicht möglich.

Projekt ohne Produkt

filemaker_product_id und product_name duerfen leer sein. Das Projekt wird dann direkt dem Kunden zugeordnet und ohne lokalen Sub-Client gespeichert.

{
  "entity_type": "project",
  "record_id": "WF_2_0_Job_7802",
  "operation": "upsert",
  "data": {
    "filemaker_project_id": "WF_2_0_Job_7802",
    "job_number": "MK/TP/2019/025",
    "project_name": "Test RE",
    "filemaker_client_id": "WF_2_0_Ad_2108",
    "client_name": "Musterkunde",
    "filemaker_product_id": null,
    "product_name": null,
    "kapatool_active": 1,
    "client_is_active": 1,
    "created_by_email": "alexander.pfeil@huth-wenzel.de",
    "filemaker_status": "Aktuell"
  }
}

Projekt geloescht in FileMaker

Bei operation: "delete" wird das Projekt nicht physisch geloescht. Die Middleware setzt es lokal auf Fertig, deaktiviert Kapatool, schliesst das awork Projekt mit Status Abgeschlossen und setzt zusaetzlich den Tag Pfeilomat geloescht.

{
  "entity_type": "project",
  "record_id": "WF_2_0_Job_7802",
  "operation": "delete",
  "data": {
    "filemaker_project_id": "WF_2_0_Job_7802",
    "job_number": "MK/TP/2019/025",
    "project_name": "Test RE",
    "filemaker_client_id": "WF_2_0_Ad_2108",
    "client_name": "Musterkunde",
    "kapatool_active": 0,
    "client_is_active": 1,
    "filemaker_status": "Fertig"
  }
}

awork Zeiten nach FileMaker

Gebuchte Zeiten aus awork werden nur dann in FileMaker API_Zeitzettel geschrieben, wenn alle Sicherheitskriterien erfüllt sind.

Aktuelle Pilot-Freigabe

FILEMAKER_AWORK_BOOKED_HOURS_ENABLED=true
FILEMAKER_AWORK_BOOKED_HOURS_PILOT_ENABLED=true
FILEMAKER_AWORK_BOOKED_HOURS_PILOT_USER_EMAILS=vahidin.talic@huth-wenzel.de

Pflichtkriterien

  • Der awork User muss lokal gemappt sein und die E-Mail vahidin.talic@huth-wenzel.de haben.
  • Der awork User muss eine personio_id im Middleware-System haben.
  • Das awork Projekt muss lokal mit awork_project_id gemappt sein.
  • Das awork Projekt muss den Tag Pfeilomat synced haben.
  • Das awork Projekt muss das Custom Field Jobnummer haben.
  • Die Jobnummer muss in FileMaker exakt als Projekt gefunden werden.

Gesendete Felder nach API_Zeitzettel

FileMaker Feld Quelle
Z_Datumawork Datum, formatiert als TT.MM.JJJJ
Z_Datum_JahrJahr aus awork Datum
Z_Datum_KWISO-Kalenderwoche aus awork Datum
Z_Mitarbeiter_IDMiddleware personio_id
Z_Mitarbeiter_VornameMiddleware User Vorname
Z_Mitarbeiter_NachnameMiddleware User Nachname
Z_Mitarbeiter_EmailMiddleware User E-Mail
Z_BEZ_Projektnummerawork Custom Field Jobnummer
Z_ProjektnameFileMaker Projektname aus Projekt-Lookup
Z_BEZ_KundeFileMaker Kunde aus Projekt-Lookup
Z_ProduktnameFileMaker Produkt aus Projekt-Lookup
Z_Stundenawork Dauer in Stunden, z. B. 0.25 fuer 15 Minuten

Wenn User, Tag oder Jobnummer nicht passen, wird kein FileMaker-Zeitzettel geschrieben. Das Ergebnis steht im Webhook-Event unter filemaker_booked_hours_sync.status.