mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-08-11 12:30:18 +00:00
Merge pull request #20303 from joelhegg/master
Add type defintions for actions-on-google
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
License Notices:
|
||||
|
||||
The API definitions are from Actions on Google reference site [1] and actions-on-google library [2].
|
||||
The actions-on-google library is licensed under the Apache 2.0 License [3].
|
||||
|
||||
The code documentation is reproduced from work created and shared by Google [4]
|
||||
and used according to terms described in the Creative Commons 3.0 Attribution License [5].
|
||||
|
||||
[1] https://developers.google.com/actions/
|
||||
[2] https://github.com/actions-on-google/actions-on-google-nodejs
|
||||
[3] http://www.apache.org/licenses/LICENSE-2.0
|
||||
[4] https://developers.google.com/readme/policies/
|
||||
[5] http://creativecommons.org/licenses/by/3.0/
|
||||
@@ -0,0 +1,33 @@
|
||||
import { ActionsSdkApp, ActionsSdkAppOptions, DialogflowApp, DialogflowAppOptions, AssistantApp,
|
||||
Responses, Transactions } from 'actions-on-google';
|
||||
import * as express from 'express';
|
||||
|
||||
function testActionsSdk(request: express.Request, response: express.Response) {
|
||||
const app = new ActionsSdkApp({request, response});
|
||||
const actionMap = new Map();
|
||||
actionMap.set(app.StandardIntents.MAIN, () => {
|
||||
const richResponse: Responses.RichResponse = app.buildRichResponse()
|
||||
.addSimpleResponse('Hello world')
|
||||
.addSuggestions(['foo', 'bar']);
|
||||
app.ask(richResponse);
|
||||
});
|
||||
app.handleRequest(actionMap);
|
||||
}
|
||||
|
||||
function testDialogflow(request: express.Request, response: express.Response) {
|
||||
const app = new DialogflowApp({request, response});
|
||||
const actionMap = new Map();
|
||||
actionMap.set(app.StandardIntents.MAIN, () => {
|
||||
const order: Transactions.Order = app.buildOrder('foo');
|
||||
app.askForTransactionDecision(order, {
|
||||
type: app.Transactions.PaymentType.PAYMENT_CARD,
|
||||
displayName: 'VISA-1234',
|
||||
deliveryAddressRequired: true
|
||||
});
|
||||
});
|
||||
app.handleRequest(actionMap);
|
||||
}
|
||||
|
||||
const expressApp = express();
|
||||
expressApp.get('/actionssdk', testActionsSdk);
|
||||
expressApp.get('/dialogflow', testDialogflow);
|
||||
+390
@@ -0,0 +1,390 @@
|
||||
import * as express from 'express';
|
||||
|
||||
import { AssistantApp } from './assistant-app';
|
||||
import { Carousel, List, RichResponse, SimpleResponse } from './response-builder';
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Actions SDK support
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export interface ActionsSdkAppOptions {
|
||||
/** 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.
|
||||
*/
|
||||
export 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});
|
||||
*
|
||||
* @actionssdk
|
||||
*/
|
||||
constructor(options: ActionsSdkAppOptions);
|
||||
|
||||
/**
|
||||
* Validates whether request is from Assistant through signature verification.
|
||||
* 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')
|
||||
* .then(() => {
|
||||
* app.ask('Hey there, thanks for stopping by!');
|
||||
* })
|
||||
* .catch(err => {
|
||||
* response.status(400).send();
|
||||
* });
|
||||
*
|
||||
* @param projectId Google Cloud Project ID for the Assistant app.
|
||||
* @return 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): Promise<object>;
|
||||
|
||||
/**
|
||||
* Gets the request Conversation API version.
|
||||
*
|
||||
* @example
|
||||
* const app = new ActionsSdkApp({request: request, response: response});
|
||||
* const apiVersion = app.getApiVersion();
|
||||
*
|
||||
* @return Version value or null if no value.
|
||||
* @actionssdk
|
||||
*/
|
||||
getApiVersion(): string;
|
||||
|
||||
/**
|
||||
* Gets the user's raw input query.
|
||||
*
|
||||
* @example
|
||||
* const app = new ActionsSdkApp({request: request, response: response});
|
||||
* app.tell('You said ' + app.getRawInput());
|
||||
*
|
||||
* @return User's raw query or null if no value.
|
||||
* @actionssdk
|
||||
*/
|
||||
getRawInput(): string;
|
||||
|
||||
/**
|
||||
* 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 JSON object provided to the Assistant in the previous
|
||||
* user turn or {} if no value.
|
||||
* @actionssdk
|
||||
*/
|
||||
getDialogState(): any;
|
||||
|
||||
/**
|
||||
* 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 The specified version label or null if unspecified.
|
||||
* @actionssdk
|
||||
*/
|
||||
getActionVersionLabel(): string;
|
||||
|
||||
/**
|
||||
* 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 Conversation ID or null if no value.
|
||||
* @actionssdk
|
||||
*/
|
||||
getConversationId(): string;
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
* case app.StandardIntents.MAIN:
|
||||
* 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 Intent id or null if no value.
|
||||
* @actionssdk
|
||||
*/
|
||||
getIntent(): string;
|
||||
|
||||
/**
|
||||
* 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 argName Name of the argument.
|
||||
* @return Argument value matching argName
|
||||
* or null if no matching argument.
|
||||
* @actionssdk
|
||||
*/
|
||||
getArgument(argName: string): string;
|
||||
|
||||
/**
|
||||
* 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?',
|
||||
* app.buildCarousel().addItems(
|
||||
* app.buildOptionItem('another_choice', ['Another choice']).
|
||||
* setTitle('Another choice').setDescription('Choose me!')));
|
||||
* } else {
|
||||
* 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 Option key of selected item. Null if no option selected or
|
||||
* if current intent is not OPTION intent.
|
||||
* @actionssdk
|
||||
*/
|
||||
getSelectedOption(): string;
|
||||
|
||||
/**
|
||||
* 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 ' +
|
||||
* '<say-as interpret-as="ordinal">123</say-as>. Say a number.</speak>',
|
||||
* ['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!');
|
||||
* } else {
|
||||
* const inputPrompt = app.buildInputPrompt(true, '<speak>You said, <say-as interpret-as="ordinal">' +
|
||||
* app.getRawInput() + '</say-as></speak>',
|
||||
* ['I didn\'t hear a number', 'If you\'re still there, what\'s the number?', 'What is the number?']);
|
||||
* app.ask(inputPrompt);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* const actionMap = new Map();
|
||||
* actionMap.set(app.StandardIntents.MAIN, mainIntent);
|
||||
* actionMap.set(app.StandardIntents.TEXT, rawInput);
|
||||
*
|
||||
* app.handleRequest(actionMap);
|
||||
*
|
||||
* @param inputPrompt Holding initial and
|
||||
* no-input prompts.
|
||||
* @param dialogState JSON object the app uses to hold dialog state that
|
||||
* will be circulated back by App.
|
||||
* @return The response that is sent to Assistant to ask user to provide input.
|
||||
* @actionssdk
|
||||
*/
|
||||
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')
|
||||
* .addItems([
|
||||
* app.buildOptionItem(SELECTION_KEY_ONE,
|
||||
* ['synonym of KEY_ONE 1', 'synonym of KEY_ONE 2'])
|
||||
* .setTitle('Number one'),
|
||||
* app.buildOptionItem(SELECTION_KEY_TWO,
|
||||
* ['synonym of KEY_TWO 1', 'synonym of KEY_TWO 2'])
|
||||
* .setTitle('Number two'),
|
||||
* ]));
|
||||
* }
|
||||
*
|
||||
* function optionIntent (app) {
|
||||
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
|
||||
* app.tell('Number one is a great choice!');
|
||||
* } else {
|
||||
* 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 Holding initial and
|
||||
* no-input prompts. Cannot contain basic card.
|
||||
* @param list List built with {@link AssistantApp#buildList|buildList}.
|
||||
* @param dialogState JSON object the app uses to hold dialog state that
|
||||
* will be circulated back by Assistant.
|
||||
* @return The response that is sent to Assistant to ask user to provide input.
|
||||
* @actionssdk
|
||||
*/
|
||||
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()
|
||||
* .addItems([
|
||||
* app.buildOptionItem(SELECTION_KEY_ONE,
|
||||
* ['synonym of KEY_ONE 1', 'synonym of KEY_ONE 2'])
|
||||
* .setTitle('Number one'),
|
||||
* app.buildOptionItem(SELECTION_KEY_TWO,
|
||||
* ['synonym of KEY_TWO 1', 'synonym of KEY_TWO 2'])
|
||||
* .setTitle('Number two'),
|
||||
* ]));
|
||||
* }
|
||||
*
|
||||
* function optionIntent (app) {
|
||||
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
|
||||
* app.tell('Number one is a great choice!');
|
||||
* } else {
|
||||
* 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 Holding initial and
|
||||
* no-input prompts. Cannot contain basic card.
|
||||
* @param carousel Carousel built with
|
||||
* {@link AssistantApp#buildCarousel|buildCarousel}.
|
||||
* @param dialogState JSON object the app uses to hold dialog state that
|
||||
* will be circulated back by Assistant.
|
||||
* @return The response that is sent to Assistant to ask user to provide input.
|
||||
* @actionssdk
|
||||
*/
|
||||
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 ' +
|
||||
* '<say-as interpret-as="ordinal">123</say-as>. Say a number.</speak>',
|
||||
* ['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!');
|
||||
* } else {
|
||||
* const inputPrompt = app.buildInputPrompt(true, '<speak>You said, <say-as interpret-as="ordinal">' +
|
||||
* app.getRawInput() + '</say-as></speak>',
|
||||
* ['I didn\'t hear a number', 'If you\'re still there, what\'s the number?', 'What is the number?']);
|
||||
* app.ask(inputPrompt);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* const actionMap = new Map();
|
||||
* actionMap.set(app.StandardIntents.MAIN, mainIntent);
|
||||
* actionMap.set(app.StandardIntents.TEXT, rawInput);
|
||||
*
|
||||
* app.handleRequest(actionMap);
|
||||
*
|
||||
* @param textToSpeech Final response.
|
||||
* Spoken response can be SSML.
|
||||
* @return The HTTP response that is sent back to Assistant.
|
||||
* @actionssdk
|
||||
*/
|
||||
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 isSsml Indicates whether the text to speech is SSML or not.
|
||||
* @param initialPrompt The initial prompt the App asks the user.
|
||||
* @param noInputs Array of re-prompts when the user does not respond (max 3).
|
||||
* @return.
|
||||
* @actionssdk
|
||||
*/
|
||||
buildInputPrompt(isSsml: boolean, initialPrompt: string, noInputs?: string[]): object;
|
||||
}
|
||||
+1316
File diff suppressed because it is too large
Load Diff
+571
@@ -0,0 +1,571 @@
|
||||
import * as express from 'express';
|
||||
|
||||
import { AssistantApp } from './assistant-app';
|
||||
import { Carousel, List, RichResponse, SimpleResponse } from './response-builder';
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Dialogflow support
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Dialogflow {@link https://dialogflow.com/docs/concept-contexts|Context}.
|
||||
*/
|
||||
export interface 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;
|
||||
}
|
||||
|
||||
export interface DialogflowAppOptions {
|
||||
/** 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.
|
||||
*/
|
||||
export 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});
|
||||
*
|
||||
* @dialogflow
|
||||
*/
|
||||
constructor(options: DialogflowAppOptions);
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* Verifies whether the request comes from Dialogflow.
|
||||
*
|
||||
* @param key The header key specified by the developer in the
|
||||
* Dialogflow Fulfillment settings of the app.
|
||||
* @param value The private value specified by the developer inside the
|
||||
* fulfillment header.
|
||||
* @return True if the request comes from Dialogflow.
|
||||
* @dialogflow
|
||||
*/
|
||||
isRequestFromApiAi(key: string, value: string): boolean;
|
||||
|
||||
/**
|
||||
* Verifies whether the request comes from Dialogflow.
|
||||
*
|
||||
* @param key The header key specified by the developer in the
|
||||
* Dialogflow Fulfillment settings of the app.
|
||||
* @param value The private value specified by the developer inside the
|
||||
* fulfillment header.
|
||||
* @return True if the request comes from Dialogflow.
|
||||
* @dialogflow
|
||||
*/
|
||||
isRequestFromDialogflow(key: string, value: string): boolean;
|
||||
|
||||
/**
|
||||
* Get the current intent. Alternatively, using a handler Map with
|
||||
* {@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 Intent id or null if no value (action name).
|
||||
* @dialogflow
|
||||
*/
|
||||
getIntent(): string;
|
||||
|
||||
/**
|
||||
* 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 argName Name of the argument.
|
||||
* @return Argument value matching argName
|
||||
* or null if no matching argument.
|
||||
* @dialogflow
|
||||
*/
|
||||
getArgument(argName: string): object;
|
||||
|
||||
/**
|
||||
* Get the context argument value by name from the current intent. Context
|
||||
* arguments include parameters collected in previous intents during the
|
||||
* 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 contextName Name of the context.
|
||||
* @param argName Name of the argument.
|
||||
* @return Object containing value property and optional original
|
||||
* property matching context argument. Null if no matching argument.
|
||||
* @dialogflow
|
||||
*/
|
||||
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 ' +
|
||||
* 'next, Google\'s history or headquarters?'));
|
||||
* } else {
|
||||
* app.ask('Here\'s a fact for you. ' + fact + ' Which one ' +
|
||||
* '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 created in Dialogflow. If no RichResponse was
|
||||
* created, an empty RichResponse is returned.
|
||||
* @dialogflow
|
||||
*/
|
||||
getIncomingRichResponse(): RichResponse;
|
||||
|
||||
/**
|
||||
* 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?',
|
||||
* app.getIncomingList().addItems(
|
||||
* app.buildOptionItem('another_choice', ['Another choice']).
|
||||
* setTitle('Another choice')));
|
||||
* } else {
|
||||
* app.ask('What would you like?');
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* const actionMap = new Map();
|
||||
* actionMap.set('pick.option', pickOption);
|
||||
*
|
||||
* app.handleRequest(actionMap);
|
||||
*
|
||||
* @return List created in Dialogflow. If no List was created, an empty
|
||||
* List is returned.
|
||||
* @dialogflow
|
||||
*/
|
||||
getIncomingList(): List;
|
||||
|
||||
/**
|
||||
* 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?',
|
||||
* app.getIncomingCarousel().addItems(
|
||||
* app.buildOptionItem('another_choice', ['Another choice']).
|
||||
* setTitle('Another choice').setDescription('Choose me!')));
|
||||
* } else {
|
||||
* app.ask('What would you like?');
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* const actionMap = new Map();
|
||||
* actionMap.set('pick.option', pickOption);
|
||||
*
|
||||
* app.handleRequest(actionMap);
|
||||
*
|
||||
* @return Carousel created in Dialogflow. If no Carousel was created,
|
||||
* an empty Carousel is returned.
|
||||
* @dialogflow
|
||||
*/
|
||||
getIncomingCarousel(): Carousel;
|
||||
|
||||
/**
|
||||
* 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?',
|
||||
* app.getIncomingCarousel().addItems(
|
||||
* app.buildOptionItem('another_choice', ['Another choice']).
|
||||
* setTitle('Another choice').setDescription('Choose me!')));
|
||||
* } else {
|
||||
* 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 Option key of selected item. Null if no option selected or
|
||||
* if current intent is not OPTION intent.
|
||||
* @dialogflow
|
||||
*/
|
||||
getSelectedOption(): string;
|
||||
|
||||
/**
|
||||
* 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 inputPrompt The input prompt
|
||||
* response.
|
||||
* @param noInputs Array of re-prompts when the user does not respond (max 3).
|
||||
* @return HTTP response.
|
||||
* @dialogflow
|
||||
*/
|
||||
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')
|
||||
* .addItems([
|
||||
* app.buildOptionItem(SELECTION_KEY_ONE,
|
||||
* ['synonym of KEY_ONE 1', 'synonym of KEY_ONE 2'])
|
||||
* .setTitle('Title of First List Item'),
|
||||
* app.buildOptionItem(SELECTION_KEY_TWO,
|
||||
* ['synonym of KEY_TWO 1', 'synonym of KEY_TWO 2'])
|
||||
* .setTitle('Title of Second List Item'),
|
||||
* ]));
|
||||
* }
|
||||
*
|
||||
* function optionIntent (app) {
|
||||
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
|
||||
* app.tell('Number one is a great choice!');
|
||||
* } else {
|
||||
* 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 inputPrompt The input prompt
|
||||
* response.
|
||||
* @param.list List built with {@link AssistantApp#buildList|buildList}
|
||||
* @return HTTP response.
|
||||
* @dialogflow
|
||||
*/
|
||||
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()
|
||||
* .addItems([
|
||||
* app.buildOptionItem(SELECTION_KEY_ONE,
|
||||
* ['synonym of KEY_ONE 1', 'synonym of KEY_ONE 2'])
|
||||
* .setTitle('Number one'),
|
||||
* app.buildOptionItem(SELECTION_KEY_TWO,
|
||||
* ['synonym of KEY_TWO 1', 'synonym of KEY_TWO 2'])
|
||||
* .setTitle('Number two'),
|
||||
* ]));
|
||||
* }
|
||||
*
|
||||
* function optionIntent (app) {
|
||||
* if (app.getSelectedOption() === SELECTION_KEY_ONE) {
|
||||
* app.tell('Number one is a great choice!');
|
||||
* } else {
|
||||
* 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 inputPrompt The input prompt
|
||||
* response.
|
||||
* @param carousel Carousel built with
|
||||
* {@link AssistantApp#buildCarousel|buildCarousel}.
|
||||
* @return HTTP response.
|
||||
* @dialogflow
|
||||
*/
|
||||
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 speechResponse Final response.
|
||||
* Spoken response can be SSML.
|
||||
* @return The response that is sent back to Assistant.
|
||||
* @dialogflow
|
||||
*/
|
||||
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 name Name of the context. Dialogflow converts to lowercase.
|
||||
* @param [lifespan=1] Context lifespan.
|
||||
* @param parameters Context JSON parameters.
|
||||
* @return Null if the context name is not defined.
|
||||
* @dialogflow
|
||||
*/
|
||||
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 === [{
|
||||
* // name: 'number',
|
||||
* // lifespan: 0,
|
||||
* // parameters: {
|
||||
* // myNumber: '23',
|
||||
* // myNumber.original: '23'
|
||||
* // }
|
||||
* // }]
|
||||
* 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 Empty if no active contexts.
|
||||
* @dialogflow
|
||||
*/
|
||||
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 === {
|
||||
* // name: 'number',
|
||||
* // lifespan: 0,
|
||||
* // parameters: {
|
||||
* // myNumber: '23',
|
||||
* // myNumber.original: '23'
|
||||
* // }
|
||||
* // }
|
||||
* 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 name The name of the Context to retrieve.
|
||||
* @return Context value matching name
|
||||
* or null if no matching context.
|
||||
* @dialogflow
|
||||
*/
|
||||
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 User's raw query or null if no value.
|
||||
* @dialogflow
|
||||
*/
|
||||
getRawInput(): string;
|
||||
}
|
||||
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
// Type definitions for actions-on-google 1.5
|
||||
// Project: https://github.com/actions-on-google/actions-on-google-nodejs
|
||||
// Definitions by: Joel Hegg <https://github.com/joelhegg>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
// TypeScript Version: 2.4
|
||||
|
||||
/**
|
||||
* The Actions on Google client library.
|
||||
* https://developers.google.com/actions/
|
||||
*/
|
||||
|
||||
import * as Transactions from './transactions';
|
||||
import * as Responses from './response-builder';
|
||||
|
||||
export { AssistantApp } from './assistant-app';
|
||||
export { ActionsSdkApp, ActionsSdkAppOptions } from './actions-sdk-app';
|
||||
export { DialogflowApp, DialogflowAppOptions } from './dialogflow-app';
|
||||
export { Transactions };
|
||||
export { Responses };
|
||||
// Backwards compatibility
|
||||
export { AssistantApp as Assistant } from './assistant-app';
|
||||
export { ActionsSdkApp as ActionsSdkAssistant } from './actions-sdk-app';
|
||||
export { DialogflowApp as ApiAiAssistant } from './dialogflow-app';
|
||||
export { DialogflowApp as ApiAiApp } from './dialogflow-app';
|
||||
+386
@@ -0,0 +1,386 @@
|
||||
/**
|
||||
* A collection of response builders.
|
||||
*/
|
||||
|
||||
import { OrderUpdate } from './transactions';
|
||||
|
||||
/**
|
||||
* Simple Response type.
|
||||
*/
|
||||
export interface SimpleResponse {
|
||||
/** Speech to be spoken to user. SSML allowed. */
|
||||
speech: string;
|
||||
/** Optional text to be shown to user */
|
||||
displayText?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Suggestions to show with response.
|
||||
*/
|
||||
export interface 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.
|
||||
*/
|
||||
export interface LinkOutSuggestion {
|
||||
/** Text shown on the suggestion chip. */
|
||||
title: string;
|
||||
/** String URL to open. */
|
||||
url: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Image type shown on visual elements.
|
||||
*/
|
||||
export interface 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.
|
||||
*/
|
||||
export interface Button {
|
||||
/** Text shown on the button. */
|
||||
title: string;
|
||||
/** Action to take when selected. */
|
||||
openUrlAction: {
|
||||
/** String URL to open. */
|
||||
url: string;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Option info. Provides unique identifier for a given OptionItem.
|
||||
*/
|
||||
export interface 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[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for initializing and constructing Rich Responses with chainable interface.
|
||||
*/
|
||||
export class RichResponse {
|
||||
/**
|
||||
* Constructor for RichResponse. Accepts optional RichResponse to clone.
|
||||
*
|
||||
* @param 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.
|
||||
*/
|
||||
items: Array<SimpleResponse | BasicCard>;
|
||||
|
||||
/**
|
||||
* Ordered list of text suggestions to display. Optional.
|
||||
*/
|
||||
suggestions: Suggestion[];
|
||||
|
||||
/**
|
||||
* Link Out Suggestion chip for this rich response. Optional.
|
||||
*/
|
||||
linkOutSuggestion?: LinkOutSuggestion;
|
||||
|
||||
/**
|
||||
* Adds a SimpleResponse to list of items.
|
||||
*
|
||||
* @param simpleResponse Simple response to present to
|
||||
* user. If just a string, display text will not be set.
|
||||
* @return Returns current constructed RichResponse.
|
||||
*/
|
||||
addSimpleResponse(simpleResponse: string | SimpleResponse): RichResponse;
|
||||
|
||||
/**
|
||||
* Adds a BasicCard to list of items.
|
||||
*
|
||||
* @param basicCard Basic card to include in response.
|
||||
* @return Returns current constructed RichResponse.
|
||||
*/
|
||||
addBasicCard(basicCard: BasicCard): RichResponse;
|
||||
|
||||
/**
|
||||
* Adds a single suggestion or list of suggestions to list of items.
|
||||
*
|
||||
* @param suggestions Either a single string suggestion
|
||||
* or list of suggestions to add.
|
||||
* @return Returns current constructed RichResponse.
|
||||
*/
|
||||
addSuggestions(suggestions: string | string[]): RichResponse;
|
||||
|
||||
/**
|
||||
* Returns true if the given suggestion text is valid to be added to the suggestion list. A valid
|
||||
* text string is not longer than 25 characters.
|
||||
* @param suggestionText Text to validate as suggestion.
|
||||
* @return True if the text is valid, false otherwise.s
|
||||
*/
|
||||
isValidSuggestionText(suggestionText: string): boolean;
|
||||
|
||||
/**
|
||||
* Sets the suggestion link for this rich response.
|
||||
*
|
||||
* @param destinationName Name of the link out destination.
|
||||
* @param suggestionUrl - String URL to open when suggestion is used.
|
||||
* @return Returns current constructed RichResponse.
|
||||
*/
|
||||
addSuggestionLink(destinationName: string, suggestionUrl: string): RichResponse;
|
||||
|
||||
/**
|
||||
* Adds an order update to this response. Use after a successful transaction
|
||||
* decision to confirm the order.
|
||||
*
|
||||
* @param orderUpdate OrderUpdate object to add.
|
||||
* @return Returns current constructed RichResponse.
|
||||
*/
|
||||
addOrderUpdate(orderUpdate: OrderUpdate): RichResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for initializing and constructing Basic Cards with chainable interface.
|
||||
*/
|
||||
export class BasicCard {
|
||||
/**
|
||||
* Constructor for BasicCard. Accepts optional BasicCard to clone.
|
||||
*
|
||||
* @param basicCard Optional BasicCard to clone.
|
||||
*/
|
||||
constructor(basicCard?: BasicCard);
|
||||
|
||||
/**
|
||||
* Title of the card. Optional.
|
||||
*/
|
||||
title?: string;
|
||||
|
||||
/**
|
||||
* Body text to show on the card. Required, unless image is present.
|
||||
*/
|
||||
formattedText: string;
|
||||
|
||||
/**
|
||||
* Subtitle of the card. Optional.
|
||||
*/
|
||||
subtitle?: string;
|
||||
|
||||
/**
|
||||
* Image to show on the card. Optional.
|
||||
*/
|
||||
image?: Image;
|
||||
|
||||
/**
|
||||
* Ordered list of buttons to show below card. Optional.
|
||||
*/
|
||||
buttons: Button[];
|
||||
|
||||
/**
|
||||
* Sets the title for this Basic Card.
|
||||
*
|
||||
* @param title Title to show on card.
|
||||
* @return Returns current constructed BasicCard.
|
||||
*/
|
||||
setTitle(title: string): BasicCard;
|
||||
|
||||
/**
|
||||
* Sets the subtitle for this Basic Card.
|
||||
*
|
||||
* @param subtitle Subtitle to show on card.
|
||||
* @return Returns current constructed BasicCard.
|
||||
*/
|
||||
setSubtitle(subtitle: string): BasicCard;
|
||||
|
||||
/**
|
||||
* Sets the body text for this Basic Card.
|
||||
*
|
||||
* @param bodyText Body text to show on card.
|
||||
* @return Returns current constructed BasicCard.
|
||||
*/
|
||||
setBodyText(bodyText: string): BasicCard;
|
||||
|
||||
/**
|
||||
* Sets the image for this Basic Card.
|
||||
*
|
||||
* @param url Image source URL.
|
||||
* @param accessibilityText Text to replace for image for
|
||||
* accessibility.
|
||||
* @param width Width of the image.
|
||||
* @param height Height of the image.
|
||||
* @return Returns current constructed BasicCard.
|
||||
*/
|
||||
setImage(url: string, accessibilityText: string, width?: number, height?: number): BasicCard;
|
||||
|
||||
/**
|
||||
* Adds a button below card.
|
||||
*
|
||||
* @param text Text to show on button.
|
||||
* @param url URL to open when button is selected.
|
||||
* @return Returns current constructed BasicCard.
|
||||
*/
|
||||
addButton(text: string, url: string): BasicCard;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for initializing and constructing Lists with chainable interface.
|
||||
*/
|
||||
export class List {
|
||||
/**
|
||||
* Constructor for List. Accepts optional List to clone, string title, or
|
||||
* list of items to copy.
|
||||
*
|
||||
* @param 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.
|
||||
*/
|
||||
title?: string;
|
||||
|
||||
/**
|
||||
* List of 2-20 items to show in this list. Required.
|
||||
*/
|
||||
items: OptionItem[];
|
||||
|
||||
/**
|
||||
* Sets the title for this List.
|
||||
*
|
||||
* @param title Title to show on list.
|
||||
* @return Returns current constructed List.
|
||||
*/
|
||||
setTitle(title: string): List;
|
||||
|
||||
/**
|
||||
* Adds a single item or list of items to the list.
|
||||
*
|
||||
* @param optionItems OptionItems to add.
|
||||
* @return Returns current constructed List.
|
||||
*/
|
||||
addItems(optionItems: OptionItem | OptionItem[]): List;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for initializing and constructing Carousel with chainable interface.
|
||||
*/
|
||||
export class Carousel {
|
||||
/**
|
||||
* Constructor for Carousel. Accepts optional Carousel to clone or list of
|
||||
* items to copy.
|
||||
*
|
||||
* @param 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.
|
||||
*/
|
||||
items: OptionItem[];
|
||||
|
||||
/**
|
||||
* Adds a single item or list of items to the carousel.
|
||||
*
|
||||
* @param optionItems OptionItems to add.
|
||||
* @return Returns current constructed Carousel.
|
||||
*/
|
||||
addItems(optionItems: OptionItem | OptionItem[]): Carousel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for initializing and constructing Option Items with chainable interface.
|
||||
*/
|
||||
export class OptionItem {
|
||||
/**
|
||||
* Constructor for OptionItem. Accepts optional OptionItem to clone.
|
||||
*
|
||||
* @param optionItem Optional OptionItem to clone.
|
||||
*/
|
||||
constructor(optionItem?: OptionItem);
|
||||
|
||||
/**
|
||||
* Option info of the option item. Required.
|
||||
*/
|
||||
optionInfo: OptionInfo;
|
||||
|
||||
/**
|
||||
* Title of the option item. Required.
|
||||
*/
|
||||
title: string;
|
||||
|
||||
/**
|
||||
* Description text of the item. Optional.
|
||||
*/
|
||||
description?: string;
|
||||
|
||||
/**
|
||||
* Image to show on item. Optional.
|
||||
*/
|
||||
image?: Image;
|
||||
|
||||
/**
|
||||
* Sets the title for this Option Item.
|
||||
*
|
||||
* @param title Title to show on item.
|
||||
* @return Returns current constructed OptionItem.
|
||||
*/
|
||||
setTitle(title: string): OptionItem;
|
||||
|
||||
/**
|
||||
* Sets the description for this Option Item.
|
||||
*
|
||||
* @param description Description to show on item.
|
||||
* @return Returns current constructed OptionItem.
|
||||
*/
|
||||
setDescription(description: string): OptionItem;
|
||||
|
||||
/**
|
||||
* Sets the image for this Option Item.
|
||||
*
|
||||
* @param url Image source URL.
|
||||
* @param accessibilityText Text to replace for image for
|
||||
* accessibility.
|
||||
* @param width Width of the image.
|
||||
* @param height Height of the image.
|
||||
* @return Returns current constructed OptionItem.
|
||||
*/
|
||||
setImage(url: string, accessibilityText: string, width?: number, height?: number): 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 key Key to uniquely identify this item.
|
||||
* @return Returns current constructed OptionItem.
|
||||
*/
|
||||
setKey(key: string): OptionItem;
|
||||
|
||||
/**
|
||||
* Adds a single synonym or list of synonyms to item.
|
||||
*
|
||||
* @param synonyms Either a single string synonyms
|
||||
* or list of synonyms to add.
|
||||
* @return Returns current constructed OptionItem.
|
||||
*/
|
||||
addSynonyms(synonyms: string | string[]): OptionItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if given text contains SSML.
|
||||
* @param text Text to check.
|
||||
* @return True if text contains SSML, false otherwise.
|
||||
*/
|
||||
export function isSsml(text: string): boolean;
|
||||
+1023
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"lib": [
|
||||
"es6"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"baseUrl": "../",
|
||||
"typeRoots": [
|
||||
"../"
|
||||
],
|
||||
"types": [],
|
||||
"noEmit": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts",
|
||||
"assistant-app.d.ts",
|
||||
"actions-sdk-app.d.ts",
|
||||
"dialogflow-app.d.ts",
|
||||
"response-builder.d.ts",
|
||||
"transactions.d.ts",
|
||||
"actions-on-google-tests.ts"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{ "extends": "dtslint/dt.json" }
|
||||
Reference in New Issue
Block a user