Μετάβαση στο κύριο περιεχόμενο
Προγραμματιστές Κάρτες μηνυμάτων

Σχεδίασε κάρτες μηνυμάτων

Ό,τι δημοσιεύει ένα bot, είτε από webhook, είτε ως απάντηση σε εντολή, είτε ως ενημέρωση μετά από πάτημα κουμπιού, είναι κάρτα. Μια καλή κάρτα λέει με μια ματιά τι συνέβη: μια χρωματιστή άκρη, ένας τίτλος, μια κατάσταση και από κάτω οι λεπτομέρειες.

Τι μπορείς να κάνεις

  • Δείξε μια κατάστασηΜια χρωματιστή ένδειξη όπως Open, Merged ή Passing, με τις γραμμές που προστέθηκαν και αφαιρέθηκαν.
  • Παράθεσε τις λεπτομέρειεςΓραμμές με ετικέτα και τιμή που τα μέλη αντιγράφουν με ένα πάτημα.
  • Γράψε σε markdownΈντονα, inline κώδικας, μπλοκ κώδικα, παραθέσεις και πλαίσια ελέγχου.
  • Δείξε ότι δουλεύειςΈνα spinner όσο το bot σου σκέφτεται, και μετά ο συλλογισμός του πίσω από έναν διακόπτη.

Στην εφαρμογή

Τέσσερις κάρτες όπως τις βλέπουν τα μέλη. Η καθεμία είναι λίγες γραμμές JSON.

Η ανατομία μιας κάρτας

Τα μέρη μιας κάρτας, από πάνω προς τα κάτω. Παράλειψε ό,τι δεν χρειάζεσαι: μια κάρτα μόνο με τίτλο είναι εντάξει.

  1. Κεφαλίδα«Message from» και ένα όνομα: το όνομα του webhook ή, σε απάντηση εντολής, το όνομα της κοινότητάς σου. Μια απάντηση μπορεί να προσθέσει ένα badge, όπως το αποθετήριο.
  2. Τίτλος και κατάστασηΤο title, που γίνεται σύνδεσμος όταν ορίσεις title_url, με την ένδειξη status δίπλα του.
  3. ΥπότιτλοςΜια δεύτερη γραμμή με έντονα, το sub_title.
  4. ΠεριγραφήΤο κυρίως κείμενο, σε markdown.
  5. ΠεδίαΓραμμές με ετικέτα και τιμή, με κουμπί αντιγραφής.
  6. ΥποσέλιδοΗ ώρα, και οι γραμμές που προστέθηκαν και αφαιρέθηκαν, αν τις στείλεις.
json
{
  "message_container": {
    "type": "embed_message",
    "badge": "acme/web",
    "color": "purple",
    "title": "Pull request #212 opened",
    "title_url": "https://github.com/acme/web/pull/212",
    "status": { "label": "Open", "color": "green", "icon": "pull_request" },
    "sub_title": "Faster search in the channel list",
    "description": "Search now runs **per keystroke** with a 120 ms debounce.",
    "fields": [
      { "field": "Author", "value": "maya" },
      { "field": "Reviewers", "value": "dani, sam" }
    ],
    "additions": 86,
    "deletions": 12,
    "files_changed": 3
  }
}

Όλα τα πεδία

Αυτά μπαίνουν στο message_container. Μια κάρτα χρειάζεται περιγραφή ή loader. Τα πεδία με τη σήμανση «Απαντήσεις σε εντολές» παραλείπονται όταν δημοσιεύεις μέσω webhook.

