UNPKG

poserver

Version:
160 lines (139 loc) 5.55 kB
/** * 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'); const library = new builder.Library('getAddress'); library.dialog('/', [ //Prompt for an address function (session, args) { args = args || {}; if (!session.dialogData.hasOwnProperty("prompts")) { session.dialogData.prompts = {}; session.dialogData.prompts.prompt = args.prompt || prompts.askAddressFull; session.dialogData.prompts.invalidPrompt = args.invalidPrompt || prompts.askAddressFullReprompt; 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 address and see what we get back. function (session, results, next) { var callback = function (session, response) { var parsedAddresses = response.addresses || []; if (parsedAddresses.length === 0 || response.status == "ZERO_RESULTS" || parsedAddresses[0].hasCompleteCsz === false) { session.dialogData.prompts.reprompt = true; session.replaceDialog("/", session.dialogData.prompts); } else if (parsedAddresses.length === 1) { var result = {"status": "OK", "response": parsedAddresses[0]}; result.response.userString = results.response; next(result); } else { session.beginDialog("/choose", {parsedAddresses}); } }; Util.gparseAddress(session, results.response, callback); }, //Confirm address function (session, results) { var address = results.response.fullAddress; session.dialogData.address = results.response; builder.Prompts.choice(session, address, [session.dialogData.prompts.editChoice, session.dialogData.prompts.confirmChoice], session.userData.config.PromptChoiceOptions); }, //Did the human confirm the address or reject it? function (session, results) { if (results.response.entity === session.dialogData.prompts.confirmChoice) { var result = {"status": "OK", "response": session.dialogData.address}; session.endDialogWithResult(result); } else { session.replaceDialog("/", session.dialogData.prompts); } } ]); library.dialog("/choose", function (session, args) { args = args || {}; console.log(args); var addresses = args.parsedAddresses; if (addresses) { //Select from list session.dialogData.addresses = addresses; var message = new builder.Message(session) .attachmentLayout(builder.AttachmentLayout.carousel) .attachments(addresses.map((addr) => new builder.HeroCard(session) .title(prompts.sayDidYouMean) .subtitle(addr.fullAddress) .buttons([builder.CardAction.imBack(session, addr.fullAddress, prompts.sayUseThisAddress)]))); session.send(message); } else { //Process selected address var address = session.message.text; addresses = session.dialogData.addresses.map((addr) => addr.fullAddress); var addressIdx = addresses.indexOf(address); if (addressIdx === -1) { session.replaceDialog("/choose", {addresses}); } else { //We got a good one var result = {"status": "OK", "response": addresses[addressIdx]}; session.endDialogWithResult(result); } } }); module.exports = library;