Send tracking information of an ongoing trip (Node.js)
In this use case, the user usually clicks on "Track Ride" or sometimes, the application automatically renders the tracking screen as part of the ride screen. Here the provider usually sends a tracking link to the tracking page of the ride.
Code snippets
BPP receives protocol track
/*
Example Request JSON:
{
"context": {
"domain": "nic2004:60221",
"country": "IND",
"city": "std:080",
"action": "track",
"core_version": "0.9.1",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"bpp_id": "https://mock_bpp.com/",
"bpp_uri": "https://mock_bpp.com/beckn/",
"transaction_id": "1209849124",
"message_id": "12341242347",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"order_id": "trip_1",
"callback_url": "https://mock_bap.com/order_track?orderId=trip_1"
}
}
*/
// Auth middleware authenticates the digital signature of the incoming request
router.post('/mobility/status', auth, track);
function track({ headers, body }, res) {
try {
const message = _.get(body, "message");
const context = _.get(body, "context");
if (!context) {
return res.status(400).send(httpResponse("NACK", "Missing Context"));
}
if (!message) {
return res.status(400).send(httpResponse("NACK", "Missing Message"));
}
// ... Returns the ack immediately and continue the processing after validation
res.status(200).send(httpResponse("ACK"));
processStatus(headers, body)
} catch (error) {
res.status(500).send(httpResponse("NACK", error));
}
};
BPP processes the track
function processStatus(requestHeaders, trackRequestBody) {
// Execute business logic here
let statusResponse = {}
generateResponse(requestHeaders, statusResponse)
}
BPP generates response
function generateResponse(requestHeaders, rawResponse){
/*
Example Request JSON :
{
"context": {
"domain": "nic2004:60221",
"country": "IND",
"city": "std:080",
"action": "on_track",
"core_version": "0.9.1",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"bpp_id": "https://mock_bpp.com/",
"bpp_uri": "https://mock_bpp.com/beckn/",
"transaction_id": "1209849124",
"message_id": "12341242343",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"tracking": {
"tl_method": "http/get",
"url": "https://track.mock_bpp.com?order_id=trip_1",
"status": "active"
}
}
}
*/
//The below code generates the above example JSON.
let onTrackResponseBody = {
}
//call protocol on_track
await callOnTrack(requestHeaders, onTrackResponseBody);
}
BPP calls protocol on_track
function callOnTrack(requestHeaders, onTrackResponseBody) {
// Take the subscriber Id from the header and calls the registry to get the url. If already cached it need not to call again
const uri = await lookup(requestHeaders);
// Construct Header
const headers = constructAuthHeader(); // Auth Header with digital Signature
return axios({ url: `${uri}/mobility/on_track`, method: "POST", headers, data: onTrackResponseBody })
}