Μετάβαση στο κύριο περιεχόμενο

Monitoring API

Το Monitoring API αντικατοπτρίζει την επιφάνεια Ρυθμίσεις → Logs & Monitoring του dashboard. Χρησιμοποιήστε το για να δημιουργείτε ειδοποιήσεις από το CI, να ελέγχετε ενεργοποιήσεις από script ή να διοχετεύετε το ιστορικό σε ένα SIEM.

Όλα τα endpoints απαιτούν JWT (συνεδρία dashboard) και το δικαίωμα settings:read ή settings:write, ανάλογα με την ενέργεια. Δεν καλούνται με κανονικό κλειδί API χώρου εργασίας - η διαχείριση ειδοποιήσεων είναι λειτουργία επιπέδου dashboard.

Όλα τα endpoints αυτής της σελίδας είναι σχετικά ως προς το βασικό URL: https://api-eu1.joryio.com - δείτε Επισκόπηση API.

Αντικείμενο ειδοποίησης

Η κανονική μορφή ειδοποίησης που επιστρέφεται από κάθε endpoint CRUD:

{
"id": "ak_01HXYZ...",
"organizationId": "org_...",
"workspaceId": "ws_...",
"name": "Server rejecting payloads",
"description": "Joryio returned 5xx on ingestion.",
"enabled": true,
"direction": "inbound",
"metric": "calls",
"codes": ["5xx"],
"mode": "absolute",
"op": ">",
"threshold": "100",
"duration": "5m",
"changeDir": null,
"changeKind": null,
"vsWindow": null,
"vsComparison": "previous",
"scopeApiKeyPrefix": null,
"scopeEndpoint": null,
"scopeWebhookUrl": null,
"scopeEventName": null,
"notifyChannel": "email",
"recipients": ["ops@your-company.com"],
"webhookUrl": null,
"webhookSecret": null,
"cooldown": "10m",
"status": "healthy",
"lastTriggeredAt": null,
"snoozedUntil": null,
"createdBy": "usr_...",
"createdAt": "2026-05-29T05:00:00.000Z",
"updatedAt": "2026-05-29T05:00:00.000Z"
}

Αναφορά πεδίων

