בתרגול מעשי זה נבנה Workflow מורכב ואוטומטי ב-n8n, המדמה סוכן תיירות המגיב לקלט מובנה וצפוי מהמשתמש. נשתמש בשילוב של כלים: טריגר Chat לקבלת קלט מהמשתמש, שירותי מזג אוויר (OpenWeatherMap) ו-מנוע חיפוש (Tavily) להעשרת המידע, ובלוקי קוד (Code) והגדרת נתונים (Set) לעיבוד המידע ובניית התשובה הסופית.
התרגול יתמקד לא רק בחיבורים פשוטים, אלא גם בטיפול חכם בקלט מורכב (עיר וכתובת מייל בהודעה אחת), התמודדות עם שגיאות (כגון עיר לא קיימת או מייל חסר), ובניית מענה מותאם אישית שנשלח הן לצ'אט והן למייל. זהו שיעור קריטי בהבנת לוגיקה עסקית, עיבוד נתונים מותנה ופיתוח אוטומציות חסינות שגיאות.
שימו לב – תרגול זה מובנה מאוד והוא מהווה בסיס למחקר וללימוד דרך ״לכלוך הידיים״ בהמשך הדרך. חשוב להכיר את החלקים השונים בתרגול ובמערכת. עם זאת – בכל פרק וסעיף, הרגישו חופשי לחקור יותר לעומק ולסקור גם מושגים שונים ואפשרויות שונות שלא הוזכרו במפורש. נתקעתם? לא נורא – חזרו להוראות המקוריות, ותמיד אפשר להתחיל פרויקט חדש ונקי, ולהתנסות מראש הפרק הנוכחי.
בהצלחה!
1. פתיחת ערוצי קלט ועיבוד ראשוני
הצעד הראשון בבניית סוכן התיירות הוא הגדרת הדרך שבה המשתמשים יתקשרו איתו. נשתמש בטריגר של צ'אט ובבלוק Set לצורך ייצוב הקלט, שיאפשר גמישות בחיבור לערוצי קלט נוספים בהמשך.
-
משימה 1 – הגדרת טריגר הצ'אט (Chat Trigger)
- צרו Workflow חדש. הוסיפו את ה-Node מסוג Chat Trigger.
- הגדירו את הפעלת ה-Workflow על סמך Chat Message (הודעת צ'אט).
- הערה: שימו לב ששדה ה-
outputשל ה-Node האחרון בשרשרת יחזור אוטומטית כמענה בצ'אט. - לבדיקה – לחצו על כפתור Open chat בתחתית והכניסו הודעה אחת לצ׳אט. כנסו להגדרות בלוק הצ׳אט ובדקו את מבנה הפלט (Output) מימין.
- נסו את זה: התנסו בפתיחת האפשרות ל-Upload File (העלאת קובץ) בטריגר, ובדקו כיצד ניתן לגשת לפרטי הקובץ (בפורמט JSON) דרך נתיבי הנתונים, וכן לקובץ עצמו (הוא יופיע רק במצב תצוגה Binary בפאנל הפלט של הבלוק). כבו אפשרות זו כרגע.
-
משימה 2 – חילוץ הקלט (Extract Query)
- לאחר טריגר הצ'אט, הוסיפו Node מסוג Set (נקרא גם Edit Fields). קראו לו:
Extract Chat Query. - בתוך ה-Set Node, צרו שדה חדש בשם
query. לצורך כך ודאו שהשדה Mode מוגדר ל – Manual Mapping. - מתוך הפאנל הקלט (Input) משמאל, גררו את השדה
chatInputשמגיע מבלוק הצ׳אט, לתוך שטח ההדבקה Fields to Set.
הוספת נתון לבלוק Set - אחרי שתדביקו את הערך תיפתח לכם אפשרות להגדיר איך יקרא השדה באובייקט הפלט (Output) של הבלוק. תנו לו את שם השדה
query.
בלוק Set – עריכת שדה חדש
- לאחר טריגר הצ'אט, הוסיפו Node מסוג Set (נקרא גם Edit Fields). קראו לו:
2. מזג אוויר וחיפוש מתקדם
כעת, נוסיף את ליבת הסוכן: איסוף מידע על מזג האוויר והצעות לתיירות, ונכיר את הדרך להתמודד עם שגיאות. לפני הבלוקים הללו, נוסיף בלוק שכל תפקידו לייצב את שמות השדות שנוצרו (כדי לא לאבד את המידע הקריטי במהלך השרשור), ובהמשך נוסיף את שורות מזג האויר (OpenWeatherMap) ומנוע החיפוש Tavily.
-
משימה 3 – ייצוב הקלט להמשך התהליך (No Operation)
-
משימה 4 – פירוק הקלט באמצעות Code Node
- חברו בלוק מסוג Code לאחר בלוק 'Raw Input' שיצרתם.
- המטרה של הבלוק הזה היא לפרק את הקלט (שמכיל עיר וכתובת מייל מופרדים בפסיק, לדוגמה: "Tel Aviv, myname@example.com") לשני שדות נפרדים:
cityו –email - שימו לב: בלוק זה מיועד לאנשים בעלי נסיון בכתיבת קוד Javascript או Python, אך ניתן להשתמש בו גם ללא כל ידע בקוד. לצורך כך נעבור לטאב Ask AI, ונדביק את ההוראה הבאה:
Return a JSON with the fields:
"city" (strong) and "email" (string)
the values are in the input "query" field, separated by a comma.
Note that each of the values might have leading our trailing spaces.
If one of the output fields is missing, just pass null
Note that there might be more than a single email address, in such case put them all, separated by commas, in the email field. - לחצו על Generate Code ושימו לב לקוד שנוצר עבורכם. אם הכפתור לא זמין – יש להריץ את השלבים הקודמים בתהליך מחדש – הוסיפו הודעה חדשה בצ׳אט וחזרו לעריכת הבלוק.

בלוק Code – עוזר AI - לאחר שהגיע קלט חדש לבלוק (בפאנל הקלט משמאל), לחצו על Execute Step לקבלת הפלט.
- ודאו שהקוד עובד כראוי על נתונים עם רווחים לפני ואחרי הפסיק, ומחזיר את הנתונים בפורמט JSON עם השדות
cityו-email. - לצורך ייצוב הפלט של בלוק הקוד – חברו אליו בלוק נוסף מסוג No Operation וקראו לו
Structured Input.
-
משימה 5 – חיבור ל-OpenWeatherMap וטיפול בשגיאה
- חברו Node מסוג OpenWeatherMap לבלוק ה-'Structured Input' שיצרתם.
- ודאו כי הבלוק מחובר ל Credential פעיל.
- בבלוק זה, עברו לתצוגת Scheme בפאנל הקלט משמאל, וגררו את הנתון
cityלשדה City בטופס ההגדרות. שימו לב לביטוי (Expression) שנוצר בשדה. - הפעילו את ה-Workflow ובדקו עיר תקינה. לאחר מכן, נסו עיר לא קיימת כדי לוודא שמופיעה שגיאה.
- טיפול בשגיאה: עברו לטאב Settings בראש טופס ההגדרות של הבלוק, ובשדה On Error בחרו באפשרות 'Continue (using error output)'. זה ייצור יציאה חדשה מהבלוק – לצורך טיפול בשגיאה. חזרו למשטח העבודה.
- חברו ליציאת ה – Error בלוק חדש מסוג Set. קראו ל-Set Node הזה:
OWM Error Message to Chat. - בבלוק ה – Set של השגיאה, הוסיפו שדה בשם
outputעם הודעת שגיאה ידידותית ללקוח (שתוחזר לממשק הצ׳אט):
Unfortunately, I could not find information for that city. Please try again with a valid city name.
טיפ: תוכלו להשתמש גם בערך הcityמהבלוק של 'Structured Input' על מנת לדייק את ההודעה ללקוח (מה שם העיר שנקלט). פשוט גררו אותו לחלון עריכת ההודעה, ומקמו אותו כראוי.
-
משימה 6 – חיפוש רעיונות לטיולים (Tavily)
- חברו Node מסוג Tavily ליציאה התקינה של בלוק ה – OpenWeatherMap.
- בבלוק ה – Tavily, ודאו שבחירת הפעולה (Resource) היא Search והפעולה (Operation) היא Query.
- בשדה ה-Query, השתמשו ב-Expression Editor כדי לבצע חיפוש דינמי על העיר שהתקבלה. להכנסת הנתון הדינמי – גררו אותו מפאנל הקלט, תחת הבלוק של 'Structured Input':
Things to do in {{ $('Structured Input').item.json.city }}. Ideas for tourism. - לחצו על Execute Step ובדקו את מבנה הפלט.
- עכשיו נרצה להוסיף גם שדה את תשובה קצרה ומנוסחת. לצורך כך תחת Options לחצו על Add Option ובחרו 'Include Answer'.
- הריצו את הבלוק שוב, ובדקו את שדה ה
answerשהתווסף.
3. בניית הפלט ושליחה
כעת נחבר את כל חלקי המידע שקיבלנו לתשובה קוהרנטית שנשלח במייל, ונוודא שה-Workflow שלנו תמיד יודע להחזיר תשובה מסודרת לצ'אט גם במקרה של שגיאה.
-
משימה 7 – בניית פלט מאוחד (Build Final Output)
- לאחר בלוק ה – Tavily, הוסיפו בלוק חדש מסוג Set. קראו לו: Build Answer.
- צרו שדה חדש בשם
outputעם התוכן המבני הבא. שימו לב לנתונים הדינמיים הנדרשים (גררו אותם מפאנל הקלט לפי הצורך):
Here is some information about {{ $('Structured Input').item.json.city }} today.
Things to do:
{{ $json.answer }}
Weather:
The temperature is {{ $('OpenWeatherMap').item.json.main.temp }} degrees Celsius with humidity of {{ $('OpenWeatherMap').item.json.main.humidity }}%. - הערה: הנתיבים בדוגמה זו ספציפיים להגדרת שמות הבלוקים OpenWeatherMap וכו׳. הם עשויים להשתנות לפי השמות שקבעתם בתהליך שלכם. ערכו את הביטוי בהתאם.
- לצורך ייצוב הערך – הוסיפו בלוק No Operation נוסף לאחר Tavily, וקראו לו
Final Answer
-
משימה 8 – שליחת המייל (Gmail Node) וטיפול בשגיאות
- חברו בלוק מסוג Gmail לאחר הבלוק של – 'Final Answer'.
- בבלוק Gmail, הגדירו את השדות באופן הבא:
- To: מתוך שדה
emailמהבלוק 'Structured Input' - Subject: כותרת למייל, הכוללת את השדה
cityמהבלוק 'Structured Input' - Body: הפלט של הבלוק המחובר – 'Final Answer'
- To: מתוך שדה
- בדיקה: אפסו את חלון הצ׳אט והכניסו ערך המכיל שם של עיר וכתובת מייל אחת או יותר, לדוגמא
Jerusalem, my.name@gmail.com ודאו שקיבלתם מייל תקין.
- שימו לב לתשובה בצ׳אט – זהו הפלט של הבלוק האחרון בשרשרת. כדי להחזיר תשובה קריאה – הוסיפו בלוק Set נוסף, והגדירו לו את שדה הפלט
outputכראוי.
טיפ: במקרה של שליחת מייל תקינה, ניתן להוסיף שורת חיווי בסיום ההודעה בצ׳אט:Sent Successfully by Email. - בדקו שוב, וודאו תשובה תקינה לצ׳אט, ומייל תקין התקבל.
- כעת בדקו התנהגות של קלט המכיל רק שם של עיר, ללא מייל – מוחזרת שגיאה מבלוק המייל. נטפל בה מיד.
- טיפול בשגיאות מייל: הפעילו את ה-Error Output בבלוק Gmail (מתוך הטאב Settings).
- חברו את יציאת השגיאה (Error Output) של Gmail ל-Node חדש מסוג Set. הוסיפו שדה
outputעם הטקסט המלא של בלוק 'Final Answer'. - בדקו שוב קלט של שם עיר בלבד.
4. תרגול פתוח ואתגרי הרחבה
ה-Workflow שבניתם הוא בסיס מצוין. כעת, עליכם "ללכלך את הידיים" ולחקור את המערכת על ידי התמודדות עם אתגרים מורכבים יותר.
במקרה שהועברו בקלט מספר כתובות מייל, המשימה היא לשלוח את המייל הראשון ב-To, ואת כל שאר המיילים שהוזנו ב-CC.
- עדכנו את בלוק ה Code כך שיחזיר שלושה שדות פלט:
city,to_emailו-cc_emails(רשימת כל שאר המיילים, מופרדים בפסיקים). עדכו את ההוראות בטאב Ask AI בבלוק. - עדכנו את ה-Gmail Node כך שישתמש בשדות המתאימים.
סיימתם לבנות Workflow אוטומטי ומורכב ב-n8n. למדתם כיצד לטפל בכמה אתגרים מרכזיים באוטומציה: שילוב בין ערוצי קלט שונים (צ'אט, מייל), עיבוד קלט מורכב באמצעות קוד, העשרת נתונים משירותים חיצוניים (OWM, Tavily), והכי חשוב – יצירת תהליך חסין שגיאות באמצעות Error Outputs. אלו הם העקרונות הבסיסיים ביותר לבניית אוטומציות יציבות, ואתם מוכנים כעת לפתור כל אתגר אוטומציה מורכב.