API συνδέσεων ERP
Διαχειριστείτε τις συνδέσεις ERP (SoftOne Soft1, Entersoft Business Suite, SAP Business One και SAP S/4HANA Cloud) μέσω προγράμματος. Αυτά τα endpoints χρειάζονται διακριτικό εισόδου από το POST /auth/login. Τα κλειδιά API παίρνουν 403, όπως και οι είσοδοι οδηγών. Οι οδηγοί εργασιών είναι Σύνδεση SoftOne ή Entersoft, Σύνδεση SAP Business One, Σύνδεση SAP S/4HANA Cloud, Σημεία ERP και ζώνες και Σημειώσεις επισκέψεων στο ERP. Μέρος της τεκμηρίωσης.
Ρόλοι και σφάλματα
Βασική διεύθυνση: https://filodos.gr/filodos-dashboard/api/scoring. Κάθε αίτημα αφορά τον οργανισμό της εισόδου. Αναγνωριστικό σύνδεσης άλλου οργανισμού δίνει 404.
| Endpoint | Διαχειριστής | Υπεύθυνος |
|---|---|---|
POST /erp/connections, PATCH /erp/connections/{id}, DELETE /erp/connections/{id} | Ναι | Όχι (403) |
Όλα τα άλλα endpoints /erp/* | Ναι | Ναι |
| Κωδικός | Σημασία |
|---|---|
401 | Δεν υπάρχει διακριτικό εισόδου, ή έληξε. |
403 | Ο ρόλος δεν μπορεί να χρησιμοποιήσει το endpoint, ή το διαπιστευτήριο είναι κλειδί API. |
404 | Άγνωστο αναγνωριστικό σύνδεσης ή σημείου στον οργανισμό σας. |
422 | Λάθος τιμή. Το πεδίο detail λέει την αιτία, για παράδειγμα radius_m must be 25-5000 ή not workflow setting(s): app_id. |
502 | Απέτυχε το ERP ή ο διακομιστής χάρτη. Το πεδίο detail λέει την αιτία. |
GET/erp/vendors
Δίνει τους τέσσερις προμηθευτές (softone, entersoft, sap, s4) με τις προεπιλεγμένες ρυθμίσεις τους, τα κλειδιά σύνδεσης (μόνο διαχειριστής), τα κλειδιά ροής εργασίας, τα σύμβολα προτύπων και τους τύπους ζωνών. Το writeback_example είναι η προτεινόμενη δραστηριότητα SAP ή σημείωση S/4HANA· είναι null για SoftOne και Entersoft.
curl https://filodos.gr/filodos-dashboard/api/scoring/erp/vendors \
-H "Authorization: Bearer eyJhbGciOi…"
[{"vendor": "softone", "label": "SoftOne (Soft1)",
"defaults": {"app_id": "", "sites": {"object": "CUSTOMER", …}, "radius_m": 150, …},
"connection_settings": ["app_id", "company", "branch", "module", "refid"],
"workflow_settings": ["sites", "zone_type", "radius_m", "link_devices",
"min_visit_seconds", "note_template", "visit_writeback"],
"template_fields": ["vehicle", "site_key", …], "zone_types": ["depot", "customer", "no-go"]},
{"vendor": "entersoft", …},
{"vendor": "sap", "label": "SAP Business One", "connection_settings": ["company_db"],
"writeback_example": {"entity": "Activities", "key_field": "ActivityCode", …}, …},
{"vendor": "s4", "label": "SAP S/4HANA Cloud", "connection_settings": ["client_id", "token_url"],
"writeback_example": {"entity": "A_BusinessPartnerNote", "key_field": "NoteID", …}, …}]
GET/erp/connections
Δίνει τις συνδέσεις του οργανισμού, τις νεότερες πρώτα. Καμία γραμμή δεν περιέχει κωδικό. Το last_sync_status είναι ok, failed ή null (δεν έγινε ποτέ συγχρονισμός).
curl https://filodos.gr/filodos-dashboard/api/scoring/erp/connections \
-H "Authorization: Bearer eyJhbGciOi…"
[{"id": 4, "vendor": "softone", "name": "Head office ERP",
"base_url": "https://12345.oncloud.gr/s1services", "username": "filodos-integration",
"settings": {"app_id": "2001", "sites": {…}, "zone_type": "customer", …},
"active": true, "last_sync_at": "2026-10-05T09:00:00+03:00",
"last_sync_status": "ok", "last_error": null, …}]
POST/erp/connections
Μόνο διαχειριστής. Αποθηκεύει μία σύνδεση. Σώμα: vendor, name (1–100 χαρακτήρες), base_url (https), username, password, προαιρετικά subscription_password (Entersoft), και settings. Οι ρυθμίσεις συγχωνεύονται με τις προεπιλογές του προμηθευτή. Το SoftOne χρειάζεται app_id· το Entersoft χρειάζεται branch_id· το SAP χρειάζεται company_db, και το base_url του είναι η ρίζα του Service Layer (για παράδειγμα https://sap.example.gr:50000/b1s/v1)· το S/4HANA χρειάζεται client_id και token_url, το base_url του είναι η ρίζα API του μισθωτή, και το μυστικό πελάτη του είναι ο password. Η απάντηση δεν περιέχει κωδικό.
curl -X POST https://filodos.gr/filodos-dashboard/api/scoring/erp/connections \
-H "Authorization: Bearer eyJhbGciOi…" \
-H 'Content-Type: application/json' \
-d '{"vendor": "softone", "name": "Head office ERP",
"base_url": "https://12345.oncloud.gr/s1services",
"username": "filodos-integration", "password": "…",
"settings": {"app_id": "2001"}}'
{"id": 4, "vendor": "softone", "name": "Head office ERP", "active": true, …}
PATCH/erp/connections/{id}
Μόνο διαχειριστής. Αλλάζει τα στοιχεία σύνδεσης: name, base_url, username, password, subscription_password, active, και settings μόνο με κλειδιά σύνδεσης. Κλειδιά σύνδεσης: SoftOne app_id, company, branch, module, refid· Entersoft branch_id, lang_id, subscription_id· SAP company_db· S/4HANA client_id, token_url. Συγχωνεύονται με τις αποθηκευμένες ρυθμίσεις. Κλειδί ροής εργασίας δίνει 422. Νέος κωδικός κρατά τον αποθηκευμένο κωδικό συνδρομής.
curl -X PATCH https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4 \
-H "Authorization: Bearer eyJhbGciOi…" \
-H 'Content-Type: application/json' \
-d '{"settings": {"company": "2000"}, "active": false}'
PUT/erp/connections/{id}/workflow
Διαχειριστές και υπεύθυνοι. Αντικαθιστά τις ρυθμίσεις ροής εργασίας: sites, zone_type, radius_m (25–5000), link_devices, min_visit_seconds, note_template και visit_writeback. Ένα κλειδί που παραλείπετε επιστρέφει στην προεπιλογή. Κλειδί σύνδεσης δίνει 422. Το visit_writeback είναι null (ανενεργό), {"object", "data": {TABLE: {FIELD: template}}} για SoftOne, {"table_name", "table_id", "title"} για Entersoft, ή {"entity", "key_field", "dedupe_field", "fields": {PROPERTY: template}} για SAP και S/4HANA. Τα sites των SAP και S/4HANA είναι {"entity", "filter", "fields"}. Τα ονόματα οντοτήτων και ιδιοτήτων των SAP και S/4HANA πρέπει να είναι απλά ονόματα (γράμματα, ψηφία, _)· άλλα ονόματα δίνουν 422.
curl -X PUT https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4/workflow \
-H "Authorization: Bearer eyJhbGciOi…" \
-H 'Content-Type: application/json' \
-d '{"sites": {"object": "CUSTOMER", "filters": "CUSTOMER.ISACTIVE=1",
"fields": {"latitude": "CUSEXTRA.NUM01", "longitude": "CUSEXTRA.NUM02"}},
"zone_type": "customer", "radius_m": 150,
"visit_writeback": {"object": "SOACTION",
"data": {"SOACTION": {"TRDR": "{site_key}", "COMMENTS": "{text}"}}}}'
DELETE/erp/connections/{id}
Μόνο διαχειριστής. Διαγράφει τη σύνδεση με τη λίστα σημείων της και τις σημειώσεις στην ουρά. Οι ζώνες μένουν στον χάρτη.
curl -X DELETE https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4 \
-H "Authorization: Bearer eyJhbGciOi…"
{"id": 4, "deleted": true}
POST/erp/connections/{id}/test
Συνδέεται στο ERP και δίνει τη συνεδρία: εταιρεία και υποκατάστημα για SoftOne, χρήστη και τα υποκαταστήματά του για Entersoft, company_db, company_name, version και session_timeout_min για SAP, και τον τύπο διακριτικού με τη διάρκειά του σε δευτερόλεπτα για S/4HANA. Απορριφθείσα είσοδος ή απρόσιτο ERP δίνει 502 με την αιτία.
curl -X POST https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4/test \
-H "Authorization: Bearer eyJhbGciOi…"
{"id": 4, "vendor": "softone", "ok": true,
"session": {"company": "1000", "company_name": "Μεταφορές Αθηνών ΑΕ",
"branch": "1000", "branch_name": "Αθήνα"}}
POST/erp/connections/{id}/sync
Εκτελεί έναν συγχρονισμό σημείων τώρα και δίνει τα πλήθη. Αποτυχία δίνει 502, και η σύνδεση την καταγράφει στα last_sync_status και last_error. Σύνδεση Entersoft χωρίς Public Query δίνει 502 με set the Public Query.
curl -X POST https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4/sync \
-H "Authorization: Bearer eyJhbGciOi…"
{"id": 4, "created": 3, "updated": 0, "unchanged": 0, "quarantined": 1,
"orphaned": 0, "skipped_rows": 0, "duplicate_keys": 0,
"zones_written": 2, "device_links_added": 4}
POST/erp/connections/{id}/csv-sync
Συγχρονίζει τα σημεία μίας σύνδεσης CSV από το κείμενο του ανεβασμένου αρχείου ({"content": "…"}) και δίνει τα ίδια πλήθη με το …/sync. Μη σύνδεση CSV, κενό ή πολύ μεγάλο αρχείο, ή αρχείο που δεν διαβάζεται, δίνει 422. Αποτυχία του Traccar δίνει 502 και καταγράφεται στη σύνδεση.
curl -X POST https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/9/csv-sync \
-H "Authorization: Bearer [REDACTED]…" -H "Content-Type: application/json" \
-d '{"content": "key,name,latitude,longitude\n1,Central,37.9838,23.7275\n"}'
{"id": 9, "created": 1, "updated": 0, "unchanged": 0, "quarantined": 0,
"orphaned": 0, "skipped_rows": 0, "duplicate_keys": 0,
"zones_written": 1, "device_links_added": 2}
GET/erp/connections/{id}/sites?status=
Δίνει τα σημεία της σύνδεσης. Προαιρετικό status: synced (υπάρχει ζώνη στον χάρτη), quarantined (χωρίς έγκυρες συντεταγμένες) ή orphaned (δεν υπάρχει πια στο ERP).
curl https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4/sites?status=quarantined \
-H "Authorization: Bearer eyJhbGciOi…"
[{"id": 9, "external_id": "3", "code": "C003", "name": "Περίπτερο Ομόνοιας",
"address": "Οδός 1, 10000 Αθήνα", "latitude": null, "longitude": null,
"manual_location": false, "status": "quarantined", "geofence_id": null, …}]
PUT/erp/connections/{id}/sites/{site_id}/location
Ορίζει με το χέρι τη θέση ενός σημείου και γράφει τη ζώνη του. Σώμα: latitude και longitude. Εκτός ορίων ή 0, 0 δίνει 422. Αν αποτύχει ο διακομιστής χάρτη, η θέση μένει αποθηκευμένη, η απάντηση είναι 502, και ο επόμενος συγχρονισμός γράφει τη ζώνη.
curl -X PUT https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4/sites/9/location \
-H "Authorization: Bearer eyJhbGciOi…" \
-H 'Content-Type: application/json' \
-d '{"latitude": 37.9841, "longitude": 23.7281}'
{"id": 9, "status": "synced", "manual_location": true, "geofence_id": 902, …}
GET/erp/connections/{id}/writes?limit=
Δίνει τις νεότερες σημειώσεις επισκέψεων (προεπιλογή 50). Το status είναι pending, written ή failed· το payload περιέχει τις τιμές του προτύπου και το κείμενο text· το erp_record_id είναι το αναγνωριστικό της εγγραφής ή του εγγράφου στο ERP.
curl https://filodos.gr/filodos-dashboard/api/scoring/erp/connections/4/writes?limit=20 \
-H "Authorization: Bearer eyJhbGciOi…"
[{"id": 12, "status": "written", "attempts": 1, "erp_record_id": "1000",
"payload": {"vehicle": "ΙΚΥ-1234", "site_name": "Σούπερ Μάρκετ Καλλιθέας",
"date": "05/10/2026", "arrived": "09:42", "departed": "10:05",
"text": "Filodos: το όχημα ΙΚΥ-1234 ήταν στο …"}, …}]