ΠεδίοΤύποςΤι κάνει
typestringembed_message (η προεπιλογή) ή system_message.
badgestringΈνα μικρό σήμα μετά το όνομα στην κεφαλίδα, όπως acme/web. Απαντήσεις σε εντολές
avatar_urlstringΜια εικόνα πάνω από το εικονίδιο της κάρτας.
colorstringΤο χρώμα της άκρης. Δες τα χρώματα παρακάτω.
titlestringΗ πρώτη γραμμή, με έντονα.
title_urlstringΚάνει τον τίτλο σύνδεσμο.
sub_titlestringΜια δεύτερη γραμμή με έντονα, κάτω από τον τίτλο.
descriptionstringΤο κυρίως κείμενο, σε markdown.
fieldsarray[{ "field": "…", "value": "…" }]: γραμμές με ετικέτα και τιμή.
image_url, image_base64stringΜια εικόνα στην κάρτα.
imagesarray[{ "image_url": "…" }]: μια συλλογή από πολλές εικόνες.
statusobject ή stringΜια χρωματιστή ένδειξη δίπλα στον τίτλο. Δες παρακάτω. Απαντήσεις σε εντολές
additions, deletions, files_changednumberΣτατιστικά diff στο υποσέλιδο. Απαντήσεις σε εντολές
loader, loader_text, loader_sub_textboolean, stringΈνα spinner αντί για το κυρίως κείμενο.
thinkingstringΣυλλογισμός πίσω από έναν διακόπτη Show thinking. Απαντήσεις σε εντολές
Η περιγραφή και το thinking καταλαβαίνουν markdown: **bold**, _italic_, ~~strike~~, `inline code`, μπλοκ κώδικα ανάμεσα σε τριπλά backticks, > quotes, πλαίσια ελέγχου - [x], @mentions και :emoji:.

Κατάσταση και στατιστικά diff

Μια ένδειξη κατάστασης λέει την ιστορία πριν διαβάσει κανείς το κείμενο. Βρίσκεται δίπλα στον τίτλο ή, όταν δεν υπάρχει τίτλος, στο υποσέλιδο. Τα στατιστικά diff εμφανίζονται δίπλα στην ώρα. Και τα δύο λειτουργούν σε απαντήσεις εντολών, και τα χρησιμοποιεί η έτοιμη ενσωμάτωση GitHub. Ένα webhook τα παραλείπει.

json
{
  "message_container": {
    "color": "red",
    "title": "Build failed on main",
    "status": { "label": "Failing", "color": "red" },
    "description": "`search.test.js`: 2 of 212 tests failed."
  }
}
ΠεδίοΤύποςΤι κάνει
statusobject ή stringΈνα σκέτο string είναι η ετικέτα: "status": "Open".
status.labelstringΤο κείμενο της ένδειξης. Χωρίς αυτό δεν υπάρχει ένδειξη.
status.colorstringgreen, purple, red, orange, yellow, blue ή gray.
status.iconstringΈνα προαιρετικό εικονίδιο από την παρακάτω λίστα.
additionsnumberΓραμμές που προστέθηκαν, εμφανίζονται ως πράσινο +86.
deletionsnumberΓραμμές που αφαιρέθηκαν, εμφανίζονται ως κόκκινο -12.
files_changednumberΑρχεία που άλλαξαν, εμφανίζονται ως 3 files.

Εικονίδια

ΤιμήΕικονίδιοΤυπική χρήση
pull_requestgit-pull-requestΆνοιξε ένα pull request
pull_request_closedgit-pull-request-closedΈκλεισε χωρίς merge
merge, mergedgit-mergeΈγινε merge
commitgit-commitΈνα commit που έγινε push
issuecircle-dotΆνοιξε ένα issue
issue_closedcircle-checkΈκλεισε ένα issue
checkcircle-checkΤα τεστ πέρασαν, μια εργασία ολοκληρώθηκε με επιτυχία

Μια αντιστοίχιση που δουλεύει για το GitHub

Η έτοιμη ενσωμάτωση GitHub χρησιμοποιεί αυτές τις τιμές. Αντίγραψέ τες για τα δικά σου εργαλεία.

ΣυμβάνΕτικέταΧρώμαΕικονίδιο
Άνοιξε pull requestOpengreenpull_request
Πρόχειρο (draft)Draftgraypull_request
Έγινε mergeMergedpurplemerged
Έκλεισε χωρίς mergeClosedredpull_request_closed
Άνοιξε issueOpengreenissue
Έκλεισε issueClosedpurpleissue_closed
Έγινε push ενός commitCommitgraycommit
Τα τεστ πέρασανPassinggreencheck
Τα τεστ απέτυχανFailingredκανένα

Loader και συλλογισμός

