מציגים את ערכות ה-SDK של SupDesk
כל מוצר רציני מוצא את עצמו כותב שכבת אינטגרציה — סקריפט שקורא מתיבת דואר נכנס, עבודת cron שמסנכרנת לוח, אנדפוינט שמגיש משוב מה-UI של עצמכם. קונסולת SupDesk מצוינת כשאתם ליד המקלדת. ברגע שבו אתם רוצים לבצע אוטומציה, אתם צריכים API — ו-API טוב רק כמו הקליינטים שדרכם מדברים איתו.
היום אנחנו משחררים ארבעה מהם.
הכירו את ערכות ה-SDK
- JavaScript / TypeScript —
supdeskב-npm. רץ ללא שינוי ב-Node 18+, ב-Deno, ב-Bun וב-Cloudflare Workers, עם אפס תלויות ריצה. - Python —
supdeskב-PyPI. קליינטSupDeskסינכרוני אחד וקליינטAsyncSupDeskאסינכרוני אחד, החולקים ליבת httpx אחת. - Go —
github.com/rabinapps/supdesk-go. רק ספריית התקן, כך שהוא נבנה בכל מקום שבו Go 1.23+ רץ — כולל Cloudflare Workers באמצעותGOOS=wasip1. - Dart —
supdeskב-pub.dev. בנוי על dio, כך ש-interceptors,CancelTokenומתאמי proxy פועלים כפי שאתם כבר מצפים.
התקנה
npm install supdeskpip install supdeskgo get github.com/rabinapps/supdesk-godependencies:
supdesk: ^0.1.0API אחד, ארבע שפות
ערכות ה-SDK אינן ארבעה עטיפים נפרדים; הן אותו API עם אותה סמנטיקה בכל שפה. אם תוכלו לקרוא הגשות באחת מהן, תוכלו לקרוא אותן בכל ארבע.
דפדוף אוטומטי. list() מחזיר עמוד שהוא גם async iterable — עברו על כל עמוד עם for await, או שלפו רק את העמוד הראשון כשזה כל מה שאתם צריכים.
משאבים בעלי טיפוס. הגשות, משוב, רשומות יומן שינויים, הודעות, הרשמות לרשימת המתנה, תוכניות בטא ובודקים, ומאמרים וקטגוריות של מרכז העזרה — לכל אחד המתודות שמצפים מהן ופרמטרים בעלי טיפוס, כך ששגיאות הקלדה נכשלות בזמן הידור במקום בייצור.
שגיאות בעלות טיפוס. כל כשל נובע מבסיס יחיד — SupDeskError ב-JS וב-Python, APIError ב-Go ו-SupDeskException ב-Dart — כך ש-catch אחד מטפל בכול, בעוד ש-instanceof או errors.As עדיין מצמצמים למקרה הספציפי.
Webhooks. constructEventFromRequest, construct_event_from_headers, ConstructEvent ו-constructEventFromHeaders מאמתים את החתימה של SupDesk בזמן קבוע, כך שתוכלו לסמוך על מה שהמקבל שלכם פועל על פיו.
עמידות מובנית. כל קליינט חוזר על הפעולה עם backoff אקספוננציאלי ו-jitter, מכבד Retry-After, ולעולם אינו חוזר על POST מדוד שאולי כבר קיבל — רשת לא יציבה לא תגיש פעמיים את הפנייה של משתמש.
צד שרת בעיצובו
מפתחות ה-API של SupDesk מאמתים אתכם כפרויקט שלם, ולכן ערכות ה-SDK מסרבות לרוץ בדפדפן — הבנאים של JS ו-Dart זורקים חריגה אם הם מזהים DOM או build של קליינט, וקובצי ה-README אומרים בפה מלא למה. שמרו את המפתח במשתנה סביבה בצד השרת, מאחורי אנדפוינט שבשליטתכם.
שני דברים נוספים שכדאי לדעת: קריאה עובדת בכל תוכנית, בעוד שכתיבה (POST/PATCH/DELETE) דורשת תוכנית בתשלום; והמפתחות מוגדרים ברמת הפרויקט, אז העניקו לכל סביבה מפתח משלה — ותוכלו לבטל אחד בלי לגעת בשאר.
איפה SupDesk משתלבת
ערכות ה-SDK הן החצי האחורי של מדריך האינטגרציה של SupDesk ל-SaaS — תמיכה מרובת-דיירים, גישת API ו-webhooks למוצרים שרוצים תמיכה מובנית במערכות שלהם. התיעוד המלא נמצא ב-תיעוד ה-API.
איך מתחילים
קחו מפתח API מ-הגדרות סביבת העבודה → מפתחות API, התקינו את הקליינט המתאים לערימת הטכנולוגיה שלכם, והריצו את המדריך המהיר בעמוד הזה. אחר כך שכפלו את המאגר וקראו את ה-README.
SDKs בצד השרת לשילוב backend
דוגמאות קוד חיות שנטענות ממאגר ה-GitHub של כל SDK.
import { SupDesk } from "supdesk";
const supdesk = new SupDesk({ apiKey: process.env.SUPDESK_API_KEY! });
// Auto-pages: iterating walks every page for you.
for await (const submission of await supdesk.submissions.list({
status: "open",
})) {
console.log(submission.title);
}
await supdesk.submissions.create({
type: "bug",
title: "Export button does nothing",
email: "user@example.com",
body: "Clicking Export on the reports page has no effect.",
});from supdesk import SupDesk
supdesk = SupDesk() # api_key=... or $SUPDESK_API_KEY
# Auto-pages: iterating walks every page for you.
for submission in supdesk.submissions.list(status="open"):
print(submission.title)
supdesk.submissions.create(
type="bug",
title="Export button does nothing",
email="user@example.com",
body="Clicking Export on the reports page has no effect.",
)import "github.com/rabinapps/supdesk-go/supdesk"
client, err := supdesk.New(os.Getenv("SUPDESK_API_KEY"))
if err != nil {
log.Fatal(err)
}
page, err := client.Submissions.List(ctx, supdesk.SubmissionsListParams{
Status: ptr("open"),
})
if err != nil {
return err
}
// Auto-pages: All walks every page for you.
for sub, err := range page.All(ctx) {
if err != nil {
return err
}
fmt.Println(sub.Title)
}
_, err = client.Submissions.Create(ctx, supdesk.SubmissionsCreateParams{
Type: supdesk.SubmissionTypeBug,
Title: "Export button does nothing",
Email: "user@example.com",
Body: "Clicking Export on the reports page has no effect.",
})import 'dart:io';
import 'package:supdesk/supdesk.dart';
final supdesk = SupDesk(apiKey: Platform.environment['SUPDESK_API_KEY']!);
// Auto-pages: the stream walks every page for you.
final page = await supdesk.submissions.list(status: PostStatus.open);
await for (final submission in page.autoPaging()) {
print(submission.title);
}
await supdesk.submissions.create(
type: SubmissionType.bug,
title: 'Export button does nothing',
email: 'user@example.com',
body: 'Clicking Export on the reports page has no effect.',
);