-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
67 lines (62 loc) · 1.95 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"use strict";
const express = require("express");
const manager = require("./services/session-manager");
const MenuContext = require("./core/menu-context");
const analytics = require("./admin/data/analytics");
const app = express();
app.get("/ussd", (request, response) => {
const startTime = Date.now();
//Make sure msidn is pressent, and session id is pressent
let msisdn = request.query.msisdn;
let sessionId = request.query.sessionid;
let input = request.query.input || "";
if (!msisdn || !sessionId) {
response.set({ session: "Q" }); //Drop this session
response.send(
"Sorry, there was a problem processing your request. Please retry!"
);
return;
}
//--
analytics.logSession(sessionId, msisdn);
//--
//Restore state
manager.getState(sessionId, async (error, state) => {
if (error) {
response.set({ session: "Q" }); //Drop this session
response.send(
"There seems to be a problem with the server. Please retry again later!"
);
} else {
try {
let isNewSession = false;
if (!state) {
state = {
menu: "default",
data: {}
};
isNewSession = true;
manager.saveState(sessionId, state);
}
let context = new MenuContext();
context.data = state.data;
context.input = isNewSession ? null : input;
context.msisdn = msisdn;
context.sessionId = sessionId;
//Execute menu
let responseMessage = await context.execute(state.menu);
state.data = context.data;
state.menu = context.currentMenu;
manager.saveState(sessionId, state);
response.set({ session: context.quit ? "Q" : "C" });
response.send(responseMessage);
//--
const endTime = Date.now();
await analytics.logRequest(sessionId, msisdn, startTime, endTime);
} catch (error) {
console.log(error);
}
}
});
});
app.listen(4200);