> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tedro.io/llms.txt
> Use this file to discover all available pages before exploring further.

# צמתי לוגיקה

> שליטה בזרימה ובהסתעפות בתוך workflows של Tedro.

# צמתי לוגיקה

צמתי לוגיקה שולטים בזרימת ה-workflow. הם מאפשרים ליצור הסתעפויות לפי תנאים, לאכוף rate limits ולסיים במפורש מסלולי הרצה.

***

## logic.switch

**הסתעפות דטרמיניסטית על בסיס תנאים.**

צומת Switch בודק קבוצת תנאים ומנתב את ההרצה למסלול המתאים. אפשר לחשוב עליו כסדרה של בדיקות if/else-if עם fallback ברירת מחדל.

### קונפיגורציה

| Option                  | Type   | Required | Description                                                                                      |
| ----------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------ |
| `conditions`            | array  | Yes      | רשימת אובייקטים של תנאים, כל אחד עם field, operator ו-value                                      |
| `conditions[].field`    | string | Yes      | שדה ההקשר שנבדק, למשל `message.text`, `contact.tags`, `contact.language`                         |
| `conditions[].operator` | string | Yes      | אופרטור השוואה: `equals`, `contains`, `starts_with`, `ends_with`, `gt`, `lt`, `in`, `not_equals` |
| `conditions[].value`    | string | Yes      | הערך להשוואה                                                                                     |
| `conditions[].label`    | string | Yes      | תווית קריאה למסלול, כפי שתופיע על ידית היציאה                                                    |

### Outputs

כל תנאי יוצר ידית יציאה מסומנת, ובנוסף יש ידית **default** עבור הודעות שלא התאימו לשום תנאי.

| Output              | Description                                     |
| ------------------- | ----------------------------------------------- |
| `[condition label]` | ידית אחת לכל תנאי, מופעלת כאשר אותו תנאי מתקיים |
| `default`           | מופעלת כאשר אף תנאי לא מתקיים                   |

### Connections

* **Inputs**: ידית כניסה אחת מהצומת הקודם
* **Outputs**: ידית אחת לכל תנאי ועוד ידית default

### דוגמת שימוש

אחרי ש-`AI Router` מסווג הודעה כ-"billing", "support" או "sales", אפשר להשתמש ב-Switch כדי לנתב כל קטגוריה לצומת `AI Respond` אחר עם system prompt ייעודי. מסלול ה-default יכול להוביל לתשובת עזרה כללית.

***

## logic.rate\_limit

**מניעת ספאם ובקרת עלויות באמצעות מוני קצב מובנים.**

צומת Rate Limit עוקב אחרי תדירות ההודעות וחוסם עיבוד כאשר עוברים את הסף. כך אפשר להגן על תקציב הטוקנים של ה-AI ולמנוע ניצול לרעה.

### קונפיגורציה

| Option          | Type   | Required | Description                                                                       |
| --------------- | ------ | -------- | --------------------------------------------------------------------------------- |
| `maxCount`      | number | Yes      | מספר האירועים המרבי המותר בתוך חלון הזמן                                          |
| `windowSeconds` | number | Yes      | חלון הזמן בשניות, למשל `3600` עבור שעה                                            |
| `scope`         | string | Yes      | טווח ההגבלה: `per-contact` עבור איש קשר בודד, או `per-tenant` עבור כל ה-workspace |

### Outputs

| Output         | Description                               |
| -------------- | ----------------------------------------- |
| `allowed`      | הבקשה נמצאת בתוך מגבלת הקצב ויכולה להמשיך |
| `rate_limited` | הבקשה חרגה מהמגבלה וצריך לטפל בה בהתאם    |

### Connections

* **Inputs**: ידית כניסה אחת מהצומת הקודם
* **Outputs**: שתי ידיות, `allowed` ו-`rate_limited`

### דוגמת שימוש

מקמו את Rate Limit מיד אחרי ה-trigger כדי להגביל כל contact ל-20 הודעות בשעה. חברו את `allowed` לזרימת ה-AI, ואת `rate_limited` להודעה מנומסת שמבקשת להאט או אל `logic.end`.

<Note>
  Rate limits משתמשים במונים אטומיים, ולכן הם עובדים נכון גם תחת מקביליות גבוהה כאשר הודעות מרובות מעובדות בו-זמנית.
</Note>

***

## logic.end

**סיום מפורש של workflow run.**

צומת End עוצר את ההרצה של המסלול הנוכחי. משתמשים בו כדי לסיים בצורה נקייה מסלולים שלא דורשים עוד עיבוד.

### קונפיגורציה

אין אפשרויות קונפיגורציה. הצומת רק מסמן את סוף המסלול.

### Outputs

אין. זהו צומת סופי.

### Connections

* **Inputs**: ידית כניסה אחת מהצומת הקודם
* **Outputs**: אין, זהו צומת טרמינלי

### דוגמת שימוש

במסלול ה-default של Switch שבו אף תנאי לא התקיים ולא צריך להשיב, אפשר לחבר אל End כדי לסיים במפורש את ההרצה. זה שימושי גם אחרי מסלול rate-limited שבו לא רוצים לשלוח הודעה בחזרה.
