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

Αυτοματισμοί: τρέχουσα συμπεριφορά

Η σημερινή ροή company-created → email action, με Celery, RabbitMQ και ανακτήσιμο database outbox.

Bubllio υποστηρίζει σήμερα ένα μικρό automation: όταν μια εταιρεία δημιουργείται, ουρά μια ρυθμισμένη ενέργεια email και να καταγράψετε το αποτέλεσμα. Οι εργάτες σέλινου εκτελούν θέσεις εργασίας από το RabbitMQ, ενώ μια βάση δεδομένων outbox διατηρεί ανακτήσιμη κατάσταση εργασίας.

Αυτή η σελίδα περιγράφει την εφαρμοσμένη συμπεριφορά. Το workflow roadmap περιγράφει τον μελλοντικό οπτικό κατασκευαστή· δεν είναι σύμβαση API ή ένα χαρακτηριστικό που αποστέλλεται. Ξεκινήστε με το αυτόματη διέλευση για να το δοκιμάσετε.

Λεξιλόγιο

ΌροςΣημασίαΤρέχον παράδειγμα
ΓεγονόςΚάτι που συνέβη στο CRM.Δημιουργήθηκε μια εταιρεία
ΕνεργοποίησηΌνομα γεγονότος ένας κανόνας ακούει γιαcompany.created
ΑυτοματοποίησηΣωζόμενος κανόνας που ανήκει σε έναν οργανισμόΕιδοποίηση λογιστικής
ΔράσηΛειτουργία που εκτελεί ο κανόναςsend_email
ConfigurationSettings αυτής της λειτουργίαςΠαραλήπτες, υποκείμενο, σώμα
ΦορτίοΔεδομένα που περιγράφουν αυτό το φαινόμενοΤαυτότητα εταιρείας, όνομα, στάδιο κύκλου ζωής
ΕκτέλεσηΚαταγεγραμμένο αποτέλεσμα μιας προσπάθειας εκτέλεσηςsuccess ή failed

Η δημιουργία ενός automation σώζει έναν κανόνα. Δεν το εκτελεί ούτε επαναλαμβάνει εταιρείες που δημιουργήθηκαν νωρίτερα. Κάθε γεγονός που ταιριάζει αργότερα μπορεί να το εκτελέσει ξανά.

Τι Λειτουργεί Σήμερα

ΙκανότηταΤρέχουσα συμπεριφορά
Αυτόματο triggerΜόνο company.created
ΔράσηΈνα send_email ανά automation
Επιλογή κανόναΊδιος οργανισμός, trigger που ταιριάζει, is_active=True
ΕκτέλεσηΑσύγχρονη μέσω του σέλινου/RabbitMQ και της βάσης δεδομένων
Περιεχόμενο emailΣταθεροί παραλήπτες, αντικείμενο και σώμα από action_config
Μεταφορά με emailGlobal Django backend; τρέχουσα έξοδος κονσόλας
ΙστορίαΕκτέλεση σε σειρά αναμονής ακολουθούμενη από επεξεργασία και τελικό αποτέλεσμα
APIΛίστα/δημιουργία κανόνων, εκτέλεση λίστας, χειροκίνητη εκτέλεση κανόνα
ΧορήγησηDjango admin μπορεί να επεξεργαστεί υπάρχοντες κανόνες και ενεργή σημαία τους

Δεν υπάρχει οπτικός επεξεργαστής, δράση δημιουργίας επαφών, παρεμβολή προτύπων, κατάσταση, ροή πολλαπλών βημάτων, κατάσταση αναμονής ή καθορισμένο πρόγραμμα χρήσης. Το API δεν έχει καμία λεπτομέρεια automation, ενημέρωση, ή διαγραφή διαδρομής.

Οι δηλωμένες ενεργοποιήσεις δεν συνδέονται όλες

events.py δηλώνει αυτές τις επιλογές, τις οποίες το API δέχεται σήμερα:

ΕνεργοποίησηΑυτόματα εκπέμπεται από τον τρέχοντα κώδικα;
company.createdΝαι, από την εταιρεία post_save
company.updatedΌχι.
company.lifecycle_stage_changedΌχι.
contact.createdΌχι.
contact.updatedΌχι.
organization.createdΌχι.
organization.updatedΌχι.

Το να σώσεις μια επιλογή χωρίς καλώδιο δεν την κάνει να δουλέψει. Μια χειροκίνητη δοκιμή μπορεί ακόμα να εκτελέσει τη δράση της επειδή παρακάμπτει την αποστολή γεγονότων. Ο περιορισμός των επιλεγόμενων ενεργοποιήσεων σε υλοποιούμενα γεγονότα είναι μια προγραμματισμένη διόρθωση, όχι μια ολοκληρωμένη αλλαγή.

Χάρτης εκτέλεσης και κώδικα

