Αυτοματισμοί: τρέχουσα συμπεριφορά
Η σημερινή ροή company-created → email action, με Celery, RabbitMQ και ανακτήσιμο database outbox.
Bubllio υποστηρίζει σήμερα ένα μικρό automation: όταν μια εταιρεία δημιουργείται, ουρά μια ρυθμισμένη ενέργεια email και να καταγράψετε το αποτέλεσμα. Οι εργάτες σέλινου εκτελούν θέσεις εργασίας από το RabbitMQ, ενώ μια βάση δεδομένων outbox διατηρεί ανακτήσιμη κατάσταση εργασίας.
Αυτή η σελίδα περιγράφει την εφαρμοσμένη συμπεριφορά. Το workflow roadmap περιγράφει τον μελλοντικό οπτικό κατασκευαστή· δεν είναι σύμβαση API ή ένα χαρακτηριστικό που αποστέλλεται. Ξεκινήστε με το αυτόματη διέλευση για να το δοκιμάσετε.
Λεξιλόγιο
| Όρος | Σημασία | Τρέχον παράδειγμα |
|---|---|---|
| Γεγονός | Κάτι που συνέβη στο CRM. | Δημιουργήθηκε μια εταιρεία |
| Ενεργοποίηση | Όνομα γεγονότος ένας κανόνας ακούει για | company.created |
| Αυτοματοποίηση | Σωζόμενος κανόνας που ανήκει σε έναν οργανισμό | Ειδοποίηση λογιστικής |
| Δράση | Λειτουργία που εκτελεί ο κανόνας | send_email |
| Configuration | Settings αυτής της λειτουργίας | Παραλήπτες, υποκείμενο, σώμα |
| Φορτίο | Δεδομένα που περιγράφουν αυτό το φαινόμενο | Ταυτότητα εταιρείας, όνομα, στάδιο κύκλου ζωής |
| Εκτέλεση | Καταγεγραμμένο αποτέλεσμα μιας προσπάθειας εκτέλεσης | success ή failed |
Η δημιουργία ενός automation σώζει έναν κανόνα. Δεν το εκτελεί ούτε επαναλαμβάνει εταιρείες που δημιουργήθηκαν νωρίτερα. Κάθε γεγονός που ταιριάζει αργότερα μπορεί να το εκτελέσει ξανά.
Τι Λειτουργεί Σήμερα
| Ικανότητα | Τρέχουσα συμπεριφορά |
|---|---|
| Αυτόματο trigger | Μόνο company.created |
| Δράση | Ένα send_email ανά automation |
| Επιλογή κανόνα | Ίδιος οργανισμός, trigger που ταιριάζει, is_active=True |
| Εκτέλεση | Ασύγχρονη μέσω του σέλινου/RabbitMQ και της βάσης δεδομένων |
| Περιεχόμενο email | Σταθεροί παραλήπτες, αντικείμενο και σώμα από action_config |
| Μεταφορά με email | Global 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, και μια κονσόλα-emaildev_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.
