მთავარ შინაარსზე გადახტომა

FedEx-ის ინტეგრაციის მაგალითი

ამ გაწვდილი გაკვეთილში ჩვენ გაჩვენებთ როგორ უნდა ინტეგრირდეთ FedEx-თან

1. წინასწარი მომზადება

1.1. შექმენით ანგარიში FedEx-ში

შექმენით ანგარიში მომხმარებლის პორტალზე

1.2. შექმენით პროექტები და მიიღეთ ტოკენები

შექმენით 2 პროექტი ჩემი პროექტების განყოფილებაში და შეინახეთ client id და client secret

პირველი პროექტი მიწოდების მართვისთვის

მეორე პროექტი მიწოდების მონიტორინგისთვის

1.3. შექმენით მიწოდების სტატუსები

შეკვეთების საცავის სტატუსების вкладკაში შექმენით სტატუსები:

  • order_delivery
  • order_delivery_started
  • ready_for_pickup

1.4. შექმენით სტატუსების მონიტორინგის ღონისძიება

მოდულში Events შექმენით ღონისძიება შეკვეთის სტატუსის ცვლილების მონიტორინგისთვის order_delivery.

IMG2

1.5. შექმენით მიწოდების კოლექცია

მოდულში Integration Collections შექმენით მიწოდების კოლექცია შემდეგი ატრიბუტებით:

  • name (string)
  • address (string)
  • phone_number (string)
  • city (string)
  • state_code (string)
  • postal_code (string)
  • country_code (string)
  • tracking_number (string)
  • transaction_id (string)
  • ship_datestamp (string)
  • delivery_datestamp (string)

IMG2

1.6. შექმენით ტესტური შეკვეთა

შექმენით შეკვეთა და ჩანაწერი ამ შეკვეთისთვის კოლექციაში.

IMG2

IMG2

2. მიწოდების შექმნა

2.1. მიწოდების ღონისძიების მონიტორინგი

  • გადატანეთ ნოდი events სამუშაო სივრცეში.
  • შეიყვანეთ ნოდის სახელი
  • შეცვალეთ "Set" ველში მნიშვნელობა "orderEvent".
  • ღონისძიება შენახული იქნება "msg.orderEvent" ობიექტში და მისი გამოყენება შესაძლებელია სხვა ნოდებში.
  • აირჩიეთ სიიდან შექმნილი ღონისძიება "order delivery" და დააჭირეთ "submit"

IMG2


2.2. ტოკენის მიღება

  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.
  • შეცვალეთ YOUR_CLIENT_ID და YOUR_CLIENT_SECRET თქვენსაზე

IMG2

msg.payload = {
'grant_type': 'client_credentials',
'client_id': 'YOUR_CLIENT_ID',
'client_secret': 'YOUR_CLIENT_SECRET'
}
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}

return msg;

მეტი ინფორმაცია პარამეტრების შესახებ შეგიძლიათ მოიძიოთ FedEx-ის დოკუმენტაციაში


  • გადატანეთ ნოდი http request სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "POST" მეთოდი "Method" ველში.
  • აირჩიეთ "Send as request body" "Data" ველში.
  • ჩასვით "Link" ველში ბმული https://apis-sandbox.fedex.com/oauth/token.
  • აირჩიეთ "Object JSON" "Return" ველში.

IMG2


  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

msg.access_token = msg.payload.access_token;

return msg;

2.3. მიწოდების შექმნა

  • გადატანეთ ნოდი api სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "Find collection rows" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

IMG2

