bublliodocs
Αρχιτεκτονική

Κατεύθυνση των workflows: πάνω στο Django

Προτεινόμενη σχεδιαστική κατεύθυνση, όχι υλοποιημένη λειτουργία. Για τη σημερινή συμπεριφορά, δείτε τα Automations.

Αυτή η σελίδα περιγράφει μια σχεδιαστική κατεύθυνση, όχι διαθέσιμη λειτουργία. Για το σύστημα που εκτελείται σήμερα, δείτε τα Automations: Current Behavior.

Στόχος προϊόντος

Στο μέλλον, ο χρήστης θα μπορεί να συνδυάζει blocks, να τα ρυθμίζει μέσω φορμών, να ενεργοποιεί ένα workflow και να ελέγχει το αποτέλεσμα κάθε βήματος. Η πρώτη χρήσιμη έκδοση θα μπορούσε να είναι μια γραμμική ακολουθία:

When a company is created
  -> Create a contact for that company
  -> Send an email to the contact

Τα blocks αυτά είναι προτάσεις. Σήμερα υποστηρίζεται μόνο το company.created -> send_email, με σταθερή ρύθμιση email. Δεν υπάρχει frontend builder σε αυτό το repository. Το υπάρχον trigger μπορεί να χρησιμοποιηθεί ως το οπτικό Start block, χωρίς νέο backend operation.

Αρχική τεχνική απόφαση

Η επόμενη έκδοση θα βασιστεί στην υπάρχουσα Django/DRF εφαρμογή και database. Η απόφαση αυτή δεν προσθέτει RabbitMQ, Celery, Node-RED, εξωτερική workflow engine ή frontend library. Συνεχίζουν να υποστηρίζονται SQLite και PostgreSQL.

Έτσι παραμένουν απλά το local setup και τα permissions ανά Organization, ενώ οι CRM services και τα email credentials βρίσκονται στην ίδια εφαρμογή. Ο contributor μπορεί να κατανοήσει όλη την εκτέλεση χωρίς να λειτουργεί επιπλέον υπηρεσία.

Το trade-off είναι η synchronous εκτέλεση: αργές ενέργειες απασχολούν το request process και δεν υπάρχει durable background execution ή αυτόματη ανάκτηση. Κρατήστε τα αρχικά workflows σύντομα. Επανεξετάστε το background processing όταν το απαιτήσουν ο φόρτος ή το προϊόν. Η αποθήκευση ενός run δεν ισοδυναμεί με durable queue.

Events, actions και αναμονή

BlockΣημασίαΣυνέπεια στον σχεδιασμό
Company createdΞεκινά run μετά τη δημιουργία CompanyEntry trigger
Create contactΔημιουργεί Contact με τιμές που ορίζει το workflowAction με output
Contact createdΞεκινά ξεχωριστό run μετά τη δημιουργία ContactΕπιπλέον entry trigger
Wait for contact createdΠαύει ένα υπάρχον run μέχρι να εμφανιστεί matching ContactΑπαιτούνται persistent state και συσχέτιση event
Send emailΣτέλνει email με ρυθμισμένο περιεχόμενο στους επιλεγμένους παραλήπτεςAction με sender που έχει εγκριθεί για το Organization

Η αναμονή μπορεί να κρατήσει ημέρες. Χρειάζεται συσχέτιση με Organization και Company, ορισμό timeout και ακύρωσης, καθώς και χειρισμό events που φτάνουν την ώρα που καταγράφεται η αναμονή. Δεν μπορεί να υλοποιηθεί με sleep μέσα σε HTTP request. Παραμένει ανοιχτό ερώτημα αν το προϊόν χρειάζεται αυτό το block.

Σταδιακή υλοποίηση

  1. Κάντε αξιόπιστη την υπάρχουσα ροή: εμφανίστε μόνο triggers που είναι συνδεδεμένα, απαιτήστε έγκυρο configuration, αποσαφηνίστε τα manual tests και ελέγξτε όλη τη διαδρομή signal-to-run. Διατηρήστε τα υπάρχοντα rules και runs με ρητές migrations, αν αλλάξει η δομή.
  2. Συνδέστε την email action με την αποστολή μέσω SMTP του Organization. Επικυρώστε ότι το account ανήκει στο ίδιο tenant και ορίστε σαφείς κανόνες επιλογής account και χρήσης inactive accounts.
  3. Προσθέστε ordered actions, ξεκινώντας από ένα entry trigger και γραμμική λίστα βημάτων. Αποθηκεύστε snapshot/version του ορισμού και αποτελέσματα ανά βήμα, ώστε μεταγενέστερες αλλαγές να μην αλλάζουν το νόημα παλιότερων runs.
  4. Εκθέστε μέσω API τον κατάλογο των υποστηριζόμενων blocks και τις απαιτήσεις configuration. Ο μελλοντικός editor μπορεί να εμφανίζει τις κατάλληλες φόρμες και να αποθηκεύει το layout ξεχωριστά από την εκτελέσιμη λογική.
  5. Δημιουργήστε το visual UI με draft, validation, publish, test και run inspection. Επιλέξτε frontend tooling όταν αρχίσουν οι εργασίες στο frontend.

Κάθε στάδιο χρειάζεται υλοποίηση, έλεγχο migrations όπου απαιτούνται, tests και ενημέρωση τεκμηρίωσης. Το roadmap δεν αλλάζει το σημερινό API schema. Conditions, branches, loops, schedules, waits και user-supplied code δεν περιλαμβάνονται στην πρώτη γραμμική έκδοση.

Προτεινόμενη ευθύνη ανά επίπεδο

  • Τα models αποθηκεύουν definitions που ανήκουν σε Organization, versions, runs και αποτελέσματα βημάτων.
  • Οι serializers επικυρώνουν ολόκληρο τον ορισμό και τις αναφορές σε επιτρεπόμενα outputs.
  • Τα views κάνουν authorization και συντονίζουν validation, publication και execution.
  • Τα services υλοποιούν τις CRM actions και εκτελούν τα βήματα με την καθορισμένη σειρά.
  • Το μελλοντικό UI σχεδιάζει τα workflows και συλλέγει configuration. Ο server κάνει ανεξάρτητο validation· η σύνδεση blocks στο UI δεν δίνει επιπλέον permissions.

Ο πρώτος γραμμικός runner πρέπει να σταματά στο πρώτο αποτυχημένο βήμα και να διατηρεί τα προηγούμενα αποτελέσματα. Ένα email που στάλθηκε δεν αναιρείται με rollback μεταγενέστερων database writes. Ορίστε κανόνες retry και αποφυγής duplicates πριν προστεθεί κουμπί retry, ειδικά για δημιουργία Contact και αποστολή email. Περιορίστε τη διάρκεια εκτέλεσης και αποτρέψτε actions που ενεργοποιούν αναδρομικά απεριόριστα workflows.

Ανοιχτές αποφάσεις πριν από multi-step workflows

  • Το βήμα Contact θα δημιουργεί νέα εγγραφή ή θα περιμένει Contact που δημιουργήθηκε αλλού;
  • Πώς ο χρήστης θα δίνει τα Contact fields και θα επιλέγει outputs από προηγούμενα βήματα;
  • Πώς θα επιλέγονται και θα επικυρώνονται email accounts, templates και τιμές που λείπουν;
  • Πώς αλληλεπιδρούν η δημοσίευση, τα in-flight runs, ο χρονισμός των events και η ανάκτηση από αποτυχία;

Πρόκειται για αποφάσεις προϊόντος και semantics εκτέλεσης που πρέπει να είναι σαφείς στο μελλοντικό UI.