Για ό,τι παίρνει λίγο χρόνο, όπως μια απάντηση AI ή μια μεγάλη εργασία, δημοσίευσε πρώτα μια κάρτα με spinner και μετά αντικατάστησέ τη με το αποτέλεσμα. Ο loader λειτουργεί σε webhooks και σε απαντήσεις εντολών. Σε απάντηση εντολής μπορείς επίσης να βάλεις τον συλλογισμό του μοντέλου στο thinking: τα μέλη βλέπουν έναν διακόπτη Show thinking αντί για έναν τοίχο κειμένου.

assistant
System
Message from Assistant
Σκέφτομαι…Διαβάζω τα τελευταία 50 μηνύματα

Πρώτα: ο loader

assistant
System
Message from Assistant

maya: πότε είναι το standup;

Το standup είναι στις 09:30, στο #daily.
Έλεγξα τα καρφιτσωμένα μηνύματα και το επαναλαμβανόμενο συμβάν στο #daily.

Μετά: η απάντηση, με τον συλλογισμό διπλωμένο

json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "loader": true,
    "loader_text": "Thinking…",
    "loader_sub_text": "Reading the last 50 messages"
  }
}
json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "sub_title": "maya: when is the standup?",
    "description": "Standup is at **09:30**, in #daily.",
    "thinking": "Checked the pinned messages and the recurring event in #daily…"
  }
}
ΠεδίοΤύποςΤι κάνει
loaderbooleanΤο true δείχνει το spinner αντί για το κυρίως κείμενο.
loader_textstringΗ γραμμή δίπλα στο spinner, όπως «Σκέφτομαι…».
loader_sub_textstringΜια μικρότερη γραμμή από κάτω.
thinkingstringΔιπλωμένος συλλογισμός κάτω από την περιγραφή, σε markdown.

Για να αντικαταστήσεις τον loader με την απάντηση, ενημέρωσε το μήνυμα με μια νέα κάρτα χωρίς loader. Πώς γίνεται θα το βρεις στις ζωντανές ενημερώσεις.

Μεγάλες περιγραφές

Μια περιγραφή μπορεί να φτάσει τα 50.000 bytes. Μετά τα πρώτα 1.000, τα μέλη βλέπουν την αρχή και ένα κουμπί Show more που φορτώνει τα υπόλοιπα, ώστε μια μεγάλη αναφορά να μην πλημμυρίζει το κανάλι.

Μηνύματα συστήματος

Όρισε "type": "system_message" για μια ανακοίνωση αντί για ανάρτηση bot: παράθυρα συντήρησης, αλλαγές κανόνων, ό,τι μιλά εκ μέρους της ίδιας της κοινότητας. Δέχεται τα ίδια πεδία και κουμπιά.

json
{
  "message_container": {
    "type": "system_message",
    "color": "orange",
    "title": "Maintenance tonight",
    "description": "The build servers are down from 22:00 to 23:00."
  }
}

Χρώματα

Το χρώμα της άκρης είναι το πιο γρήγορο σήμα σε μια κάρτα. Χρησιμοποίησε το ίδιο χρώμα για το ίδιο είδος είδησης, κάθε φορά.

ΧρώμαΧρησιμοποίησέ το για
greenΕπιτυχία: πέρασε, έγινε deploy, ολοκληρώθηκε
redΑποτυχία: απέτυχε, εκτός λειτουργίας, απορρίφθηκε
orangeΜια προειδοποίηση που θέλει μια ματιά
yellowΑναμονή για κάποιον: εγκρίσεις, ερωτήσεις
blueΠληροφορία, η προεπιλογή
purpleΣυμβάντα κώδικα ή κάτι ξεχωριστό

Φτιάξε το embed σου

Επεξεργάσου τα πεδία ή το JSON payload: τα δύο μένουν συγχρονισμένα. Η προεπισκόπηση δείχνει το μήνυμα ακριβώς όπως θα εμφανιστεί σε ένα κανάλι. Αυτό είναι το πραγματικό body του webhook. Αντίγραψέ το όταν όλα δείχνουν σωστά.

Πρότυπα
Κουμπιά
Προεπισκόπηση
Body του webhook

Συνέχισε να φτιάχνεις