ΠεδίοΤύποςΣημειώσεις
namestring (1–255)Απαιτείται. Εμφανίζεται στο dashboard και στα email ενεργοποίησης.
descriptionstring (≤2000)Προαιρετικό. Εμφανίζεται στο σώμα του email.
enabledbooleanΠροεπιλογή true. Όταν είναι false, η κατάσταση γίνεται paused και ο αξιολογητής παραλείπει την ειδοποίηση.
directioninbound | webhook | events | deliverabilityΠοια ροή παρακολουθείται. Το events μετρά καταγεγραμμένα συμβάντα πελατών από τον πίνακα events. Το deliverability παρακολουθεί ποσοστά υγείας μηνυμάτων (% των απεσταλμένων).
metriccalls | total_calls | rps | event_count | total_events | unique_users | bounceRate | hardBounceRate | softBounceRate | complaintRate | unsubscribeRate | deliveryRateΤι μετριέται. Οι τρεις πρώτες αφορούν τα inbound/webhook· οι επόμενες τρεις τα events· οι έξι μετρικές *Rate το deliverability.
codesstring[]Κωδικοί κατάστασης HTTP ή ομάδες (2xx, 4xx, 5xx). Έχει νόημα μόνο όταν metric: calls.
modeabsolute | changeΜοντέλο ορίου. Το deliverability είναι πάντα absolute.
op> | <Μόνο σε absolute mode. Κατεύθυνση του ορίου.
thresholdstring (αριθμητικό)Απαιτείται. Αποθηκεύεται ως αριθμητική συμβολοσειρά. Για deliverability, ποσοστό (π.χ. "5" = 5%).
duration1m | 5m | 10m | 30m | 1hΜόνο σε absolute mode. Παράθυρο συνεχούς υπέρβασης. Για deliverability, το παράθυρο αναδρομής του ποσοστού - χρησιμοποιήστε 1h | 4h | 1d | 7d.
changeDirincreased | decreasedΜόνο σε change mode. Κατεύθυνση της μεταβολής.
changeKindpercent | valueΜόνο σε change mode. Ερμηνεία του threshold ως ποσοστό ή ως απόλυτο πλήθος.
vsWindow15m | 1h | 4h | 1d | 7dΜόνο σε change mode. Μέγεθος του παραθύρου σύγκρισης.
vsComparisonprevious | last_week | average | same_weekday_medianΜόνο σε change mode. Βάση σύγκρισης: previous = το αμέσως προηγούμενο παράθυρο (προεπιλογή, και το λιγότερο ανεκτικό: μια ήσυχη Κυριακή διαβάζεται ως πτώση έναντι Σαββάτου)· last_week = το ίδιο παράθυρο πριν 7 μέρες, λαμβάνει υπόψη την εποχικότητα αλλά είναι μία μέρα, οπότε μια ασυνήθιστη δηλητηριάζει τη σύγκριση· average = ο ΜΕΣΟΣ ΟΡΟΣ του ίδιου παραθύρου τις τελευταίες avgDays μέρες (2-30, προεπιλογή 7), εξομαλύνει τον θόρυβο αλλά μία εξαιρετική μέρα ανεβάζει τη βάση για όλο το διάστημα· same_weekday_median = η ΔΙΑΜΕΣΟΣ του ίδιου παραθύρου 7/14/21/28 μέρες πριν - συνιστάται για ειδοποιήσεις ποσοστιαίας πτώσης: λαμβάνει υπόψη την εποχικότητα ΚΑΙ δεν μετακινείται από μία καμπάνια, άρθρο ή Black Friday. Χρειάζεται δεδομένα σε τουλάχιστον δύο από τις τέσσερις εβδομάδες, αλλιώς αναφέρει "not enough history yet" και δεν ενεργοποιείται.
scopeApiKeyPrefixstring | nullΠεριορισμός σε συγκεκριμένο κλειδί API. Χρησιμοποιήστε το ορατό πρόθεμα του κλειδιού (π.χ. jry_live_98f31a72). Μόνο inbound.
scopeEndpointstring | nullΠεριορισμός σε συγκεκριμένη διαδρομή (π.χ. /users/:id). Χρησιμοποιήστε την κανονικοποιημένη μορφή. Μόνο inbound.
scopeWebhookUrlstring | nullΠεριορισμός σε συγκεκριμένο URL webhook. Το query string αφαιρείται πριν από τη σύγκριση. Μόνο εξερχόμενα.
scopeEventNamestring | nullΚατεύθυνση events. Ποιο event_name μετριέται. null = μέτρηση όλων των συμβάντων. Αγνοείται όταν metric: total_events.
notifyChannelemail | webhookΠώς παραδίδεται η ειδοποίηση. Προεπιλογή email.
recipientsstring[] (1–20)Διευθύνσεις email που ειδοποιούνται κατά την ενεργοποίηση. Απαιτείται όταν notifyChannel: email.
webhookUrlstring | nullURL προορισμού για το POST. Απαιτείται όταν notifyChannel: webhook.
webhookSecretstring | nullΠροαιρετικό μυστικό υπογραφής HMAC-SHA256. Όταν οριστεί, τα αιτήματα φέρουν κεφαλίδα X-Joryio-Signature.
cooldown5m | 10m | 30m | 1hΕλάχιστος χρόνος μεταξύ επανενεργοποιήσεων.
statushealthy | triggered | snoozed | pausedΚατάσταση χρόνου εκτέλεσης. Μόνο για ανάγνωση από το API - χρησιμοποιήστε τα endpoints snooze/resume για μεταβάσεις.

Endpoints

Λίστα ειδοποιήσεων

GET /monitoring/alerts

Επιστρέφει όλες τις ειδοποιήσεις του τρέχοντος χώρου εργασίας, με τις νεότερες πρώτες.

Απόκριση: 200 OK - MonitoringAlert[]

Λήψη μίας ειδοποίησης

GET /monitoring/alerts/:id

Απόκριση: 200 OK - MonitoringAlert, ή 404 αν το ID δεν ανήκει σε αυτόν τον χώρο εργασίας.

Δημιουργία ειδοποίησης

POST /monitoring/alerts
Content-Type: application/json

{
"name": "5xx error rate",
"direction": "inbound",
"metric": "calls",
"codes": ["5xx"],
"mode": "absolute",
"op": ">",
"threshold": "100",
"duration": "5m",
"recipients": ["ops@example.com"],
"cooldown": "10m"
}

