Contoh Integrasi dengan FedEx
Dalam tutorial ini, kami akan menunjukkan cara mengintegrasikan FedEx.
1. Persiapan
1.1. Buat akun FedEx
Buat akun di portal pengembang.
1.2. Buat proyek dan dapatkan token
Buat 2 proyek di bagian proyek saya dan simpan client id dan client secret.
Proyek pertama adalah untuk mengelola pengiriman.
Proyek kedua adalah untuk melacak pengiriman.
1.3. Buat status untuk pengiriman
Di tab status penyimpanan pesanan buat status:
- order_delivery
- order_delivery_started
- ready_for_pickup
1.4. Buat acara untuk melacak status
Di modul Acara, buat acara untuk melacak perubahan status pesanan order_delivery.

1.5. Buat koleksi untuk pengiriman
Di modul Koleksi Integrasi, buat koleksi untuk pengiriman dengan atribut berikut:
- 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)

1.6. Buat pesanan uji
Buat pesanan dan catatan dalam koleksi untuk pesanan ini.


2. Membuat Pengiriman
2.1. Melacak acara pengiriman
- Seret node acara ke ruang kerja.
- Masukkan nama node.
- Ubah nilai di kolom "Set" menjadi "orderEvent".
- Acara akan disimpan dalam objek "msg.orderEvent" dan dapat digunakan di node lain.
- Pilih acara yang dibuat "order delivery" dari daftar dan klik "submit".

2.2. Mendapatkan token
- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".
- Ganti
YOUR_CLIENT_IDdanYOUR_CLIENT_SECRETdengan milik Anda.

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;
Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.
- Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "POST" di kolom Metode.
- Pilih "Kirim sebagai body permintaan" di kolom Data.
- Tempelkan tautan
https://apis-sandbox.fedex.com/oauth/tokenke dalam kolom Tautan. - Pilih "Objek JSON" di kolom Kembali.

- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".

msg.access_token = msg.payload.access_token;
return msg;
2.3. Membuat pengiriman
- Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "Menerima semua catatan yang menjadi milik koleksi" dan tempelkan kode di bawah ini ke dalam kolom "Data".
{
"entityType": "orders",
"entityId": "{{orderEvent.order.id}}",
"langCode": "en_US",
"offset": 0,
"limit": 1,
"marker": "delivery"
}

- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".

