הפקת שטר מטען בUPS

אם גם לכם נמאס למצוא את האנשים שלכם ״שורפים״ שעות בזמן חיפוש אחר כתובות באתר של ups על מנת ליצור שטרי מטען או שמשלוחים ייתעכבו ויגיעו לכתובות לא נכונות כי מישהו טעה והעתיק כתובת לא נכונה, המדריך הבא נכתב עבורכם.

אז ככה, את התהליך אנחנו נבנה בIntegromat ובמדריך אני משתמש בתהליך שלוקח את הנתונים מPipedrive אבל כמובן שזה לא משנה מהיכן המידע מגיע.

לפני שאנחנו מתחילים ראשית יש לדאוג שיש לכם את הדברים הבאים:
1.רשות לגשת לApi (עליכם ליצור קשר עם האיש מכירות שלכם מups על מנת לקבל הרשאה להשתמש במערכת).
2. מידע אודות פרטי הכתובת אליה נרצה לשלוח את החבילה.
3. רשות אבל מומלץ: מדפסת מדבקות המוגדרת בgoogle Cloud Print.
4. רשות : גישה למאגר קודים ממפה, המערכת של ups לכתובות מבוססת על המאגר כתובות ממפה, אומנם לא חייב שהנתון יוזן (לפחות לזמן כתיבת שורות אלו) אך מומלץ בכדי שהשטר מטען ייצא עם אזור החלוקה המדוייק ביותר. (ניתן לפנות לUPS לקבל הצעת מחיר בנוגע לשימוש במידע).

נתחיל, ראשית עלינו לבצע חיבור למערכת הAPI של UPS ולאמת את המשתמש שלנו.
בכדי לבצע את האימות אנחנו זקוקים ל3 פרטים:
1. כתובת מייל (הכתובת איתה אתם מתחברים לאתר של UPS).
2. סיסמה (איתה אתם מתחברים לאתר של UPS).
3. מספר לקוח.

בסנריו שבו אנחנו רוצים להפיק את השטר מטען נוסיף מודול HTTP-> Make request

חשוב לוודא שהסימון בShow advanced settings דולק.

בשדה URL נזין את הכתובת הבאה:
https://www.ship.co.il/ShipWebServices/Authenticationservice.svc

בשדה Method נבחר ב Post.

בשדה Body type נבחר בRAW.

