ארנקים חיצוניים
חיבור פריסה ייעודית של Nodaro Cloud לארנק משותף משלכם, שמשריין את הקרדיטים של כל לקוח, גובה אותם ומדווח עליהם בכל המוצרים שלכם.
זמין ב-Nodaro Cloud
ארנק חיצוני הוא שירות שאתם מפעילים, שמנהל את התקציב המשותף של כל לקוח, ושפריסה ייעודית של Nodaro Cloud פונה אליו לפני שהיא מוציאה קרדיטים. Nodaro מבקש מהארנק לשריין קרדיטים לפני כל יצירה, מבצע אחר כך חיוב סופי של הסכום המדויק, וקורא את היתרה כדי להציג אותה ללקוח. חשבון החיוב של הפריסה עדיין משלם על השימוש בפלטפורמה מתוך המאגר שלו, ששולם מראש; הארנק קובע כמה מהמאגר הזה כל לקוח יכול להוציא, בכל המוצרים שלכם.
איך החלקים משתלבים
- חשבון חיוב משלם. הפריסה מגדירה חשבון חיוב אחד (
billing.payerAccountבפרופיל הממשק שלה), והמאגר שלו, ששולם מראש, משלם על כל פעולה בפריסה. ראו את הדף מהדורות ופרופילי ממשק. - ה-SSO מזהה את הלקוח. לקוחות מתחברים דרך ספק ה-SSO של הפריסה. ה-subject שהספק נותן ללקוח, שנשלח כ-
sso_subject, הוא הדרך שבה הארנק שלכם מזהה את הלקוח. - הארנק מחליט. בכל בקשה להרצת רכיב יחיד ובכל רכיב בתהליך, Nodaro בודק את המאגר של חשבון החיוב, ששולם מראש, ואז מבקש מהארנק שלכם לשריין מתוך התקציב המשותף של הלקוח. ליתרת הקרדיטים המקומית של הלקוח ב-Nodaro אין שום תפקיד.
כשהמאגר ששולם מראש ריק, הבקשה יכולה להיעצר עוד לפני שפונים לארנק. אחרי שפונים אליו, ההחלטה של הארנק היא סופית לגבי התקציב המשותף של הלקוח.
שריון
לקוח מתחיל יצירה. Nodaro שולח reserve עם operation_id וסכום, והארנק שלכם משריין את הסכום הזה באופן אטומי ועונה allow או deny.
הרצה
כשהתשובה היא allow, המודל רץ. בכל תשובה אחרת, שום דבר לא נשלח למודל.
חיוב סופי
כשהעבודה מסתיימת, Nodaro שולח settle עם הסכום בפועל. הארנק שלכם גובה בדיוק את הסכום הזה ומשחרר את שאר השריון.
הצגת היתרה
האולפן המקוון של הפריסה מבקש מהארנק שלכם את היתרה (balance) של הלקוח, ומציג אותה ביחידת התצוגה של הפריסה.
הגדרת הפריסה
הגדירו את המשתנים האלה ב-API וב-workers:
| משתנה | מה הוא קובע |
|---|---|
DEPLOYMENT_WALLET_URL | נקודת הקצה של הארנק. היא חייבת להשתמש ב-HTTPS. |
DEPLOYMENT_WALLET_TOKEN | סוד שרת ייעודי, ש-Nodaro שולח כאסימון Bearer. |
DEPLOYMENT_WALLET_SSO_PROVIDER | המזהה של ספק ה-SSO שה-subjects שלו מזהים לקוחות. |
DEPLOYMENT_WALLET_TIMEOUT_MS | מגבלת הזמן של כל קריאה לארנק, מ-1000 עד 30000 אלפיות שנייה. ברירת המחדל היא 10000. |
- הגדירו את שלושת הראשונים יחד. כדי להשאיר את החיוב הקיים של הפריסה, השאירו את שלושתם לא מוגדרים.
- כבו את המכסות המקומיות. אכיפת המכסות לכל משתמש,
billing.allowances: "enforce", חייבת להיות כבויה. תצורה שמשלבת את השניים נדחית בהפעלה. - סכמו קודם על היחידה. לפני שאתם מפעילים את הארנק, סכמו על שער ההמרה בין קרדיטים של Nodaro לבין התקציב של המוצר שלכם. הגדירו בהתאם את
billing.unitRateואתbilling.unitLabelבפרופיל הממשק, כדי ששני המוצרים יציגו את אותו מספר.
חוזה הבקשות
Nodaro שולח כל קריאה כבקשת POST עם גוף JSON שכולל את contract: 1 ואת unit: "nodaro_credit", ועם הכותרת Authorization: Bearer <token>. הסכומים הם בקרדיטים של Nodaro. לעולם אל תתייחסו אליהם כיחידות של המוצר שלכם בלי המרה מפורשת שהארנק שלכם אחראי עליה.
שריון
{
"contract": 1,
"unit": "nodaro_credit",
"action": "reserve",
"operation_id": "a3354131-4e5e-43a6-8f61-3914f09c658e",
"job_id": null,
"user_id": "5bf0d884-47b1-468e-a7b2-2433f957b267",
"sso_provider": "partner",
"sso_subject": "customer-123",
"model_identifier": "example-model",
"reserved_credits": 30
}| שדה | משמעות |
|---|---|
operation_id | רשומת שימוש אחת. משימה או תהליך יכולים לכלול כמה רשומות כאלה. |
sso_subject | הלקוח. הערך מגיע מנתוני התחברות מהימנים שהשרת של Nodaro מנהל, ולכן השתמשו בו כדי לזהות את הלקוח. |
sso_provider, user_id | ספק ה-SSO ומשתמש ה-Nodaro שמאחורי הבקשה. |
model_identifier | המודל שמשלמים עליו. |
reserved_credits | מספר הקרדיטים לשריון, כמספר שלם. |
לפני שאתם עונים, שריינו את הסכום באופן אטומי מתוך התקציב המשותף הזמין של הלקוח. כדי לאשר את הבקשה:
{"contract":1,"unit":"nodaro_credit","operation_id":"a3354131-4e5e-43a6-8f61-3914f09c658e","decision":"allow","reserved_credits":30}כשאין מספיק יתרה, או כשלחשבון אסור להוציא, ענו HTTP 200 עם אותה מעטפת ועם "decision": "deny"; אין צורך בסכום. על שגיאת שירות ענו עם סטטוס מחוץ לטווח 2xx.
שום דבר לא מגיע למודל אם הארנק שלכם לא מאשר את הבקשה. פסק זמן, תשובה פגומה, סכום או מזהה שלא תואמים, זהות חסרה ודחייה עוצרים כולם את הבקשה. הכותרת Idempotency-Key של הבקשה היא <operation_id>:reserve.
חיוב סופי או שחרור
כשהעבודה מסתיימת, Nodaro שולח את אותם שדות של הפעולה עם "action": "settle" ועם actual_credits. גבו בדיוק את הסכום הזה ושחררו את שאר השריון. חיוב סופי של 0 משחרר את כל השריון.
{"contract":1,"unit":"nodaro_credit","operation_id":"a3354131-4e5e-43a6-8f61-3914f09c658e","settled":true,"actual_credits":12}- המפתח הוא
<operation_id>:settle. כל בקשה נמסרת לפחות פעם אחת. ניסיון חוזר חייב להחזיר את התוצאה המקורית, בלי לגבות שוב. - אל תקבלו התנגשויות. דחו בקשה לאותה פעולה עם זהות אחרת, תקרת שריון אחרת או סכום סופי אחר.
- חיוב סופי יכול להגיע לפני שריון שהתעכב. חיוב סופי של
0חייב ליצור רשומה סופית וקבועה, גם לפעולה שעדיין לא מוכרת לכם. אסור ששריון שמגיע אחריו יפתח אותה מחדש. - לשריונות אין תאריך תפוגה. יצירה, ובדיקה אנושית של התוצאה שלה, יכולות להימשך יותר מכל בקשת HTTP. שמרו כל שריון עד החיוב הסופי שלו, ושמרו את רשומות האידמפוטנטיות שלכם. לעולם אל תשחררו שריון פעיל בגלל שקריאה חוזרת מתעכבת.
יתרה
{"contract":1,"unit":"nodaro_credit","action":"balance","user_id":"5bf0d884-47b1-468e-a7b2-2433f957b267","sso_provider":"partner","sso_subject":"customer-123"}{"contract":1,"unit":"nodaro_credit","sso_subject":"customer-123","available_credits":250}- זמין פירושו אחרי השריונות. השדה
available_creditsמנכה את כל השריונות הפתוחים, בכל המוצרים שלכם. - כאן מותרים שברים. היתרה יכולה לכלול שברים, כך שאפשר להציג גם שארית שקטנה מקרדיט אחד שאפשר לגבות. סכומי השריון והחיוב הסופי הם תמיד קרדיטים שלמים.
- מספר אחד באולפן. האולפן ממיר את היתרה פעם אחת ליחידת התצוגה של הפריסה, ומסתיר את תצוגת המכסה לכל משתמש שבו. כשהיתרה לא זמינה, היא מוצגת כלא ידועה.
- השריון מכריע במצבי מרוץ. כשבקשות מגיעות באותו רגע, הקריאה לשריון היא הקובעת, לא היתרה.
מסירה והתאוששות
- Nodaro מנסה למסור כל חיוב סופי מיד. אם המסירה נכשלת, worker שרץ כל דקה מנסה שוב, בהשהיה שהולכת וגדלה עד שעה אחת. חיובים סופיים שלא אושרה קבלתם נשמרים עד שהם נמסרים.
- Nodaro מבטל מעצמו רק שריונות שאף פעם לא אושרו. משימות מאושרות שרצות עוברות את ההתאוששות הרגילה של משימות.
- לעולם אל תסירו את תצורת הארנק, ואל תפנו אותה לארנק אחר, כל עוד יש פעולות פתוחות. כדי להחליף את האסימון, החליפו אותו באותו ארנק.
הכלים של חשבון החיוב
חשבון החיוב מנהל את המאגר של הפריסה בדף משלו, /billing-admin, כשהוא מחובר בסשן שלו.
טעינה אוטומטית של המאגר
בדף /billing-admin אפשר להפעיל טעינה אוטומטית. כשהמאגר יורד מתחת לסף, שנקבע בקרדיטים גולמיים, הכרטיס שנשמר בפעם האחרונה שחשבון החיוב קנה בכרטיס מחויב אוטומטית.
- המגבלות הרגילות חלות. כל חיוב הוא מ-$5 עד $1,000. יש לכל היותר 3 חיובים ביום, בהפרש של 10 דקות זה מזה, והטעינה האוטומטית נעצרת אחרי 3 חיובים שנכשלו.
- רק עבודה שהתחילה במוצר עצמו יכולה לגרום לחיוב. אסימוני API אישיים, אפליקציות OAuth, מופעים מחוברים וטריגרים של Webhook, של תזמון ושל טלגרם מוציאים קרדיטים מהמאגר, אבל אף פעם לא מחייבים את הכרטיס. כשהם מורידים את המאגר אל מתחת לסף, הוא נטען ביצירה הבאה שמתחילה באפליקציה.
- הכרטיס של לקוח אף פעם לא מחויב. הטעינה האוטומטית מיועדת רק למאגר של חשבון החיוב.
- קריאת הסטטוס. התגובה של
GET /v1/deployment-billing/balanceכוללת אתautoRecharge: אם הטעינה האוטומטית מופעלת ופעילה, הסף, הסכום, החיובים שנכשלו והניסיון האחרון. הערך שלautoRechargeהואnullכשאי אפשר לקרוא את הסטטוס.
טעינה אוטומטית דורשת פריסה שמקבלת תשלומים בכרטיס. בפריסה בלי תשלומים בכרטיס, מנהל השרת שלה טוען את המאגר בעצמו.
מפתחות לאינטגרציית חיוב
בדף /billing-admin אפשר גם ליצור מפתחות לאינטגרציית חיוב, למערכת אחרת כמו מערכת הניהול הפנימית שלכם. מפתח כזה ניגש רק ל-/v1/deployment-billing/*. הסוג שלו נקבע כשיוצרים אותו:
| מפתח | קידומת | מה מותר לו |
|---|---|---|
| מלא | ndr_bill_… | קריאת המאגר, השימוש והמחירים, וניהול מכסות. |
| קריאה בלבד | ndr_bill_ro_… | קריאה בלבד. כל בקשה שהיא לא GET נדחית עם 403 billing_key_read_only, לפני שהנתיב רץ. |
השתמשו במפתח לקריאה בלבד בכל מקום שבו צריך רק ניטור.
גילוי מחירים
הנתיב GET /v1/deployment-billing/pricing מחזיר את המחירון של הפריסה, לתצוגה ולתכנון של הארנק שלכם. נקודת הקצה דורשת את הסשן של חשבון החיוב או אחד ממפתחות אינטגרציית החיוב שלו.
| שדה | משמעות |
|---|---|
creditCost | התעריף הבסיסי של מודל. |
creditIdentifier | המזהה שהחיוב נרשם עליו. |
pricingBasis | מה התעריף הבסיסי מניח. |
pricing | במודלי טקסט, מפתח המחיר של המודל לכל פעולה, כגון describe-to-picker:<model>. |
estimate | הערך הוא true בשורה של מודל טקסט ובכל רשומת pricing כזאת: המספר הוא אומדן. |
denomination | יחידת הקרדיט וההמרה לתצוגה. |
purchaseOptions | הטעינות הרגילות בדולרים, עם המחיר האפקטיבי לקרדיט. ייתכן שחלים תנאים מסחריים נפרדים. |
- החיוב על מודלי טקסט הוא לפי מודל. ה-
creditIdentifierשל מודל טקסט הוא מפתח המחיר שלו ברכיב יצירת טקסט,llm-chat:<model>, עם:directכשקריאת ברירת המחדל רצה ב-API של יצרן המודל עצמו. ה-creditCostשלו הוא אומדן: קריאה טיפוסית, שמחויבת לפי השימוש בפועל בטוקנים. הציגו אותו כמספר משוער,≈N. על ה-Copilot, על רכיב מתכון תוכן ועל רכיב רעיונות לתוכן החיוב עדיין לפי שורת מדרגה, ואין בשורות שלהםestimate. - מודל טקסט שאין לו מחיר בנתיב שלו מופיע ב-
missing. הערכיםisEnabledו-categoryשל מודל טקסט מגיעים מהשורהllm-chat. - וריאנטים של מדיה מקבלים את המחיר שבתוקף. וריאנט בלי מחיר מוגדר נשאר
null, עם קוד שגיאה. - הגדרות, כמות, משך ושימוש מדוד יכולים לשנות את החיוב הסופי. בהנהלת החשבונות, הסתמכו על סכומי השריון והחיוב הסופי, ולעולם לא על תעריף בסיסי מהרשימה הזאת.
- כדי לזהות שינויים, עדיפה בקשה מלאה עם
If-None-Match. הפרמטרsinceמתבסס על חותמות הזמן של שורות המחיר, ולא יכול לזהות כל שינוי בתצורה של סביבת הריצה.
שאלות נפוצות
מה זה ארנק חיצוני ב-Nodaro?
ארנק חיצוני הוא שירות שאתם מפעילים, שמנהל את התקציב המשותף של כל לקוח בכל המוצרים שלכם. פריסה ייעודית של Nodaro Cloud מבקשת ממנו לשריין קרדיטים לפני שיצירה רצה, מבצעת אחר כך חיוב סופי של הסכום בפועל, וקוראת ממנו את היתרה כדי להציג אותה.
אילו פריסות של Nodaro יכולות להשתמש בארנק חיצוני?
פריסה ייעודית של Nodaro Cloud עם חשבון חיוב, החשבון היחיד שמשלם על כל פעולה בפריסה. הלקוחות שלה מתחברים דרך ספק ה-SSO של הפריסה, והספק הזה מזהה אותם מול הארנק.
מה קורה אם הארנק לא עונה בזמן?
שום דבר לא נוצר. פסק זמן, תשובה פגומה, סכום או מזהה שלא תואמים, זהות חסרה ודחייה עוצרים כולם את הבקשה לפני שמודל כלשהו רץ.
האם אותה בקשת חיוב סופי יכולה להגיע פעמיים?
כן. כל בקשה נמסרת לפחות פעם אחת, ולכן הארנק שלכם חייב להחזיר את התוצאה המקורית לבקשת חיוב סופי שחוזרת, בלי לגבות שוב. הכותרת Idempotency-Key מזהה בקשות חוזרות.
האם לשריונות יש תאריך תפוגה?
לא. יצירה ובדיקה אנושית יכולות להימשך יותר מכל בקשת HTTP, ולכן שריון נשאר עד ש-Nodaro מבצע את החיוב הסופי שלו. לעולם אל תשחררו שריון פעיל בגלל שקריאה חוזרת מתעכבת.
האם מפתח לאינטגרציית חיוב יכול להיות לקריאה בלבד?
כן. חשבון החיוב יוצר מפתחות מלאים (ndr_bill_…) ומפתחות לקריאה בלבד (ndr_bill_ro_…) בדף /billing-admin שלו. מפתח לקריאה בלבד יכול לשלוח רק בקשות GET; כל בקשה אחרת נדחית עם 403 billing_key_read_only.
דפים קשורים
התחברות חיצונית (SSO)
קרדיטים
מהדורות ופרופילי ממשק
קרדיטים
עודכן לאחרונה
פורמט תוכנית הסצנה
איך בנויה תוכנית סצנה תלת־ממדית ב-Nodaro: צורות פשוטות ופריימי מפתח בפורמט 1, וקובצי GLB, ישויות, מסלול מצלמה, שוטים ושכבות־על בפורמט 2.
סקילים לסוכנים
קובצי הוראות מוכנים שמלמדים סוכני קוד לבנות על Nodaro עם ה-SDK ו-OAuth, ולצידם התוסף ל-Claude Code, תדריך ה-SDK ותיעוד בפורמט Markdown.