poserver
Version:
Server for JD Bot
220 lines (198 loc) • 8.5 kB
JavaScript
/**
* Created by tomdaley on 10/2/16.
*/
/**
* G E T A D D R E S S
*
* Try to get a valid address from the user.
*/
/**
* @namespace
* @property {object} results
* @property {object} results.response
* @property {number} results.response.index
* @property {string} results.response.entity
*/
var prompts = require("./../const/prompts");
var builder = require('botbuilder');
var Util = require('./../JdBotUtil');
var ChoiceDialog = require("./ChoiceDialog");
var ConfirmDialog = require("./ConfirmDialog");
const library = new builder.Library('getCauseNumber');
library.dialog('/',
[
//Prompt for a cause number, court number, and court type
function (session, args)
{
console.log(session);
console.log(session.sessionState.callstack);
args = args || {};
if (!session.dialogData.hasOwnProperty("prompts"))
{
session.dialogData.prompts = {};
session.dialogData.prompts.prompt = args.prompt || prompts.askCauseNumber;
session.dialogData.prompts.invalidPrompt = args.invalidPrompt || prompts.askCauseNumberReprompt;
session.dialogData.prompts.repromptMax = args.repromptMax || 5;
session.dialogData.prompts.repromptsRemaining = args.repromptMax || 5;
session.dialogData.prompts.editChoice = args.editChoice || prompts.changeChoice;
session.dialogData.prompts.confirmChoice = args.confirmChoice || prompts.confirmChoice;
}
session.dialogData.prompts.reprompt = args.reprompt || false;
var prompt;
if (session.dialogData.prompts.reprompt)
{
prompt = session.dialogData.prompts.invalidPrompt;
session.dialogData.prompts.repromptMax--;
if (session.dialogData.prompts.repromptMax <= 0)
{
session.send(prompts.sayFullAddressIQuit);
session.endDialogWithResult({"status": "GIVEUP"});
}
}
else
{
prompt = session.dialogData.prompts.prompt;
}
builder.Prompts.text(session, prompt);
},
//Validate the cause number and see what we get back.
function (session, results)
{
session.userData.case.causeNumber = results.response.toUpperCase().trim();
Util.recognizeCourt(results.response, session.userData.case.county)
.then((result) =>
{
if (result.type !== false && result.courtNumber !== false)
{
//We have a good match. Continue
session.userData.case.courtType = result.type;
session.userData.case.courtNumber = result.courtNumber;
session.userData.case.state = result.state;
session.userData.case.country = result.country;
session.beginDialog("getCauseNumber:/getCourtType");
}
else if ((result.type === false || result.courtNumber === false) && result.ruleCount !== 0)
{
//We found rules for this country+state+county but none matched the user's input.
session.beginDialog('getCauseNumber:/verifyCauseNumber', result);
}
else
{
session.beginDialog("getCauseNumber:/getCourtType", result);
}
})
.catch((error) =>
{
console.error("CauseNumberDialog: Error getting rules.");
console.error(error);
session.beginDialog("getCauseNumber:/getCourtType");
})
},
//We'll get to here either AFTER the user has explicitly answered the courtNumber and courtType prompts OR
//the user has confirmed that his or her causeNumber entry is correct, in which case we need to continue
//prompting for courtNumber and courtType.
function (session, args)
{
args = args || {};
if (args.confirmed === true)
session.beginDialog("/getCourtType");
else
session.endDialogWithResult(session.userData.case);
}
]);
library.dialog("/getCourtType",
[
function (session)
{
if (session.userData.case.courtType)
{
session.beginDialog("/getCourtNumber");
}
else
{
//builder.Prompts.choice(session, prompts.askCourtType, prompts.courtTypes, session.userData.config.PromptChoiceOptions);
ChoiceDialog.choice(session, prompts.askCourtType, prompts.courtTypes);
}
},
//Process the court type
function (session, results)
{
//TODO: Check for navigation
if (!session.userData.case.courtNumber)
{
session.userData.case.courtType = results.response.entity;
session.beginDialog("/getCourtNumber");
}
else
{
session.endDialogWithResult(session.userData.case);
}
}
]);
library.dialog("/getCourtNumber",
[
//Prompt for the court number
function (session)
{
if (session.userData.case.courtNumber)
{
var result = {};
result.causeNumber = session.userData.case.causeNumber;
result.courtType = session.userData.case.courtType;
result.courtNumber = session.userData.case.courtNumber;
result.county = session.userData.case.county;
result.state = session.userData.case.state;
result.country = session.userData.case.country;
session.endDialogWithResult(result);
}
else
{
var prompt = session.gettext(prompts.askCourtNumber, {"ctype": session.userData.case.courtType});
builder.Prompts.text(session, prompt);
}
},
//Process the court number
function (session, results)
{
session.userData.lastResults = results;
session.userData.case.courtNumber = Util.makeOrdinal(results.response);
var result = {};
result.causeNumber = session.userData.case.causeNumber;
result.courtType = session.userData.case.courtType;
result.courtNumber = session.userData.case.courtNumber;
result.county = session.userData.case.county;
result.state = session.userData.case.state;
result.country = session.userData.case.country;
session.endDialogWithResult(result);
}
]);
/**
* We end up here if we have rules for particiular country+state+county combination but couldn't find a match based
* on the user's input.
*/
library.dialog("/verifyCauseNumber",
[
//Tell user we have rules for that county, but couldn't find a court match.
function (session, args, next)
{
var prompt = session.gettext(prompts.askConfirmCauseNumber, {county: args.county, cause: args.causeNumber});
//builder.Prompts.choice(session, prompt, [prompts.changeChoice, prompts.confirmChoice],
// session.userData.config.PromptChoiceOptions);
ChoiceDialog.choice(session, prompt, [prompts.changeChoice, prompts.confirmChoice]);
},
//See if the user accepts this cause number or wants to retry.
function (session, args, next)
{
//TODO: Check for navigation.
if (args.response.entity === prompts.confirmChoice)
{
args.confirmed = true;
session.endDialogWithResult(args);
}
else
{
session.replaceDialog('getCauseNumber:/');
}
}
]);
module.exports = library;