New Company saved through API, admin, or ordinary ORM save
  -> companies/signals.py: post_save(created=True)
  -> dispatch_company_created(company): build payload
  -> dispatch_automation_event(...): select active rules in this organization
  -> transaction.on_commit(...): dispatch matching rules after the save commits
  -> queue_automation_run(...): create queued run and durable outbox row
  -> Celery worker: claim the outbox row and execute the action
  -> _send_email(...): Django send_mail using global backend
  -> AutomationRun and outbox: persist terminal state

Μια ενημέρωση δεν εκπέμπει company.created. Μαζικές λειτουργίες όπως το bulk_create δεν παίρνουν αυτή τη διαδρομή σήματος. Χωρίς ταιριαστό ενεργό κανόνα, δεν δημιουργείται εκτέλεση. Εάν πολλοί κανόνες ταιριάζουν, όλοι είναι σε σειρά αναμονής.

ΑρχείοΕυθύνη και λόγος
companies/apps.pyΕισαγωγή σημάτων σε ready() για την εγγραφή του δέκτη
companies/signals.pyΑνιχνεύει τη δημιουργία εκτός των προβολών HTTP επίσης
automations/events.pyΣυγκεντρώνει ονόματα γεγονότων και επιλογές μοντέλων
automations/models.pyΑποθηκεύει κανόνες και αποτελέσματα, με αναγνωριστικά UUID
automations/serializers.pyΕπικυρώνει τις ρυθμίσεις και τα σχήματα API
automations/services.pyΕπιλογή κανόνων και εκτέλεση ενεργειών εκτός των ανησυχιών HTTP
automations/views.pyΕλέγχει τις αιτήσεις πρόσβασης και τις συντεταγμένες οργάνωσης
automations/urls.pyΕκθέτει τις υλοποιούμενες λειτουργίες τελικού σημείου
automations/admin.pyΚαταχωρεί τους κανόνες και τρέχει το ιστορικό στο Django admin
automations/tests.pyΕπί του παρόντος δοκιμές API authorization και tenant scoping
automations/migrations/0001_initial.pyΑρχικός κανόνας και σχήμα εκτέλεσης

Αποθηκευμένα δεδομένα

Automation κατέχει organization, name, trigger, action_type, action_config, is_active, και χρονοσφραγίδες. Ο οργανισμός προέρχεται από το εγκεκριμένο πλαίσιο URL, όχι από τον οργανισμό αίτησης.

Παράδειγμα δημιουργίας σώματος:

{
  "name": "Notify accounting",
  "trigger": "company.created",
  "action_type": "send_email",
  "action_config": {
    "to": ["accounting@example.com"],
    "subject": "New company",
    "body": "A company was added to Bubllio CRM."
  },
  "is_active": true
}

Όταν η επικύρωση των ρυθμίσεων εκτελείται, to πρέπει να περιέχει τουλάχιστον μία έγκυρη διεύθυνση email και subject και body πρέπει να είναι μη blank. from_email είναι προαιρετική. JSON επιτρέπει συγκεκριμένες ρυθμίσεις δράσης; δεν καθιστά αυθαίρετες ενέργειες εκτελέσιμο. Μόνο send_email υλοποιείται.

Το μοντέλο επιτρέπει μια προκαθορισμένη κενή ρύθμιση. Οι ρυθμίσεις ή οι εγγραφές που δημιουργούνται εκτός του API μπορούν επομένως να φτάσουν στην εκτέλεση χωρίς τα απαιτούμενα κλειδιά και να αποτύχουν. Το μοντέλο/admin αποθηκεύει δεν χρησιμοποιεί την ενέργεια DRF serializer.

Η εκδήλωση της εταιρείας payload είναι:

{
  "company_id": "<company UUID>",
  "company_name": "Acme Inc",
  "lifecycle_stage": "lead"
}

Το ωφέλιμο φορτίο αποθηκεύεται για επιθεώρηση· δεν χρησιμοποιείται για την επιλογή παραληπτών ή την απόδοση κειμένου email. Μια συμβολοσειρά όπως το {{ company_name }} παραμένει κυριολεκτικό κείμενο.

AutomationRun αποθηκεύει automation, trigger, status, payload, error_message, και created_at. Δεν έχει διάρκεια, επιχειρεί να μετρήσει, ανά βήμα αποτελέσματα, ή στιγμιότυπο της ρύθμισης κανόνων. Η διαγραφή μιας αυτοματοποίησης καταφθάνει στις διαδρομές της· η διαγραφή της οργάνωσης της καταφθάνει και στα δύο.

