%%{init: { "theme": "base", "themeVariables": { "fontSize": "18px", "background": "transparent", "actorBkg": "#038851", "actorTextColor": "#ffffff", "actorBorder": "#026139", "actorLineColor": "#94a3b8", "signalColor": "#64748b", "signalTextColor": "#059669", "noteBkgColor": "#e6f4ee", "noteTextColor": "#02502f", "noteBorderColor": "#038851", "activationBkgColor": "#c6ebdc", "activationBorderColor": "#026139", "sequenceNumberColor": "#ffffff" }, "sequence": { "useMaxWidth": true, "actorMargin": 70, "width": 150, "height": 60, "boxMargin": 12, "noteMargin": 14, "messageMargin": 50, "diagramMarginX": 20, "diagramMarginY": 20, "actorFontSize": 18, "actorFontWeight": 700, "noteFontSize": 15, "noteFontFamily": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace", "messageFontSize": 16, "messageFontWeight": 700, "noteAlign": "left", "mirrorActors": false } }}%%
sequenceDiagram
participant PARORD as Ordering Platform
participant Deliverect
participant Dispatch as Dispatch Partner
Note over PARORD,Dispatch: 1. Dispatch availability
PARORD->>Deliverect: POST /fulfillment/validate
Note right of PARORD: POST /fulfillment/validate<br/>{<br/>#nbsp;#nbsp;"channelLinkId": "62********************7c",<br/>#nbsp;#nbsp;"deliveryLocations": {<br/>#nbsp;#nbsp;#nbsp;#nbsp;"deliveryTime": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"name": "Michael",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"street": "Brown Street",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"city": "New York",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"country": "United States",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"phone": "+11111111111",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"postalCode": "10001",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"coordinates": {<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"longitude": 3.73361,<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"latitude": 51.03111<br/>#nbsp;#nbsp;#nbsp;#nbsp;}<br/>#nbsp;#nbsp;}<br/>}
Deliverect->>Dispatch: Request delivery availability
Dispatch-->>Deliverect: canDeliver: true | false
Deliverect-->>PARORD: Availability response (canDeliver)
Note over PARORD,Dispatch: 2. Create order (only if canDeliver: true)
PARORD->>Deliverect: Create channel order
Note right of PARORD: POST /{channelName}/order/{channelLinkId}<br/>{<br/>#nbsp;#nbsp;"items": [<br/>#nbsp;#nbsp;#nbsp;#nbsp;{<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"plu": "BRG-0398",<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"name": "Burger",<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"price": 1500,<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"quantity": 1,<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"subItems": [],<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;"productType": 1<br/>#nbsp;#nbsp;#nbsp;#nbsp;}<br/>#nbsp;#nbsp;],<br/>#nbsp;#nbsp;"courier": "restaurant",<br/>#nbsp;#nbsp;"orderType": 2,<br/>#nbsp;#nbsp;"deliveryAddress": {<br/>#nbsp;#nbsp;#nbsp;#nbsp;"street": "Brown Street",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"streetNumber": "900",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"postalCode": "1120",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"city": "New York",<br/>#nbsp;#nbsp;#nbsp;#nbsp;"extraAddressInfo": "Use Buzzer"<br/>#nbsp;#nbsp;},<br/>#nbsp;#nbsp;"deliveryCost": 300,<br/>#nbsp;#nbsp;"deliveryIsAsap": true,<br/>#nbsp;#nbsp;"deliveryTime": "yyyy-MM-ddTHH:mm:ssZ",<br/>#nbsp;#nbsp;"tip": 200,<br/>#nbsp;#nbsp;"channelOrderId": "501-bffe-f0e97",<br/>#nbsp;#nbsp;"channelOrderDisplayId": "f0e97"<br/>}
Deliverect->>Dispatch: Create dispatch / delivery job
Dispatch-->>Deliverect: Order created confirmation
Deliverect-->>PARORD: Delivery created (courier status update, status 81)
Note over PARORD,Dispatch: 3. Courier status updates
Dispatch->>Deliverect: Courier status (e.g. 83, 85, 87, 89, 90)
Note over Deliverect,Dispatch: Courier statuses<br/>83 En Route to Pickup<br/>85 Arrived at Pickup<br/>87 En Route To Dropoff<br/>89 Arrived At Drop Off<br/>90 Delivered
Deliverect->>PARORD: Courier update webhook
Note right of PARORD: {<br/>#nbsp;#nbsp;"orderId": "651142e93c54c5405****6a3",<br/>#nbsp;#nbsp;"channelOrderId": "T8****28",<br/>#nbsp;#nbsp;"status": 87,<br/>#nbsp;#nbsp;"deliveryTime": "YYYY-MM-DDT08:36:46.SSSSSSZ",<br/>#nbsp;#nbsp;"courierName": "DRIVER NAME",<br/>#nbsp;#nbsp;"coordinates": {<br/>#nbsp;#nbsp;#nbsp;#nbsp;"coordinates": [<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;3.73361,<br/>#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;#nbsp;51.03111<br/>#nbsp;#nbsp;#nbsp;#nbsp;]<br/>#nbsp;#nbsp;},<br/>#nbsp;#nbsp;"courierId": "9B******HK",<br/>#nbsp;#nbsp;"dispatchPartner": "COURIERAPP",<br/>#nbsp;#nbsp;"trackingURL": "trackingURL"<br/>}