···11+UPDATE "user_notification_preference"
22+SET "ntfy_token" = NULL
33+WHERE "ntfy_token" IS NOT NULL
44+ AND "ntfy_token" NOT LIKE 'enc:v1:%';
55+--> statement-breakpoint
66+UPDATE "user_notification_preference"
77+SET "gotify_token" = NULL
88+WHERE "gotify_token" IS NOT NULL
99+ AND "gotify_token" NOT LIKE 'enc:v1:%';
1010+--> statement-breakpoint
1111+UPDATE "user_notification_preference"
1212+SET "webhook_secret" = NULL
1313+WHERE "webhook_secret" IS NOT NULL
1414+ AND "webhook_secret" NOT LIKE 'enc:v1:%';
···6262- a topic
6363- optionally, a bearer token
64646565+### Gotify
6666+6767+Gotify requires:
6868+6969+- a server URL
7070+- an application token (bearer token)
7171+7272+Setup notes:
7373+7474+- create an application in your Gotify server before connecting Kaneo
7575+- paste the base server URL, for example `https://gotify.example.com`
7676+- no extra topic or path is required because Kaneo sends directly to the Gotify message API using the application token
7777+- if your Gotify server uses a custom port or TLS, include that in the server URL
7878+6579### Custom webhook
66806781Custom webhook requires:
+95-95
i18n/el-GR.json
···403403 "toastRuleSaveFailed": "Αποτυχία αποθήκευσης κανόνα ειδοποίησης χώρου εργασίας",
404404 "toastRuleRemoved": "Αφαιρέθηκε ο κανόνας ειδοποίησης για {{workspaceName}}",
405405 "toastRuleRemoveFailed": "Αποτυχία αφαίρεσης κανόνα ειδοποίησης χώρου εργασίας",
406406- "toastPreferencesSaved": "Notification preferences saved",
407407- "toastPreferencesSaveFailed": "Failed to save notification preferences",
408408- "toastRuleRemovedGeneric": "Workspace notification rule removed",
409409- "toastRuleSavedGeneric": "Workspace notification rule saved"
406406+ "toastPreferencesSaved": "Οι προτιμήσεις ειδοποιήσεων αποθηκεύτηκαν",
407407+ "toastPreferencesSaveFailed": "Αποτυχία αποθήκευσης των προτιμήσεων ειδοποιήσεων",
408408+ "toastRuleRemovedGeneric": "Ο κανόνας ειδοποίησης του χώρου εργασίας αφαιρέθηκε",
409409+ "toastRuleSavedGeneric": "Ο κανόνας ειδοποίησης του χώρου εργασίας αποθηκεύτηκε"
410410 },
411411 "preferencesPage": {
412412 "title": "Προτιμήσεις",
···582582 "subtitle": "Συνδέστε το έργο σας με εξωτερικά εργαλεία και υπηρεσίες για πιο ομαλή ροή εργασίας.",
583583 "githubSectionTitle": "Ενσωμάτωση GitHub",
584584 "githubSectionSubtitle": "Συγχρονίστε εργασίες με GitHub issues και ενεργοποιήστε αμφίδρομο συγχρονισμό.",
585585- "discordSectionSubtitle": "Send project task updates into a Discord channel with a webhook.",
586586- "discordSectionTitle": "Discord Integration",
587587- "genericWebhookSectionSubtitle": "Send project task events to any HTTP endpoint as JSON.",
588588- "genericWebhookSectionTitle": "Generic Webhooks",
589589- "slackSectionSubtitle": "Send project task updates into a Slack channel with an incoming webhook.",
590590- "slackSectionTitle": "Slack Integration"
585585+ "discordSectionSubtitle": "Στείλτε ενημερώσεις εργασιών έργου σε κανάλι Discord μέσω webhook.",
586586+ "discordSectionTitle": "Ενσωμάτωση Discord",
587587+ "genericWebhookSectionSubtitle": "Στείλτε γεγονότα εργασιών έργου σε οποιοδήποτε HTTP endpoint ως JSON.",
588588+ "genericWebhookSectionTitle": "Γενικά Webhooks",
589589+ "slackSectionSubtitle": "Στείλτε ενημερώσεις εργασιών έργου σε κανάλι Slack μέσω εισερχόμενου webhook.",
590590+ "slackSectionTitle": "Ενσωμάτωση Slack"
591591 },
592592 "projectVisibility": {
593593 "pageTitle": "Ορατότητα έργου",
···760760 "open": "Ανοιχτό"
761761 },
762762 "discordIntegration": {
763763- "channelHint": "Optional label for your reference. Discord controls the actual destination channel from the webhook setup.",
764764- "channelLabel": "Channel name",
763763+ "channelHint": "Προαιρετική ετικέτα για τη δική σας αναφορά. Το Discord ελέγχει το πραγματικό κανάλι προορισμού από τη ρύθμιση του webhook.",
764764+ "channelLabel": "Όνομα καναλιού",
765765 "channelPlaceholder": "#team-updates",
766766- "connect": "Connect Discord",
767767- "connected": "Connected",
768768- "connectionHint": "Paste a Discord webhook URL and choose which task events should be posted.",
769769- "connectionTitle": "Discord webhook connection",
770770- "disconnect": "Disconnect",
766766+ "connect": "Σύνδεση Discord",
767767+ "connected": "Συνδεδεμένο",
768768+ "connectionHint": "Επικολλήστε ένα URL webhook του Discord και επιλέξτε ποια γεγονότα εργασιών θα δημοσιεύονται.",
769769+ "connectionTitle": "Σύνδεση webhook Discord",
770770+ "disconnect": "Αποσύνδεση",
771771 "events": {
772772- "taskCommentCreated": "New comments",
773773- "taskCreated": "New tasks",
774774- "taskDescriptionChanged": "Description changes",
775775- "taskPriorityChanged": "Priority changes",
776776- "taskStatusChanged": "Status changes",
777777- "taskTitleChanged": "Title changes"
772772+ "taskCommentCreated": "Νέα σχόλια",
773773+ "taskCreated": "Νέες εργασίες",
774774+ "taskDescriptionChanged": "Αλλαγές περιγραφής",
775775+ "taskPriorityChanged": "Αλλαγές προτεραιότητας",
776776+ "taskStatusChanged": "Αλλαγές κατάστασης",
777777+ "taskTitleChanged": "Αλλαγές τίτλου"
778778 },
779779- "eventsHint": "Choose which project changes should post to Discord.",
780780- "eventsTitle": "Event notifications",
781781- "paused": "Paused",
782782- "saveChanges": "Save changes",
779779+ "eventsHint": "Επιλέξτε ποιες αλλαγές έργου θα δημοσιεύονται στο Discord.",
780780+ "eventsTitle": "Ειδοποιήσεις γεγονότων",
781781+ "paused": "Σε παύση",
782782+ "saveChanges": "Αποθήκευση αλλαγών",
783783 "toast": {
784784- "disabled": "Discord notifications paused",
785785- "enabled": "Discord notifications enabled",
786786- "removed": "Discord integration removed successfully",
787787- "removeError": "Failed to remove Discord integration",
788788- "saved": "Discord integration saved successfully",
789789- "saveError": "Failed to save Discord integration",
790790- "updateError": "Failed to update Discord integration"
784784+ "disabled": "Οι ειδοποιήσεις Discord τέθηκαν σε παύση",
785785+ "enabled": "Οι ειδοποιήσεις Discord ενεργοποιήθηκαν",
786786+ "removed": "Η ενσωμάτωση Discord αφαιρέθηκε με επιτυχία",
787787+ "removeError": "Αποτυχία αφαίρεσης της ενσωμάτωσης Discord",
788788+ "saved": "Η ενσωμάτωση Discord αποθηκεύτηκε με επιτυχία",
789789+ "saveError": "Αποτυχία αποθήκευσης της ενσωμάτωσης Discord",
790790+ "updateError": "Αποτυχία ενημέρωσης της ενσωμάτωσης Discord"
791791 },
792792- "update": "Update Discord",
792792+ "update": "Ενημέρωση Discord",
793793 "validation": {
794794- "webhookInvalid": "Enter a valid Discord webhook URL"
794794+ "webhookInvalid": "Εισαγάγετε ένα έγκυρο URL webhook Discord"
795795 },
796796- "webhookHint": "Create a Discord channel webhook and paste the generated URL here.",
797797- "webhookLabel": "Webhook URL",
796796+ "webhookHint": "Δημιουργήστε ένα webhook καναλιού Discord και επικολλήστε εδώ το παραγόμενο URL.",
797797+ "webhookLabel": "URL webhook",
798798 "webhookPlaceholder": "https://discord.com/api/webhooks/..."
799799 },
800800 "genericWebhookIntegration": {
801801- "connect": "Connect webhook",
802802- "connected": "Connected",
803803- "connectionHint": "Send task events to your own endpoint as JSON. A signed X-Kaneo-Signature header is included when a secret is configured.",
804804- "connectionTitle": "Outgoing webhook connection",
805805- "disconnect": "Disconnect",
801801+ "connect": "Σύνδεση webhook",
802802+ "connected": "Συνδεδεμένο",
803803+ "connectionHint": "Στείλτε γεγονότα εργασιών στο δικό σας endpoint ως JSON. Περιλαμβάνεται υπογεγραμμένη κεφαλίδα X-Kaneo-Signature όταν έχει ρυθμιστεί μυστικό.",
804804+ "connectionTitle": "Σύνδεση εξερχόμενου webhook",
805805+ "disconnect": "Αποσύνδεση",
806806 "events": {
807807- "taskCommentCreated": "New comments",
808808- "taskCreated": "New tasks",
809809- "taskDescriptionChanged": "Description changes",
810810- "taskPriorityChanged": "Priority changes",
811811- "taskStatusChanged": "Status changes",
812812- "taskTitleChanged": "Title changes"
807807+ "taskCommentCreated": "Νέα σχόλια",
808808+ "taskCreated": "Νέες εργασίες",
809809+ "taskDescriptionChanged": "Αλλαγές περιγραφής",
810810+ "taskPriorityChanged": "Αλλαγές προτεραιότητας",
811811+ "taskStatusChanged": "Αλλαγές κατάστασης",
812812+ "taskTitleChanged": "Αλλαγές τίτλου"
813813 },
814814- "eventsHint": "Choose which project changes should trigger outgoing webhooks.",
815815- "eventsTitle": "Event notifications",
816816- "paused": "Paused",
817817- "saveChanges": "Save changes",
818818- "secretHint": "Optional. If provided, Kaneo signs the request body and sends the hex digest in the X-Kaneo-Signature header.",
819819- "secretHintConfigured": "A signing secret is already configured ({{secret}}). Enter a new one to replace it.",
820820- "secretLabel": "Signing secret",
821821- "secretPlaceholder": "Optional shared secret",
814814+ "eventsHint": "Επιλέξτε ποιες αλλαγές έργου θα ενεργοποιούν εξερχόμενα webhooks.",
815815+ "eventsTitle": "Ειδοποιήσεις γεγονότων",
816816+ "paused": "Σε παύση",
817817+ "saveChanges": "Αποθήκευση αλλαγών",
818818+ "secretHint": "Προαιρετικό. Αν δοθεί, το Kaneo υπογράφει το σώμα του αιτήματος και στέλνει το hex digest στην κεφαλίδα X-Kaneo-Signature.",
819819+ "secretHintConfigured": "Έχει ήδη ρυθμιστεί ένα μυστικό υπογραφής ({{secret}}). Εισαγάγετε ένα νέο για να το αντικαταστήσετε.",
820820+ "secretLabel": "Μυστικό υπογραφής",
821821+ "secretPlaceholder": "Προαιρετικό κοινόχρηστο μυστικό",
822822 "toast": {
823823- "disabled": "Generic webhook notifications paused",
824824- "enabled": "Generic webhook notifications enabled",
825825- "removed": "Generic webhook integration removed successfully",
826826- "removeError": "Failed to remove generic webhook integration",
827827- "saved": "Generic webhook integration saved successfully",
828828- "saveError": "Failed to save generic webhook integration",
829829- "updateError": "Failed to update generic webhook integration"
823823+ "disabled": "Οι ειδοποιήσεις γενικού webhook τέθηκαν σε παύση",
824824+ "enabled": "Οι ειδοποιήσεις γενικού webhook ενεργοποιήθηκαν",
825825+ "removed": "Η ενσωμάτωση γενικού webhook αφαιρέθηκε με επιτυχία",
826826+ "removeError": "Αποτυχία αφαίρεσης της ενσωμάτωσης γενικού webhook",
827827+ "saved": "Η ενσωμάτωση γενικού webhook αποθηκεύτηκε με επιτυχία",
828828+ "saveError": "Αποτυχία αποθήκευσης της ενσωμάτωσης γενικού webhook",
829829+ "updateError": "Αποτυχία ενημέρωσης της ενσωμάτωσης γενικού webhook"
830830 },
831831 "validation": {
832832- "webhookInvalid": "Enter a valid webhook URL"
832832+ "webhookInvalid": "Εισαγάγετε ένα έγκυρο URL webhook"
833833 },
834834- "webhookHint": "Kaneo sends POST requests with a JSON payload for each enabled event.",
835835- "webhookLabel": "Endpoint URL",
834834+ "webhookHint": "Το Kaneo στέλνει αιτήματα POST με JSON payload για κάθε ενεργοποιημένο γεγονός.",
835835+ "webhookLabel": "URL endpoint",
836836 "webhookPlaceholder": "https://example.com/webhooks/kaneo"
837837 },
838838 "slackIntegration": {
839839- "channelHint": "Optional label for your reference. Slack controls the actual destination channel from the webhook setup.",
840840- "channelLabel": "Channel name",
839839+ "channelHint": "Προαιρετική ετικέτα για τη δική σας αναφορά. Το Slack ελέγχει το πραγματικό κανάλι προορισμού από τη ρύθμιση του webhook.",
840840+ "channelLabel": "Όνομα καναλιού",
841841 "channelPlaceholder": "#team-updates",
842842- "connect": "Connect Slack",
843843- "connected": "Connected",
844844- "connectionHint": "Paste a Slack incoming webhook URL and choose which task events should be posted.",
845845- "connectionTitle": "Slack webhook connection",
846846- "disconnect": "Disconnect",
842842+ "connect": "Σύνδεση Slack",
843843+ "connected": "Συνδεδεμένο",
844844+ "connectionHint": "Επικολλήστε ένα URL εισερχόμενου webhook του Slack και επιλέξτε ποια γεγονότα εργασιών θα δημοσιεύονται.",
845845+ "connectionTitle": "Σύνδεση webhook Slack",
846846+ "disconnect": "Αποσύνδεση",
847847 "events": {
848848- "taskCommentCreated": "New comments",
849849- "taskCreated": "New tasks",
850850- "taskDescriptionChanged": "Description changes",
851851- "taskPriorityChanged": "Priority changes",
852852- "taskStatusChanged": "Status changes",
853853- "taskTitleChanged": "Title changes"
848848+ "taskCommentCreated": "Νέα σχόλια",
849849+ "taskCreated": "Νέες εργασίες",
850850+ "taskDescriptionChanged": "Αλλαγές περιγραφής",
851851+ "taskPriorityChanged": "Αλλαγές προτεραιότητας",
852852+ "taskStatusChanged": "Αλλαγές κατάστασης",
853853+ "taskTitleChanged": "Αλλαγές τίτλου"
854854 },
855855- "eventsHint": "Choose which project changes should post to Slack.",
856856- "eventsTitle": "Event notifications",
857857- "paused": "Paused",
858858- "saveChanges": "Save changes",
855855+ "eventsHint": "Επιλέξτε ποιες αλλαγές έργου θα δημοσιεύονται στο Slack.",
856856+ "eventsTitle": "Ειδοποιήσεις γεγονότων",
857857+ "paused": "Σε παύση",
858858+ "saveChanges": "Αποθήκευση αλλαγών",
859859 "toast": {
860860- "disabled": "Slack notifications paused",
861861- "enabled": "Slack notifications enabled",
862862- "removed": "Slack integration removed successfully",
863863- "removeError": "Failed to remove Slack integration",
864864- "saved": "Slack integration saved successfully",
865865- "saveError": "Failed to save Slack integration",
866866- "updateError": "Failed to update Slack integration"
860860+ "disabled": "Οι ειδοποιήσεις Slack τέθηκαν σε παύση",
861861+ "enabled": "Οι ειδοποιήσεις Slack ενεργοποιήθηκαν",
862862+ "removed": "Η ενσωμάτωση Slack αφαιρέθηκε με επιτυχία",
863863+ "removeError": "Αποτυχία αφαίρεσης της ενσωμάτωσης Slack",
864864+ "saved": "Η ενσωμάτωση Slack αποθηκεύτηκε με επιτυχία",
865865+ "saveError": "Αποτυχία αποθήκευσης της ενσωμάτωσης Slack",
866866+ "updateError": "Αποτυχία ενημέρωσης της ενσωμάτωσης Slack"
867867 },
868868- "update": "Update Slack",
868868+ "update": "Ενημέρωση Slack",
869869 "validation": {
870870- "webhookInvalid": "Enter a valid Slack webhook URL"
870870+ "webhookInvalid": "Εισαγάγετε ένα έγκυρο URL webhook Slack"
871871 },
872872- "webhookHint": "Create an Incoming Webhook in Slack and paste the generated URL here.",
873873- "webhookLabel": "Incoming webhook URL",
872872+ "webhookHint": "Δημιουργήστε ένα Incoming Webhook στο Slack και επικολλήστε εδώ το παραγόμενο URL.",
873873+ "webhookLabel": "URL εισερχόμενου webhook",
874874 "webhookPlaceholder": "https://hooks.slack.com/services/..."
875875 }
876876 },