Γέφυρα συνομιλίας
Πάροχοι
Ενότητα με τίτλο «Πάροχοι»| Πάροχος | Τιμή wire | Μεταφορά | Είδος χώρου |
|---|---|---|---|
| Slack | slack |
Socket Mode (εξερχόμενη WSS) | slack |
Το Slack είναι ο μόνος πάροχος. Το ChatProvider είναι enum μίας τιμής και το cc_server καταχωρεί ένα plugin. Το σχήμα, κάθε αναζήτηση και κάθε μοναδικό ευρετήριο κλειδώνονται με το provider, οπότε τα ids δεν περνούν ποτέ από τον έναν πάροχο στον άλλο και η προσθήκη ενός είναι αλλαγή μόνο στον διακομιστή.
Μία εφαρμογή στην πλευρά του παρόχου ανά χώρο εργασίας × πάροχο.
Εντολές συνομιλίας
Ενότητα με τίτλο «Εντολές συνομιλίας»Το όνομα της εντολής είναι ανά εφαρμογή (cc από προεπιλογή, άρα /cc). Ένας διαχειριστής μπορεί να το μετονομάσει· η γέφυρα τότε χρησιμοποιεί ό,τι χρησιμοποιήθηκε την τελευταία φορά που κλήθηκε.
| Εντολή | Αποτέλεσμα |
|---|---|
/cc help (ή /cc χωρίς ρήμα) |
Απαριθμεί τι μπορεί να κάνει το bot |
/cc link <code> |
Εξαργυρώνει έναν κωδικό μίας χρήσης και συνδέει την ταυτότητα συνομιλίας του αποστολέα |
/cc ticket <title> |
Καταχωρεί ένα τοπικό εισιτήριο που ανέφερε το συνδεδεμένο μέλος |
/cc ticket <title> | <description> |
Το ίδιο, με ό,τι ακολουθεί την πρώτη | ως περιγραφή |
| Άγνωστο ρήμα | Αναφέρει το άγνωστο ρήμα μαζί με το κείμενο βοήθειας |
Τρόποι να φτάσετε σε έναν πράκτορα:
| Κίνηση | Συμπεριφορά |
|---|---|
@bot … σε ένα κανάλι |
Ανοίγει ένα νήμα Slack και έναν αντίστοιχο χώρο του Control Center· ο πράκτορας απαντά στο νήμα του Slack |
| Απάντηση σε ένα γεφυρωμένο νήμα του Slack | Συνεχίζει τον ίδιο χώρο του Control Center — δεν χρειάζεται αναφορά |
| Απλό μήνυμα σε ένα κανάλι | Αγνοείται (δεν απευθύνεται στο bot και δεν βρίσκεται σε γεφυρωμένο νήμα του Slack) |
| Άμεσο μήνυμα στο bot | Ένας χώρος του Control Center ανά συνομιλία άμεσων μηνυμάτων· ορίζει τίτλο νήματος Slack και κατάσταση «is thinking…» όσο εργάζεται ο πράκτορας |
Πεδία διαπιστευτηρίων (Slack)
Ενότητα με τίτλο «Πεδία διαπιστευτηρίων (Slack)»Δηλώνονται από τον περιγραφέα του παρόχου, ο οποίος παράγει τον διάλογο σύνδεσης και επικυρώνει την υποβολή.
| Αναγνωριστικό πεδίου | Ετικέτα | Απαιτείται | Πρόθεμα | Πού βρίσκεται |
|---|---|---|---|---|
botToken |
Token OAuth χρήστη bot | Ναι | xoxb- |
OAuth & Permissions |
appToken |
Token επιπέδου εφαρμογής | Ναι | xapp- |
Basic Information → App-Level Tokens, scope connections:write |
configRefreshToken |
Token ανανέωσης ρύθμισης εφαρμογής | Όχι | xoxe |
App configuration tokens on api.slack.com/apps |
Το configRefreshToken είναι το διαπιστευτήριο διαχείρισης εφαρμογής: χωρίς αυτό η σύνδεση λειτουργεί, αλλά το bot δεν μπορεί να δημιουργηθεί ή να επεξεργαστεί από το Control Center. Περιστρέφεται σε κάθε χρήση και η περιστραμμένη τιμή αποθηκεύεται αμέσως.
Οι τιμές περικόπτονται, τα μη δηλωμένα κλειδιά απορρίπτονται και μια αναντιστοιχία προθέματος απορρίπτεται με την ίδια φράση στον πελάτη και στον διακομιστή. Τα υποχρεωτικά πεδία πρέπει να υπάρχουν σε κάθε σύνδεση· ένα προαιρετικό πεδίο που μένει κενό διατηρεί ό,τι είχε ήδη αποθηκευτεί.
Απαιτήσεις της εφαρμογής Slack
Ενότητα με τίτλο «Απαιτήσεις της εφαρμογής Slack»Scopes του token bot:
app_mentions:readassistant:writechannels:historychat:writecommandsgroups:historyim:historyusers:readusers:read.emailΣυνδρομές σε συμβάντα bot:
app_home_openedapp_mentionmessage.channelsmessage.groupsmessage.imΔομικές ρυθμίσεις που επιβάλλει το Control Center όταν δημιουργεί ή επεξεργάζεται την εφαρμογή: Socket Mode ενεργό, κανένα request URL, καρτέλα Messages ενεργή και εγγράψιμη, bot always_online, τα απαιτούμενα scopes και συμβάντα συγχωνευμένα σε ό,τι έχει ήδη η εφαρμογή (ποτέ αφαιρούμενα) και μία εντολή slash που φέρει την περιγραφή File a ticket or link your Control Center account — τον δείκτη που αναγνωρίζει τη δική του εντολή του Control Center σε ένα εξαγόμενο manifest.
Καταστάσεις σύνδεσης
Ενότητα με τίτλο «Καταστάσεις σύνδεσης»| Κατάσταση | Wire | Σημασία |
|---|---|---|
| Δεν έχει συνδεθεί | disconnected |
Δεν έχουν αποθηκευτεί διαπιστευτήρια για αυτόν τον χώρο εργασίας × πάροχο |
| Σύνδεση… | connecting |
Τα διαπιστευτήρια αποθηκεύτηκαν, η μεταφορά καλεί ή επανακαλεί |
| Ζωντανά | connected |
Η μεταφορά είναι ενεργή και λαμβάνει συμβάντα |
| Σφάλμα σύνδεσης | error |
Αποθηκευμένα αλλά αποτυγχάνουν· το σφάλμα του ίδιου του παρόχου εμφανίζεται δίπλα |
Η επανασύνδεση γίνεται με εκθετική καθυστέρηση επανάληψης με τυχαία διακύμανση, με ανώτατο όριο τα 30 δευτερόλεπτα. Μια εναλλαγή socket που ξεκινά ο πάροχος επανασυνδέεται άμεσα χωρίς να κλιμακώσει την καθυστέρηση. Ένα απορριφθέν διαπιστευτήριο (invalid_auth, not_authed, token_revoked, account_inactive, token_expired, invalid_app_id) ή ένα απόν scope είναι τελειωτικό: η γέφυρα σταματά να επαναλαμβάνει μέχρι να φτάσουν νέα διαπιστευτήρια.
Δυνατότητες παρόχου (Slack)
Ενότητα με τίτλο «Δυνατότητες παρόχου (Slack)»Η γέφυρα είναι γραμμένη απέναντι στην πλουσιότερη επιφάνεια και υποβαθμίζεται ανά δυνατότητα.
| Δυνατότητα | Slack | Αποτέλεσμα όταν λείπει |
|---|---|---|
streaming |
ναι | Ολόκληρη η απάντηση αναρτάται μία φορά, στο τέλος |
streamingRequiresThread |
ναι | Ένας στόχος απάντησης χωρίς άγκυρα νήματος αναρτά ολόκληρες απαντήσεις |
ephemeralMessages |
ναι | Μια απάντηση σε εντολή slash χωρίς χρησιμοποιήσιμη λαβή απάντησης απορρίπτεται (οι αρνήσεις αναρτώνται πάντα εντός νήματος) |
threadStatus |
ναι | Καμία παροδική γραμμή «is thinking…» |
threadTitle |
ναι | Το νήμα συνομιλίας κρατά τον προεπιλεγμένο τίτλο του |
slashCommands |
ναι | Καμία επιφάνεια /cc |
taskCards |
ναι | Μόνο κείμενο — καμία κάρτα πάνω από την απάντηση και κανένας σύνδεσμος «View in Control Center» |
maxMessageLength |
39.000 | Οι μεγαλύτερες απαντήσεις περικόπτονται με υπόδειξη προς το Control Center |
maxStreamChunkLength |
3.800 | Τα append χωρίζονται σε όριο παραγράφου, γραμμής ή κενού |
Το να διαφημίζεται η ροή δεν είναι ροή που υποσχέθηκε: αυτή του Slack χρειάζεται τη λειτουργία Agents & AI Apps σε πλάνο επί πληρωμή. Μια άρνηση τη στιγμή της κλήσης (streaming_not_supported, feature_not_enabled, paid_only, …) θυμάται για όλη τη ζωή της σύνδεσης και εκτίθεται ως streamingAvailable: false. Οι κάρτες εργασίας του Slack ταξιδεύουν στην ίδια κλήση, οπότε ένα Slack που αρνείται τη λειτουργία προβολής της κάρτας κρατά τη ροή του και χάνει μόνο την κάρτα, μία φορά, για όλη τη ζωή της σύνδεσης.
Μια ροή πρέπει επίσης να ονομάζει τον αναγνώστη για τον οποίο προορίζεται. Το Slack απαιτεί και έναν χρήστη παραλήπτη και την ομάδα του για να ανοίξει μια ροή σε ένα κανάλι (ένα άμεσο μήνυμα δεν αρκεί) και αρνείται με missing_recipient_user_id / missing_recipient_team_id σε αντίθετη περίπτωση — άρνηση ανά κλήση, οπότε η γέφυρα συνεχίζει να προσπαθεί και η στροφή φτάνει στο μεταξύ ως μία αναρτημένη απάντηση. Παραλήπτης είναι όποιος ρώτησε, παρμένος από το εισερχόμενο μήνυμα (η δική του ομάδα, όχι της εφαρμογής, ώστε ένα κανάλι Slack Connect να επιλύεται σωστά). Για μια στροφή που κανείς δεν ξεκίνησε από τη συνομιλία — εργασία που ξεκίνησε στο Control Center σε μια ήδη γεφυρωμένη συνομιλία — είναι το μέλος του οποίου η σύνδεση δημιούργησε τη γέφυρα· αν στο μεταξύ αποσύνδεσε τον λογαριασμό συνομιλίας του, αυτή η στροφή αναρτάται ολόκληρη αντί να μεταδίδεται σε ροή.
Κάρτες εργασίας
Ενότητα με τίτλο «Κάρτες εργασίας»Μία ομαδοποιημένη κάρτα ανά στροφή πράκτορα (task_display_mode: plan), με μία γραμμή ανά βήμα. Κάθε γραμμή είναι ένα task_update με id + title + status, συν ένα details μίας φοράς όταν η σκέψη είναι έτοιμη. Τα details και το output με το ίδιο id συνενώνονται χωρίς διαχωριστικό, οπότε τα details στέλνονται μία φορά και το output δεν μεταδίδεται ποτέ σε ροή. Ο τίτλος του σχεδίου είναι το αίτημα· η απάντηση είναι ένα ξεχωριστό μεταγενέστερο append που φέρει ένα τμήμα markdown_text.
| Μέρος | Περιεχόμενο |
|---|---|
| Τίτλος σχεδίου | Τι ζητήθηκε |
| Γραμμή προετοιμασίας | Working on it…, μετά Cloning …, μετά Starting the agent… — μία γραμμή, ο τίτλος αντικαθίσταται |
| Γραμμή σκέψης | Thinking…, προστίθεται όταν ο πράκτορας αρχίζει να συλλογίζεται· η σκέψη είναι τα details αυτής της γραμμής, που στέλνονται μία φορά όταν ολοκληρωθεί η συλλογιστική |
| Γραμμές εργαλείων | Μία ανά εργαλείο (Bash which swift), μοναδικό id ώστε να στέκονται δίπλα δίπλα |
| Κατάσταση | Σε εξέλιξη όσο εκτελείται αυτή η γραμμή· ολοκληρωμένη όταν ξεκινήσει η επόμενη γραμμή ή τελειώσει η στροφή· σφάλμα για αποτυχημένη, διακοπείσα και λόγω ορίου στροφών |
| Πρόσκληση σε ενέργεια | View in Control Center ως τελευταία γραμμή όταν τελειώσει η στροφή — απούσα όσο η εργασία εκτελείται ακόμη και απούσα όταν ο διακομιστής δεν έχει προσβάσιμο δημόσιο URL |
Τι δεν μεταφέρει ποτέ μια κάρτα: έξοδο εργαλείου, όρισμα εκτός αυτής της λίστας επιτρεπομένων ή οτιδήποτε διαβάστηκε από τη βάση δεδομένων. Η συλλογιστική πρόζα είναι μόνο τα details της γραμμής Thinking… (με ανώτατο όριο 256 χαρακτήρες), όχι το σώμα του μηνύματος. Μια κάρτα που δεν θα έλεγε τίποτα νέο δεν αποστέλλεται ξανά. Μια αναφορά ανοίγει τη ροή αμέσως ώστε το νήμα του Slack να μη μείνει σιωπηλό· μια στροφή που μετά δεν παρήγαγε καθόλου κείμενο ολοκληρώνει αυτή την ίδια κάρτα με μια σύντομη σημείωση αντί να αναρτήσει δεύτερο μήνυμα. Μια στροφή χωρίς λέξεις σε έναν χώρο που δεν άνοιξε ποτέ ροή (χωρίς κάρτες ή με τη ροή ήδη απορριφθείσα) αναρτά ακόμη ένα μήνυμα που φέρει την ολοκληρωμένη κάρτα και τη σημείωση.
Οι κάρτες σε ροή και οι αναρτημένες κάρτες είναι διαφορετικά ωφέλιμα φορτία:
| Μορφή | Σχήμα | Πρόζα |
|---|---|---|
| Σε ροή | Τμήματα plan_update συν task_update κλειδωμένα με id |
Απλή συμβολοσειρά, με ανώτατο όριο 256 χαρακτήρες ανά τμήμα |
| Αναρτημένη | Ένα block plan που περιβάλλει task_card κλειδωμένα με task_id |
Εμπλουτισμένο κείμενο |
Χειρισμός αποτυχιών:
| Κατάσταση | Συμπεριφορά |
|---|---|
| Ο πάροχος αρνείται την κάρτα σε ένα append | Το append επαναλαμβάνεται αμέσως χωρίς αυτήν· η πρόζα φτάνει ακόμη ζωντανά και οι κάρτες απορρίπτονται για όλη τη ζωή της σύνδεσης |
| Ο πάροχος αρνείται και την πρόζα | Η ροή κλείνει και η απάντηση αναρτάται ολόκληρη |
| Η ροή διακόπτεται αφού έχει φτάσει μέρος της απάντησης | Η ροή κλείνει και τίποτα δεν αναρτάται ξανά |
Δείτε τις Γέφυρες συνομιλίας για το γιατί το ωφέλιμο φορτίο χωρίζεται έτσι.
Προετοιμασία, πριν υπάρξει στροφή
Ενότητα με τίτλο «Προετοιμασία, πριν υπάρξει στροφή»Η κάρτα ανοίγει όταν γίνεται δεκτή μια αναφορά, πριν από την κλωνοποίηση και πριν από το πρώτο token· η στροφή που ακολουθεί υιοθετεί την ίδια κάρτα και ροή. Η αφήγηση μετά προέρχεται από το SpaceProvisioningChanged στον δίαυλο γεγονότων τομέα — την ίδια πρόοδο που διαβάζει το πανό προετοιμασίας της εφαρμογής υπολογιστή από τη γραμμή του χώρου.
| Κατάσταση προετοιμασίας | Αφήγηση |
|---|---|
| Η αναφορά έγινε δεκτή | Working on it… |
Βήμα repo |
Cloning <repo>… |
Βήμα prCheckout |
Checking out the pull request in <repo>… |
Βήμα script |
Running the setup script for <repo>… |
Βήμα agent |
Setting up <agent>… |
provisioning, κανένα βήμα ακόμη |
Preparing the workspace… |
ready |
Starting the agent… |
| Ο πράκτορας συλλογίζεται | Thinking… |
failed |
Workspace setup failed — details are in Control Center. |
cancelled |
Workspace setup was stopped — details are in Control Center. |
Η αφήγηση προετοιμασίας απαιτεί και τις τέσσερις συνθήκες:
| Συνθήκη |
|---|
| Ο πάροχος αποδίδει κάρτες |
| Η ροή είναι διαθέσιμη σε αυτή τη σύνδεση |
| Ο χώρος έχει ένα αίτημα συνομιλίας σε εκκρεμότητα |
| Καμία κάρτα δεν αναφέρει ήδη μια στροφή εκεί |
Το αίτημα παραμένει σε εκκρεμότητα μέχρι να ξεκινήσει μια στροφή ή να αποτύχει η προετοιμασία. Ένα γεγονός ready χωρίς ήδη ανοιχτή κάρτα είναι ένας θερμός χώρος και αφήνεται ήσυχος, και μια προετοιμασία που κανείς στη συνομιλία δεν περιμένει — μια συνομιλία που άνοιξε στην εφαρμογή, μια εγκαταλελειμμένη που συνεχίστηκε στην εκκίνηση — δεν παράγει καθόλου κάρτα.
Η σελίδα ανακατεύθυνσης /open
Ενότητα με τίτλο «Η σελίδα ανακατεύθυνσης /open»Τα προϊόντα συνομιλίας δέχονται http(s) σε έναν σύνδεσμο και τίποτα άλλο, οπότε μια πρόσκληση σε ενέργεια δεν μπορεί να ονομάσει απευθείας το σχήμα της εφαρμογής υπολογιστή.
| Ιδιότητα | Τιμή |
|---|---|
| Διαδρομή | GET /open/workspaces/<workspaceId>/(spaces|tickets)/<id> |
| Προέλευση | Παράγεται από το δημόσιο URL του διακομιστή (ws → http, wss → https)· το loopback διατηρείται |
| Απόκριση | Μια μικρή σελίδα HTML με no-store που πλοηγείται στο control-center://workspaces/<workspaceId>/(spaces|tickets)/<id> και δείχνει ένα χειροκίνητο κουμπί |
| Επικύρωση | Τα ids πρέπει να ταιριάζουν με [A-Za-z0-9_.-]{1,128}· οτιδήποτε άλλο είναι 404 |
| Πρόσβαση | Δημόσια και αδρανής — δεν διαβάζει καμία βάση δεδομένων, οπότε δεν είναι μαντείο ύπαρξης· η εφαρμογή που ανοίγει κάνει την εξουσιοδότηση |
Πεδία προφίλ bot
Ενότητα με τίτλο «Πεδία προφίλ bot»| Πεδίο | Όριο | Σημειώσεις |
|---|---|---|
appName |
1–35 χαρακτήρες | Προεπιλογή: Control Center · <workspace name> |
botDisplayName |
1–80 χαρακτήρες | Προεπιλογή: control-center |
description |
≤ 140 χαρακτήρες | |
agentDescription |
≤ 300 χαρακτήρες | Εμφανίζεται πάνω από ένα άμεσο μήνυμα προς το bot |
command |
≤ 32 χαρακτήρες | Κανονικοποιείται: οι αρχικές κάθετοι αφαιρούνται, τα γράμματα γίνονται πεζά, το [^a-z0-9_-] διαγράφεται, ένα κενό αποτέλεσμα καταλήγει στο cc |
agentEnabled |
— | Αν εκτίθεται η εμπειρία άμεσων μηνυμάτων/πράκτορα |
Ένα κενό πεδίο σημαίνει «άφησέ το ήσυχο», όχι «καθάρισέ το». Τα όρια είναι του Slack, που είναι τα στενότερα από τα προϊόντα που μοντελοποιούνται.
Κωδικοί σύνδεσης
Ενότητα με τίτλο «Κωδικοί σύνδεσης»| Ιδιότητα | Τιμή |
|---|---|
| Μήκος | 6 χαρακτήρες |
| Αλφάβητο | 23456789ABCDEFGHJKLMNPQRSTVWXYZ (χωρίς 0/O, 1/I, U) |
| Διάρκεια ζωής | 15 λεπτά |
| Χρήσεις | Μία |
| Αποθήκευση | Στη μνήμη — μια επανεκκίνηση του διακομιστή ακυρώνει τους εκκρεμείς κωδικούς |
| Εμβέλεια | Ένας χώρος εργασίας και ένας πάροχος· η έκδοση νέου κωδικού ακυρώνει τον προηγούμενο του μέλους |
Η εξαργύρωση αντιστοιχίζεται χωρίς διάκριση πεζών-κεφαλαίων. Άγνωστοι, ληγμένοι, ξένου χώρου εργασίας και λάθος παρόχου κωδικοί αποτυγχάνουν όλοι πανομοιότυπα σκόπιμα.
Μέθοδοι σύνδεσης
Ενότητα με τίτλο «Μέθοδοι σύνδεσης»| Μέθοδος | Wire | Πώς |
|---|---|---|
| Κωδικός | code |
Το μέλος εξαργύρωσε το /cc link <code> |
email |
Το επαληθευμένο email του παρόχου αντιστοιχίστηκε με χρήστη που είναι ήδη μέλος του χώρου εργασίας |
Λειτουργίες RPC
Ενότητα με τίτλο «Λειτουργίες RPC»Όλες έχουν εμβέλεια χώρου εργασίας. Ο διακομιστής είναι άνευ κατάστασης, οπότε κάθε κλήση φέρει το δικό της workspace_id στα args· ο dispatcher αρνείται μια λειτουργία εμβέλειας χώρου εργασίας που το παραλείπει, πριν ανοίξει οποιαδήποτε βάση δεδομένων. Τα διαπιστευτήρια ταξιδεύουν μόνο προς τα μέσα — οι αναγνώσεις κατάστασης δεν τα επιστρέφουν ποτέ.
| Λειτουργία | Είδος | Ελάχιστος ρόλος | Κλάσεις ενέργειας |
|---|---|---|---|
chat.providers |
ανάγνωση | guest |
— |
chat.status |
ανάγνωση | guest |
— |
chat.connect |
μεταβολή | admin |
secretAccess, networkEgress |
chat.disconnect |
καταστροφική | admin |
secretAccess |
chat.listUserLinks |
ανάγνωση | guest |
— |
chat.beginUserLink |
μεταβολή | member |
— |
chat.unlinkUser |
μεταβολή | member για τον εαυτό σας, admin για οποιονδήποτε άλλον |
— |
chat.createApp |
μεταβολή | admin |
secretAccess, networkEgress |
chat.setupLink |
ανάγνωση | admin |
— |
chat.botProfile |
ανάγνωση | admin |
networkEgress |
chat.updateBotProfile |
μεταβολή | admin |
networkEgress |
Οι λειτουργίες ανάγνωσης κληρονομούν το κατώτατο όριο guest από το είδος τους· οι μεταβολές χωρίς ρητό κατώτατο όριο απαιτούν member.
Το chat.setupLink συνθέτει ένα URL δημιουργίας εφαρμογής παρόχου από το προφίλ του bot. Δεν δηλώνει καμία κλάση ενέργειας επειδή δεν διαβάζει κανένα μυστικό και δεν καλεί τίποτα — ο περιηγητής του ίδιου του χρήστη κάνει τη μοναδική κλήση.
Ένα αντιδραστικό query ολοκληρώνει την επιφάνεια:
| Query | Είδος | Εκπέμπει |
|---|---|---|
chat.watchUserLinks |
παρακολούθηση | Ο κατάλογος, που αποστέλλεται ξανά κάθε φορά που δημιουργείται ή αφαιρείται μια σύνδεση |
Υπάρχει επειδή η σύνδεση συμβαίνει στην άλλη πλευρά: ένα μέλος πληκτρολογεί τον κωδικό μίας χρήσης στο bot, οπότε καμία απόκριση πελάτη δεν μπορεί να μεταφέρει την απάντηση πίσω. Ο κατάλογος των ρυθμίσεων και ο ανοιχτός διάλογος «σύνδεση του λογαριασμού μου» τον ακολουθούν και ο διάλογος μετατρέπεται σε επιβεβαίωση τη στιγμή που καταφτάνει η σύνδεση του ίδιου του μέλους.
Το chat.beginUserLink εκδίδει πάντα έναν κωδικό για την ταυτότητα του ίδιου του καλούντος. Το chat.updateBotProfile επιστρέφει ένα remaining_step μόνο όταν απομένει κάποιο βήμα (τυπικά μια επανεγκατάσταση)· η απουσία του σημαίνει ότι η αλλαγή είναι ζωντανή.
Το chat.providers επιστρέφει μία εγγραφή ανά προσφερόμενο πάροχο — τον περιγραφέα συν, όταν υπάρχει, την κατάσταση σύνδεσης. Ό,τι αποδίδει το UI των ρυθμίσεων προέρχεται από αυτό το ωφέλιμο φορτίο, γι’ αυτό η προσθήκη ενός παρόχου είναι αλλαγή μόνο στον διακομιστή.
Αποθήκευση
Ενότητα με τίτλο «Αποθήκευση»| Τι | Πού |
|---|---|
| Διαπιστευτήρια σύνδεσης | <dataDir>/<workspaceId>/chat_credentials/<provider>.json |
| Ημιτελής καθοδηγούμενη ρύθμιση | <dataDir>/<workspaceId>/chat_credentials/<provider>_setup.json |
| Παλιά αρχεία Slack | <dataDir>/<workspaceId>/slack_credentials.json και slack_app_setup.json, διαβάζονται μία φορά και μεταναστεύουν επί τόπου |
Τα διαπιστευτήρια ζουν δίπλα στη βάση δεδομένων του χώρου εργασίας, όχι μέσα της: η διαγραφή ενός χώρου εργασίας παίρνει μαζί της τα token συνομιλίας του και το workspace.export ή ένα αντίγραφο ασφαλείας αντιγράφει το workspace.db — οπότε ένας χώρος εργασίας που παραδίδεται σε κάποιον άλλο δεν κουβαλά ζωντανά token bot. Οι εγγραφές είναι ατομικές (προσωρινό αρχείο συν μετονομασία) και περιορίζονται σε δικαιώματα μόνο του ιδιοκτήτη.
Πίνακες βάσης δεδομένων
Ενότητα με τίτλο «Πίνακες βάσης δεδομένων»Και οι δύο ζουν στη βάση δεδομένων του χώρου εργασίας, η οποία φέρει μια συμπτυγμένη βάση αναφοράς v1 — οπότε μια ανάγνωση από άλλον χώρο εργασίας δεν μεταγλωττίζεται.
chat_space_links — μία εξωτερική συνομιλία ↔ ένας χώρος του Control Center:
| Στήλη | Σημειώσεις |
|---|---|
id |
UUID v4 |
workspace_id |
Εμβέλεια χώρου εργασίας |
provider |
ChatProvider.wire |
external_team_id |
Ομάδα Slack T…, κενό για παρόχους χωρίς την έννοια |
external_channel_id |
Κανάλι Slack C…, ομάδα G…, άμεσο μήνυμα D… |
external_thread_id |
Άγκυρα νήματος Slack, ή null όταν ολόκληρη η συνομιλία είναι η άγκυρα (άμεσα μηνύματα bot) |
cc_space_id |
REFERENCES spaces(id) ON DELETE CASCADE |
created_by_user_id, created_at, last_activity_at |
Μοναδικό στα (workspace_id, provider, external_channel_id, external_thread_id), με μερικό ευρετήριο που επιβάλλει το ίδιο για thread ids με null (το SQLite αντιμετωπίζει τα NULL ως διακριτά).
chat_user_links — ένα εξωτερικό μέλος ↔ ένας χρήστης του Control Center:
| Στήλη | Σημειώσεις |
|---|---|
id |
UUID v4 |
workspace_id |
Εμβέλεια χώρου εργασίας |
provider |
ChatProvider.wire |
external_team_id, external_user_id |
Μέλος Slack U… |
user_id |
Χρήστης του Control Center (καθολικός, γι’ αυτό χωρίς ξένο κλειδί) |
method |
code ή email |
linked_at |
Μοναδικό στα (workspace_id, provider, external_team_id, external_user_id) και στο (workspace_id, provider, user_id) — απόδοση μίας τιμής και προς τις δύο κατευθύνσεις, ενώ ένα άτομο μπορεί να είναι συνδεδεμένο σε πολλούς παρόχους.
Μια σύνδεση είναι επίλυση ταυτότητας, όχι παραχώρηση πρόσβασης: η ιδιότητα μέλους ελέγχεται ξανά σε κάθε εισερχόμενο συμβάν, οπότε μια σύνδεση με μέλος που έχει στο μεταξύ αφαιρεθεί καταλήγει σε άρνηση.
Είδος χώρου και μεταδεδομένα μηνυμάτων
Ενότητα με τίτλο «Είδος χώρου και μεταδεδομένα μηνυμάτων»Ένας γεφυρωμένος χώρος δημιουργείται με το SpaceKind του παρόχου (slack). Συμπεριφέρεται σαν ένας συνηθισμένος χώρος για ανθρώπους — ειδοποιείται και κατατάσσεται σε ενότητες όπως το topic — και το isExternalChat είναι ο έλεγχος από τον οποίο περνά κάθε συμπεριφορά (καθρεφτισμός, σήμανση, διατήρηση).
Κάθε μήνυμα που φέρνει μέσα η γέφυρα φέρει σφραγίδα metadata['chat']:
{ "chat": { "provider": "slack", "teamId": "T024BE7LD", "channelId": "C0G9QF9GW", "threadId": "1700000000.000100", "messageId": "1700000000.000200", "userId": "U024BE7LH", "userLabel": "sam" }}Η σφραγίδα είναι επίσης η προστασία από την ηχώ: ο εξερχόμενος καθρέφτης παραλείπει κάθε μήνυμα που τη φέρει, και αυτό εμποδίζει ένα εισερχόμενο μήνυμα συνομιλίας να αναρτηθεί αμέσως πίσω.
Συμπεριφορά αναμετάδοσης
Ενότητα με τίτλο «Συμπεριφορά αναμετάδοσης»| Συμπεριφορά | Λεπτομέρεια |
|---|---|
| Τι αναμεταδίδεται προς τα έξω | Μόνο το κείμενο του πράκτορα, συν τη γραμμή κατάστασης της κάρτας εργασίας. Η συλλογιστική πρόζα και η έξοδος εργαλείων μένουν στο Control Center |
| Ρυθμός ροής | Περιορίζεται σε μία εκκένωση ανά δευτερόλεπτο όσο εκτελείται μια στροφή· η κάρτα και το κείμενο που εξηγεί ταξιδεύουν στην ίδια κλήση |
| Ανθρώπινα μηνύματα που πληκτρολογούνται στο Control Center | Καθρεφτίζονται στο συνδεδεμένο νήμα, με πρόθεμα το εμφανιζόμενο όνομα του συντάκτη |
| Κενές στροφές | Αναφέρονται με μια σύντομη σημείωση (η εκτέλεση απέτυχε, διακόπηκε ή σταμάτησε στο όριο στροφών της) αντί για σιωπή |
| Αποδιπλασιασμός | Κλειδώνεται με το δικό του id συμβάντος του παρόχου· τα τελευταία 512 θυμούνται |
| Πράκτορας υποδοχής | Μια νέα γεφυρωμένη συνομιλία ξυπνά τον πράκτορα CEO του χώρου εργασίας, αλλιώς τον πρώτο του πράκτορα, αλλιώς κανέναν |
| Ονομασία χώρου | #channel · <request> για νήμα καναλιού Slack, Slack DM · <request> για άμεσο μήνυμα, τίτλοι με ανώτατο όριο 48 χαρακτήρες |
| Απομόνωση αποτυχιών | Ένα προβληματικό συμβάν δεν ρίχνει ποτέ τη γέφυρα· η σύνδεση συνεχίζει να εξυπηρετεί κάθε άλλη συνομιλία |
Δείτε επίσης
Ενότητα με τίτλο «Δείτε επίσης»- Ρύθμιση ενσωμάτωσης Slack
- Σύνδεση λογαριασμού Slack
- Προσαρμογή του chat bot
- Γέφυρες συνομιλίας
- Περιορισμοί για τις κλάσεις ενέργειας που δηλώνουν οι λειτουργίες