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"
}
Αναφορά πεδίων
| Πεδίο | Τύπος | Σημειώσεις |
|---|---|---|
name | string (1–255) | Απαιτείται. Εμφανίζεται στο dashboard και στα email ενεργοποίησης. |
description | string (≤2000) | Προαιρετικό. Εμφανίζεται στο σώμα του email. |
enabled | boolean | Προεπιλογή true. Όταν είναι false, η κατάσταση γίνεται paused και ο αξιολογητής παραλείπει την ειδοποίηση. |
direction | inbound | webhook | events | deliverability | Ποια ροή παρακολουθείται. Το events μετρά καταγεγραμμένα συμβάντα πελατών από τον πίνακα events. Το deliverability παρακολουθεί ποσοστά υγείας μηνυμάτων (% των απεσταλμένων). |
metric | calls | total_calls | rps | event_count | total_events | unique_users | bounceRate | hardBounceRate | softBounceRate | complaintRate | unsubscribeRate | deliveryRate | Τι μετριέται. Οι τρεις πρώτες αφορούν τα inbound/webhook· οι επόμενες τρεις τα events· οι έξι μετρικές *Rate το deliverability. |
codes | string[] | Κωδικοί κατάστασης HTTP ή ομάδες (2xx, 4xx, 5xx). Έχει νόημα μόνο όταν metric: calls. |
mode | absolute | change | Μοντέλο ορίου. Το deliverability είναι πάντα absolute. |
op | > | < | Μόνο σε absolute mode. Κατεύθυνση του ορίου. |
threshold | string (αριθμητικό) | Απαιτείται. Αποθηκεύεται ως αριθμητική συμβολοσειρά. Για deliverability, ποσοστό (π.χ. "5" = 5%). |
duration | 1m | 5m | 10m | 30m | 1h | Μόνο σε absolute mode. Παράθυρο συνεχούς υπέρβασης. Για deliverability, το παράθυρο αναδρομής του ποσοστού - χρησιμοποιήστε 1h | 4h | 1d | 7d. |
changeDir | increased | decreased | Μόνο σε change mode. Κατεύθυνση της μεταβολής. |
changeKind | percent | value | Μόνο σε change mode. Ερμηνεία του threshold ως ποσοστό ή ως απόλυτο πλήθος. |
vsWindow | 15m | 1h | 4h | 1d | 7d | Μόνο σε change mode. Μέγεθος του παραθύρου σύγκρισης. |
vsComparison | previous | 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" και δεν ενεργοποιείται. |
scopeApiKeyPrefix | string | null | Περιορισμός σε συγκεκριμένο κλειδί API. Χρησιμοποιήστε το ορατό πρόθεμα του κλειδιού (π.χ. jry_live_98f31a72). Μόνο inbound. |
scopeEndpoint | string | null | Περιορισμός σε συγκεκριμένη διαδρομή (π.χ. /users/:id). Χρησιμοποιήστε την κανονικοποιημένη μορφή. Μόνο inbound. |
scopeWebhookUrl | string | null | Περιορισμός σε συγκεκριμένο URL webhook. Το query string αφαιρείται πριν από τη σύγκριση. Μόνο εξερχόμενα. |
scopeEventName | string | null | Κατεύθυνση events. Ποιο event_name μετριέται. null = μέτρηση όλων των συμβάντων. Αγνοείται όταν metric: total_events. |
notifyChannel | email | webhook | Πώς παραδίδεται η ειδοποίηση. Προεπιλογή email. |
recipients | string[] (1–20) | Διευθύνσεις email που ειδοποιούνται κατά την ενεργοποίηση. Απαιτείται όταν notifyChannel: email. |
webhookUrl | string | null | URL προορισμού για το POST. Απαιτείται όταν notifyChannel: webhook. |
webhookSecret | string | null | Προαιρετικό μυστικό υπογραφής HMAC-SHA256. Όταν οριστεί, τα αιτήματα φέρουν κεφαλίδα X-Joryio-Signature. |
cooldown | 5m | 10m | 30m | 1h | Ελάχιστος χρόνος μεταξύ επανενεργοποιήσεων. |
status | healthy | 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καιduration1h/4h/1d/7d(η αναδρομή του ποσοστού). Τα πεδία scope και τοcodesαγνοούνται. Αν δεν στάλθηκαν μηνύματα στο παράθυρο, η ειδοποίηση δεν ενεργοποιείται.
Απόκριση: 201 Created - MonitoringAlert με συμπληρωμένο id.
Η νέα ειδοποίηση ξεκινά σε status: healthy (ή paused αν 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 | Ευανάγνωστη έκφραση του ορίου που αντιστοιχεί στον κανόνα. |
wouldFire | true αν ο κανόνας θα βρισκόταν αυτή τη στιγμή σε κατάσταση ενεργοποίησης. |
Λίστα ιστορικού
GET /monitoring/history?alertId={id}&state={state}&limit={n}
Επιστρέφει το ημερολόγιο ελέγχου των μεταβάσεων ενεργοποίησης/επίλυσης, με τις νεότερες πρώτες.
Παράμετροι query:
| Παράμετρος | Τύπος | Προεπιλογή | Σημειώσεις |
|---|---|---|---|
alertId | string | - | Περιορισμός σε μία ειδοποίηση. |
state | firing | resolved | snoozed | - | Περιορισμός σε έναν τύπο μετάβασης. |
limit | integer | 200 | Ανώτατο όριο επιστρεφόμενων γραμμών. Αυστηρό όριο στις 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"
}
| Πεδίο | Τύπος | Σημειώσεις |
|---|---|---|
alert | string | Το όνομα της ειδοποίησης. |
status | triggered | resolved | Ποια μετάβαση αντιπροσωπεύει αυτό το POST. |
metric | string | Ευανάγνωστη ετικέτα της παρακολουθούμενης μετρικής. |
accountName | string | Ο λογαριασμός (οργανισμός) στον οποίο ανήκει η ειδοποίηση. |
workspaceName | string | Ο χώρος εργασίας στον οποίο ανήκει η ειδοποίηση. |
value | number | Η ακατέργαστη τιμή της μετρικής κατά τη μετάβαση. |
displayValue | string | Μορφοποιημένη τιμή (σε change mode περιλαμβάνει την κατεύθυνση, π.χ. ↓ 92%). |
firedAt | string (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.
| Στήλη | Τύπος | Σημειώσεις |
|---|---|---|
ts | DateTime | Χρονοσφραγίδα UTC της ολοκλήρωσης του αιτήματος. |
organization_id | String | Οργανισμός-κάτοχος. |
workspace_id | String | Χώρος εργασίας-κάτοχος. |
api_key_id | Nullable(String) | UUID της γραμμής του κλειδιού API. |
api_key_prefix | String | Δημόσιο πρόθεμα του κλειδιού (π.χ. jry_live_98f31a72). |
method | LowCardinality(String) | Ρήμα HTTP. |
endpoint | LowCardinality(String) | Κανονικοποιημένη διαδρομή. Τα UUID και τα μεγάλα αριθμητικά τμήματα αντικαθίστανται με :id. |
raw_path | String | Αρχική διαδρομή με το query string, με όριο 512 χαρακτήρες. |
status | UInt16 | Κατάσταση της απόκρισης HTTP. |
duration_ms | UInt32 | Καθυστέρηση σε χιλιοστά του δευτερολέπτου. |
request_ip | Nullable(String) | IP προέλευσης (μετά την ανάλυση του X-Forwarded-For). |
- Διαμέριση: μηνιαία (
toYYYYMM(ts)). - Διατήρηση: TTL ανά γραμμή μέσω στήλης
delete_at, που ορίζεται σεts + retentionDaysκατά την εγγραφή. Προεπιλογή 90 ημέρες, ρυθμιζόμενη ανά οργανισμό (7–365). Η καταγραφή μπορεί να απενεργοποιηθεί ανά οργανισμό. - Τι εξαιρείται: Κίνηση dashboard με έλεγχο ταυτότητας JWT· διαδρομές ελέγχου υγείας (
/health,/metrics).
webhook_delivery_logs
Μία γραμμή ανά προσπάθεια εξερχόμενης παράδοσης webhook (επιτυχία ή αποτυχία).
| Στήλη | Τύπος | Σημειώσεις |
|---|---|---|
ts | DateTime | Χρονοσφραγίδα UTC της ολοκλήρωσης της προσπάθειας. |
organization_id | String | Οργανισμός-κάτοχος. |
workspace_id | String | Χώρος εργασίας-κάτοχος. |
canvas_id | Nullable(String) | ID του Journey χρηστών προέλευσης. |
execution_id | Nullable(String) | ID εκτέλεσης του Journey προέλευσης. |
node_id | Nullable(String) | ID του κόμβου webhook προέλευσης. |
url | String | Πλήρες URL προορισμού. |
url_canonical | String | URL με αφαιρεμένο το query string και χωρίς κάθετο στο τέλος. Χρησιμοποιείται από τα φίλτρα ειδοποιήσεων. |
method | LowCardinality(String) | Ρήμα HTTP. |
status | UInt16 | Κατάσταση απόκρισης. 0 για σφάλματα επιπέδου μεταφοράς (timeout, αποτυχία DNS, άρνηση σύνδεσης). |
duration_ms | UInt32 | Καθυστέρηση σε χιλιοστά του δευτερολέπτου. |
attempt | UInt8 | Αριθμός προσπάθειας (1 στην πρώτη). |
error | Nullable(String) | Μήνυμα σφάλματος σε αποκρίσεις εκτός 2xx. |
- Διαμέριση: μηνιαία.
- Διατήρηση: TTL ανά γραμμή μέσω
delete_at. Προεπιλογή 90 ημέρες, ρυθμιζόμενη ανά οργανισμό (7–365). Η καταγραφή μπορεί να απενεργοποιηθεί ανά οργανισμό. - Τι εξαιρείται: Webhooks που εκτελέστηκαν πριν κυκλοφορήσει αυτή η λειτουργία (οι παλαιότερες εργασίες σε ουρά δεν έχουν τα μεταδεδομένα tenant που απαιτούνται για την απόδοσή τους).
events
Η κατεύθυνση Events διαβάζει τον υπάρχοντα πίνακα events - τον ίδιο πίνακα στον οποίο καταλήγει κάθε καταγεγραμμένο συμβάν πελάτη - αντί για μια αποκλειστική ροή παρακολούθησης. Χρησιμοποιούνται δύο συγκεντρωτικά:
| Μετρική | Ερώτημα |
|---|---|
event_count / total_events | count() πάνω σε (organization_id, workspace_id, [event_name], time range). |
unique_users | uniqExact(user_id) με το ίδιο φίλτρο. |
Το scopeEventName προσθέτει έναν όρο event_name = …· η παράλειψή του μετρά όλα τα ονόματα συμβάντων. Παρακολουθείται το πλήθος των αποθηκευμένων συμβάντων - ένα αίτημα που το Joryio αποδέχεται αλλά του οποίου το payload απορρίπτει εμφανίζεται στο Inbound API, όχι εδώ.
Αποκρίσεις σφαλμάτων
| Κατάσταση | Πότε |
|---|---|
400 | Αποτυχία επικύρωσης - λείπει απαιτούμενο πεδίο, αναντιστοιχία mode/op κ.λπ. Το σώμα της απόκρισης απαριθμεί τα προβληματικά πεδία. |
401 | JWT που λείπει ή είναι μη έγκυρο. |
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"}'