בשדה Content Type נבחר (XML(text/xml.

בשדה Request Content נזין את המידע הבא:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<Login xmlns="http://asp.net/ApplicationServices/v200">
<username>[email protected]</username>
<password>yourpassword</password>
<customCredential></customCredential>
<isPersistent>true</isPersistent>
</Login>
</Body>
</Envelope>

בשדה Headers צריך להוסיף את הפרטים הבאים:
בשדה Name:
SOAPAction
בשדה Value:
http://asp.net/ApplicationServices/v200/AuthenticationService/Login
ונלחץ על OK.

לאחר מכן נוודא שבשדה Timeout רשום 150.
והשדה Share cookies with other HTTP modules מופעל

לאחר ששלחנו פקודה לבצע חיבור לAPI השרת יחזיר לנו תשובה האם החיבור הצליח, אפשר לבצע אימות ברמת האוטומציה שהחיבור הצליח בעזרת ניטור של התשובה שמתקבלת מהשרת ולדוגמא לשלוח מייל במידה והחיבור כשל, אבל הפעם לא נפרט במדריך זה כיצד ניתן לעשות זאת.

יצירת שטר מטען לכתובת ספציפית

נבצע ״שכפול״ של המודול שיצרנו בעזרת קליק ימני ולחיצה על Clone במודול החדש שנוצר נעדכן את השדה של הURL לכתובת הבאה:
https://www.ship.co.il/ShipWebServices/SHipWbService.svc?wsdl

בשדה Headers נמחק את הHeader הקודם שהיה לנו ונכניס את הHeader הבא:
SOAPAction
בשדה Value:
http://tempuri.org/IShipWBService/InsertWbShipment
ונלחץ על OK.

וכמובן החלק החשוב ביותר בשדה Request Content נכניס את ״הבקשה״ שלנו לשרת ליצור את השטר מטען:

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:ups="http://schemas.datacontract.org/2004/07/UPS.Web.ShipWebServices.ServiceResults">
    <x:Header/>
    <x:Body>
        <tem:InsertWbShipment>
            <tem:info>
                <ups:CODDetails>הערות לאיסוף תשלום במועד הפצה</ups:CODDetails>
                <ups:CODValue>סכום לאיסוף תשלום - מספרים בלבד</ups:CODValue>
                <ups:ConsigneeAddress>
                    <ups:CityCode>קוד עיר ממאגר ״מפה״ - מומלץ</ups:CityCode>
                    <ups:CityName>שם עיר</ups:CityName>
                    <ups:ContactPerson> שם איש קשר</ups:ContactPerson>
                    <ups:CustomerName>שם לקוח</ups:CustomerName>
                    <ups:Floor>קומה - מספרים בלבד</ups:Floor>
                    <ups:HouseNumber>מספר בית</ups:HouseNumber>
                    <ups:Instructions>הערות למשלוח</ups:Instructions>
                    <ups:LocationDescription></ups:LocationDescription>
                    <ups:Phone1>מספר טלפון 1</ups:Phone1>
                    <ups:Phone2>מספר טלפון 2</ups:Phone2>
                    <ups:RoomNumber>מספר דירה</ups:RoomNumber>
                    <ups:StreetCode>קוד רחוב ממאגר מפה - מומלץ</ups:StreetCode>
                    <ups:StreetName>שם רחוב</ups:StreetName>
                </ups:ConsigneeAddress>
                <ups:IsDDO>הפצה לכתובת ספציפית ערכים של ״אמת״/״שקר״ בלבד</ups:IsDDO>
               
                <ups:IsFridayDelivery>הפצה ביום שישי ערכים של ״אמת״ ו״שקר״ בלבד</ups:IsFridayDelivery>
                <ups:IsReturn>איסוף כנגד הפצה ערכים של ״אמת״ ו״שקר״ בלבד</ups:IsReturn>
                <ups:IsUDR>החתמת ניירת ערכים של ״אמת״ ו״שקר״ בלבד</ups:IsUDR>
                <ups:NumberOfPackages>מספר חבילות - מספר בלבד גדול מ0</ups:NumberOfPackages>
                <ups:NumberOfPackagesToReturn>מספר חבילות להחזרה - מספר בלבד</ups:NumberOfPackagesToReturn>
                <ups:PaymentType>״סוג תשלום על משלוח״ </ups:PaymentType>
                <ups:Reference1>אסמכתא 1</ups:Reference1>
                <ups:Reference2>אסמכתא 2</ups:Reference2>
                <ups:ShipmentInstructions>הערות שילוח</ups:ShipmentInstructions>
                <ups:ShipperAddress>
                    <ups:CityCode></ups:CityCode>
                    <ups:CityName></ups:CityName>
                    <ups:ContactPerson></ups:ContactPerson>
                    <ups:CustomerName></ups:CustomerName>
                    <ups:Floor></ups:Floor>
                    <ups:HouseNumber></ups:HouseNumber>
                    <ups:Instructions></ups:Instructions>
                    <ups:LocationDescription></ups:LocationDescription>
                    <ups:Phone1></ups:Phone1>
                    <ups:Phone2></ups:Phone2>
                    <ups:RoomNumber></ups:RoomNumber>
                    <ups:StreetCode></ups:StreetCode>
                    <ups:StreetName></ups:StreetName>
                </ups:ShipperAddress>
                <ups:UseDefaultShipperAddress>האם להשתמש בערכי ברירת מחדל של השולח - ערכים של ״אמת״ ו״שקר״ בלבד</ups:UseDefaultShipperAddress>
                <ups:Weight>משקל חבילה/מעטפה</ups:Weight>
            </tem:info>
        </tem:InsertWbShipment>
    </x:Body>
</x:Envelope>

לאחר ששלחנו את הבקשה לשרת נקבל ממנו תשובה עם מספר הש״מ:

בשביל שנוכל לפרק את הxml ולקבל את המספר ש״מ נשתמש במודול xml-> parse xml.

בשדה Data Structure נלחץ על Add ונשתמש בGenerator על מנת ״ללמד״ את אינטגרומט מהו המבנה של הנתונים שמתקבלים מהAPI.
נוודא שב Content Type יש לנו XML.
ולתוך Sample data נרשום :

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <InsertWbShipmentResponse xmlns="http://tempuri.org/">
            <InsertWbShipmentResult xmlns:a="http://schemas.datacontract.org/2004/07/UPS.Web.ShipWebServices.ServiceResults" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
              <a:IsSucceeded>true</a:IsSucceeded>
                <a:LastError xmlns:b="http://schemas.datacontract.org/2004/07/UPS.Common.Types">
                    <b:ErrorCode>0</b:ErrorCode>
                    <b:ErrorMessage/>
                    <b:OriginalMessage/>
                </a:LastError>
                <a:PackageTrackingNumbers xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
                <a:ReturnPackageTrackingNumbers xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
                <a:ReturnTrackingNumber/>
                <a:TrackingNumber>W123456789</a:TrackingNumber>
            </InsertWbShipmentResult>
        </InsertWbShipmentResponse>
    </s:Body>
</s:Envelope>

עד לקטע זה הגענו למצב שיש לנו שטר מטען במערכת של UPS וקיבלנו חזרה את המספר שלו.
אבל מה לעשות שחוץ ממספר כרגע אין לנו שום דבר איתו נוכל לשלוח את החבילה, ולכן נשתמש בעוד מתודה מהAPI דרכה נוכל לקבל את השטר מטען כPDF

הוצאת PDF למדבקה

נבצע ״שכפול״ של המודול שיצרנו בעזרת קליק ימני ולחיצה על Clone במודול החדש שנוצר נעדכן את השדה של הURL לכתובת הבאה:
https://www.ship.co.il/ShipWebServices/SHipWbService.svc?wsdl

נעדכן את השדה של Request Content לבקשה הבאה:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <GetThermalLabelPdf xmlns="http://tempuri.org/">
            <trackingNumber>מספר שטר מטען</trackingNumber>
        </GetThermalLabelPdf>
    </Body>
</Envelope>

כאשר את המספר שטר מטען נקח מהמודול הקודם שיצרנו

בשדה Headers נמחק את הHeader הקודם שהיה לנו ונכניס את הHeader הבא:
SOAPAction
בשדה Value:
http://tempuri.org/IShipWBService/GetThermalLabelPdf
ונלחץ על OK.

לאחר מכן נקבל XML המכיל את הPDF כצופן ולכן נוסיף שוב מודול XML->Parse XML.
ונלחץ שוב על Add ונשתמש שוב בGenerator.

לsample data נזין את המבנה הבא :

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <GetThermalLabelPdfResponse xmlns="http://tempuri.org/">
            <GetThermalLabelPdfResult xmlns:a="http://schemas.datacontract.org/2004/07/UPS.Web.ShipWebServices.ServiceResults" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:IsSucceeded>true</a:IsSucceeded>
                <a:LastError xmlns:b="http://schemas.datacontract.org/2004/07/UPS.Common.Types">
                    <b:ErrorCode>0</b:ErrorCode>
                    <b:ErrorMessage/>
                    <b:OriginalMessage/>
                </a:LastError>
                <a:Extensions/>
                <a:File>somesampletextforthegenerator
                </a:File>
            </GetThermalLabelPdfResult>
        </GetThermalLabelPdfResponse>
    </s:Body>
</s:Envelope>

ולתוך XML נזין את Data שמתקבל מהמודול ששולח את הבקשה לAPI שיצרנו בשלב הקודם.

הדפסת שטר המטען

נוסיף מודול חדש של Google Cloud Print->Print

נבחר במדפסת איתה נרצה להדפיס.
בשם הקובץ בדוגמא השתמשתי במספר שטר מטען שפירקנו בשלב מוקדם יותר במדריך.
ובData נשתמש במודול האחרון שיצרנו תוך קידוד מחדש של הקובץ.
*משום שהקובץ מגיע מהAPI של UPS נשתמש בפקודה שבדוגמה על מנת שנוכל לקרוא את הקובץ להדפסה.

לסיכום כך נראה התהליך מתחילתו ועד סופו, בדוגמא הנ״ל יש ראוטר שלא דיברנו עליו במדריך במידה ואני רוצה לשלוח לנקודת פיקאפ.

התהליך מבוסס על מערכת Integromat – מידע נוסף על אינטגרומט ניתן לקרוא במאמר הבא

רוצה לקבל מידע נוסף איך אנחנו יכולים לעזור לך בעזרת אוטומציה? ניתן לקבוע איתנו שיחה טלפונית כאן, כמובן אוטומטית 🙂