אחד הדברים השימושיים ביותר באינטגרומט היא היכולת לייצר מסמכים חשבונאים דינמים באופן אוטומטי. כשאני אומר דינמי, אני מתכוון לכך שיש מספר משתנה של פריטים, מחירים שונים, מאחר ואנחנו לא רוצים לעבוד קשה, יש ליצור מנגנון מסודר שיידע לייצר את המסמכים בין אם יש לנו פריט אחד או מאה פריטים.
קצת תיאוריה
על מנת להבין את הפתרון יש להבין את הבעיה. כל מערכת איקומרס\סליקה שמכבדת את עצמה מסוגלת לשלוח קריאת שרת שמכילה את המידע של אותה רכישה\סליקה. הדבר יכול להתבצע במתודות ובתצורות שונות. היופי של אינטגרומט הוא שהמידע נקרא ומפורמט בצורה אוטומטית למשהו שנראה ככה:
אחד הפורמטים הנפוצים ביותר הוא JSON שזה קיצור של Javascript Object Notation כמו בדוגמה מעל.
ניתן לראות את המשתנים: שם, אימייל, סכום כולל של רכישה. לאחר מכן משתנה בשם Items, חדי העין יבחינו כי הוא קצת שונה כי הוא מכיל בתוכו מערך של אובייקטים. הדרך הכי קלה לתאר מערך היא להסתכל עליו כאל ארונית עם מגירות כאשר כל מגירה מכילה מידע. במקרה שלנו items זו הארונית וכל אובייקט שמכיל את המשתנים item_name, item_price, item_amount ו – item_description היא מגירה.
הבעיה
מודול של Icount באינטגרומט
מודול של חשבונית ירוקה באינטגרומט
במידה ויש פריט אחד במסמך, כמו בדוגמאות מעלה, אין בעיה פשוט ממפים את איבר מספר 1. אבל אם יש מספר אייטמים במסמך, עלינו לאגד את כל המוצרים בצורה דינמית למבנה הספציפי שהמודול מצפה לקבל. אני יודע שלחלקכם זה נשמע כמו סינית אבל אתם לא חייבים להבין את זה ב 100% אלא רק כיצד עושים זאת בעזרת אינטגרומט.
הפתרון
כדי לפתור את האתגר הזה אנחנו משתמשים ב – 2 אפליקציות בילט אין של אינטגרומט שנקראות Iterator ו Array Aggregator.
Iterator – אפליקציה שיודעת לקבל מערך ולרוץ על כל הפריטים אחד אחרי השני. לדוגמא אם אני שולח מערך בשם items שמכיל 4 פריטים כמו בדוגמה הראשונה שלי, התוצאה שלו תהיה 4 באנדלים (ריצות) של מידע, אחת לכל פריט.
בדוגמה הזו אני מראה כיצד אני ממפה את המערך של items שקיבלתי לתוך ה Iterator.
Array Aggregator – אפליקציה שלוקחת באנדלים נפרדים ומייצרת מהם מערך אחד שמכיל את כל הנתונים.
לאחר שמיפינו את המערך שמכיל את ה – items לתוך האיטרטור הוא בעצם מייצר לנו באנדלים שמכילים את המוצרים. כדי שנוכל לייצר מסמך חשבונאי עם כמות פריטים דינמית, נצטרך למלא את הפריטים במסמך בצורה דינמית. מאחר ואנו לא יודעים תמיד כמה פריטים נקבל, בעזרת שילוב של ה – Iterator וה – Array Aggregator נוכל לבצע זאת.
חשוב מאוד – בניגוד לרוב הפעמים, שאנו מוסיפים אפליקציות ומודולים אחד אחרי השני, כאשר אנו מוסיפים את המודול של Array Aggregator, יש לוודא כי יש אחריו מודול של יצירת מסמך (של חשבונית ירוקה, אייקאונט, איזיקאונט וכו') והוא צריך להראות כך לפני שאנו מגדירים את ה Array Aggregator:
ועכשיו להגדרת ה Aggergator עצמו. אנו צריכים להגדיר את ה source module כ Webhook או כטריגר שמתחיל את הסנריו. תחת Target structure type לבחור Income rows (אם מדובר בחשבונית מס לדוגמה). לאחר מכן יש למפות את המידע שקיבלנו מה Iterator לתוך השדות המתאימים.
מודול של חשבונית ירוקה באינטגרומט
יש למפות את התוצאה של ה Array Aggregator לתוך ה – Income rows כמו בדוגמה הבאה:
אתם בטח חושבים לעצמכם "זהו?" אז התשובה היא לא :), מכיוון שאנו משתמשים במודול Array Aggregator, כל המידע שרץ לפני ה Aggregator כבר לא ניתן לשימוש מאיר ועבר אגרגציה. בעצם אם אני רוצה להשתמש במידע כמו: המייל של הלקוח, או השם של הלקוח (שנמצא מחוץ למערך שמכיל את הפריטים) אין לי אפשרות לעשות זאת.
הפתרון הוא להשתמש במודולים: Set Variable ו Get Variable המאפשרים לי לקבוע משתנה שאוכל למשוך ממנו מידע גם אם מדובר בהתפצלות אליה הוא לא מחובר.
הסנריו שלכם צריך להראות כך:
אני אסביר מה שקורה כאן בקצרה:
1. אני מפצל את סנריו ל – 2 ואני שומר את מה שאני רוצה בתור משתנה לפני שהוא עובר אגרגציה בעזרת Set Variable, במקרה שלי קראתי למשתנה שלי בשם name ששומר את שם הלקוח שממופה מהשלב הראשון.
2. אני מושך את המשתנה בעזרת המודול Get Variable, כל מה שעלי לעשות זה להקליד את שם המשתנה.
3. אני ממפה את התוצאה של ה Get Variable לתוך השדה שמכיל את שם הלקוח במודול שמייצר לי את המסמך (חשבונית מס, קבלה וכו')
מאוד חשוב – לאחר הטריגר שלנו, כשאנו מפצלים את הסנריו ל – 2 יש לוודא כי אתם מחברים את המודול של Set Variable ל – Router ורק אז מחברים את ה – Iterator. ה – Router רץ לפי הסדר אליו חיברנו את המודולים אז אנו חייבים לוודא שה – Set Variable ירוץ כדי שהמשתנה שלנו יהיה קיים כאשר ה – Get Variable רץ.
התוצאה הסופית שאנו צריכים לקבל באינטגרומט היא זו:
והמסמך שלנו נראה כך:
אני מבין שזה עלול להיות קצת קשה לעיקול, את מה שביצעתי כאן על המודול של חשבונית ירוקה ניתן לעשות גם באייקאונט ובאיזי קאונט (אפליקציות שאני כתבתי) וגם במודולים של חברות אחרות. ה Best Practice לעשות דברים כאלו זה לעבוד בסביבת Sandbox ולא להוציא מסמכים חשבונאים שתצטרכו לבטל. מהצד השני גם לא תרצו לבצע רכישה בכל פעם שתרצו לבדוק אם הסנריו שלכם מוגדר בצורה הנכונה אבל כיצד עושים זאת אני אשמור לפוסט הבא :).
לפוסט הזה יש 8 תגובות
משי
17 נוב 2022היי תודה על המדריך!
אני לא מוצאת את האפשרות לחבר בכלל את חשבונית ירוקה לאינטגרומט. יכול להיות שזה הוסר?
אייל גרשון
17 נוב 2022את הקישור לאפליקציה אפשר למצוא בדף האפליקציות שלנו, היום זה כבר נקרא Morning 🙂
קחי קישור ישיר למייק – https://eu1.make.com/app/invite/77e0ef8e13813f4b4d254f08c408119d
ישראל
10 מאי 2023מה בדיוק עושים עם הקישור הזה, הוא לא מאפשר להתקין שום דבר בשום מקום, ואני לא מוצא את התוסף בmake
אייל גרשון
10 מאי 2023מה עושים עם איזה קישור?
מוסיפים את האפליקציה על ידי התקנה שלה דרך הקישור – https://eu1.make.com/app/invite/77e0ef8e13813f4b4d254f08c408119d
יעל לוי
6 ספט 2023היי, עשיתי בדיוק לפי ההדרכה פה, באיזיקאונט עבד יפה עם כמות של פריטים, אבל בחשבונית ירוקה- מורנינג הגיעה לי רק שורה אחת, מה יכולה להיות הסיבה?
אייל גרשון
6 ספט 2023היי יעל,
נשמע כאילו משהו מתפספס, אני רוצה לעזור לך לכן אני ממליץ לך מחר לעלות לוובינר שאלות ותשובות ולקבל מענה בלייב.
הצטרפי לקבוצת "מקצועני האוטומציה" בפייסבוק ושם כ 45 דקות לפני עולה קישור להצטרף ללייב.
יעל לוי
10 ספט 2023אוייש פיספסתי, ואני מנסה בסאמיט להעלות ככה את האריי כמו שהעלתי באיזיקאונט, וזה מגיע רק הפריט הראשון, בחשבונית ירוקה בסוף כן הצלחתי, אבל במודולים שלא אתה בנית- זה מתפספס,
שמשון
17 ינו 2024תודה אייל
יכול להיות שחסר משהו במודול של איזיקאונט?
אני מקבל את השגיאה הזו
[200] 'created_by_api_key' is a mandatory key for distributors users (error code: 1)
ואני לא מוצא שום מקום להכניס את הנתון הזה?