// ambil token yang disimpan sebelumnya
const token = msg.access_token;
// atur header
msg.headers = {
'Content-Type': 'application/json',
'authorization': `Bearer ${token}`
};
// ambil koleksi dari langkah sebelumnya
const collection = msg.payload.items[0];
// ubah array menjadi objek
const formData = collection.formData.reduce((acc, item) => {
acc[item.marker] = item.value;
return acc;
}, {});
// atur parameter penerima dari formulir
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
}
}
// atur data koleksi di msg untuk penggunaan di masa mendatang
msg.collection = collection;
// atur parameter permintaan untuk FedEx
msg.payload = {
"labelResponseOptions": "URL_ONLY",
"accountNumber": {
"value": "510087020"
},
"requestedShipment": {
"shipper": {
"contact": {
"personName": "NAMA PENGIRIM",
"phoneNumber": "9018328595"
},
"address": {
"streetLines": [
"ALAMAT PENGIRIM 1"
],
"city": "MEMPHIS",
"stateOrProvinceCode": "TN",
"postalCode": "38116",
"countryCode": "US"
}
},
"recipients": [
recipient
],
"serviceType": "STANDARD_OVERNIGHT",
"packagingType": "KEMASAN_ANDA",
"pickupType": "DROPOFF_AT_FEDEX_LOCATION",
"shippingChargesPayment": {
"paymentType": "SENDER",
"payor": {
"responsibleParty": {
"accountNumber": {
"value": "510087020",
"key": ""
}
},
"address": {
"streetLines": [
"ALAMAT PENGIRIM 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;
Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.
- Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "POST" di kolom Metode.
- Pilih "Kirim sebagai body permintaan" di kolom Data.
- Tempelkan tautan
https://apis-sandbox.fedex.com/ship/v1/shipmentske dalam kolom Tautan. - Pilih "Objek JSON" di kolom Kembali.

- Seret node debug ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.

- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".

// ambil data pengiriman
const shipment = msg.payload.output.transactionShipments[0];
// ambil data koleksi yang disimpan sebelumnya
const collection = msg.collection;
// tulis data pengiriman ke dalam atribut formulir
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'
}
]
// atur parameter untuk memperbarui koleksi
msg.params = {
langCode: 'en_US',
id: collection.id,
marker: 'delivery'
}
msg.data = {
formIdentifier: 'delivery_form',
formData: {
en_US: newFormData
},
entityId: collection.entityId,
entityType: collection.entityType
}
// simpan data koleksi untuk penggunaan di masa mendatang
msg.collection = collection;
return msg;
- Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "Mengubah catatan dalam koleksi".

2.4. Memperbarui status pesanan
- Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "Memperbarui status pesanan yang menjadi milik objek penyimpanan pesanan".
- Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"id": 1,
"orderId": "{{collection.entityId}}"
}
- Tempelkan kode di bawah ini ke dalam kolom "Body permintaan".
{
"statusIdentifier": "order_delivery_started"
}

- Seret node debug ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.

3. Melacak Status Pengiriman
3.1. Mengambil pesanan untuk pelacakan
- Seret node interval ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Masukkan interval dalam menit.

- Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "Menerima semua pesanan yang menjadi milik objek penyimpanan pesanan".
- Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"statusIdentifier": "order_delivery_started",
"langCode": "en_US",
"offset": 0,
"limit": 100,
"id": 1
}

- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".

msg.payload = msg.payload.items;
return msg;
- Seret node split ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Masukkan panjangnya.

- Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "Menerima semua catatan yang menjadi milik koleksi".
- Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"marker": "delivery",
"entityId": "{{payload.id}}",
"entityType": "orders",
"langCode": "en_US",
"limit": 1,
"offset": 0
}

- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".

msg.payload = msg.payload.items[0]
return msg;
- Seret node switch ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tambahkan aturan untuk memeriksa. Pilih kondisi "tidak kosong".

- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".
![]()
msg.trackingNumber = msg.payload
.formData
.find(item => item.marker === 'tracking_number')
.value;
msg.collection = msg.payload;
return msg;
3.2. Mendapatkan token
- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".
- Ganti
YOUR_CLIENT_IDdanYOUR_CLIENT_SECRETdengan milik Anda.

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;
Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.
- Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "POST" di kolom Metode.
- Pilih "Kirim sebagai body permintaan" di kolom Data.
- Tempelkan tautan
https://apis-sandbox.fedex.com/oauth/tokenke dalam kolom Tautan. - Pilih "Objek JSON" di kolom Kembali.

3.3. Mengambil status pengiriman
- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".
![]()
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;
Anda dapat menemukan lebih banyak tentang parameter di dokumentasi FedEx.
- Seret node permintaan http ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "POST" di kolom Metode.
- Pilih "Kirim sebagai body permintaan" di kolom Data.
- Tempelkan tautan
https://apis-sandbox.fedex.com/track/v1/trackingnumberske dalam kolom Tautan. - Pilih "Objek JSON" di kolom Kembali.
![]()
- Seret node fungsi ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tempelkan kode dari contoh ke dalam kolom "Fungsi".
![]()
msg.payload = msg.payload.output.completeTrackResults[0].trackResults[0].latestStatusDetail.statusByLocale;
return msg;
3.4. Memperbarui status pesanan
- Seret node switch ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Tambahkan aturan untuk memeriksa. Pilih kondisi "==", dan masukkan "Siap untuk diambil" sebagai nilai.

- Seret node admin-api ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
- Pilih "Memperbarui status pesanan yang menjadi milik objek penyimpanan pesanan".
- Tempelkan kode di bawah ini ke dalam kolom "Parameter kueri".
{
"id": 1,
"orderId": "{{collection.entityId}}"
}
- Tempelkan kode di bawah ini ke dalam kolom "Body permintaan".
{
"statusIdentifier": "ready_for_pickup"
}

- Seret node debug ke ruang kerja dan hubungkan ke node dari langkah sebelumnya.