{
"collectionIdentifier": "delivery",
"entityId": "{{orderEvent.order.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}

  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

// ვიღებთ ადრე შენახულ ტოკენს
const token = msg.access_token;

// ვაწესებთ სათაურებს
msg.headers = {
'Content-Type': 'application/json',
'authorization': `Bearer ${token}`
};

// ვიღებთ კოლექციებს წინა ნაბიჯიდან
const collection = msg.payload.items[0];
// ვაქცევთ მასივს ობიექტად
const formData = collection.formData.reduce((acc, item) => {
acc[item.marker] = item.value;
return acc;
}, {});
// ვაწესებთ მიმღების პარამეტრებს ფორმიდან
const recipient = {
"address": {
"streetLines": [
formData.address
],
"city": formData.city,
"stateOrProvinceCode": formData.state_code,
"postalCode": formData.postal_code,
"countryCode": formData.country_code
},
"contact": {
"personName": formData.name,
"phoneNumber": formData.phone_number
}
}
// ვაწესებთ კოლექციის მონაცემებს msg-ში, რათა მომავალში გამოვიყენოთ
msg.collection = collection;
// ვაწესებთ FedEx-ისთვის მოთხოვნის პარამეტრებს
msg.payload = {
"labelResponseOptions": "URL_ONLY",
"accountNumber": {
"value": "510087020"
},
"requestedShipment": {
"shipper": {
"contact": {
"personName": "SENDER NAME",
"phoneNumber": "9018328595"
},
"address": {
"streetLines": [
"SENDER ADDRESS 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
},
"recipients": [
recipient
],
"serviceType": "STANDARD_OVERNIGHT",
"packagingType": "YOUR_PACKAGING",
"pickupType": "DROPOFF_AT_FEDEX_LOCATION",
"shippingChargesPayment": {
"paymentType": "SENDER",
"payor": {
"responsibleParty": {
"accountNumber": {
"value": "510087020",
"key": ""
}
},
"address": {
"streetLines": [
"SENDER ADDRESS 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
}
},
"labelSpecification": {},
"requestedPackageLineItems": [
{
"customerReferences": [
{
"customerReferenceType": "CUSTOMER_REFERENCE",
"value": `Collection${collection.id}`
}
],
"weight": {
"units": "LB",
"value": "20"
}
}
]
}
};

return msg;

მეტი ინფორმაცია პარამეტრების შესახებ შეგიძლიათ მოიძიოთ FedEx-ის დოკუმენტაციაში


  • გადატანეთ ნოდი http request სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "POST" მეთოდი "Method" ველში.
  • აირჩიეთ "Send as request body" "Data" ველში.
  • ჩასვით "Link" ველში ბმული https://apis-sandbox.fedex.com/ship/v1/shipments.
  • აირჩიეთ "Object JSON" "Return" ველში.

IMG2


  • გადატანეთ ნოდი debug სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.

IMG2


  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

// ვიღებთ მიწოდების მონაცემებს
const shipment = msg.payload.output.transactionShipments[0];
// ვიღებთ კოლექციის მონაცემებს, რომელიც ადრე შევინახეთ
const collection = msg.collection;

// ვწერთ ფორმის ატრიბუტებში მიწოდების მონაცემებს
const newFormData = [
...collection.formData
.filter(item => !['transaction_id', 'ship_datestamp', 'delivery_datestamp', 'tracking_number'].includes(item.marker)),
{
marker: 'transaction_id',
value: msg.payload.transactionId,
type: 'string'
},
{
marker: 'ship_datestamp',
value: shipment.shipDatestamp,
type: 'string'
},
{
marker: 'delivery_datestamp',
value: shipment.pieceResponses[0].deliveryDatestamp,
type: 'string'
},
{
marker: 'tracking_number',
value: shipment.masterTrackingNumber,
type: 'string'
}
]

// ვაწესებთ კოლექციის განახლების პარამეტრებს
msg.payload = {
id: collection.id,
collectionIdentifier: 'delivery',
formData: {
en_US: newFormData
},
formIdentifier: 'delivery_form',
entityId: collection.entityId,
entityType: collection.entityType,
langCode: 'en_US',
}

// ვშენახავთ კოლექციის მონაცემებს, რათა მომავალში გამოვიყენოთ
msg.collection = msg.payload;

return msg;

  • გადატანეთ ნოდი api სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "Update collection row" მეთოდი.

IMG2


2.4. შეკვეთის სტატუსის განახლება

  • გადატანეთ ნოდი api სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "Update order status" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

IMG2

{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}

  • გადატანეთ ნოდი debug სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.

IMG2


3. მიწოდების სტატუსის მონიტორინგი

3.1. შეკვეთების მიღება მონიტორინგისთვის

  • გადატანეთ ნოდი interval სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • შეიყვანეთ ინტერვალი წუთებში.

IMG2


  • გადატანეთ ნოდი api სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "Find orders by status" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

IMG2

{
"storageId": "test_order_storage",
"statusIdentifier": "order_delivery_started"
}

  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

msg.payload = msg.payload.items;

return msg;

  • გადატანეთ ნოდი split სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • შეიყვანეთ სიგრძე.

IMG2


  • გადატანეთ ნოდი api სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "Find collection row" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

IMG2

{
"collectionIdentifier": "delivery",
"entityId": "{{payload.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}

  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

msg.payload = msg.payload.items[0]

return msg;

  • გადატანეთ ნოდი switch სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • დაამატეთ წესი შემოწმებისთვის. აირჩიეთ "not empty" პირობა.

IMG2


  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

msg.trackingNumber = msg.payload
.formData
.find(item => item.marker === 'tracking_number')
.value;

msg.collection = msg.payload;

return msg;

3.2. ტოკენის მიღება

  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.
  • შეცვალეთ YOUR_CLIENT_ID და YOUR_CLIENT_SECRET თქვენსაზე

IMG2

msg.payload = {
'grant_type': 'client_credentials',
'client_id': 'YOUR_CLIENT_ID',
'client_secret': 'YOUR_CLIENT_SECRET'
}
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}

return msg;

მეტი ინფორმაცია პარამეტრების შესახებ შეგიძლიათ მოიძიოთ FedEx-ის დოკუმენტაციაში


  • გადატანეთ ნოდი http request სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "POST" მეთოდი "Method" ველში.
  • აირჩიეთ "Send as request body" "Data" ველში.
  • ჩასვით "Link" ველში ბმული https://apis-sandbox.fedex.com/oauth/token.
  • აირჩიეთ "Object JSON" "Return" ველში.

IMG2


3.3. მიწოდების სტატუსის მიღება

  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

const token = msg.payload.access_token;

msg.headers = {
'content-type': 'application/json',
'authorization': `Bearer ${token}`
};

msg.payload = {
"trackingInfo": [
{
"trackingNumberInfo": {
"trackingNumber": msg.trackingNumber
}
}
],
"includeDetailedScans": true
}

return msg;

მეტი ინფორმაცია პარამეტრების შესახებ შეგიძლიათ მოიძიოთ FedEx-ის დოკუმენტაციაში


  • გადატანეთ ნოდი http request სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "POST" მეთოდი "Method" ველში.
  • აირჩიეთ "Send as request body" "Data" ველში.
  • ჩასვით "Link" ველში ბმული https://apis-sandbox.fedex.com/track/v1/trackingnumbers.
  • აირჩიეთ "Object JSON" "Return" ველში.

IMG2


  • გადატანეთ ნოდი function სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • ჩასვით კოდი მაგალითიდან "Function" ველში.

IMG2

msg.payload = msg.payload.output.completeTrackResults[0].trackResults[0].latestStatusDetail.statusByLocale;

return msg;

3.4. შეკვეთის სტატუსის განახლება

  • გადატანეთ ნოდი switch სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • დაამატეთ წესი შემოწმებისთვის. აირჩიეთ "==", მნიშვნელობაში შეიყვანეთ "Ready for pickup"

IMG2


  • გადატანეთ ნოდი api სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.
  • აირჩიეთ "Update order status" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

IMG2

{
"orderId": "{{collection.entityId}}",
"storageId": "test_order_storage",
"statusIdentifier": "ready_for_pickup"
}

  • გადატანეთ ნოდი debug სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდთან.

IMG2