Τα πεδία name, direction, metric, mode και threshold απαιτούνται πάντα. Τα πεδία που εξαρτώνται από το κανάλι και τη λειτουργία (mode) επικυρώνονται σημασιολογικά:

  • Το κανάλι email (notifyChannel: email, η προεπιλογή) απαιτεί τουλάχιστον μία εγγραφή στο recipients.
  • Το κανάλι webhook (notifyChannel: webhook) απαιτεί έγκυρο http(s) webhookUrl· το recipients είναι προαιρετικό. Το webhookSecret είναι προαιρετικό.
  • Τα πεδία ανά λειτουργία επικυρώνονται ως προς το mode (π.χ. δεν μπορείτε να ορίσετε op σε change mode· το vsComparison ισχύει μόνο σε change mode).
  • Για direction: events, ορίστε το scopeEventName για να μετριέται ένα συμβάν (ή παραλείψτε το για να μετριούνται όλα). Το metric: total_events μετρά πάντα όλα τα συμβάντα ανεξαρτήτως scopeEventName.
  • Για direction: deliverability, χρησιμοποιήστε mode: absolute με μία από τις μετρικές *Rate, ένα op, ποσοστιαίο threshold και duration 1h/4h/1d/7d (η αναδρομή του ποσοστού). Τα πεδία scope και το codes αγνοούνται. Αν δεν στάλθηκαν μηνύματα στο παράθυρο, η ειδοποίηση δεν ενεργοποιείται.

Απόκριση: 201 Created - MonitoringAlert με συμπληρωμένο id.

Η νέα ειδοποίηση ξεκινά σε status: healthypaused αν enabled: false) και παραλαμβάνεται από τον επόμενο κύκλο του αξιολογητή (εντός 60 δευτερολέπτων).

Ενημέρωση ειδοποίησης

PATCH /monitoring/alerts/:id
Content-Type: application/json

{ "threshold": "200" }

Όλα τα πεδία είναι προαιρετικά. Στείλτε μόνο όσα θέλετε να αλλάξετε. Η μετάβαση σε enabled: false μεταφέρει την ειδοποίηση σε paused· η επαναφορά του σε true την επιστρέφει σε healthy (ο επόμενος κύκλος αξιολόγησης θα την ενεργοποιήσει ξανά αν η μετρική εξακολουθεί να υπερβαίνει το όριο).

Απόκριση: 200 OK - ενημερωμένο MonitoringAlert.

Διαγραφή ειδοποίησης

DELETE /monitoring/alerts/:id

Διαγράφει οριστικά την ειδοποίηση. Οι γραμμές ιστορικού της διαγράφονται επίσης αλυσιδωτά.

Απόκριση: 200 OK - { "ok": true }.

Αναβολή (snooze) ειδοποίησης

POST /monitoring/alerts/:id/snooze
Content-Type: application/json

{ "window": "1h" }

