Cleanup the tsd-jsdoc generated output and add back missing comments

This commit is contained in:
Joel Hegg
2017-10-20 21:27:51 -04:00
parent 9c16e26d46
commit 33aebc55ca
6 changed files with 1345 additions and 762 deletions
+97 -250
View File
@@ -1,20 +1,38 @@
/**
* @typedef {object} ActionsSdkAppOptions JSON configuration.
* @property {TODO} request - Express HTTP request object.
* @property {TODO} response - Express HTTP response object.
* @property {TODO=} sessionStarted - Function callback when session starts.
*/
import * as express from 'express';
import { AssistantApp } from './assistant-app';
import { Carousel, List, RichResponse, SimpleResponse } from './response-builder';
// ---------------------------------------------------------------------------
// Actions SDK support
// ---------------------------------------------------------------------------
declare type ActionsSdkAppOptions = {
request: any;
response: any;
sessionStarted: any;
/** Express HTTP request object. */
request: express.Request;
/** Express HTTP response object. */
response: express.Response;
/** Function callback when session starts. */
sessionStarted?: () => any;
};
/**
* This is the class that handles the conversation API directly from Assistant,
* providing implementation for all the methods available in the API.
*/
declare class ActionsSdkApp {
declare class ActionsSdkApp extends AssistantApp {
/**
* Constructor for ActionsSdkApp object.
* To be used in the Actions SDK HTTP endpoint logic.
*
* @example
* const ActionsSdkApp = require('actions-on-google').ActionsSdkApp;
* const app = new ActionsSdkApp({request: request, response: response,
* sessionStarted:sessionStarted});
*
* @param {ActionsSdkAppOptions} options
* @actionssdk
*/
constructor(options: ActionsSdkAppOptions);
/**
@@ -22,6 +40,7 @@ declare class ActionsSdkApp {
* Uses Google-Auth-Library to verify authorization token against given
* Google Cloud Project ID. Auth token is given in request header with key,
* "Authorization".
*
* @example
* const app = new ActionsSdkApp({request, response});
* app.isRequestFromAssistant('nodejs-cloud-test-project-1234')
@@ -31,19 +50,22 @@ declare class ActionsSdkApp {
* .catch(err => {
* response.status(400).send();
* });
*
* @param {string} projectId Google Cloud Project ID for the Assistant app.
* @return {TODO} Promise resolving with google-auth-library LoginTicket
* @return {Promise<LoginTicket>} Promise resolving with google-auth-library LoginTicket
* if request is from a valid source, otherwise rejects with the error reason
* for an invalid token.
* @actionssdk
*/
isRequestFromAssistant(projectId: string): any;
isRequestFromAssistant(projectId: string): Promise<object>;
/**
* Gets the request Conversation API version.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
* const apiVersion = app.getApiVersion();
*
* @return {string} Version value or null if no value.
* @actionssdk
*/
@@ -51,9 +73,11 @@ declare class ActionsSdkApp {
/**
* Gets the user's raw input query.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
* app.tell('You said ' + app.getRawInput());
*
* @return {string} User's raw query or null if no value.
* @actionssdk
*/
@@ -62,9 +86,11 @@ declare class ActionsSdkApp {
/**
* Gets previous JSON dialog state that the app sent to Assistant.
* Alternatively, use the app.data field to store JSON values between requests.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
* const dialogState = app.getDialogState();
*
* @return {any} JSON object provided to the Assistant in the previous
* user turn or {} if no value.
* @actionssdk
@@ -74,9 +100,11 @@ declare class ActionsSdkApp {
/**
* Gets the "versionLabel" specified inside the Action Package.
* Used by app to do version control.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
* const actionVersionLabel = app.getActionVersionLabel();
*
* @return {string} The specified version label or null if unspecified.
* @actionssdk
*/
@@ -85,9 +113,11 @@ declare class ActionsSdkApp {
/**
* Gets the unique conversation ID. It's a new ID for the initial query,
* and stays the same until the end of the conversation.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
* const conversationId = app.getConversationId();
*
* @return {string} Conversation ID or null if no value.
* @actionssdk
*/
@@ -97,8 +127,10 @@ declare class ActionsSdkApp {
* Get the current intent. Alternatively, using a handler Map with
* {@link AssistantApp#handleRequest|handleRequest}, the client library will
* automatically handle the incoming intents.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
*
* function responseHandler (app) {
* const intent = app.getIntent();
* switch (intent) {
@@ -106,12 +138,15 @@ declare class ActionsSdkApp {
* const inputPrompt = app.buildInputPrompt(false, 'Welcome to action snippets! Say anything.');
* app.ask(inputPrompt);
* break;
*
* case app.StandardIntents.TEXT:
* app.tell('You said ' + app.getRawInput());
* break;
* }
* }
*
* app.handleRequest(responseHandler);
*
* @return {string} Intent id or null if no value.
* @actionssdk
*/
@@ -120,8 +155,10 @@ declare class ActionsSdkApp {
/**
* Get the argument value by name from the current intent. If the argument
* is not a text argument, the entire argument object is returned.
*
* Note: If incoming request is using an API version under 2 (e.g. 'v1'),
* the argument object will be in Proto2 format (snake_case, etc).
*
* @param {string} argName Name of the argument.
* @return {string} Argument value matching argName
* or null if no matching argument.
@@ -131,8 +168,10 @@ declare class ActionsSdkApp {
/**
* Returns the option key user chose from options response.
*
* @example
* const app = new App({request: req, response: res});
*
* function pickOption (app) {
* if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
* app.askWithCarousel('Which of these looks good?',
@@ -143,13 +182,17 @@ declare class ActionsSdkApp {
* app.ask('What would you like?');
* }
* }
*
* function optionPicked (app) {
* app.ask('You picked ' + app.getSelectedOption());
* }
*
* const actionMap = new Map();
* actionMap.set(app.StandardIntents.TEXT, pickOption);
* actionMap.set(app.StandardIntents.OPTION, optionPicked);
*
* app.handleRequest(actionMap);
*
* @return {string} Option key of selected item. Null if no option selected or
* if current intent is not OPTION intent.
* @actionssdk
@@ -160,8 +203,10 @@ declare class ActionsSdkApp {
* Asks to collect user's input; all user's queries need to be sent to
* the app.
* {@link https://developers.google.com/actions/policies/general-policies#user_experience|The guidelines when prompting the user for a response must be followed at all times}.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
*
* function mainIntent (app) {
* const inputPrompt = app.buildInputPrompt(true, '<speak>Hi! <break time="1"/> ' +
* 'I can read out an ordinal like ' +
@@ -169,6 +214,7 @@ declare class ActionsSdkApp {
* ['I didn\'t hear a number', 'If you\'re still there, what\'s the number?', 'What is the number?']);
* app.ask(inputPrompt);
* }
*
* function rawInput (app) {
* if (app.getRawInput() === 'bye') {
* app.tell('Goodbye!');
@@ -179,23 +225,28 @@ declare class ActionsSdkApp {
* app.ask(inputPrompt);
* }
* }
*
* const actionMap = new Map();
* actionMap.set(app.StandardIntents.MAIN, mainIntent);
* actionMap.set(app.StandardIntents.TEXT, rawInput);
*
* app.handleRequest(actionMap);
* @param {InputPrompt|SimpleResponse|RichResponse} inputPrompt Holding initial and
*
* @param {Object|SimpleResponse|RichResponse} inputPrompt Holding initial and
* no-input prompts.
* @param {DialogState=} dialogState JSON object the app uses to hold dialog state that
* @param {Object=} dialogState JSON object the app uses to hold dialog state that
* will be circulated back by App.
* @return {AskTellResponse} The response that is sent to Assistant to ask user to provide input.
* @return {express.Response|null} The response that is sent to Assistant to ask user to provide input.
* @actionssdk
*/
ask(inputPrompt: InputPrompt | SimpleResponse | RichResponse, dialogState?: DialogState): AskTellResponse;
ask(inputPrompt: object | SimpleResponse | RichResponse, dialogState?: object): express.Response | null;
/**
* Asks to collect user's input with a list.
*
* @example
* const app = new ActionsSdkApp({request, response});
*
* function welcomeIntent (app) {
* app.askWithlist('Which of these looks good?',
* app.buildList('List title')
@@ -208,6 +259,7 @@ declare class ActionsSdkApp {
* .setTitle('Number two'),
* ]));
* }
*
* function optionIntent (app) {
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
* app.tell('Number one is a great choice!');
@@ -215,24 +267,28 @@ declare class ActionsSdkApp {
* app.tell('Number two is a great choice!');
* }
* }
*
* const actionMap = new Map();
* actionMap.set(app.StandardIntents.TEXT, welcomeIntent);
* actionMap.set(app.StandardIntents.OPTION, optionIntent);
* app.handleRequest(actionMap);
* @param {InputPrompt|SimpleResponse|RichResponse} inputPrompt Holding initial and
*
* @param {Object|SimpleResponse|RichResponse} inputPrompt Holding initial and
* no-input prompts. Cannot contain basic card.
* @param {List} list List built with {@link AssistantApp#buildList|buildList}.
* @param {DialogState=} dialogState JSON object the app uses to hold dialog state that
* @param {Object=} dialogState JSON object the app uses to hold dialog state that
* will be circulated back by Assistant.
* @return {AskTellResponse} The response that is sent to Assistant to ask user to provide input.
* @return {express.Response|null} The response that is sent to Assistant to ask user to provide input.
* @actionssdk
*/
askWithList(inputPrompt: InputPrompt | SimpleResponse | RichResponse, list: List, dialogState?: DialogState): AskTellResponse;
askWithList(inputPrompt: object | SimpleResponse | RichResponse, list: List, dialogState?: object): express.Response | null;
/**
* Asks to collect user's input with a carousel.
*
* @example
* const app = new ActionsSdkApp({request, response});
*
* function welcomeIntent (app) {
* app.askWithCarousel('Which of these looks good?',
* app.buildCarousel()
@@ -245,6 +301,7 @@ declare class ActionsSdkApp {
* .setTitle('Number two'),
* ]));
* }
*
* function optionIntent (app) {
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
* app.tell('Number one is a great choice!');
@@ -252,25 +309,29 @@ declare class ActionsSdkApp {
* app.tell('Number two is a great choice!');
* }
* }
*
* const actionMap = new Map();
* actionMap.set(app.StandardIntents.TEXT, welcomeIntent);
* actionMap.set(app.StandardIntents.OPTION, optionIntent);
* app.handleRequest(actionMap);
* @param {InputPrompt|SimpleResponse|RichResponse} inputPrompt Holding initial and
*
* @param {Object|SimpleResponse|RichResponse} inputPrompt Holding initial and
* no-input prompts. Cannot contain basic card.
* @param {Carousel} carousel Carousel built with
* {@link AssistantApp#buildCarousel|buildCarousel}.
* @param {DialogState=} dialogState JSON object the app uses to hold dialog state that
* @param {Object=} dialogState JSON object the app uses to hold dialog state that
* will be circulated back by Assistant.
* @return {AskTellResponse} The response that is sent to Assistant to ask user to provide input.
* @return {express.Response|null} The response that is sent to Assistant to ask user to provide input.
* @actionssdk
*/
askWithCarousel(inputPrompt: InputPrompt | SimpleResponse | RichResponse, carousel: Carousel, dialogState?: DialogState): AskTellResponse;
askWithCarousel(inputPrompt: object | SimpleResponse | RichResponse, carousel: Carousel, dialogState?: object): express.Response | null;
/**
* Tells Assistant to render the speech response and close the mic.
*
* @example
* const app = new ActionsSdkApp({request: request, response: response});
*
* function mainIntent (app) {
* const inputPrompt = app.buildInputPrompt(true, '<speak>Hi! <break time="1"/> ' +
* 'I can read out an ordinal like ' +
@@ -278,6 +339,7 @@ declare class ActionsSdkApp {
* ['I didn\'t hear a number', 'If you\'re still there, what\'s the number?', 'What is the number?']);
* app.ask(inputPrompt);
* }
*
* function rawInput (app) {
* if (app.getRawInput() === 'bye') {
* app.tell('Goodbye!');
@@ -288,258 +350,43 @@ declare class ActionsSdkApp {
* app.ask(inputPrompt);
* }
* }
*
* const actionMap = new Map();
* actionMap.set(app.StandardIntents.MAIN, mainIntent);
* actionMap.set(app.StandardIntents.TEXT, rawInput);
*
* app.handleRequest(actionMap);
*
* @param {string|SimpleResponse|RichResponse} textToSpeech Final response.
* Spoken response can be SSML.
* @return {AskTellResponse} The HTTP response that is sent back to Assistant.
* @return {express.Response|null} The HTTP response that is sent back to Assistant.
* @actionssdk
*/
tell(textToSpeech: string | SimpleResponse | RichResponse): AskTellResponse;
tell(textToSpeech: string | SimpleResponse | RichResponse): express.Response | null;
/**
* Builds the {@link https://developers.google.com/actions/reference/conversation#InputPrompt|InputPrompt object}
* from initial prompt and no-input prompts.
*
* The App needs one initial prompt to start the conversation. If there is no user response,
* the App re-opens the mic and renders the no-input prompts three times
* (one for each no-input prompt that was configured) to help the user
* provide the right response.
*
* Note: we highly recommend app to provide all the prompts required here in order to ensure a
* good user experience.
*
* @example
* const inputPrompt = app.buildInputPrompt(false, 'Welcome to action snippets! Say a number.',
* ['Say any number', 'Pick a number', 'What is the number?']);
* app.ask(inputPrompt);
*
* @param {boolean} isSsml Indicates whether the text to speech is SSML or not.
* @param {string} initialPrompt The initial prompt the App asks the user.
* @param {Array<string>=} noInputs Array of re-prompts when the user does not respond (max 3).
* @return {InputPrompt} An {@link https://developers.google.com/actions/reference/conversation#InputPrompt|InputPrompt object}.
* @return {Object} An {@link https://developers.google.com/actions/reference/conversation#InputPrompt|InputPrompt object}.
* @actionssdk
*/
buildInputPrompt(isSsml: boolean, initialPrompt: string, noInputs?: string[]): InputPrompt;
buildInputPrompt(isSsml: boolean, initialPrompt: string, noInputs?: string[]): object;
}
/**
* List of standard intents that the app provides.
* @readonly
* @enum {string}
* @actionssdk
* @dialogflow
*/
declare const enum StandardIntents {
/**
* App fires MAIN intent for queries like [talk to $app].
*/
MAIN,
/**
* App fires TEXT intent when action issues ask intent.
*/
TEXT,
/**
* App fires PERMISSION intent when action invokes askForPermission.
*/
PERMISSION,
/**
* App fires OPTION intent when user chooses from options provided.
*/
OPTION,
/**
* App fires TRANSACTION_REQUIREMENTS_CHECK intent when action sets up transaction.
*/
TRANSACTION_REQUIREMENTS_CHECK,
/**
* App fires DELIVERY_ADDRESS intent when action asks for delivery address.
*/
DELIVERY_ADDRESS,
/**
* App fires TRANSACTION_DECISION intent when action asks for transaction decision.
*/
TRANSACTION_DECISION,
/**
* App fires CONFIRMATION intent when requesting affirmation from user.
*/
CONFIRMATION,
/**
* App fires DATETIME intent when requesting date/time from user.
*/
DATETIME,
/**
* App fires SIGN_IN intent when requesting sign-in from user.
*/
SIGN_IN,
/**
* App fires NO_INPUT intent when user doesn't provide input.
*/
NO_INPUT,
/**
* App fires CANCEL intent when user exits app mid-dialog.
*/
CANCEL,
/**
* App fires NEW_SURFACE intent when requesting handoff to a new surface from user.
*/
NEW_SURFACE,
}
/**
* List of supported permissions the app supports.
* @readonly
* @enum {string}
* @actionssdk
* @dialogflow
*/
declare const enum SupportedPermissions {
/**
* The user's name as defined in the
* {@link https://developers.google.com/actions/reference/conversation#UserProfile|UserProfile object}
*/
NAME,
/**
* The location of the user's current device, as defined in the
* {@link https://developers.google.com/actions/reference/conversation#Location|Location object}.
*/
DEVICE_PRECISE_LOCATION,
/**
* City and zipcode corresponding to the location of the user's current device, as defined in the
* {@link https://developers.google.com/actions/reference/conversation#Location|Location object}.
*/
DEVICE_COARSE_LOCATION,
}
/**
* List of built-in argument names.
* @readonly
* @enum {string}
* @actionssdk
* @dialogflow
*/
declare const enum BuiltInArgNames {
/**
* Permission granted argument.
*/
PERMISSION_GRANTED,
/**
* Option selected argument.
*/
OPTION,
/**
* Transaction requirements check result argument.
*/
TRANSACTION_REQ_CHECK_RESULT,
/**
* Delivery address value argument.
*/
DELIVERY_ADDRESS_VALUE,
/**
* Transactions decision argument.
*/
TRANSACTION_DECISION_VALUE,
/**
* Confirmation argument.
*/
CONFIRMATION,
/**
* DateTime argument.
*/
DATETIME,
/**
* Sign in status argument.
*/
SIGN_IN,
/**
* Reprompt count for consecutive NO_INPUT intents.
*/
REPROMPT_COUNT,
/**
* Flag representing finality of NO_INPUT intent.
*/
IS_FINAL_REPROMPT,
/**
* New surface value argument.
*/
NEW_SURFACE,
}
/**
* List of possible conversation stages, as defined in the
* {@link https://developers.google.com/actions/reference/conversation#Conversation|Conversation object}.
* @readonly
* @enum {number}
* @actionssdk
* @dialogflow
*/
declare const enum ConversationStages {
/**
* Unspecified conversation state.
*/
UNSPECIFIED,
/**
* A new conversation.
*/
NEW,
/**
* An active (ongoing) conversation.
*/
ACTIVE,
}
/**
* List of surface capabilities supported by the app.
* @readonly
* @enum {string}
* @actionssdk
* @dialogflow
*/
declare const enum SurfaceCapabilities {
/**
* The ability to output audio.
*/
AUDIO_OUTPUT,
/**
* The ability to output on a screen
*/
SCREEN_OUTPUT,
}
/**
* List of possible user input types.
* @readonly
* @enum {number}
* @actionssdk
* @dialogflow
*/
declare const enum InputTypes {
/**
* Unspecified.
*/
UNSPECIFIED,
/**
* Input given by touch.
*/
TOUCH,
/**
* Input given by voice (spoken).
*/
VOICE,
/**
* Input given by keyboard (typed).
*/
KEYBOARD,
}
/**
* List of possible sign in result status values.
* @readonly
* @enum {string}
* @actionssdk
* @dialogflow
*/
declare const enum SignInStatus {
UNSPECIFIED,
OK,
CANCELLED,
ERROR,
}
File diff suppressed because it is too large Load Diff
+135 -37
View File
@@ -1,27 +1,62 @@
import * as express from 'express';
import { AssistantApp } from './assistant-app';
import { Carousel, List, RichResponse, SimpleResponse } from './response-builder';
// ---------------------------------------------------------------------------
// Dialogflow support
// ---------------------------------------------------------------------------
/**
* @typedef {object} DialogflowAppOptions JSON configuration.
* @property {TODO} request - Express HTTP request object.
* @property {TODO} response - Express HTTP response object.
* @property {TODO=} sessionStarted - Function callback when session starts.
* Only called if webhook is enabled for welcome/triggering intents, and
* called from Web Simulator or Google Home device (i.e., not Dialogflow simulator).
* Dialogflow {@link https://dialogflow.com/docs/concept-contexts|Context}.
*/
declare type Context = {
/** Full name of the context. */
name: string;
/**
* Parameters carried within this context.
* See {@link https://dialogflow.com/docs/concept-actions#section-extracting-values-from-contexts|here}.
*/
parameters: object;
/** Remaining number of intents */
lifespan: number;
};
declare type DialogflowAppOptions = {
request: any;
response: any;
sessionStarted: any;
/** Express HTTP request object. */
request: express.Request;
/** Express HTTP response object. */
response: express.Response;
/**
* Function callback when session starts.
* Only called if webhook is enabled for welcome/triggering intents, and
* called from Web Simulator or Google Home device (i.e., not Dialogflow simulator).
*/
sessionStarted?: () => any;
};
/**
* This is the class that handles the communication with Dialogflow's fulfillment API.
*/
declare class DialogflowApp {
declare class DialogflowApp extends AssistantApp {
/**
* Constructor for DialogflowApp object.
* To be used in the Dialogflow fulfillment webhook logic.
*
* @example
* const DialogflowApp = require('actions-on-google').DialogflowApp;
* const app = new DialogflowApp({request: request, response: response,
* sessionStarted:sessionStarted});
*
* @param {DialogflowAppOptions} options
* @dialogflow
*/
constructor(options: DialogflowAppOptions);
/**
* @deprecated
* Verifies whether the request comes from Dialogflow.
*
* @param {string} key The header key specified by the developer in the
* Dialogflow Fulfillment settings of the app.
* @param {string} value The private value specified by the developer inside the
@@ -33,6 +68,7 @@ declare class DialogflowApp {
/**
* Verifies whether the request comes from Dialogflow.
*
* @param {string} key The header key specified by the developer in the
* Dialogflow Fulfillment settings of the app.
* @param {string} value The private value specified by the developer inside the
@@ -47,21 +83,26 @@ declare class DialogflowApp {
* {@link AssistantApp#handleRequest|handleRequest},
* the client library will automatically handle the incoming intents.
* 'Intent' in the Dialogflow context translates into the current action.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
*
* function responseHandler (app) {
* const intent = app.getIntent();
* switch (intent) {
* case WELCOME_INTENT:
* app.ask('Welcome to action snippets! Say a number.');
* break;
*
* case NUMBER_INTENT:
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* break;
* }
* }
*
* app.handleRequest(responseHandler);
*
* @return {string} Intent id or null if no value (action name).
* @dialogflow
*/
@@ -71,29 +112,35 @@ declare class DialogflowApp {
* Get the argument value by name from the current intent. If the argument
* is included in originalRequest, and is not a text argument, the entire
* argument object is returned.
*
* Note: If incoming request is using an API version under 2 (e.g. 'v1'),
* the argument object will be in Proto2 format (snake_case, etc).
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const WELCOME_INTENT = 'input.welcome';
* const NUMBER_INTENT = 'input.number';
*
* function welcomeIntent (app) {
* app.ask('Welcome to action snippets! Say a number.');
* }
*
* function numberIntent (app) {
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @param {string} argName Name of the argument.
* @return {Object} Argument value matching argName
* or null if no matching argument.
* @dialogflow
*/
getArgument(argName: string): any;
getArgument(argName: string): object;
/**
* Get the context argument value by name from the current intent. Context
@@ -101,41 +148,49 @@ declare class DialogflowApp {
* lifespan of the given context. If the context argument has an original
* value, usually representing the underlying entity value, that will be given
* as part of the return object.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const WELCOME_INTENT = 'input.welcome';
* const NUMBER_INTENT = 'input.number';
* const OUT_CONTEXT = 'output_context';
* const NUMBER_ARG = 'myNumberArg';
*
* function welcomeIntent (app) {
* const parameters = {};
* parameters[NUMBER_ARG] = '42';
* app.setContext(OUT_CONTEXT, 1, parameters);
* app.ask('Welcome to action snippets! Ask me for your number.');
* }
*
* function numberIntent (app) {
* const number = app.getContextArgument(OUT_CONTEXT, NUMBER_ARG);
* // number === { value: 42 }
* app.tell('Your number is ' + number.value);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @param {string} contextName Name of the context.
* @param {string} argName Name of the argument.
* @return {Object} Object containing value property and optional original
* property matching context argument. Null if no matching argument.
* @dialogflow
*/
getContextArgument(contextName: string, argName: string): any;
getContextArgument(contextName: string, argName: string): object;
/**
* Returns the RichResponse constructed in Dialogflow response builder.
*
* @example
* const app = new App({request: req, response: res});
*
* function tellFact (app) {
* let fact = 'Google was founded in 1998';
*
* if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
* app.ask(app.getIncomingRichResponse().addSimpleResponse('Here\'s a ' +
* 'fact for you. ' + fact + ' Which one do you want to hear about ' +
@@ -145,9 +200,12 @@ declare class DialogflowApp {
* 'do you want to hear about next, Google\'s history or headquarters?');
* }
* }
*
* const actionMap = new Map();
* actionMap.set('tell.fact', tellFact);
*
* app.handleRequest(actionMap);
*
* @return {RichResponse} RichResponse created in Dialogflow. If no RichResponse was
* created, an empty RichResponse is returned.
* @dialogflow
@@ -156,8 +214,10 @@ declare class DialogflowApp {
/**
* Returns the List constructed in Dialogflow response builder.
*
* @example
* const app = new App({request: req, response: res});
*
* function pickOption (app) {
* if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
* app.askWithList('Which of these looks good?',
@@ -168,9 +228,12 @@ declare class DialogflowApp {
* app.ask('What would you like?');
* }
* }
*
* const actionMap = new Map();
* actionMap.set('pick.option', pickOption);
*
* app.handleRequest(actionMap);
*
* @return {List} List created in Dialogflow. If no List was created, an empty
* List is returned.
* @dialogflow
@@ -179,8 +242,10 @@ declare class DialogflowApp {
/**
* Returns the Carousel constructed in Dialogflow response builder.
*
* @example
* const app = new App({request: req, response: res});
*
* function pickOption (app) {
* if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
* app.askWithCarousel('Which of these looks good?',
@@ -191,9 +256,12 @@ declare class DialogflowApp {
* app.ask('What would you like?');
* }
* }
*
* const actionMap = new Map();
* actionMap.set('pick.option', pickOption);
*
* app.handleRequest(actionMap);
*
* @return {Carousel} Carousel created in Dialogflow. If no Carousel was created,
* an empty Carousel is returned.
* @dialogflow
@@ -202,8 +270,10 @@ declare class DialogflowApp {
/**
* Returns the option key user chose from options response.
*
* @example
* const app = new App({request: req, response: res});
*
* function pickOption (app) {
* if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
* app.askWithCarousel('Which of these looks good?',
@@ -214,13 +284,17 @@ declare class DialogflowApp {
* app.ask('What would you like?');
* }
* }
*
* function optionPicked (app) {
* app.ask('You picked ' + app.getSelectedOption());
* }
*
* const actionMap = new Map();
* actionMap.set('pick.option', pickOption);
* actionMap.set('option.picked', optionPicked);
*
* app.handleRequest(actionMap);
*
* @return {string} Option key of selected item. Null if no option selected or
* if current intent is not OPTION intent.
* @dialogflow
@@ -230,39 +304,47 @@ declare class DialogflowApp {
/**
* Asks to collect the user's input.
* {@link https://developers.google.com/actions/policies/general-policies#user_experience|The guidelines when prompting the user for a response must be followed at all times}.
*
* NOTE: Due to a bug, if you specify the no-input prompts,
* the mic is closed after the 3rd prompt, so you should use the 3rd prompt
* for a bye message until the bug is fixed.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const WELCOME_INTENT = 'input.welcome';
* const NUMBER_INTENT = 'input.number';
*
* function welcomeIntent (app) {
* app.ask('Welcome to action snippets! Say a number.',
* ['Say any number', 'Pick a number', 'We can stop here. See you soon.']);
* }
*
* function numberIntent (app) {
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @param {string|SimpleResponse|RichResponse} inputPrompt The input prompt
* response.
* @param {Array<string>=} noInputs Array of re-prompts when the user does not respond (max 3).
* @return {AskTellResponse} HTTP response.
* @return {express.Response|null} HTTP response.
* @dialogflow
*/
ask(inputPrompt: string | SimpleResponse | RichResponse, noInputs?: string[]): AskTellResponse;
ask(inputPrompt: string | SimpleResponse | RichResponse, noInputs?: string[]): express.Response | null;
/**
* Asks to collect the user's input with a list.
*
* @example
* const app = new DialogflowApp({request, response});
* const WELCOME_INTENT = 'input.welcome';
* const OPTION_INTENT = 'option.select';
*
* function welcomeIntent (app) {
* app.askWithList('Which of these looks good?',
* app.buildList('List title')
@@ -275,6 +357,7 @@ declare class DialogflowApp {
* .setTitle('Title of Second List Item'),
* ]));
* }
*
* function optionIntent (app) {
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
* app.tell('Number one is a great choice!');
@@ -282,24 +365,28 @@ declare class DialogflowApp {
* app.tell('Number two is a great choice!');
* }
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(OPTION_INTENT, optionIntent);
* app.handleRequest(actionMap);
*
* @param {string|RichResponse|SimpleResponse} inputPrompt The input prompt
* response.
* @param {List} list List built with {@link AssistantApp#buildList|buildList}.
* @return {AskTellResponse} HTTP response.
* @return {express.Response|null} HTTP response.
* @dialogflow
*/
askWithList(inputPrompt: string | RichResponse | SimpleResponse, list: List): AskTellResponse;
askWithList(inputPrompt: string | RichResponse | SimpleResponse, list: List): express.Response | null;
/**
* Asks to collect the user's input with a carousel.
*
* @example
* const app = new DialogflowApp({request, response});
* const WELCOME_INTENT = 'input.welcome';
* const OPTION_INTENT = 'option.select';
*
* function welcomeIntent (app) {
* app.askWithCarousel('Which of these looks good?',
* app.buildCarousel()
@@ -312,6 +399,7 @@ declare class DialogflowApp {
* .setTitle('Number two'),
* ]));
* }
*
* function optionIntent (app) {
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
* app.tell('Number one is a great choice!');
@@ -319,79 +407,94 @@ declare class DialogflowApp {
* app.tell('Number two is a great choice!');
* }
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(OPTION_INTENT, optionIntent);
* app.handleRequest(actionMap);
*
* @param {string|RichResponse|SimpleResponse} inputPrompt The input prompt
* response.
* @param {Carousel} carousel Carousel built with
* {@link AssistantApp#buildCarousel|buildCarousel}.
* @return {AskTellResponse} HTTP response.
* @return {express.Response|null} HTTP response.
* @dialogflow
*/
askWithCarousel(inputPrompt: string | RichResponse | SimpleResponse, carousel: Carousel): AskTellResponse;
askWithCarousel(inputPrompt: string | RichResponse | SimpleResponse, carousel: Carousel): express.Response | null;
/**
* Tells the Assistant to render the speech response and close the mic.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const WELCOME_INTENT = 'input.welcome';
* const NUMBER_INTENT = 'input.number';
*
* function welcomeIntent (app) {
* app.ask('Welcome to action snippets! Say a number.');
* }
*
* function numberIntent (app) {
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @param {string|SimpleResponse|RichResponse} speechResponse Final response.
* Spoken response can be SSML.
* @return {AskTellResponse} The response that is sent back to Assistant.
* @return {express.Response|null} The response that is sent back to Assistant.
* @dialogflow
*/
tell(speechResponse: string | SimpleResponse | RichResponse): AskTellResponse;
tell(speechResponse: string | SimpleResponse | RichResponse): express.Response | null;
/**
* Set a new context for the current intent.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const CONTEXT_NUMBER = 'number';
* const NUMBER_ARGUMENT = 'myNumber';
*
* function welcomeIntent (app) {
* app.setContext(CONTEXT_NUMBER);
* app.ask('Welcome to action snippets! Say a number.');
* }
*
* function numberIntent (app) {
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @param {string} name Name of the context. Dialogflow converts to lowercase.
* @param {number} [lifespan=1] Context lifespan.
* @param {Object=} parameters Context JSON parameters.
* @return {null|undefined} Null if the context name is not defined.
* @dialogflow
*/
setContext(name: string, lifespan?: number, parameters?: any): any | any;
setContext(name: string, lifespan?: number, parameters?: any): null | undefined;
/**
* Returns the incoming contexts for this intent.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const CONTEXT_NUMBER = 'number';
* const NUMBER_ARGUMENT = 'myNumber';
*
* function welcomeIntent (app) {
* app.setContext(CONTEXT_NUMBER);
* app.ask('Welcome to action snippets! Say a number.');
* }
*
* function numberIntent (app) {
* let contexts = app.getContexts();
* // contexts === [{
@@ -405,25 +508,30 @@ declare class DialogflowApp {
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @return {Context[]} Empty if no active contexts.
* @dialogflow
*/
getContexts(): (Context)[];
getContexts(): Context[];
/**
* Returns the incoming context by name for this intent.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* const CONTEXT_NUMBER = 'number';
* const NUMBER_ARGUMENT = 'myNumber';
*
* function welcomeIntent (app) {
* app.setContext(CONTEXT_NUMBER);
* app.ask('Welcome to action snippets! Say a number.');
* }
*
* function numberIntent (app) {
* let context = app.getContext(CONTEXT_NUMBER);
* // context === {
@@ -437,39 +545,29 @@ declare class DialogflowApp {
* const number = app.getArgument(NUMBER_ARGUMENT);
* app.tell('You said ' + number);
* }
*
* const actionMap = new Map();
* actionMap.set(WELCOME_INTENT, welcomeIntent);
* actionMap.set(NUMBER_INTENT, numberIntent);
* app.handleRequest(actionMap);
*
* @param {string} name The name of the Context to retrieve.
* @return {Object} Context value matching name
* or null if no matching context.
* @dialogflow
*/
getContext(name: string): any;
getContext(name: string): object;
/**
* Gets the user's raw input query.
*
* @example
* const app = new DialogflowApp({request: request, response: response});
* app.tell('You said ' + app.getRawInput());
*
* @return {string} User's raw query or null if no value.
* @dialogflow
*/
getRawInput(): string;
}
/**
* Dialogflow {@link https://dialogflow.com/docs/concept-contexts|Context}.
* @typedef {object} Context
* @property {string} name - Full name of the context.
* @property {Object} parameters - Parameters carried within this context.
* See {@link https://dialogflow.com/docs/concept-actions#section-extracting-values-from-contexts|here}.
* @property {number} lifespan - Remaining number of intents
*/
declare type Context = {
name: string;
parameters: any;
lifespan: number;
};
+3 -3
View File
@@ -1,6 +1,6 @@
// Type definitions for actions-on-google 1.5
// Type definitions for actions-on-google 1.5.1
// Project: https://github.com/actions-on-google/actions-on-google-nodejs
// Definitions by: Joel Hegg <https://github.com/joelhegg>, Pilwon Huh <https://github.com/pilwon>
// Definitions by: Joel Hegg <https://github.com/joelhegg>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.4
@@ -12,7 +12,7 @@
import * as Transactions from './transactions';
import * as Responses from './response-builder';
export { AssistantApp, AssistantAppOptions, RequestHandler, SessionStartedFunction, State } from './assistant-app';
export { AssistantApp } from './assistant-app';
export { ActionsSdkApp, ActionsSdkAppOptions } from './actions-sdk-app';
export { DialogflowApp, DialogflowAppOptions } from './dialogflow-app';
export { Transactions };
+86 -55
View File
@@ -1,74 +1,72 @@
/**
* A collection of response builders.
*/
import { OrderUpdate } from './transactions';
/**
* Simple Response type.
* @typedef {object} SimpleResponse
* @property {string} speech - Speech to be spoken to user. SSML allowed.
* @property {string} [displayText] - Optional text to be shown to user
*/
declare type SimpleResponse = {
/** Speech to be spoken to user. SSML allowed. */
speech: string;
displayText: string;
/** Optional text to be shown to user */
displayText?: string;
};
/**
* Suggestions to show with response.
* @typedef {object} Suggestion
* @property {string} title - Text of the suggestion.
*/
declare type Suggestion = {
/** Text of the suggestion. */
title: string;
};
/**
* Link Out Suggestion. Used in rich response as a suggestion chip which, when
* selected, links out to external URL.
* @typedef {object} LinkOutSuggestion
* @property {string} title - Text shown on the suggestion chip.
* @property {string} url - String URL to open.
*/
declare type LinkOutSuggestion = {
/** Text shown on the suggestion chip. */
title: string;
/** String URL to open. */
url: string;
};
/**
* Image type shown on visual elements.
* @typedef {object} Image
* @property {string} url - Image source URL.
* @property {string} accessibilityText - Text to replace for image for
* accessibility.
* @property {number} width - Width of the image.
* @property {number} height - Height of the image.
*/
declare type Image = {
/** Image source URL. */
url: string;
/** Text to replace for image for accessibility. */
accessibilityText: string;
/** Width of the image. */
width: number;
/** Height of the image. */
height: number;
};
/**
* Basic Card Button. Shown below basic cards. Open a URL when selected.
* @typedef {object} Button
* @property {string} title - Text shown on the button.
* @property {Object} openUrlAction - Action to take when selected.
* @property {string} openUrlAction.url - String URL to open.
*/
declare type Button = {
/** Text shown on the button. */
title: string;
openUrlAction: any;
"openUrlAction.url": string;
/** Action to take when selected. */
openUrlAction: {
/** String URL to open. */
url: string;
};
};
/**
* Option info. Provides unique identifier for a given OptionItem.
* @typedef {object} OptionInfo
* @property {string} key - Unique string ID for this option.
* @property {Array<string>} synonyms - Synonyms that can be used by the user
* to indicate this option if they do not use the key.
*/
declare type OptionInfo = {
/** Unique string ID for this option. */
key: string;
/** Synonyms that can be used by the user to indicate this option if they do not use the key. */
synonyms: string[];
};
@@ -76,29 +74,32 @@ declare type OptionInfo = {
* Class for initializing and constructing Rich Responses with chainable interface.
*/
declare class RichResponse {
/**
* Constructor for RichResponse. Accepts optional RichResponse to clone.
*
* @param {RichResponse=} richResponse Optional RichResponse to clone.
*/
constructor(richResponse?: RichResponse);
/**
* Ordered list of either SimpleResponse objects or BasicCard objects.
* First item must be SimpleResponse. There can be at most one card.
* @type {Array<SimpleResponse|BasicCard>}
*/
items: (SimpleResponse | BasicCard)[];
/**
* Ordered list of text suggestions to display. Optional.
* @type {Array<Suggestion>}
*/
suggestions: (Suggestion)[];
suggestions: Suggestion[];
/**
* Link Out Suggestion chip for this rich response. Optional.
* @type {LinkOutSuggestion}
*/
linkOutSuggestion: LinkOutSuggestion;
linkOutSuggestion?: LinkOutSuggestion;
/**
* Adds a SimpleResponse to list of items.
*
* @param {string|SimpleResponse} simpleResponse Simple response to present to
* user. If just a string, display text will not be set.
* @return {RichResponse} Returns current constructed RichResponse.
@@ -107,6 +108,7 @@ declare class RichResponse {
/**
* Adds a BasicCard to list of items.
*
* @param {BasicCard} basicCard Basic card to include in response.
* @return {RichResponse} Returns current constructed RichResponse.
*/
@@ -114,6 +116,7 @@ declare class RichResponse {
/**
* Adds a single suggestion or list of suggestions to list of items.
*
* @param {string|Array<string>} suggestions Either a single string suggestion
* or list of suggestions to add.
* @return {RichResponse} Returns current constructed RichResponse.
@@ -130,6 +133,7 @@ declare class RichResponse {
/**
* Sets the suggestion link for this rich response.
*
* @param {string} destinationName Name of the link out destination.
* @param {string} suggestionUrl - String URL to open when suggestion is used.
* @return {RichResponse} Returns current constructed RichResponse.
@@ -139,6 +143,7 @@ declare class RichResponse {
/**
* Adds an order update to this response. Use after a successful transaction
* decision to confirm the order.
*
* @param {OrderUpdate} orderUpdate OrderUpdate object to add.
* @return {RichResponse} Returns current constructed RichResponse.
*/
@@ -150,40 +155,41 @@ declare class RichResponse {
* Class for initializing and constructing Basic Cards with chainable interface.
*/
declare class BasicCard {
/**
* Constructor for BasicCard. Accepts optional BasicCard to clone.
*
* @param {BasicCard=} basicCard Optional BasicCard to clone.
*/
constructor(basicCard?: BasicCard);
/**
* Title of the card. Optional.
* @type {string}
*/
title: string;
title?: string;
/**
* Body text to show on the card. Required, unless image is present.
* @type {string}
*/
formattedText: string;
/**
* Subtitle of the card. Optional.
* @type {string}
*/
subtitle: string;
subtitle?: string;
/**
* Image to show on the card. Optional.
* @type {Image}
*/
image: Image;
image?: Image;
/**
* Ordered list of buttons to show below card. Optional.
* @type {Array<Button>}
*/
buttons: (Button)[];
buttons: Button[];
/**
* Sets the title for this Basic Card.
*
* @param {string} title Title to show on card.
* @return {BasicCard} Returns current constructed BasicCard.
*/
@@ -191,6 +197,7 @@ declare class BasicCard {
/**
* Sets the subtitle for this Basic Card.
*
* @param {string} subtitle Subtitle to show on card.
* @return {BasicCard} Returns current constructed BasicCard.
*/
@@ -198,6 +205,7 @@ declare class BasicCard {
/**
* Sets the body text for this Basic Card.
*
* @param {string} bodyText Body text to show on card.
* @return {BasicCard} Returns current constructed BasicCard.
*/
@@ -205,6 +213,7 @@ declare class BasicCard {
/**
* Sets the image for this Basic Card.
*
* @param {string} url Image source URL.
* @param {string} accessibilityText Text to replace for image for
* accessibility.
@@ -216,6 +225,7 @@ declare class BasicCard {
/**
* Adds a button below card.
*
* @param {string} text Text to show on button.
* @param {string} url URL to open when button is selected.
* @return {BasicCard} Returns current constructed BasicCard.
@@ -228,22 +238,29 @@ declare class BasicCard {
* Class for initializing and constructing Lists with chainable interface.
*/
declare class List {
constructor(list?: List | string | (OptionItem)[]);
/**
* Constructor for List. Accepts optional List to clone, string title, or
* list of items to copy.
*
* @param {(List|string|Array<OptionItem>)=} list Either a list to clone, a title
* to set for a new List, or an array of OptionItem to initialize a new
* list.
*/
constructor(list?: List | string | OptionItem[]);
/**
* Title of the list. Optional.
* @type {string}
*/
title: string;
title?: string;
/**
* List of 2-20 items to show in this list. Required.
* @type {Array<OptionItem>}
*/
items: (OptionItem)[];
items: OptionItem[];
/**
* Sets the title for this List.
*
* @param {string} title Title to show on list.
* @return {List} Returns current constructed List.
*/
@@ -251,10 +268,11 @@ declare class List {
/**
* Adds a single item or list of items to the list.
*
* @param {OptionItem|Array<OptionItem>} optionItems OptionItems to add.
* @return {List} Returns current constructed List.
*/
addItems(optionItems: OptionItem | (OptionItem)[]): List;
addItems(optionItems: OptionItem | OptionItem[]): List;
}
@@ -262,20 +280,27 @@ declare class List {
* Class for initializing and constructing Carousel with chainable interface.
*/
declare class Carousel {
constructor(carousel?: Carousel | (OptionItem)[]);
/**
* Constructor for Carousel. Accepts optional Carousel to clone or list of
* items to copy.
*
* @param {(Carousel|Array<OptionItem>)=} carousel Either a carousel to clone
* or an array of OptionItem to initialize a new carousel
*/
constructor(carousel?: Carousel | OptionItem[]);
/**
* List of 2-20 items to show in this carousel. Required.
* @type {Array<OptionItem>}
*/
items: (OptionItem)[];
items: OptionItem[];
/**
* Adds a single item or list of items to the carousel.
*
* @param {OptionItem|Array<OptionItem>} optionItems OptionItems to add.
* @return {Carousel} Returns current constructed Carousel.
*/
addItems(optionItems: OptionItem | (OptionItem)[]): Carousel;
addItems(optionItems: OptionItem | OptionItem[]): Carousel;
}
@@ -283,34 +308,36 @@ declare class Carousel {
* Class for initializing and constructing Option Items with chainable interface.
*/
declare class OptionItem {
/**
* Constructor for OptionItem. Accepts optional OptionItem to clone.
*
* @param {OptionItem=} optionItem Optional OptionItem to clone.
*/
constructor(optionItem?: OptionItem);
/**
* Option info of the option item. Required.
* @type {OptionInfo}
*/
optionInfo: OptionInfo;
/**
* Title of the option item. Required.
* @type {string}
*/
title: string;
/**
* Description text of the item. Optional.
* @type {string}
*/
description: string;
description?: string;
/**
* Image to show on item. Optional.
* @type {Image}
*/
image: Image;
image?: Image;
/**
* Sets the title for this Option Item.
*
* @param {string} title Title to show on item.
* @return {OptionItem} Returns current constructed OptionItem.
*/
@@ -318,6 +345,7 @@ declare class OptionItem {
/**
* Sets the description for this Option Item.
*
* @param {string} description Description to show on item.
* @return {OptionItem} Returns current constructed OptionItem.
*/
@@ -325,6 +353,7 @@ declare class OptionItem {
/**
* Sets the image for this Option Item.
*
* @param {string} url Image source URL.
* @param {string} accessibilityText Text to replace for image for
* accessibility.
@@ -337,6 +366,7 @@ declare class OptionItem {
/**
* Sets the key for the OptionInfo of this Option Item. This will be returned
* as an argument in the resulting actions.intent.OPTION intent.
*
* @param {string} key Key to uniquely identify this item.
* @return {OptionItem} Returns current constructed OptionItem.
*/
@@ -344,6 +374,7 @@ declare class OptionItem {
/**
* Adds a single synonym or list of synonyms to item.
*
* @param {string|Array<string>} synonyms Either a single string synonyms
* or list of synonyms to add.
* @return {OptionItem} Returns current constructed OptionItem.
File diff suppressed because it is too large Load Diff