Sending support information of a provider agency (Node.js)
In this use case, the user wants to contact the customer support due to an issue with the fulfillment of the trip. Here the mobility service provider returns the details of its customer support.
Code snippets
BPP receives protocol status
/*
Example Request JSON:
{
"context": {
"domain": "nic2004:60221",
"country": "IND",
"city": "std:080",
"action": "support",
"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": "12341242321",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"ref_id": "trip_1"
}
}
*/
router.post('/mobility/support', support);
function support({ 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"));
processSupport(headers, body)
} catch (error) {
res.status(500).send(httpResponse("NACK", error));
}
};
BPP processes the status
function processSupport(requestHeaders, supportRequestBody) {
// Execute business logic here
let supportResponse = {}
generateResponse(requestHeaders, supportResponse)
}
BPP generates response
async function generateResponse(requestHeaders, rawResponse){
/*
Example Request JSON :
{
"context": {
"domain": "nic2004:60221",
"country": "IND",
"city": "std:080",
"action": "on_support",
"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": {
"phone": "+919898989898",
"email": "[email protected]",
"uri": "http://support.mock_bpp.com?order_id=trip_1"
}
}
*/
//The below code generates the above example JSON.
let onSupportResponseBody = {}
//call protocol on_support
await callOnSupport(requestHeaders, onSupportResponseBody);
}
BPP calls protocol on_support
async function callOnSupport(requestHeaders, onSupportResponseBody) {
// 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_support`, method: "POST", headers, data: onSupportResponseBody })
}