fix(basic.gblib): Comments to the keyword facade.
This commit is contained in:
parent
7672540053
commit
b33a8b5341
3 changed files with 89 additions and 14 deletions
|
@ -43,23 +43,43 @@ import { SecService } from '../../security.gbapp/services/SecService';
|
||||||
import { SystemKeywords } from './SystemKeywords';
|
import { SystemKeywords } from './SystemKeywords';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base services of conversation to be called by BASIC.
|
* Base services of conversation to be called by BASIC which
|
||||||
|
* requries step variable to work.
|
||||||
*/
|
*/
|
||||||
export class DialogKeywords {
|
export class DialogKeywords {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference to minimal bot instance.
|
||||||
|
*/
|
||||||
public min: GBMinInstance;
|
public min: GBMinInstance;
|
||||||
public context: TurnContext;
|
|
||||||
public step: WaterfallStepContext;
|
/**
|
||||||
|
* Reference to the base system keywords functions to be called.
|
||||||
|
*/
|
||||||
public internalSys: SystemKeywords;
|
public internalSys: SystemKeywords;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When creating this keyword facade, a bot instance is
|
||||||
|
* specified among the deployer service.
|
||||||
|
*/
|
||||||
constructor(min: GBMinInstance, deployer: GBDeployer) {
|
constructor(min: GBMinInstance, deployer: GBDeployer) {
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.internalSys = new SystemKeywords(min, deployer);
|
this.internalSys = new SystemKeywords(min, deployer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base reference of system keyword facade, called directly
|
||||||
|
* by the script.
|
||||||
|
*/
|
||||||
public sys(): SystemKeywords {
|
public sys(): SystemKeywords {
|
||||||
return this.internalSys;
|
return this.internalSys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the today data filled in dd/mm/yyyy or mm/dd/yyyy.
|
||||||
|
*
|
||||||
|
* @example x = TODAY
|
||||||
|
*/
|
||||||
public async getToday(step) {
|
public async getToday(step) {
|
||||||
var d = new Date(),
|
var d = new Date(),
|
||||||
month = '' + (d.getMonth() + 1),
|
month = '' + (d.getMonth() + 1),
|
||||||
|
@ -82,14 +102,21 @@ export class DialogKeywords {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async isAffirmative(text) {
|
/**
|
||||||
return text.toLowerCase().match(Messages['pt-BR'].affirmative_sentences); // TODO: Dynamitize.
|
* Quits the dialog, currently required to get out of VM context.
|
||||||
}
|
*
|
||||||
|
* @example EXIT
|
||||||
|
*/
|
||||||
public async exit(step) {
|
public async exit(step) {
|
||||||
await step.endDialog();
|
await step.endDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns current time in format hh:dd.
|
||||||
|
*
|
||||||
|
* @example SAVE "file.xlsx", name, email, NOW
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async getNow() {
|
public async getNow() {
|
||||||
const nowUTC = new Date();
|
const nowUTC = new Date();
|
||||||
const now = new Date((typeof nowUTC === "string" ?
|
const now = new Date((typeof nowUTC === "string" ?
|
||||||
|
@ -99,14 +126,29 @@ export class DialogKeywords {
|
||||||
return now.getHours() + ':' + now.getMinutes();
|
return now.getHours() + ':' + now.getMinutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a file to a given mobile.
|
||||||
|
*
|
||||||
|
* @example SEND FILE TO "+199988887777", "image.jpg"
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async sendFileTo(mobile, filename, caption) {
|
public async sendFileTo(mobile, filename, caption) {
|
||||||
return await this.internalSendFile(null, mobile, filename, caption);
|
return await this.internalSendFile(null, mobile, filename, caption);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a file to the current user.
|
||||||
|
*
|
||||||
|
* @example SEND FILE "image.jpg"
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async sendFile(step, filename, caption) {
|
public async sendFile(step, filename, caption) {
|
||||||
return await this.internalSendFile(step, null, filename, caption);
|
return await this.internalSendFile(step, null, filename, caption);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes the sending of the file.
|
||||||
|
*/
|
||||||
private async internalSendFile(step, mobile, filename, caption) {
|
private async internalSendFile(step, mobile, filename, caption) {
|
||||||
if (filename.indexOf('.md') > -1) {
|
if (filename.indexOf('.md') > -1) {
|
||||||
GBLog.info(`BASIC: Sending the contents of ${filename} markdown to mobile.`);
|
GBLog.info(`BASIC: Sending the contents of ${filename} markdown to mobile.`);
|
||||||
|
@ -127,6 +169,12 @@ export class DialogKeywords {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the current language of the bot conversation.
|
||||||
|
*
|
||||||
|
* @example SET LANGUAGE "pt"
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async setLanguage(step, language) {
|
public async setLanguage(step, language) {
|
||||||
const user = await this.min.userProfile.get(step.context, {});
|
const user = await this.min.userProfile.get(step.context, {});
|
||||||
|
|
||||||
|
@ -136,14 +184,19 @@ export class DialogKeywords {
|
||||||
await this.min.userProfile.set(step.context, user);
|
await this.min.userProfile.set(step.context, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async from(step) {
|
/**
|
||||||
return step.context.activity.from.id;
|
* Returns the name of the user acquired by WhatsApp API.
|
||||||
}
|
*/
|
||||||
|
|
||||||
public async userName(step) {
|
public async userName(step) {
|
||||||
return step.context.activity.from.name;
|
return step.context.activity.from.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns current mobile number from user in conversation.
|
||||||
|
*
|
||||||
|
* @example SAVE "file.xlsx", name, email, MOBILE
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async userMobile(step) {
|
public async userMobile(step) {
|
||||||
if (isNaN(step.context.activity.from.id)) {
|
if (isNaN(step.context.activity.from.id)) {
|
||||||
return 'No mobile available.';
|
return 'No mobile available.';
|
||||||
|
@ -152,14 +205,32 @@ export class DialogKeywords {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the subject menu to the user
|
||||||
|
*
|
||||||
|
* @example MENU
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async showMenu(step) {
|
public async showMenu(step) {
|
||||||
return await step.beginDialog('/menu');
|
return await step.beginDialog('/menu');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the transfer of the conversation to a human agent.
|
||||||
|
*
|
||||||
|
* @example TRANSFER
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async transfer(step) {
|
public async transfer(step) {
|
||||||
return await step.beginDialog('/t');
|
return await step.beginDialog('/t');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hears something from user and put it in a variable
|
||||||
|
*
|
||||||
|
* @example HEAR name
|
||||||
|
*
|
||||||
|
*/
|
||||||
public async hear(step, promise, previousResolve, kind, ...args) {
|
public async hear(step, promise, previousResolve, kind, ...args) {
|
||||||
function random(low, high) {
|
function random(low, high) {
|
||||||
return Math.random() * (high - low) + low;
|
return Math.random() * (high - low) + low;
|
||||||
|
@ -176,6 +247,9 @@ export class DialogKeywords {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Talks to the user by using the specified text.
|
||||||
|
*/
|
||||||
public async talk(step, text: string) {
|
public async talk(step, text: string) {
|
||||||
return await this.min.conversationalService.sendText(this.min, step, text);
|
return await this.min.conversationalService.sendText(this.min, step, text);
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,10 +157,10 @@ export class GBVMService extends GBService {
|
||||||
|
|
||||||
code = `<%\n
|
code = `<%\n
|
||||||
|
|
||||||
from = this.getFrom(step)
|
|
||||||
id = sys().getRandomId()
|
id = sys().getRandomId()
|
||||||
username = this.getUserName(step);
|
username = this.getUserName(step);
|
||||||
mobile = this.getUserMobile(step);
|
mobile = this.getUserMobile(step);
|
||||||
|
from = mobile;
|
||||||
ubound = function(list){return list.length};
|
ubound = function(list){return list.length};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,8 @@ const MicrosoftGraph = require('@microsoft/microsoft-graph-client');
|
||||||
/**
|
/**
|
||||||
* @fileoverview General Bots server core.
|
* @fileoverview General Bots server core.
|
||||||
*/
|
*/
|
||||||
/**
|
|
||||||
|
/**
|
||||||
* BASIC system class for extra manipulation of bot behaviour.
|
* BASIC system class for extra manipulation of bot behaviour.
|
||||||
*/
|
*/
|
||||||
export class SystemKeywords {
|
export class SystemKeywords {
|
||||||
|
|
Loading…
Add table
Reference in a new issue