ΚατάστασηΣημασία στον τρέχοντα κώδικα
queuedΑνθεκτική εργασία outbox υπάρχει και περιμένει έναν εργαζόμενο
processingΈνας εργάτης έχει διεκδικήσει το τρέξιμο
successΕπιστρέφεται ενέργεια χωρίς να εγείρει εξαίρεση
failedΗ εκτέλεση έθεσε μια εξαίρεση· η συμβολοσειρά της καταγράφεται
skippedΟ εκτελεστής συνάντησε έναν μη υποστηριζόμενο τύπο ενέργειας

skipped είναι μια αμυντική διαδρομή εκτελεστή; κανονική API επικύρωση επιτρέπει μόνο τον γνωστό τύπο δράσης. Οι ανενεργοί κανόνες φιλτράρονται, δεν καταγράφονται ως παραλείπονται. Η success δεν αποδεικνύει την παράδοση των εισερχομένων· η αριθμητική τιμή επιστροφής του αποστολέα δεν είναι ενεργοποιημένη.

API και χειρωνακτικές δοκιμές

Όλες οι διαδρομές είναι κάτω από /api/v1/organizations/<organization_id>/:

Μέθοδος και επίθημαΠρόσβασηΑποτέλεσμα
GET automations/Κάθε ρόλος οργάνωσηςΚανόνες σε αυτόν τον οργανισμό
POST automations/Ιδιοκτήτης/διοικητήςΔημιουργία κανόνα; HTTP 201
GET automations/runs/Κάθε ρόλος οργάνωσηςΤρέχει, το νέο πρώτο
POST automations/<automation_id>/test/Ιδιοκτήτης/διοικητήςΕκτέλεση ενέργειας: HTTP 201 με αποτέλεσμα

Η πρόσβαση του υπερχρήστη και οι απρόσιτες απαντήσεις οργάνωσης ακολουθούν τους κοινόχρηστους κανόνες αδειοδότησης.

Το endpoint δοκιμής περιμένει μια πραγματική δράση, όχι μια ξηρή διαδρομή. Αυτό:

  • δεν δημιουργεί εταιρεία ούτε επαληθεύει το σήμα συμβάντος·
  • εκτελείται όταν το is_active=False ή το επιλεγμένο trigger δεν είναι συνδεδεμένο·
  • αρχεία που παρέχονται payload, ή μια προεπιλεγμένη δοκιμή payload όταν είναι πλαστό·
  • επιστρέφει status, run, και μια κονσόλα-email dev_note;
  • επιστρέφει HTTP 201 με την αρχική κατάσταση queued.

Οι πελάτες πρέπει να επιθεωρήσουν το πεδίο της κατάστασης απόκρισης. Για να δοκιμάσετε την ολοκληρωμένη διαδρομή γεγονότων, δημιουργήστε μια νέα εταιρεία μετά τη δημιουργία του κανόνα και επιθεωρήστε την ιστορία λειτουργίας.

Όρια email

Τα email automation καλούν το παγκόσμιο Django του send_mail. Το επιλεγμένο backend εκτυπώνει μηνύματα στην κονσόλα. Οι λογαριασμοί SMTP του οργανισμού έχουν ξεχωριστό endpoint πραγματικής αποστολής και δεν επιλέγονται από την εκτέλεση automation, ακόμη και όταν σημειώνονται προεπιλεγμένα. Βλέπε Email Sending.

Αξιοπιστία και Επιθεώρηση Ευρημάτων

Αυτό το ασύγχρονο ίδρυμα έχει γνωστούς περιορισμούς:

  • Η παράδοση είναι τουλάχιστον μια φορά. Ένας worker συντρίβεται μετά την αποστολή, αλλά πριν από την εγγραφή επιτυχία μπορεί να παράγει ένα διπλό email.
  • Ένα σφάλμα βάσης δεδομένων κατά τη δημιουργία του run/outbox μπορεί ακόμα να διαφύγει στον καλούντο.
  • Αποτυχημένες εργασίες outbox ξαναδοκιμάστε έως και έξι προσπάθειες? Δεν υπάρχει ακόμα ένα χρήστη με θέα δοκιμή ελέγχου ή ταμπλό νεκρού γράμματος.
  • Οι συμβολοσειρές εξαίρεσης δράσης αποθηκεύονται όπως είναι· το ιστορικό εκτέλεσης δεν είναι απολυμαντικό ημερολόγιο ελέγχου και είναι αναγνώσιμο από τα μέλη του οργανισμού.
  • Οι υπάρχουσες δοκιμές αυτοματοποίησης καλύπτουν την έγκριση/αποτύπωση, αλλά δεν καθιερώνουν end-to-end εκτέλεση σήματος, παράδοση, ανενεργό φιλτράρισμα κανόνων, ή ανάκτηση.

Το roadmap δίνει προτεραιότητα σε αυτά τα κενά, διατηρώντας παράλληλα την αρχική υλοποίηση μέσα στην υπάρχουσα στοίβα Django.