Το window είναι προαιρετικό. Με παράθυρο, η ειδοποίηση μεταβαίνει σε snoozed με ορισμένο snoozedUntil και επανέρχεται αυτόματα όταν περάσει ο χρόνος. Χωρίς παράθυρο, η ειδοποίηση μεταβαίνει σε paused (επ' αόριστον).

Τιμή windowΣυμπεριφορά
1hΑναβολή για 1 ώρα.
4hΑναβολή για 4 ώρες.
24hΑναβολή για 24 ώρες.
until_morningΑναβολή έως τις 09:00 ώρα διακομιστή την επόμενη ημέρα.
(παραλείπεται)Παύση επ' αόριστον.

Απόκριση: 200 OK - ενημερωμένο MonitoringAlert.

Συνέχιση ειδοποίησης

POST /monitoring/alerts/:id/resume

Καθαρίζει το snoozedUntil, ορίζει enabled: true και μεταβαίνει σε status: healthy. Ο επόμενος κύκλος του αξιολογητή επανελέγχει τη μετρική και μπορεί να μεταφέρει την ειδοποίηση σε triggered αμέσως, αν εξακολουθεί να υπερβαίνει το όριο.

Απόκριση: 200 OK - ενημερωμένο MonitoringAlert.

Αντιγραφή ειδοποίησης

POST /monitoring/alerts/:id/duplicate

Δημιουργεί νέα ειδοποίηση με την ίδια ρύθμιση. Το όνομα του αντιγράφου παίρνει το επίθημα (copy). Το αντίγραφο ξεκινά σε status: healthy με lastTriggeredAt: null, ανεξάρτητα από την κατάσταση χρόνου εκτέλεσης του πρωτοτύπου.

Απόκριση: 201 Created - το νέο MonitoringAlert.

Ζωντανή προεπισκόπηση

POST /monitoring/preview
Content-Type: application/json

{
"direction": "inbound",
"metric": "calls",
"codes": ["5xx"],
"mode": "absolute",
"op": ">",
"threshold": "100",
"duration": "5m"
}

Αξιολογεί την παρεχόμενη προδιαγραφή ειδοποίησης σε σχέση με τα τρέχοντα δεδομένα χωρίς να αποθηκεύσει τίποτα. Δεν δημιουργείται γραμμή ειδοποίησης. Δεν αποστέλλεται ειδοποίηση. Χρησιμοποιήστε το για να επικυρώσετε τα όρια πριν από τη δημιουργία.

Το payload δέχεται τα ίδια πεδία αξιολόγησης με τη δημιουργία - τα name, recipients, enabled και cooldown δεν χρειάζονται και αγνοούνται.

Απόκριση: 200 OK

{
"currentValue": 142,
"displayValue": "142",
"thresholdLabel": "> 100 in 5m",
"wouldFire": true
}
ΠεδίοΣημασία
currentValueΗ ακατέργαστη τιμή της μετρικής από την πηγή της.
displayValueΜορφοποιημένη εκδοχή της τιμής. Σε change mode περιλαμβάνει την κατεύθυνση (π.χ. ↓ 92%).
thresholdLabelΕυανάγνωστη έκφραση του ορίου που αντιστοιχεί στον κανόνα.
wouldFiretrue αν ο κανόνας θα βρισκόταν αυτή τη στιγμή σε κατάσταση ενεργοποίησης.

Λίστα ιστορικού

GET /monitoring/history?alertId={id}&state={state}&limit={n}

Επιστρέφει το ημερολόγιο ελέγχου των μεταβάσεων ενεργοποίησης/επίλυσης, με τις νεότερες πρώτες.

Παράμετροι query:

ΠαράμετροςΤύποςΠροεπιλογήΣημειώσεις
alertIdstring-Περιορισμός σε μία ειδοποίηση.
statefiring | resolved | snoozed-Περιορισμός σε έναν τύπο μετάβασης.
limitinteger200Ανώτατο όριο επιστρεφόμενων γραμμών. Αυστηρό όριο στις 1000.

Απόκριση: 200 OK - MonitoringAlertHistoryEvent[]

[
{
"id": "ev_...",
"alertId": "ak_...",
"alertName": "Server rejecting payloads",
"metric": "Calls returning 5xx",
"valueAtFire": "184",
"valueLabel": "184",
"thresholdLabel": "> 100 in 5m",
"state": "firing",
"resolvedAt": null,
"recipients": ["ops@example.com"],
"notificationsSent": 1,
"firedAt": "2026-05-29T14:38:00.000Z"
}
]

Οι γραμμές ιστορικού είναι στιγμιότυπα - αποτυπώνουν το όνομα, τη μετρική, το όριο και τους παραλήπτες της ειδοποίησης τη στιγμή της μετάβασης. Η μετονομασία ή η διαγραφή της ειδοποίησης αργότερα δεν αλλάζει τις ιστορικές γραμμές.

Βοηθητικά endpoints

Αυτά τροφοδοτούν τους επιλογείς και το «καμπανάκι» ειδοποιήσεων του dashboard. Όλα απαιτούν settings:read.

Λίστα ονομάτων συμβάντων

GET /monitoring/event-names

Επιστρέφει τα διακριτά ονόματα συμβάντων του χώρου εργασίας που εμφανίστηκαν τις τελευταίες 30 ημέρες, ταξινομημένα κατά συχνότητα (κορυφαία 200). Τροφοδοτεί τον επιλογέα scopeEventName της κατεύθυνσης Events, ώστε οι πελάτες να βλέπουν το δικό τους λεξιλόγιο συμβάντων.

Απόκριση: 200 OK

[
{ "name": "purchase_complete", "count": 18422 },
{ "name": "add_to_cart", "count": 51904 },
{ "name": "signup", "count": 1203 }
]

Λίστα πηγών webhook

GET /monitoring/webhook-sources

Επιστρέφει τα διακριτά URL προορισμού webhook που είναι ρυθμισμένα στους ενεργούς κόμβους webhook στα ενεργά και προσχέδια Journeys του χώρου εργασίας (τα αρχειοθετημένα canvases εξαιρούνται). Τροφοδοτεί τον επιλογέα scopeWebhookUrl της εξερχόμενης κατεύθυνσης.

Απόκριση: 200 OK

[
{
"url": "https://hooks.your-company.com/joryio",
"canvasId": "cv_...",
"canvasName": "Win-back flow",
"nodeId": "node_...",
"nodeLabel": "Notify CRM"
}
]

Πρόσφατες ειδοποιήσεις

GET /monitoring/notifications/recent

Επιστρέφει τις πιο πρόσφατες ενεργοποιήσεις ειδοποιήσεων του χώρου εργασίας, για το «καμπανάκι» της κεφαλίδας του dashboard.

Πλήθος μη αναγνωσμένων ενεργοποιήσεων

GET /monitoring/notifications/unread-count

Απόκριση: 200 OK - { "count": 3 }. Ο αριθμός στο σήμα του «καμπανακιού» της κεφαλίδας.

Payload ειδοποίησης webhook

Όταν μια ειδοποίηση με notifyChannel: webhook κάνει μετάβαση, το Joryio στέλνει HTTP POST στο webhookUrl. Σε αντίθεση με το email (που ενεργοποιείται μόνο σε triggered), το κανάλι webhook στέλνει POST και σε triggered και σε resolved, ώστε ο δέκτης να αντιστοιχίζει τα περιστατικά από άκρη σε άκρη.

Αίτημα:

POST {webhookUrl}
Content-Type: application/json
User-Agent: Joryio-Monitoring/1.0
X-Joryio-Signature: {hex hmac-sha256, only when a signing secret is set}

{
"alert": "Server rejecting payloads",
"status": "triggered",
"metric": "Calls returning 5xx",
"value": 184,
"displayValue": "184",
"accountName": "Acme Inc",
"workspaceName": "Production",
"firedAt": "2026-05-29T14:38:00.000Z"
}
ΠεδίοΤύποςΣημειώσεις
alertstringΤο όνομα της ειδοποίησης.
statustriggered | resolvedΠοια μετάβαση αντιπροσωπεύει αυτό το POST.
metricstringΕυανάγνωστη ετικέτα της παρακολουθούμενης μετρικής.
accountNamestringΟ λογαριασμός (οργανισμός) στον οποίο ανήκει η ειδοποίηση.
workspaceNamestringΟ χώρος εργασίας στον οποίο ανήκει η ειδοποίηση.
valuenumberΗ ακατέργαστη τιμή της μετρικής κατά τη μετάβαση.
displayValuestringΜορφοποιημένη τιμή (σε change mode περιλαμβάνει την κατεύθυνση, π.χ. ↓ 92%).
firedAtstring (ISO 8601)Πότε συνέβη η μετάβαση.

Επαλήθευση υπογραφής. Όταν έχει οριστεί webhookSecret, το Joryio υπολογίζει HMAC-SHA256(rawBody) με κλειδί το μυστικό και το στέλνει ως πεζή δεκαεξαδική συμβολοσειρά (χωρίς πρόθεμα) στην κεφαλίδα X-Joryio-Signature. Υπολογίστε το ξανά πάνω στο ακριβές ακατέργαστο σώμα του αιτήματος και συγκρίνετε με έλεγχο σταθερού χρόνου πριν εμπιστευτείτε το payload.

Σημασιολογία παράδοσης. Το Joryio αναμένει απόκριση 2xx. Σε αποτυχία, επαναλαμβάνει έως 3 φορές με εκθετική αναμονή (≈0.5s, 1s, 2s)· κάθε προσπάθεια έχει χρονικό όριο 10s. Μετά από 3 αποτυχίες, η παράδοση εγκαταλείπεται (η ίδια η μετάβαση κατάστασης εξακολουθεί να αποθηκεύεται στο Ιστορικό).

Προστασία SSRF. Το URL επικυρώνεται κατά τη δημιουργία/ενημέρωση της ειδοποίησης και επανεπικυρώνεται τη στιγμή της αποστολής (το DNS μπορεί να αλλάξει δέσμευση μεταξύ εγγραφής και ενεργοποίησης) - μια παράδοση σε ιδιωτική, link-local ή cloud-metadata διεύθυνση αποκλείεται. Οι ανακατευθύνσεις δεν ακολουθούνται (maxRedirects: 0), αφού ένα 3xx προς εσωτερική διεύθυνση θα παρέκαμπτε αυτόν τον έλεγχο.

Πηγή μετρικών

Οι πηγές μετρικών βρίσκονται στο event store των αναλυτικών στοιχείων και συμπληρώνονται αυτόματα. Είναι οι ίδιες πηγές από τις οποίες διαβάζουν τα γραφήματα του dashboard, οπότε ο μηχανισμός ειδοποιήσεων και τυχόν προσαρμοσμένα αναλυτικά στοιχεία μοιράζονται μία ενιαία πηγή αλήθειας.

Ελεγχόμενη καταγραφή ανά οργανισμό

Το log εισερχόμενων αιτημάτων API και το log εξερχόμενων παραδόσεων webhook είναι το καθένα ενεργοποιήσιμο/απενεργοποιήσιμο ανά οργανισμό και έχουν ρυθμιζόμενο παράθυρο διατήρησης (7–365 ημέρες, προεπιλογή 90), τα οποία διαχειρίζεται το προσωπικό του Joryio στην κονσόλα διαχείρισης. Όταν μια ροή είναι απενεργοποιημένη για έναν οργανισμό, δεν γράφονται γραμμές και οι ειδοποιήσεις αυτής της κατεύθυνσης σταματούν να αξιολογούνται. Η διατήρηση επιβάλλεται ανά γραμμή μέσω στήλης delete_at (οι υπάρχουσες γραμμές συμπληρώθηκαν αναδρομικά με ts + 90d).

api_request_logs

Μία γραμμή ανά αίτημα με έλεγχο ταυτότητας κλειδιού API προς το REST API του Joryio.

ΣτήληΤύποςΣημειώσεις
tsDateTimeΧρονοσφραγίδα UTC της ολοκλήρωσης του αιτήματος.
organization_idStringΟργανισμός-κάτοχος.
workspace_idStringΧώρος εργασίας-κάτοχος.
api_key_idNullable(String)UUID της γραμμής του κλειδιού API.
api_key_prefixStringΔημόσιο πρόθεμα του κλειδιού (π.χ. jry_live_98f31a72).
methodLowCardinality(String)Ρήμα HTTP.
endpointLowCardinality(String)Κανονικοποιημένη διαδρομή. Τα UUID και τα μεγάλα αριθμητικά τμήματα αντικαθίστανται με :id.
raw_pathStringΑρχική διαδρομή με το query string, με όριο 512 χαρακτήρες.
statusUInt16Κατάσταση της απόκρισης HTTP.
duration_msUInt32Καθυστέρηση σε χιλιοστά του δευτερολέπτου.
request_ipNullable(String)IP προέλευσης (μετά την ανάλυση του X-Forwarded-For).
  • Διαμέριση: μηνιαία (toYYYYMM(ts)).
  • Διατήρηση: TTL ανά γραμμή μέσω στήλης delete_at, που ορίζεται σε ts + retentionDays κατά την εγγραφή. Προεπιλογή 90 ημέρες, ρυθμιζόμενη ανά οργανισμό (7–365). Η καταγραφή μπορεί να απενεργοποιηθεί ανά οργανισμό.
  • Τι εξαιρείται: Κίνηση dashboard με έλεγχο ταυτότητας JWT· διαδρομές ελέγχου υγείας (/health, /metrics).

webhook_delivery_logs

Μία γραμμή ανά προσπάθεια εξερχόμενης παράδοσης webhook (επιτυχία ή αποτυχία).

ΣτήληΤύποςΣημειώσεις
tsDateTimeΧρονοσφραγίδα UTC της ολοκλήρωσης της προσπάθειας.
organization_idStringΟργανισμός-κάτοχος.
workspace_idStringΧώρος εργασίας-κάτοχος.
canvas_idNullable(String)ID του Journey χρηστών προέλευσης.
execution_idNullable(String)ID εκτέλεσης του Journey προέλευσης.
node_idNullable(String)ID του κόμβου webhook προέλευσης.
urlStringΠλήρες URL προορισμού.
url_canonicalStringURL με αφαιρεμένο το query string και χωρίς κάθετο στο τέλος. Χρησιμοποιείται από τα φίλτρα ειδοποιήσεων.
methodLowCardinality(String)Ρήμα HTTP.
statusUInt16Κατάσταση απόκρισης. 0 για σφάλματα επιπέδου μεταφοράς (timeout, αποτυχία DNS, άρνηση σύνδεσης).
duration_msUInt32Καθυστέρηση σε χιλιοστά του δευτερολέπτου.
attemptUInt8Αριθμός προσπάθειας (1 στην πρώτη).
errorNullable(String)Μήνυμα σφάλματος σε αποκρίσεις εκτός 2xx.
  • Διαμέριση: μηνιαία.
  • Διατήρηση: TTL ανά γραμμή μέσω delete_at. Προεπιλογή 90 ημέρες, ρυθμιζόμενη ανά οργανισμό (7–365). Η καταγραφή μπορεί να απενεργοποιηθεί ανά οργανισμό.
  • Τι εξαιρείται: Webhooks που εκτελέστηκαν πριν κυκλοφορήσει αυτή η λειτουργία (οι παλαιότερες εργασίες σε ουρά δεν έχουν τα μεταδεδομένα tenant που απαιτούνται για την απόδοσή τους).

events

Η κατεύθυνση Events διαβάζει τον υπάρχοντα πίνακα events - τον ίδιο πίνακα στον οποίο καταλήγει κάθε καταγεγραμμένο συμβάν πελάτη - αντί για μια αποκλειστική ροή παρακολούθησης. Χρησιμοποιούνται δύο συγκεντρωτικά:

ΜετρικήΕρώτημα
event_count / total_eventscount() πάνω σε (organization_id, workspace_id, [event_name], time range).
unique_usersuniqExact(user_id) με το ίδιο φίλτρο.

Το scopeEventName προσθέτει έναν όρο event_name = …· η παράλειψή του μετρά όλα τα ονόματα συμβάντων. Παρακολουθείται το πλήθος των αποθηκευμένων συμβάντων - ένα αίτημα που το Joryio αποδέχεται αλλά του οποίου το payload απορρίπτει εμφανίζεται στο Inbound API, όχι εδώ.

Αποκρίσεις σφαλμάτων

ΚατάστασηΠότε
400Αποτυχία επικύρωσης - λείπει απαιτούμενο πεδίο, αναντιστοιχία mode/op κ.λπ. Το σώμα της απόκρισης απαριθμεί τα προβληματικά πεδία.
401JWT που λείπει ή είναι μη έγκυρο.
403Το JWT είναι έγκυρο αλλά δεν έχει settings:read (λίστα/λήψη/ιστορικό/προεπισκόπηση) ή settings:write (δημιουργία/ενημέρωση/διαγραφή/αναβολή/συνέχιση/αντιγραφή).
404Το ID ειδοποίησης δεν βρέθηκε στον τρέχοντα χώρο εργασίας.

Δείγμα ενσωμάτωσης

Δημιουργία, προεπισκόπηση και αναβολή μιας ειδοποίησης από ένα shell:

TOKEN=eyJ...
BASE=https://api-eu1.joryio.com

# 1) Preview before saving - would it fire right now?
curl -sX POST "$BASE/monitoring/preview" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"direction":"inbound","metric":"calls","codes":["5xx"],"mode":"absolute","op":">","threshold":"100","duration":"5m"}'
# → {"currentValue":42,"displayValue":"42","thresholdLabel":"> 100 in 5m","wouldFire":false}

# 2) Looks good - create the alert.
ALERT_ID=$(curl -sX POST "$BASE/monitoring/alerts" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"5xx error rate","direction":"inbound","metric":"calls","codes":["5xx"],"mode":"absolute","op":">","threshold":"100","duration":"5m","recipients":["ops@example.com"]}' \
| jq -r .id)

# 3) Snooze it for 4 hours during a known maintenance window.
curl -sX POST "$BASE/monitoring/alerts/$ALERT_ID/snooze" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"window":"4h"}'