From 4a6480cbb37250e8ed26e4c5891b2a650e27b5ae Mon Sep 17 00:00:00 2001 From: Joel Hegg Date: Fri, 20 Oct 2017 02:38:35 -0400 Subject: [PATCH] Wipe the original type defintions --- types/actions-on-google/actions-sdk-app.d.ts | 392 ----- types/actions-on-google/assistant-app.d.ts | 1383 ---------------- types/actions-on-google/dialogflow-app.d.ts | 569 ------- types/actions-on-google/response-builder.d.ts | 317 ---- types/actions-on-google/transactions.d.ts | 1390 ----------------- 5 files changed, 4051 deletions(-) delete mode 100644 types/actions-on-google/actions-sdk-app.d.ts delete mode 100644 types/actions-on-google/assistant-app.d.ts delete mode 100644 types/actions-on-google/dialogflow-app.d.ts delete mode 100644 types/actions-on-google/response-builder.d.ts delete mode 100644 types/actions-on-google/transactions.d.ts diff --git a/types/actions-on-google/actions-sdk-app.d.ts b/types/actions-on-google/actions-sdk-app.d.ts deleted file mode 100644 index 6511ed7f6d..0000000000 --- a/types/actions-on-google/actions-sdk-app.d.ts +++ /dev/null @@ -1,392 +0,0 @@ -import { Request, Response } from 'express'; - -import { AssistantApp, DeviceLocation, SessionStartedFunction, User } from './assistant-app'; -import { Carousel, List, RichResponse, SimpleResponse } from './response-builder'; -import { TransactionDecision } from './transactions'; - -// --------------------------------------------------------------------------- -// Actions SDK support -// --------------------------------------------------------------------------- - -export interface ActionsSdkAppOptions { - request: Request; - response: Response; - sessionStarted?: SessionStartedFunction; -} - -/** - * 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}); - * - * @param {Object} options JSON configuration. - * @param {Object} options.request Express HTTP request object. - * @param {Object} options.response Express HTTP response object. - * @param {Function=} options.sessionStarted Function callback when session starts. - * @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 {string} projectId Google Cloud Project ID for the Assistant app. - * @param {Promise} Promise resolving with ID token if request is from - * a valid source, otherwise rejects with the error reason for an invalid - * token. - * @actionssdk - */ - isRequestFromAssistant(projectId: string): Promise; - - /** - * 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 - */ - 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 {string} 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 {Object} JSON object provided to the Assistant in the previous - * user turn or {} if no value. - * @actionssdk - */ - getDialogState(): object; - - /** - * 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 - */ - 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 {string} 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 {string} 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 {string} argName Name of the argument. - * @return {string} 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 {string} 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, 'Hi! ' + - * 'I can read out an ordinal like ' + - * '123. Say a number.', - * ['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, 'You said, ' + - * app.getRawInput() + '', - * ['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 {Object|SimpleResponse|RichResponse} inputPrompt Holding initial and - * no-input prompts. - * @param {Object=} 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): object; - - /** - * 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 {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 {Object=} 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): object; - - /** - * 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 {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 {Object=} 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): object; - - /** - * 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, 'Hi! ' + - * 'I can read out an ordinal like ' + - * '123. Say a number.', - * ['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, 'You said, ' + - * app.getRawInput() + '', - * ['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 {string|SimpleResponse|RichResponse} textToSpeech Final response. - * Spoken response can be SSML. - * @return The HTTP response that is sent back to Assistant. - * @actionssdk - */ - tell(textToSpeech: string | SimpleResponse | RichResponse): object; - - /** - * 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=} noInputs Array of re-prompts when the user does not respond (max 3). - * @return {Object} An {@link https://developers.google.com/actions/reference/conversation#InputPrompt|InputPrompt object}. - * @actionssdk - */ - buildInputPrompt(isSsml: boolean, initialPrompt: string, noInputs: string[]): object; -} diff --git a/types/actions-on-google/assistant-app.d.ts b/types/actions-on-google/assistant-app.d.ts deleted file mode 100644 index 3bfd78f514..0000000000 --- a/types/actions-on-google/assistant-app.d.ts +++ /dev/null @@ -1,1383 +0,0 @@ -import { Request, Response } from 'express'; - -import { BasicCard, Carousel, List, OptionItem, RichResponse } from './response-builder'; -import { ActionPaymentTransactionConfig, Cart, GooglePaymentTransactionConfig, - LineItem, Location, Order, OrderUpdate, TransactionDecision, - TransactionValues } from './transactions'; - -/** - * User provided date/time info. - */ -export interface DateTime { - date: { - year: number; - month: number; - day: number; - }; - time: { - hours: number; - minutes: number; - seconds: number; - nanos: number; - }; -} - -/** - * User's permissioned name info. - */ -export interface UserName { - /** User's display name. */ - displayName: string; - /** User's given name. */ - givenName: string; - /** User's family name. */ - familyName: string; -} - -/** - * User's permissioned device location. - */ -export interface DeviceLocation { - /** {latitude, longitude}. Requested with SupportedPermissions.DEVICE_PRECISE_LOCATION. */ - coordinates: object; - /** Full, formatted street address. Requested with SupportedPermissions.DEVICE_PRECISE_LOCATION. */ - address: string; - /** Zip code. Requested with SupportedPermissions.DEVICE_COARSE_LOCATION. */ - zipCode: string; - /** Device city. Requested with SupportedPermissions.DEVICE_COARSE_LOCATION. */ - city: string; -} - -/** - * User object. - */ -export interface User { - /** Random string ID for Google user. */ - userId: string; - /** User name information. Null if not requested with {@link AssistantApp#askForPermission|askForPermission(SupportedPermissions.NAME)}. */ - userName: UserName; - /** Unique Oauth2 token. Only available with account linking. */ - accessToken: string; -} - -/** - * Actions on Google Surface. - */ -export interface Surface { - /** Capabilities of the surface. */ - capabilities: Capability[]; -} - -/** - * Surface capability. - */ -export interface Capability { - /** Name of the capability. */ - name: string; -} - -/** - * List of standard intents that the app provides. - * @enum {string} - */ -export type StandardIntents = - /** App fires MAIN intent for queries like [talk to $app]. */ - 'actions.intent.MAIN' | 'assistant.intent.action.MAIN' | - /** App fires TEXT intent when action issues ask intent. */ - 'actions.intent.TEXT' | 'assistant.intent.action.TEXT' | - /** App fires PERMISSION intent when action invokes askForPermission. */ - 'actions.intent.PERMISSION' | 'assistant.intent.action.PERMISSION' | - /** App fires OPTION intent when user chooses from options provided. */ - 'actions.intent.OPTION' | - /** App fires TRANSACTION_REQUIREMENTS_CHECK intent when action sets up transaction. */ - 'actions.intent.TRANSACTION_REQUIREMENTS_CHECK' | - /** App fires DELIVERY_ADDRESS intent when action asks for delivery address. */ - 'actions.intent.DELIVERY_ADDRESS' | - /** App fires TRANSACTION_DECISION intent when action asks for transaction decision. */ - 'actions.intent.TRANSACTION_DECISION' | - /** App fires CONFIRMATION intent when requesting affirmation from user. */ - 'actions.intent.CONFIRMATION' | - /** App fires DATETIME intent when requesting date/time from user. */ - 'actions.intent.DATETIME' | - /** App fires SIGN_IN intent when requesting sign-in from user. */ - 'actions.intent.SIGN_IN' | - /** App fires NO_INPUT intent when user doesn't provide input. */ - 'actions.intent.NO_INPUT' | - /** App fires CANCEL intent when user exits app mid-dialog. */ - 'actions.intent.CANCEL' | - /** App fires NEW_SURFACE intent when requesting handoff to a new surface from user. */ - 'actions.intent.NEW_SURFACE'; - -/** - * List of supported permissions the app supports. - * @enum {string} - */ -export type 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. - * @enum {string} - */ -export type BuiltInArgNames = - /** Permission granted argument. */ - 'PERMISSION' | 'permission_granted' | - /** Option selected argument. */ - 'OPTION' | - /** Transaction requirements check result argument. */ - 'TRANSACTION_REQUIREMENTS_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}. - * @enum {number} - */ -export type ConversationStages = - /** - * Unspecified conversation state. - */ - 'UNSPECIFIED' | 0 | - /** - * A new conversation. - */ - 'NEW' | 1 | - /** - * An active (ongoing) conversation. - */ - 'ACTIVE' | 2; - -/** - * List of surface capabilities supported by the app. - * @enum {string} - */ -export type SurfaceCapabilities = - /** - * The ability to output audio. - */ - 'actions.capability.AUDIO_OUTPUT' | - /** - * The ability to output on a screen - */ - 'actions.capability.SCREEN_OUTPUT'; - -/** - * List of possible user input types. - * @enum {number} - */ -export type InputTypes = - /** - * Unspecified. - */ - 'UNSPECIFIED' | 0 | - /** - * Input given by touch. - */ - 'TOUCH' | 1 | - /** - * Input given by voice (spoken). - */ - 'VOICE' | 2 | - /** - * Input given by keyboard (typed). - */ - 'KEYBOARD' | 3; - -/** - * List of possible sign in result status values. - * @enum {string} - */ -export type SignInStatus = - // Unknown status. - 'SIGN_IN_STATUS_UNSPECIFIED' | - // User successfully completed the account linking. - 'OK' | - // Cancelled or dismissed account linking. - 'CANCELLED' | - // System or network error. - 'ERROR'; - -export type SessionStartedFunction = () => any; - -export interface AssistantAppOptions { - request: Request; - response: Response; - sessionStarted?: SessionStartedFunction; -} - -export type AssistantAppRequestData = () => any; - -export type RequestHandler = (app: AssistantApp) => any; - -/** - * The Actions on Google client library AssistantApp base class. - * - * This class contains the methods that are shared between platforms to support the conversation API - * protocol from Assistant. It also exports the 'State' class as a helper to represent states by - * name. - */ -export class AssistantApp { - /** - * The session state. - */ - readonly state: string; - - /** - * The session data in JSON format. - */ - readonly data: object; - - /** - * List of standard intents that the app provides. - * @enum {string} - */ - readonly StandardIntents: { - /** App fires MAIN intent for queries like [talk to $app]. */ - MAIN: StandardIntents, - /** App fires TEXT intent when action issues ask intent. */ - TEXT: StandardIntents, - /** App fires PERMISSION intent when action invokes askForPermission. */ - PERMISSION: StandardIntents, - /** App fires OPTION intent when user chooses from options provided. */ - OPTION: StandardIntents, - /** App fires TRANSACTION_REQUIREMENTS_CHECK intent when action sets up transaction. */ - TRANSACTION_REQUIREMENTS_CHECK: StandardIntents, - /** App fires DELIVERY_ADDRESS intent when action asks for delivery address. */ - DELIVERY_ADDRESS: StandardIntents, - /** App fires TRANSACTION_DECISION intent when action asks for transaction decision. */ - TRANSACTION_DECISION: StandardIntents, - /** App fires CONFIRMATION intent when requesting affirmation from user. */ - CONFIRMATION: StandardIntents, - /** App fires DATETIME intent when requesting date/time from user. */ - DATETIME: StandardIntents, - /** App fires SIGN_IN intent when requesting sign-in from user. */ - SIGN_IN: StandardIntents, - /** App fires NO_INPUT intent when user doesn't provide input. */ - NO_INPUT: StandardIntents, - /** App fires CANCEL intent when user exits app mid-dialog. */ - CANCEL: StandardIntents, - /** App fires NEW_SURFACE intent when requesting handoff to a new surface from user. */ - NEW_SURFACE: StandardIntents, - }; - - /** - * List of supported permissions the app supports. - * @enum {string} - */ - readonly SupportedPermissions: { - /** - * The user's name as defined in the - * {@link https://developers.google.com/actions/reference/conversation#UserProfile|UserProfile object} - */ - NAME: SupportedPermissions, - /** - * 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: SupportedPermissions, - /** - * 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: SupportedPermissions, - }; - - /** - * List of built-in argument names. - * @enum {string} - */ - readonly BuiltInArgNames: { - /** Permission granted argument. */ - PERMISSION_GRANTED: BuiltInArgNames, - /** Option selected argument. */ - OPTION: BuiltInArgNames, - /** Transaction requirements check result argument. */ - TRANSACTION_REQ_CHECK_RESULT: BuiltInArgNames, - /** Delivery address value argument. */ - DELIVERY_ADDRESS_VALUE: BuiltInArgNames, - /** Transactions decision argument. */ - TRANSACTION_DECISION_VALUE: BuiltInArgNames, - /** Confirmation argument. */ - CONFIRMATION: BuiltInArgNames, - /** DateTime argument. */ - DATETIME: BuiltInArgNames, - /** Sign in status argument. */ - SIGN_IN: BuiltInArgNames, - /** Reprompt count for consecutive NO_INPUT intents. */ - REPROMPT_COUNT: BuiltInArgNames, - /** Flag representing finality of NO_INPUT intent. */ - IS_FINAL_REPROMPT: BuiltInArgNames, - /** New surface value argument. */ - NEW_SURFACE: BuiltInArgNames, - }; - - /** - * List of possible conversation stages, as defined in the - * {@link https://developers.google.com/actions/reference/conversation#Conversation|Conversation object}. - * @enum {number} - */ - readonly ConversationStages: { - /** - * Unspecified conversation state. - */ - UNSPECIFIED: ConversationStages, - /** - * A new conversation. - */ - NEW: ConversationStages, - /** - * An active (ongoing) conversation. - */ - ACTIVE: ConversationStages, - }; - - /** - * List of surface capabilities supported by the app. - * @enum {string} - */ - readonly SurfaceCapabilities: { - /** - * The ability to output audio. - */ - AUDIO_OUTPUT: SurfaceCapabilities, - /** - * The ability to output on a screen - */ - SCREEN_OUTPUT: SurfaceCapabilities, - }; - - /** - * List of possible user input types. - * @enum {number} - */ - readonly InputTypes: { - /** - * Unspecified. - */ - UNSPECIFIED: InputTypes, - /** - * Input given by touch. - */ - TOUCH: InputTypes, - /** - * Input given by voice (spoken). - */ - VOICE: InputTypes, - /** - * Input given by keyboard (typed). - */ - KEYBOARD: InputTypes, - }; - - /** - * List of possible sign in result status values. - * @enum {string} - */ - readonly SignInStatus: { - // Unknown status. - UNSPECIFIED: SignInStatus, - // User successfully completed the account linking. - OK: SignInStatus, - // Cancelled or dismissed account linking. - CANCELLED: SignInStatus, - // System or network error. - ERROR: SignInStatus, - }; - - /** - * Values related to supporting {@link Transactions}. - * @type {object} - */ - readonly Transactions: typeof TransactionValues; - - readonly requestData: AssistantAppRequestData; - - /** - * Constructor for AssistantApp object. - * Should not be instantiated; rather instantiate one of the subclasses - * - * {@link ActionsSdkApp} or {@link DialogflowApp}. - * - * @param {Object} options JSON configuration. - * @param {Object} options.request Express HTTP request object. - * @param {Object} options.response Express HTTP response object. - * @param {Function=} options.sessionStarted Function callback when session starts. - * @param {function(): *} requestData Function that returns the - * request data object to be processed. - */ - constructor(options: AssistantAppOptions, requestData: AssistantAppRequestData); - - // --------------------------------------------------------------------------- - // Public APIs - // --------------------------------------------------------------------------- - - /** - * Handles the incoming Assistant request using a handler or Map of handlers. - * Each handler can be a function callback or Promise. - * - * @example - * // Actions SDK - * const app = new ActionsSdkApp({request: request, response: response}); - * - * function mainIntent (app) { - * const inputPrompt = app.buildInputPrompt(true, 'Hi! ' + - * 'I can read out an ordinal like ' + - * '123. Say a number.', - * ['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, 'You said, ' + - * app.getRawInput() + '', - * ['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); - * - * // Dialogflow - * const app = new DialogflowApp({request: req, response: res}); - * const NAME_ACTION = 'make_name'; - * const COLOR_ARGUMENT = 'color'; - * const NUMBER_ARGUMENT = 'number'; - * - * function makeName (app) { - * const number = app.getArgument(NUMBER_ARGUMENT); - * const color = app.getArgument(COLOR_ARGUMENT); - * app.tell('Alright, your silly name is ' + - * color + ' ' + number + - * '! I hope you like it. See you next time.'); - * } - * - * const actionMap = new Map(); - * actionMap.set(NAME_ACTION, makeName); - * app.handleRequest(actionMap); - * - * @param {(Function|Map)} handler The handler (or Map of handlers) for the request. - * @actionssdk - * @dialogflow - */ - handleRequest(handler?: RequestHandler | Map): void; - - /** - * Equivalent to {@link AssistantApp#askForPermission|askForPermission}, - * but allows you to prompt the user for more than one permission at once. - * - * Notes: - * - * * The order in which you specify the permission prompts does not matter - - * it is controlled by the Assistant to provide a consistent user experience. - * * The user will be able to either accept all permissions at once, or none. - * If you wish to allow them to selectively accept one or other, make several - * dialog turns asking for each permission independently with askForPermission. - * * Asking for DEVICE_COARSE_LOCATION and DEVICE_PRECISE_LOCATION at once is - * equivalent to just asking for DEVICE_PRECISE_LOCATION - * - * @example - * const app = new DialogflowApp({request: req, response: res}); - * const REQUEST_PERMISSION_ACTION = 'request_permission'; - * const GET_RIDE_ACTION = 'get_ride'; - * - * function requestPermission (app) { - * const permission = [ - * app.SupportedPermissions.NAME, - * app.SupportedPermissions.DEVICE_PRECISE_LOCATION - * ]; - * app.askForPermissions('To pick you up', permissions); - * } - * - * function sendRide (app) { - * if (app.isPermissionGranted()) { - * const displayName = app.getUserName().displayName; - * const address = app.getDeviceLocation().address; - * app.tell('I will tell your driver to pick up ' + displayName + - * ' at ' + address); - * } else { - * // Response shows that user did not grant permission - * app.tell('Sorry, I could not figure out where to pick you up.'); - * } - * } - * const actionMap = new Map(); - * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission); - * actionMap.set(GET_RIDE_ACTION, sendRide); - * app.handleRequest(actionMap); - * - * @param {string} context Context why the permission is being asked; it's the TTS - * prompt prefix (action phrase) we ask the user. - * @param {Array} permissions Array of permissions App supports, each of - * which comes from AssistantApp.SupportedPermissions. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @return A response is sent to Assistant to ask for the user's permission; for any - * invalid input, we return null. - * @actionssdk - * @dialogflow - */ - askForPermissions(context: string, permissions: string[], dialogState?: object): object; - - /** - * Checks whether user is in transactable state. - * - * @example - * const app = new DialogflowApp({request: request, response: response}); - * const WELCOME_INTENT = 'input.welcome'; - * const TXN_REQ_COMPLETE = 'txn.req.complete'; - * - * let transactionConfig = { - * deliveryAddressRequired: false, - * type: app.Transactions.PaymentType.BANK, - * displayName: 'Checking-1234' - * }; - * function welcomeIntent (app) { - * app.askForTransactionRequirements(transactionConfig); - * } - * - * function txnReqCheck (app) { - * if (app.getTransactionRequirementsResult() === app.Transactions.ResultType.OK) { - * // continue cart building flow - * } else { - * // don't continue cart building - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(TXN_REQ_COMPLETE, txnReqCheck); - * app.handleRequest(actionMap); - * - * @param {ActionPaymentTransactionConfig|GooglePaymentTransactionConfig=} - * transactionConfig Configuration for the transaction. Includes payment - * options and order options. Optional if order has no payment or - * delivery. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @return {Object} HTTP response. - * @actionssdk - * @dialogflow - */ - askForTransactionRequirements(transactionConfig?: ActionPaymentTransactionConfig | GooglePaymentTransactionConfig, dialogState?: object): object; - - /** - * Asks user to confirm transaction information. - * - * @example - * const app = new DialogflowApp({request: request, response: response}); - * const WELCOME_INTENT = 'input.welcome'; - * const TXN_COMPLETE = 'txn.complete'; - * - * let transactionConfig = { - * deliveryAddressRequired: false, - * type: app.Transactions.PaymentType.BANK, - * displayName: 'Checking-1234' - * }; - * - * let order = app.buildOrder(); - * // fill order cart - * - * function welcomeIntent (app) { - * app.askForTransaction(order, transactionConfig); - * } - * - * function txnComplete (app) { - * // respond with order update - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(TXN_COMPLETE, txnComplete); - * app.handleRequest(actionMap); - * - * @param {Object} order Order built with buildOrder(). - * @param {ActionPaymentTransactionConfig|GooglePaymentTransactionConfig} - * transactionConfig Configuration for the transaction. Includes payment - * options and order options. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @dialogflow - */ - askForTransactionDecision(order: object, transactionConfig?: ActionPaymentTransactionConfig | GooglePaymentTransactionConfig, dialogState?: object): object; - - /** - * Asks the Assistant to guide the user to grant a permission. For example, - * if you want your app to get access to the user's name, you would invoke - * the askForPermission method with a context containing the reason for the request, - * and the AssistantApp.SupportedPermissions.NAME permission. With this, the Assistant will ask - * the user, in your agent's voice, the following: '[Context with reason for the request], - * I'll just need to get your name from Google, is that OK?'. - * - * Once the user accepts or denies the request, the Assistant will fire another intent: - * assistant.intent.action.PERMISSION with a boolean argument: AssistantApp.BuiltInArgNames.PERMISSION_GRANTED - * and, if granted, the information that you requested. - * - * Read more: - * - * * {@link https://developers.google.com/actions/reference/conversation#ExpectedIntent|Supported Permissions} - * * Check if the permission has been granted with {@link AssistantApp#isPermissionGranted|isPermissionsGranted} - * * {@link AssistantApp#getDeviceLocation|getDeviceLocation} - * * {@link AssistantApp#getUserName|getUserName} - * - * @example - * const app = new DialogflowApp({request: req, response: res}); - * const REQUEST_PERMISSION_ACTION = 'request_permission'; - * const GET_RIDE_ACTION = 'get_ride'; - * - * function requestPermission (app) { - * const permission = app.SupportedPermissions.NAME; - * app.askForPermission('To pick you up', permission); - * } - * - * function sendRide (app) { - * if (app.isPermissionGranted()) { - * const displayName = app.getUserName().displayName; - * app.tell('I will tell your driver to pick up ' + displayName); - * } else { - * // Response shows that user did not grant permission - * app.tell('Sorry, I could not figure out who to pick up.'); - * } - * } - * const actionMap = new Map(); - * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission); - * actionMap.set(GET_RIDE_ACTION, sendRide); - * app.handleRequest(actionMap); - * - * @param {string} context Context why permission is asked; it's the TTS - * prompt prefix (action phrase) we ask the user. - * @param {string} permission One of the permissions Assistant supports, each of - * which comes from AssistantApp.SupportedPermissions. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. - * @return A response is sent to the Assistant to ask for the user's permission; - * for any invalid input, we return null. - * @actionssdk - * @dialogflow - */ - askForPermission(context: string, permission: string, dialogState?: object): object; - - /** - * Returns true if the request follows a previous request asking for - * permission from the user and the user granted the permission(s). Otherwise, - * false. Use with {@link AssistantApp#askForPermissions|askForPermissions}. - * - * @example - * const app = new ActionsSdkApp({request: request, response: response}); - * // or - * const app = new DialogflowApp({request: request, response: response}); - * app.askForPermissions("To get you a ride", [ - * app.SupportedPermissions.NAME, - * app.SupportedPermissions.DEVICE_PRECISE_LOCATION - * ]); - * // ... - * // In response handler for subsequent intent: - * if (app.isPermissionGranted()) { - * // Use the requested permission(s) to get the user a ride - * } - * - * @return {boolean} true if permissions granted. - * @dialogflow - * @actionssdk - */ - isPermissionGranted(): boolean; - - /** - * Asks user for delivery address. - * - * @example - * // For DialogflowApp: - * const app = new DialogflowApp({request, response}); - * const WELCOME_INTENT = 'input.welcome'; - * const DELIVERY_INTENT = 'delivery.address'; - * - * function welcomeIntent (app) { - * app.askForDeliveryAddress('To make sure I can deliver to you'); - * } - * - * function addressIntent (app) { - * const postalCode = app.getDeliveryAddress().postalAddress.postalCode; - * if (isInDeliveryZone(postalCode)) { - * app.tell('Great looks like you\'re in our delivery area!'); - * } else { - * app.tell('I\'m sorry it looks like we can\'t deliver to you.'); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(DELIVERY_INTENT, addressIntent); - * app.handleRequest(actionMap); - * - * // For ActionsSdkApp: - * const app = new ActionsSdkApp({request, response}); - * const WELCOME_INTENT = app.StandardIntents.MAIN; - * const DELIVERY_INTENT = app.StandardIntents.DELIVERY_ADDRESS; - * - * function welcomeIntent (app) { - * app.askForDeliveryAddress('To make sure I can deliver to you'); - * } - * - * function addressIntent (app) { - * const postalCode = app.getDeliveryAddress().postalAddress.postalCode; - * if (isInDeliveryZone(postalCode)) { - * app.tell('Great looks like you\'re in our delivery area!'); - * } else { - * app.tell('I\'m sorry it looks like we can\'t deliver to you.'); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(DELIVERY_INTENT, addressIntent); - * app.handleRequest(actionMap); - * - * @param {string} reason Reason given to user for asking delivery address. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. - * @return {Object} HTTP response. - * @actionssdk - * @dialogflow - */ - askForDeliveryAddress(reason: string, dialogState?: object): object; - - /** - * Asks user for a confirmation. - * - * @example - * const app = new DialogflowApp({ request, response }); - * const WELCOME_INTENT = 'input.welcome'; - * const CONFIRMATION = 'confirmation'; - * - * function welcomeIntent (app) { - * app.askForConfirmation('Are you sure you want to do that?'); - * } - * - * function confirmation (app) { - * if (app.getUserConfirmation()) { - * app.tell('Great! I\'m glad you want to do it!'); - * } else { - * app.tell('That\'s okay. Let\'s not do it now.'); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(CONFIRMATION, confirmation); - * app.handleRequest(actionMap); - * - * @param {string=} prompt The confirmation prompt presented to the user to - * query for an affirmative or negative response. If undefined or null, - * Google will use a generic yes/no prompt. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @actionssdk - * @dialogflow - */ - askForConfirmation(prompt?: string, dialogState?: object): object; - - /** - * Asks user for a timezone-agnostic date and time. - * - * @example - * const app = new DialogflowApp({ request, response }); - * const WELCOME_INTENT = 'input.welcome'; - * const DATETIME = 'datetime'; - * - * function welcomeIntent (app) { - * app.askForDateTime('When do you want to come in?', - * 'Which date works best for you?', - * 'What time of day works best for you?'); - * } - * - * function datetime (app) { - * app.tell({speech: 'Great see you at your appointment!', - * displayText: 'Great, we will see you on ' - * + app.getDateTime().date.month - * + '/' + app.getDateTime().date.day - * + ' at ' + app.getDateTime().time.hours - * + (app.getDateTime().time.minutes || '')}); - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(DATETIME, datetime); - * app.handleRequest(actionMap); - * - * @param {string=} initialPrompt The initial prompt used to ask for a - * date and time. If undefined or null, Google will use a generic - * prompt. - * @param {string=} datePrompt The prompt used to specifically ask for the - * date if not provided by user. If undefined or null, Google will use a - * generic prompt. - * @param {string=} timePrompt The prompt used to specifically ask for the - * time if not provided by user. If undefined or null, Google will use a - * generic prompt. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @actionssdk - * @dialogflow - */ - askForDateTime(initialPrompt?: string, datePrompt?: string, timePrompt?: string, dialogState?: object): object; - - /** - * Hands the user off to a web sign in flow. App sign in and OAuth credentials - * are set in the {@link https://console.actions.google.com|Actions Console}. - * Retrieve the access token in subsequent intents using - * app.getUser().accessToken. - * - * Note: Currently this API requires enabling the app for Transactions APIs. - * To do this, fill out the App Info section of the Actions Console project - * and check the box indicating the use of Transactions under "Privacy and - * consent". - * - * @example - * const app = new DialogflowApp({ request, response }); - * const WELCOME_INTENT = 'input.welcome'; - * const SIGN_IN = 'sign.in'; - * - * function welcomeIntent (app) { - * app.askForSignIn(); - * } - * - * function signIn (app) { - * if (app.getSignInStatus() === app.SignInstatus.OK) { - * let accessToken = app.getUser().accessToken; - * app.ask('Great, thanks for signing in!'); - * } else { - * app.ask('I won\'t be able to save your data, but let\'s continue!'); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(SIGN_IN, signIn); - * app.handleRequest(actionMap); - * - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @actionssdk - * @dialogflow - */ - askForSignIn(dialogState?: object): object; - - /** - * Requests the user to switch to another surface during the conversation. - * - * @example - * const app = new DialogflowApp({ request, response }); - * const WELCOME_INTENT = 'input.welcome'; - * const SHOW_IMAGE = 'show.image'; - * - * function welcomeIntent (app) { - * if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) { - * showPicture(app); - * } else if (app.hasAvailableSurfaceCapabilities(app.SurfaceCapabilities.SCREEN_OUTPUT)) { - * app.askForNewSurface('To show you an image', - * 'Check out this image', - * [app.SurfaceCapabilities.SCREEN_OUTPUT] - * ); - * } else { - * app.tell('This part of the app only works on screen devices. Sorry about that'); - * } - * } - * - * function showImage (app) { - * if (!app.isNewSurface()) { - * app.tell('Ok, I understand. You don't want to see pictures. Bye'); - * } else { - * showPicture(app, pictureType); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(WELCOME_INTENT, welcomeIntent); - * actionMap.set(SHOW_IMAGE, showImage); - * app.handleRequest(actionMap); - * - * @param {string} context Context why new surface is requested; it's the TTS - * prompt prefix (action phrase) we ask the user. - * @param {string} notificationTitle Title of the notification appearing on - * new surface device. - * @param {Array} capabilities The list of capabilities required in - * the surface. - * @param {Object=} dialogState JSON object the app uses to hold dialog state that - * will be circulated back by Assistant. Used in {@link ActionsSdkAssistant}. - * @dialogflow - * @actionssdk - */ - askForNewSurface(context: string, notificationTitle: string, capabilities: string[], dialogState?: object): object; - - /** - * Gets the {@link User} object. - * The user object contains information about the user, including - * a string identifier and personal information (requires requesting permissions, - * see {@link AssistantApp#askForPermissions|askForPermissions}). - * - * @example - * const app = new DialogflowApp({request: request, response: response}); - * // or - * const app = new ActionsSdkApp({request: request, response: response}); - * const userId = app.getUser().userId; - * - * @return {User} Null if no value. - * @actionssdk - * @dialogflow - */ - getUser(): User; - - /** - * If granted permission to user's name in previous intent, returns user's - * display name, family name, and given name. If name info is unavailable, - * returns null. - * - * @example - * const app = new DialogflowApp({request: req, response: res}); - * const REQUEST_PERMISSION_ACTION = 'request_permission'; - * const SAY_NAME_ACTION = 'get_name'; - * - * function requestPermission (app) { - * const permission = app.SupportedPermissions.NAME; - * app.askForPermission('To know who you are', permission); - * } - * - * function sayName (app) { - * if (app.isPermissionGranted()) { - * app.tell('Your name is ' + app.getUserName().displayName)); - * } else { - * // Response shows that user did not grant permission - * app.tell('Sorry, I could not get your name.'); - * } - * } - * const actionMap = new Map(); - * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission); - * actionMap.set(SAY_NAME_ACTION, sayName); - * app.handleRequest(actionMap); - * @return {UserName} Null if name permission is not granted. - * @actionssdk - * @dialogflow - */ - getUserName(): UserName; - - /** - * Gets the user locale. Returned string represents the regional language - * information of the user set in their Assistant settings. - * For example, 'en-US' represents US English. - * - * @example - * const app = new DialogflowApp({request, response}); - * const locale = app.getUserLocale(); - * - * @return {string} User's locale, e.g. 'en-US'. Null if no locale given. - * @actionssdk - * @dialogflow - */ - getUserLocale(): string; - - /** - * If granted permission to device's location in previous intent, returns device's - * location (see {@link AssistantApp#askForPermissions|askForPermissions}). - * If device info is unavailable, returns null. - * - * @example - * const app = new DialogflowApp({request: req, response: res}); - * // or - * const app = new ActionsSdkApp({request: req, response: res}); - * app.askForPermission("To get you a ride", - * app.SupportedPermissions.DEVICE_PRECISE_LOCATION); - * // ... - * // In response handler for permissions fallback intent: - * if (app.isPermissionGranted()) { - * sendCarTo(app.getDeviceLocation().coordinates); - * } - * - * @return {DeviceLocation} Null if location permission is not granted. - * @actionssdk - * @dialogflow - */ - getDeviceLocation(): DeviceLocation; - - /** - * Gets type of input used for this request. - * - * @return {number} One of AssistantApp.InputTypes. - * Null if no input type given. - * @dialogflow - * @actionssdk - */ - getInputType(): number; - - /** - * 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 - * @actionssdk - */ - getArgumentCommon(argName: string): object; - - /** - * Gets transactability of user. Only use after calling - * askForTransactionRequirements. Null if no result given. - * - * @return {string} One of Transactions.ResultType. - * @dialogflow - * @actionssdk - */ - getTransactionRequirementsResult(): string; - - /** - * Gets order delivery address. Only use after calling askForDeliveryAddress. - * - * @return {DeliveryAddress} Delivery address information. Null if user - * denies permission, or no address given. - * @dialogflow - * @actionssdk - */ - getDeliveryAddress(): Location; - - /** - * Gets transaction decision information. Only use after calling - * askForTransactionDecision. - * - * @return {TransactionDecision} Transaction decision data. Returns object with - * userDecision only if user declines. userDecision will be one of - * Transactions.ConfirmationDecision. Null if no decision given. - * @dialogflow - * @actionssdk - */ - getTransactionDecision(): TransactionDecision; - - /** - * Gets confirmation decision. Use after askForConfirmation. - * - * False if user replied with negative response. Null if no user - * confirmation decision given. - * @dialogflow - * @actionssdk - */ - getUserConfirmation(): boolean | null; - - /** - * Gets user provided date and time. Use after askForDateTime. - * - * @return {DateTime} Date and time given by the user. Null if no user - * date and time given. - * @dialogflow - * @actionssdk - */ - getDateTime(): DateTime; - - /** - * Gets status of user sign in request. - * - * @return {string} Result of user sign in request. One of - * DialogflowApp.SignInStatus or ActionsSdkApp.SignInStatus - * Null if no sign in status. - * @dialogflow - * @actionssdk - */ - getSignInStatus(): string; - - /** - * Returns true if user device has a given surface capability. - * - * @param {string} capability Must be one of {@link SurfaceCapabilities}. - * @return {boolean} True if user device has the given capability. - * - * @example - * const app = new DialogflowApp({request: req, response: res}); - * const DESCRIBE_SOMETHING = 'DESCRIBE_SOMETHING'; - * - * function describe (app) { - * if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) { - * app.tell(richResponseWithBasicCard); - * } else { - * app.tell('Let me tell you about ...'); - * } - * } - * const actionMap = new Map(); - * actionMap.set(DESCRIBE_SOMETHING, describe); - * app.handleRequest(actionMap); - * - * @dialogflow - * @actionssdk - */ - hasSurfaceCapability(requestedCapability: string): boolean; - - /** - * Gets surface capabilities of user device. - * - * @return {Array} Supported surface capabilities, as defined in - * AssistantApp.SurfaceCapabilities. - * @dialogflow - * @actionssdk - */ - getSurfaceCapabilities(): string[]; - - /** - * Returns the set of other available surfaces for the user. - * - * @return {Array} Empty if no available surfaces. - * @actionssdk - * @dialogflow - */ - getAvailableSurfaces(): Surface[]; - - /** - * Returns true if user has an available surface which includes all given - * capabilities. Available surfaces capabilities may exist on surfaces other - * than that used for an ongoing conversation. - * - * @param {string|Array} capabilities Must be one of - * {@link SurfaceCapabilities}. - * @return {boolean} True if user has a capability available on some surface. - * - * @dialogflow - * @actionssdk - */ - hasAvailableSurfaceCapabilities(capabilities: string | string[]): boolean; - - /** - * Returns the result of the AskForNewSurface helper. - * - * @return {boolean} True if user has triggered conversation on a new device - * following the NEW_SURFACE intent. - * @actionssdk - * @dialogflow - */ - isNewSurface(): boolean; - - /** - * Returns true if the app is being tested in sandbox mode. Enable sandbox - * mode in the (Actions console)[console.actions.google.com] to test - * transactions. - * - * @return {boolean} True if app is being used in Sandbox mode. - * @dialogflow - * @actionssdk - */ - isInSandbox(): boolean; - - /** - * Returns the number of subsequent reprompts related to silent input from the - * user. This should be used along with the NO_INPUT intent to reprompt the - * user for input in cases where the Google Assistant could not pick up any - * speech. - * - * @example - * const app = new ActionsSdkApp({request, response}); - * - * function welcome (app) { - * app.ask('Welcome to your app!'); - * } - * - * function noInput (app) { - * if (app.getRepromptCount() === 0) { - * app.ask(`What was that?`); - * } else if (app.getRepromptCount() === 1) { - * app.ask(`Sorry I didn't catch that. Could you repeat yourself?`); - * } else if (app.isFinalReprompt()) { - * app.tell(`Okay let's try this again later.`); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(app.StandardIntents.MAIN, welcome); - * actionMap.set(app.StandardIntents.NO_INPUT, noInput); - * app.handleRequest(actionMap); - * - * @return {number} The current reprompt count. Null if no reprompt count - * available (e.g. not in the NO_INPUT intent). - * @dialogflow - * @actionssdk - */ - getRepromptCount(): number; - - /** - * Returns true if it is the final reprompt related to silent input from the - * user. This should be used along with the NO_INPUT intent to give the final - * response to the user after multiple silences and should be an app.tell - * which ends the conversation. - * - * @example - * const app = new ActionsSdkApp({request, response}); - * - * function welcome (app) { - * app.ask('Welcome to your app!'); - * } - * - * function noInput (app) { - * if (app.getRepromptCount() === 0) { - * app.ask(`What was that?`); - * } else if (app.getRepromptCount() === 1) { - * app.ask(`Sorry I didn't catch that. Could you repeat yourself?`); - * } else if (app.isFinalReprompt()) { - * app.tell(`Okay let's try this again later.`); - * } - * } - * - * const actionMap = new Map(); - * actionMap.set(app.StandardIntents.MAIN, welcome); - * actionMap.set(app.StandardIntents.NO_INPUT, noInput); - * app.handleRequest(actionMap); - * - * @return {boolean} True if in a NO_INPUT intent and this is the final turn - * of dialog. - * @dialogflow - * @actionssdk - */ - isFinalReprompt(): boolean; - - // --------------------------------------------------------------------------- - // Response Builders - // --------------------------------------------------------------------------- - - /** - * Constructs RichResponse with chainable property setters. - * - * @param {RichResponse=} richResponse RichResponse to clone. - * @return {RichResponse} Constructed RichResponse. - */ - buildRichResponse(richResponse?: RichResponse): RichResponse; - - /** - * Constructs BasicCard with chainable property setters. - * - * @param {string=} bodyText Body text of the card. Can be set using setTitle - * instead. - * @return {BasicCard} Constructed BasicCard. - */ - buildBasicCard(bodyText?: string): BasicCard; - - /** - * Constructs List with chainable property setters. - * - * @param {string=} title A title to set for a new List. - * @return {List} Constructed List. - */ - buildList(title?: string): List; - - /** - * Constructs Carousel with chainable property setters. - * - * @return {Carousel} Constructed Carousel. - */ - buildCarousel(): Carousel; - - /** - * Constructs OptionItem with chainable property setters. - * - * @param {string=} key A unique key to identify this option. This key will - * be returned as an argument in the resulting actions.intent.OPTION - * intent. - * @param {string|Array=} synonyms A list of synonyms which the user may - * use to identify this option instead of the option key. - * @return {OptionItem} Constructed OptionItem. - */ - buildOptionItem(key?: string, synonyms?: string | string[]): OptionItem; - - // --------------------------------------------------------------------------- - // Transaction Builders - // --------------------------------------------------------------------------- - - /** - * Constructs Order with chainable property setters. - * - * @param {string} orderId Unique identifier for the order. - * @return {Order} Constructed Order. - */ - buildOrder(orderId: string): Order; - - /** - * Constructs Cart with chainable property setters. - * - * @param {string=} cartId Unique identifier for the cart. - * @return {Cart} Constructed Cart. - */ - buildCart(cartId?: string): Cart; - - /** - * Constructs LineItem with chainable property setters. - * - * @param {string} id Unique identifier for the item. - * @param {string} name Name of the line item. - * @return {LineItem} Constructed LineItem. - */ - buildLineItem(id: string, name: string): LineItem; - - /** - * Constructs OrderUpdate with chainable property setters. - * - * @param {string} orderId Unique identifier of the order. - * @param {boolean} isGoogleOrderId True if the order ID is provided by - * Google. False if the order ID is app provided. - * @return {OrderUpdate} Constructed OrderUpdate. - */ - buildOrderUpdate(orderId: string, isGoogleOrderId: boolean): OrderUpdate; -} - -export class State { - constructor(name: string); - getName(): string; -} diff --git a/types/actions-on-google/dialogflow-app.d.ts b/types/actions-on-google/dialogflow-app.d.ts deleted file mode 100644 index c63a78f2ee..0000000000 --- a/types/actions-on-google/dialogflow-app.d.ts +++ /dev/null @@ -1,569 +0,0 @@ -import { Request, Response } from 'express'; - -import { AssistantApp, DeviceLocation, SessionStartedFunction, User } from './assistant-app'; -import { Carousel, List, RichResponse, SimpleResponse } from './response-builder'; -import { TransactionDecision } from './transactions'; - -// --------------------------------------------------------------------------- -// Dialogflow support -// --------------------------------------------------------------------------- - -/** - * DialogflowApp {@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 { - request: Request; - response: Response; - sessionStarted?: SessionStartedFunction; -} - -/** - * 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}); - * - * @param {Object} options JSON configuration. - * @param {Object} options.request Express HTTP request object. - * @param {Object} options.response Express HTTP response object. - * @param {Function=} options.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 - */ - 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 - * fulfillment header. - * @return {boolean} True if the request comes from Dialogflow. - * @dialogflow - */ - isRequestFromApiAi(key: string, value: string): boolean; - - /** - * 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 - * fulfillment header. - * @return {boolean} 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 {string} 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 {string} argName Name of the argument. - * @return {Object} 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 {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): 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} 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} 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} 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 {string} 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 {string|SimpleResponse|RichResponse} inputPrompt The input prompt - * response. - * @param {Array=} noInputs Array of re-prompts when the user does not respond (max 3). - * @return {Object} HTTP response. - * @dialogflow - */ - ask(inputPrompt: string | SimpleResponse | RichResponse, noInputs?: string[]): object; - - /** - * 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 {string|RichResponse|SimpleResponse} inputPrompt The input prompt - * response. - * @param {List} list List built with {@link AssistantApp#buildList|buildList}. - * @return {Object} HTTP response. - * @dialogflow - */ - askWithList(inputPrompt: string | RichResponse | SimpleResponse, list: List): object; - - /** - * 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 {string|RichResponse|SimpleResponse} inputPrompt The input prompt - * response. - * @param {Carousel} carousel Carousel built with - * {@link AssistantApp#buildCarousel|buildCarousel}. - * @return {Object} HTTP response. - * @dialogflow - */ - askWithCarousel(inputPrompt: string | RichResponse | SimpleResponse, carousel: Carousel): object; - - /** - * 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} textToSpeech Final response. - * Spoken response can be SSML. - * @return The response that is sent back to Assistant. - * @dialogflow - */ - tell(speechResponse: string | SimpleResponse | RichResponse): object; - - /** - * 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 {int} [lifespan=1] Context lifespan. - * @param {Object=} parameters Context JSON parameters. - * @dialogflow - */ - setContext(name: string, lifespan: number, parameters?: object): void; - - /** - * 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 {Context[]} 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); - * - * @return {Object} 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 {string} User's raw query or null if no value. - * @dialogflow - */ - getRawInput(): string; -} diff --git a/types/actions-on-google/response-builder.d.ts b/types/actions-on-google/response-builder.d.ts deleted file mode 100644 index 1133879819..0000000000 --- a/types/actions-on-google/response-builder.d.ts +++ /dev/null @@ -1,317 +0,0 @@ -/** - * 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 item. Used in actions.intent.OPTION intent. - */ -export interface OptionItem { - /** Option item identifier information. */ - optionInfo: OptionInfo; - /** Name of the item. */ - title: string; - /** Optional text describing the item. */ - description: string; - /** Square image to show for this item. */ - image: Image; -} - -/** - * 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} richResponse - */ - constructor(richResponse: RichResponse); - - /** - * 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. - */ - addSimpleResponse(simpleResponse: string | SimpleResponse): RichResponse; - - /** - * Adds a BasicCard to list of items. - * - * @param {BasicCard} basicCard Basic card to include in response. - * @return {RichResponse} Returns current constructed RichResponse. - */ - addBasicCard(basicCard: BasicCard): RichResponse; - - /** - * Adds a single suggestion or list of suggestions to list of items. - * - * @param {string|Array} suggestions Either a single string suggestion - * or list of suggestions to add. - * @return {RichResponse} 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. - */ - isValidSuggestionText(suggestionText: string): boolean; - - /** - * 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. - */ - 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 - * @return {RichResponse} 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} basicCard - */ - constructor(basicCard: BasicCard); - - /** - * Sets the title for this Basic Card. - * - * @param {string} title Title to show on card. - * @return {BasicCard} Returns current constructed BasicCard. - */ - setTitle(title: string): BasicCard; - - /** - * Sets the subtitle for this Basic Card. - * - * @param {string} subtitle Subtitle to show on card. - * @return {BasicCard} Returns current constructed BasicCard. - */ - setSubtitle(subtitle: string): BasicCard; - - /** - * Sets the body text for this Basic Card. - * - * @param {string} bodyText Body text to show on card. - * @return {BasicCard} Returns current constructed BasicCard. - */ - setBodyText(bodyText: string): BasicCard; - - /** - * Sets the image for this Basic Card. - * - * @param {string} url Image source URL. - * @param {string} accessibilityText Text to replace for image for - * accessibility. - * @param {number=} width Width of the image. - * @param {number=} height Height of the image. - * @return {BasicCard} Returns current constructed BasicCard. - */ - setImage(url: string, accessibilityText: string, width?: number, height?: number): 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. - */ - 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|string|Array} 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[]); - - /** - * Sets the title for this List. - * - * @param {string} title Title to show on list. - * @return {List} Returns current constructed List. - */ - setTitle(title: string): List; - - /** - * Adds a single item or list of items to the list. - * - * @param {OptionItem|Array} optionItems OptionItems to add. - * @return {List} 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|Array} carousel Either a carousel to clone, a - * or an array of OptionItem to initialize a new carousel - */ - constructor(carousel: Carousel | OptionItem[]); - - /** - * Adds a single item or list of items to the carousel. - * - * @param {OptionItem|Array} optionItems OptionItems to add. - * @return {Carousel} 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} optionItem - */ - constructor(optionItem: OptionItem); - - /** - * Sets the title for this Option Item. - * - * @param {string} title Title to show on item. - * @return {OptionItem} Returns current constructed OptionItem. - */ - setTitle(title: string): OptionItem; - - /** - * Sets the description for this Option Item. - * - * @param {string} description Description to show on item. - * @return {OptionItem} Returns current constructed OptionItem. - */ - setDescription(description: string): OptionItem; - - /** - * Sets the image for this Option Item. - * - * @param {string} url Image source URL. - * @param {string} accessibilityText Text to replace for image for - * accessibility. - * @param {number=} width Width of the image. - * @param {number=} height Height of the image. - * @return {OptionItem} 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 {string} key Key to uniquely identify this item. - * @return {OptionItem} Returns current constructed OptionItem. - */ - setKey(key: string): OptionItem; - - /** - * Adds a single synonym or list of synonyms to item. - * - * @param {string|Array} synonyms Either a single string synonyms - * or list of synonyms to add. - * @return {OptionItem} Returns current constructed OptionItem. - */ - addSynonyms(synonyms: string | string[]): OptionItem; -} - -export function isSsml(text: string): boolean; diff --git a/types/actions-on-google/transactions.d.ts b/types/actions-on-google/transactions.d.ts deleted file mode 100644 index d2773896b8..0000000000 --- a/types/actions-on-google/transactions.d.ts +++ /dev/null @@ -1,1390 +0,0 @@ -/** - * A collection of Transaction related constants, utility functions, and - * builders. - */ - -import { Image } from './response-builder'; - -/** - * Price type. - */ -export interface Price { - /** One of Transaction.PriceType. */ - type: PriceType; - amount: { - /** Currency code of price. */ - currencyCode: string; - /** Unit count of price. */ - units: number; - /** Partial unit count of price. */ - nanos?: number; - }; -} - -/** - * Order rejection info. - */ -export interface RejectionInfo { - /** One of Transaction.RejectionType. */ - type: RejectionType; - /** Reason for the order rejection. */ - reason: string; -} - -/** - * Order receipt info. - */ -export interface ReceiptInfo { - /** Action provided order ID. Used when the order has been received by the integrator. */ - confirmedActionOrderId: string; -} - -/** - * Order cancellation info. - */ -export interface CancellationInfo { - /** Reason for the cancellation. */ - reason: string; -} - -/** - * Order transit info. - */ -export interface TransitInfo { - /** UTC timestamp of the transit update. */ - updatedTime: { - /** Seconds since Unix epoch. */ - seconds: number; - /** Partial seconds since Unix epoch. */ - nanos?: number; - }; -} - -/** - * Order fulfillment info. - */ -export interface FulfillmentInfo { - /** UTC timestamp of the fulfillment update. */ - deliveryTime: { - /** Seconds since Unix epoch. */ - seconds: number; - /** Partial seconds since Unix epoch. */ - nanos?: number; - }; -} - -/** - * Order return info. - */ -export interface ReturnInfo { - /** Reason for the return. */ - reason: string; -} - -/** - * Transaction config for transactions not involving a Google provided - * payment instrument. - */ -export interface ActionPaymentTransactionConfig { - /** True if delivery address is required for the transaction. */ - deliveryAddressRequired: boolean; - /** One of Transactions.PaymentType. */ - type: PaymentType; - /** The name of the instrument displayed on receipt. For example, for card payment, could be "VISA-1234". */ - displayName: string; - customerInfoOptions?: CustomerInfoOptions; -} - -/** - * Transaction config for transactions involving a Google provided payment - * instrument. - */ -export interface GooglePaymentTransactionConfig { - /** True if delivery address is required for the transaction. */ - deliveryAddressRequired: boolean; - /** Tokenization parameters provided by payment gateway. */ - tokenizationParameters: object; - /** List of accepted card networks. Must be any number of Transactions.CardNetwork. */ - cardNetworks: CardNetwork[]; - /** True if prepaid cards are not allowed for transaction. */ - prepaidCardDisallowed: boolean; - customerInfoOptions?: CustomerInfoOptions; -} - -/** - * Customer information requested as part of the transaction - */ -export interface CustomerInfoOptions { - /** one of Transactions.CustomerInfoProperties */ - customerInfoProperties: string[]; -} - -/** - * Generic Location type. - */ -export interface Location { - postalAddress: { - regionCode: string; - languageCode: string; - postalCode: string; - administrativeArea: string; - locality: string; - addressLines: string[]; - recipients: string; - }; - phoneNumber: string; - notes: string; -} - -/** - * Decision and order information returned when calling getTransactionDecision(). - */ -export interface TransactionDecision { - /** One of Transactions.ConfirmationDecision. */ - userDecision: ConfirmationDecision; - checkResult: { - /** One of Transactions.ResultType. */ - resultType: string; - }; - order: { - /** The proposed order used in the transaction decision. */ - finalOrder: Order; - /** Order ID assigned by Google. */ - googleOrderId: string; - /** User visible order ID set in proposed order. */ - actionOrderId: string; - /** The date and time the order was created */ - orderDate: { - seconds: string; - nanos: number; - }; - /** The details regarding the payment method that must be used to charge the user. */ - paymentInfo: { - /** One of Transactions.PaymentType. */ - paymentType: PaymentType; - googleProvidedPaymentInstrument: { - /** - * Contains a Base64-encoded payment token provided by a third-party payment processor - * Returned for Google-provided payment methods only - */ - instrumentToken: string; - }; - /** - * Name of the instrument displayed on the receipt - * Returned for payment methods provided by your app only - */ - displayName: string; - }; - // Any customer information (e.g. email address) requested - customerInfo: { - /** Customer email. */ - email: string; - }; - }; - /** - * The delivery address if user requested. - * Will appear if userDecision is Transactions.DELIVERY_ADDRESS_UPDATED. - */ - deliveryAddress: Location; -} - -/** - * List of transaction card networks available when paying with Google. - */ -export type CardNetwork = - /** - * Unspecified. - */ - 'UNSPECIFIED' | - /** - * American Express. - */ - 'AMEX' | - /** - * Discover. - */ - 'DISCOVER' | - /** - * Master Card. - */ - 'MASTERCARD' | - /** - * Visa. - */ - 'VISA' | - /** - * JCB. - */ - 'JCB'; - -/** - * List of possible item types. - * @enum {string} - */ -export type ItemType = - /** - * Unspecified. - */ - 'UNSPECIFIED' | - /** - * Regular. - */ - 'REGULAR' | - /** - * Tax. - */ - 'TAX' | - /** - * Discount - */ - 'DISCOUNT' | - /** - * Gratuity - */ - 'GRATUITY' | - /** - * Delivery - */ - 'DELIVERY' | - /** - * Subtotal - */ - 'SUBTOTAL' | - /** - * Fee. For everything else, there's fee. - */ - 'FEE'; - -/** - * List of price types. - * @enum {string} - */ -export type PriceType = - /** - * Unknown. - */ - 'UNKNOWN' | - /** - * Estimate. - */ - 'ESTIMATE' | - /** - * Actual. - */ - 'ACTUAL'; - -/** - * List of possible item types. - * @enum {string} - */ -export type PaymentType = - /** - * Unspecified. - */ - 'UNSPECIFIED' | - /** - * Payment card. - */ - 'PAYMENT_CARD' | - /** - * Bank. - */ - 'BANK' | - /** - * Loyalty program. - */ - 'LOYALTY_PROGRAM' | - /** - * On order fulfillment, such as cash on delivery. - */ - 'ON_FULFILLMENT' | - /** - * Gift card. - */ - 'GIFT_CARD'; - -/** - * List of customer information properties that can be requested. - */ -export type CustomerInfoProperties = 'EMAIL'; - -/** - * List of possible order confirmation user decisions - * @enum {string} - */ -export type ConfirmationDecision = - /** - * Order was approved by user. - */ - 'ORDER_ACCEPTED' | - /** - * Order was declined by user. - */ - 'ORDER_REJECTED' | - /** - * Order was not declined, but the delivery address was updated during - * confirmation. - */ - 'DELIVERY_ADDRESS_UPDATED' | - /** - * Order was not declined, but the cart was updated during confirmation. - */ - 'CART_CHANGE_REQUESTED'; - -/** - * List of possible order states. - * @enum {string} - */ -export type OrderState = - /** - * Order was rejected. - */ - 'REJECTED' | - /** - * Order was confirmed by integrator and is active. - */ - 'CONFIRMED' | - /** - * User cancelled the order. - */ - 'CANCELLED' | - /** - * Order is being delivered. - */ - 'IN_TRANSIT' | - /** - * User performed a return. - */ - 'RETURNED' | - /** - * User received what was ordered. - */ - 'FULFILLED'; - -/** - * List of possible actions to take on the order. - * @enum {string} - */ -export type OrderAction = - /** - * View details. - */ - 'VIEW_DETAILS' | - /** - * Modify order. - */ - 'MODIFY' | - /** - * Cancel order. - */ - 'CANCEL' | - /** - * Return order. - */ - 'RETURN' | - /** - * Exchange order. - */ - 'EXCHANGE' | - /** - * Email. - */ - 'EMAIL' | - /** - * Call. - */ - 'CALL' | - /** - * Reorder. - */ - 'REORDER' | - /** - * Review. - */ - 'REVIEW'; - -/** - * List of possible types of order rejection. - * @enum {string} - */ -export type RejectionType = - /** - * Unknown - */ - 'UNKNOWN' | - /** - * Payment was declined. - */ - 'PAYMENT_DECLINED'; - -/** - * List of possible order state objects. - * @enum {string} - */ -export type OrderStateInfo = - /** - * Information about order rejection. Used with {@link RejectionInfo}. - */ - 'rejectionInfo' | - /** - * Information about order receipt. Used with {@link ReceiptInfo}. - */ - 'receipt' | - /** - * Information about order cancellation. Used with {@link CancellationInfo}. - */ - 'cancellationInfo' | - /** - * Information about in-transit order. Used with {@link TransitInfo}. - */ - 'inTransitInfo' | - /** - * Information about order fulfillment. Used with {@link FulfillmentInfo}. - */ - 'fulfillmentInfo' | - /** - * Information about order return. Used with {@link ReturnInfo}. - */ - 'returnInfo'; - -/** - * List of possible order transaction requirements check result types. - * @enum {string} - */ -export type ResultType = - /** - * Unspecified. - */ - 'RESULT_TYPE_UNSPECIFIED' | - /** - * OK to continue transaction. - */ - 'OK' | - /** - * User is expected to take action, e.g. enable payments, to continue - * transaction. - */ - 'USER_ACTION_REQUIRED' | - /** - * Transactions are not supported on current device/surface. - */ - 'ASSISTANT_SURFACE_NOT_SUPPORTED' | - /** - * Transactions are not supported for current region/country. - */ - 'REGION_NOT_SUPPORTED'; - -/** - * List of possible user decisions to give delivery address. - * @enum {string} - */ -export type DeliveryAddressDecision = - /** - * Unknown. - */ - 'UNKNOWN_USER_DECISION' | - /** - * User granted delivery address. - */ - 'ACCEPTED' | - /** - * User denied to give delivery address. - */ - 'REJECTED'; - -/** - * List of possible order location types. - * @enum {string} - */ -export type LocationType = - /** - * Unknown. - */ - 'UNKNOWN' | - /** - * Delivery location for an order. - */ - 'DELIVERY' | - /** - * Business location of order provider. - */ - 'BUSINESS' | - /** - * Origin of the order. - */ - 'ORIGIN' | - /** - * Destination of the order. - */ - 'DESTINATION'; - -/** - * List of possible order time types. - * @enum {string} - */ - -export type TimeType = - /** - * Unknown. - */ - 'UNKNOWN' | - /** - * Date of delivery for the order. - */ - 'DELIVERY_DATE' | - /** - * Estimated Time of Arrival for order. - */ - 'ETA' | - /** - * Reservation time. - */ - 'RESERVATION_SLOT'; - -/** - * Values related to supporting transactions. - * @type {Object} - */ -export const TransactionValues: { - /** - * List of transaction card networks available when paying with Google. - * @enum {string} - */ - readonly CardNetwork: { - /** - * Unspecified. - */ - UNSPECIFIED: CardNetwork, - /** - * American Express. - */ - AMEX: CardNetwork, - /** - * Discover. - */ - DISCOVER: CardNetwork, - /** - * Master Card. - */ - MASTERCARD: CardNetwork, - /** - * Visa. - */ - VISA: CardNetwork, - /** - * JCB. - */ - JCB: CardNetwork, - }, - - /** - * List of possible item types. - * @enum {string} - */ - readonly ItemType: { - /** - * Unspecified. - */ - UNSPECIFIED: ItemType, - /** - * Regular. - */ - REGULAR: ItemType, - /** - * Tax. - */ - TAX: ItemType, - /** - * Discount - */ - DISCOUNT: ItemType, - /** - * Gratuity - */ - GRATUITY: ItemType, - /** - * Delivery - */ - DELIVERY: ItemType, - /** - * Subtotal - */ - SUBTOTAL: ItemType, - /** - * Fee. For everything else, there's fee. - */ - FEE: ItemType, - }, - - /** - * List of price types. - * @enum {string} - */ - readonly PriceType: { - /** - * Unknown. - */ - UNKNOWN: PriceType, - /** - * Estimate. - */ - ESTIMATE: PriceType, - /** - * Actual. - */ - ACTUAL: PriceType, - }, - - /** - * List of possible item types. - * @enum {string} - */ - readonly PaymentType: { - /** - * Unspecified. - */ - UNSPECIFIED: PaymentType, - /** - * Payment card. - */ - PAYMENT_CARD: PaymentType, - /** - * Bank. - */ - BANK: PaymentType, - /** - * Loyalty program. - */ - LOYALTY_PROGRAM: PaymentType, - /** - * On order fulfillment, such as cash on delivery. - */ - ON_FULFILLMENT: PaymentType, - /** - * Gift card. - */ - GIFT_CARD: PaymentType, - }, - - /** - * List of possible order confirmation user decisions - * @enum {string} - */ - readonly CustomerInfoProperties: { - EMAIL: CustomerInfoProperties, - }, - - /** - * List of possible order confirmation user decisions - * @enum {string} - */ - readonly ConfirmationDecision: { - /** - * Order was approved by user. - */ - ACCEPTED: ConfirmationDecision, - /** - * Order was declined by user. - */ - REJECTED: ConfirmationDecision, - /** - * Order was not declined, but the delivery address was updated during - * confirmation. - */ - DELIVERY_ADDRESS_UPDATED: ConfirmationDecision, - /** - * Order was not declined, but the cart was updated during confirmation. - */ - CART_CHANGE_REQUESTED: ConfirmationDecision, - }, - - /** - * List of possible order states. - * @enum {string} - */ - readonly OrderState: { - /** - * Order was rejected. - */ - REJECTED: OrderState, - /** - * Order was confirmed by integrator and is active. - */ - CONFIRMED: OrderState, - /** - * User cancelled the order. - */ - CANCELLED: OrderState, - /** - * Order is being delivered. - */ - IN_TRANSIT: OrderState, - /** - * User performed a return. - */ - RETURNED: OrderState, - /** - * User received what was ordered. - */ - FULFILLED: OrderState, - }, - - /** - * List of possible actions to take on the order. - * @enum {string} - */ - readonly OrderAction: { - /** - * View details. - */ - VIEW_DETAILS: OrderAction, - /** - * Modify order. - */ - MODIFY: OrderAction, - /** - * Cancel order. - */ - CANCEL: OrderAction, - /** - * Return order. - */ - RETURN: OrderAction, - /** - * Exchange order. - */ - EXCHANGE: OrderAction, - /** - * Email. - */ - EMAIL: OrderAction, - /** - * Call. - */ - CALL: OrderAction, - /** - * Reorder. - */ - REORDER: OrderAction, - /** - * Review. - */ - REVIEW: OrderAction, - }, - - /** - * List of possible types of order rejection. - * @enum {string} - */ - readonly RejectionType: { - /** - * Unknown - */ - UNKNOWN: RejectionType, - /** - * Payment was declined. - */ - PAYMENT_DECLINED: RejectionType, - }, - - /** - * List of possible order state objects. - * @enum {string} - */ - readonly OrderStateInfo: { - /** - * Information about order rejection. Used with {@link RejectionInfo}. - */ - REJECTION: OrderStateInfo, - /** - * Information about order receipt. Used with {@link ReceiptInfo}. - */ - RECEIPT: OrderStateInfo, - /** - * Information about order cancellation. Used with {@link CancellationInfo}. - */ - CANCELLATION: OrderStateInfo, - /** - * Information about in-transit order. Used with {@link TransitInfo}. - */ - IN_TRANSIT: OrderStateInfo, - /** - * Information about order fulfillment. Used with {@link FulfillmentInfo}. - */ - FULFILLMENT: OrderStateInfo, - /** - * Information about order return. Used with {@link ReturnInfo}. - */ - RETURN: OrderStateInfo, - }, - - /** - * List of possible order transaction requirements check result types. - * @enum {string} - */ - readonly ResultType: { - /** - * Unspecified. - */ - UNSPECIFIED: ResultType, - /** - * OK to continue transaction. - */ - OK: ResultType, - /** - * User is expected to take action, e.g. enable payments, to continue - * transaction. - */ - USER_ACTION_REQUIRED: ResultType, - /** - * Transactions are not supported on current device/surface. - */ - ASSISTANT_SURFACE_NOT_SUPPORTED: ResultType, - /** - * Transactions are not supported for current region/country. - */ - REGION_NOT_SUPPORTED: ResultType, - }, - - /** - * List of possible user decisions to give delivery address. - * @enum {string} - */ - readonly DeliveryAddressDecision: { - /** - * Unknown. - */ - UNKNOWN: DeliveryAddressDecision, - /** - * User granted delivery address. - */ - ACCEPTED: DeliveryAddressDecision, - /** - * User denied to give delivery address. - */ - REJECTED: DeliveryAddressDecision, - }, - - /** - * List of possible user decisions to give delivery address. - * @enum {string} - */ - readonly LocationType: { - /** - * Unknown. - */ - UNKNOWN: LocationType, - /** - * Delivery location for an order. - */ - DELIVERY: LocationType, - /** - * Business location of order provider. - */ - BUSINESS: LocationType, - /** - * Origin of the order. - */ - ORIGIN: LocationType, - /** - * Destination of the order. - */ - DESTINATION: LocationType, - }, - - /** - * List of possible user decisions to give delivery address. - * @enum {string} - */ - readonly TimeType: { - /** - * Unknown. - */ - UNKNOWN: TimeType, - /** - * Date of delivery for the order. - */ - DELIVERY_DATE: TimeType, - /** - * Estimated Time of Arrival for order. - */ - ETA: TimeType, - /** - * Reservation time. - */ - RESERVATION_SLOT: TimeType, - }, -}; - -/** - * Class for initializing and constructing Order with chainable interface. - */ -export class Order { - /** - * ID for the order. Required. - */ - readonly id: string; - - /** - * Cart for the order. - */ - readonly cart: Cart; - - /** - * Items not held in the order cart. - */ - readonly otherItems: LineItem[]; - - /** - * Image for the order. - */ - readonly image: Image; - - /** - * TOS for the order. - */ - readonly termsOfServiceUrl: string; - - /** - * Total price for the order. - * @type {Price} - */ - readonly totalPrice: Price; - - /** - * Extensions for this order. Used for vertical-specific order attributes, - * like times and locations. - */ - readonly extension: object; - - /** - * Constructor for Order. - * - * @param {string} orderId Unique identifier for the order. - */ - constructor(orderId: string); - - /** - * Set the cart for this order. - * - * @param {Cart} cart Cart for this order. - * @return {Order} Returns current constructed Order. - */ - setCart(cart: Cart): Order; - - /** - * Adds a single item or list of items to the non-cart items list. - * - * @param {LineItem|Array} items Line Items to add. - * @return {Order} Returns current constructed Order. - */ - addOtherItems(items: LineItem | LineItem[]): Order; - - /** - * Sets the image for this order. - * - * @param {string} url Image source URL. - * @param {string} accessibilityText Text to replace for image for - * accessibility. - * @param {number=} width Width of the image. - * @param {number=} height Height of the image. - * @return {Order} Returns current constructed Order. - */ - setImage(url: string, accessibilityText: string, width?: number, height?: number): Order; - - /** - * Set the TOS for this order. - * - * @param {string} tos String URL of the TOS. - * @return {Order} Returns current constructed Order. - */ - setTermsOfService(url: string): Order; - - /** - * Sets the total price for this order. - * - * @param {string} priceType One of TransactionValues.PriceType. - * @param {string} currencyCode Currency code of price. - * @param {number} units Unit count of price. - * @param {number=} nanos Partial unit count of price. - * @return {Order} Returns current constructed Order. - */ - setTotalPrice(priceType: PriceType, currencyCode: string, units: number, nanos?: number): Order; - - /** - * Adds an associated location to the order. Up to 2 locations can be added. - * - * @param {string} type One of TransactionValues.LocationType. - * @param {Location} location Location to add. - * @return {Order} Returns current constructed Order. - */ - addLocation(type: string, location: Location): Order; - - /** - * Sets an associated time to the order. - * - * @param {string} type One of TransactionValues.TimeType. - * @param {string} time Time to add. Time should be ISO 8601 representation - * of time value. Could be date, datetime, or duration. - * @return {Order} Returns current constructed Order. - */ - setTime(type: string, time: string): Order; -} - -/** - * Class for initializing and constructing Cart with chainable interface. - */ -export class Cart { - /** - * ID for the cart. Optional. - */ - readonly id: string; - - /** - * Merchant providing the cart. - */ - readonly merchant: object; - - /** - * Optional notes about the cart. - */ - readonly notes: string; - - /** - * Items held in the order cart. - */ - readonly lineItems: LineItem[]; - - /** - * Non-line items. - */ - readonly otherItems: LineItem[]; - - /** - * Constructor for Cart. - * - * @param {string=} cartId Optional unique identifier for the cart. - */ - constructor(cartId?: string); - - /** - * Set the merchant for this cart. - * - * @param {string} id Merchant ID. - * @param {string} name Name of the merchant. - * @return {Cart} Returns current constructed Cart. - */ - setMerchant(id: string, name: string): Cart; - - /** - * Set the notes for this cart. - * - * @param {string} notes Notes. - * @return {Cart} Returns current constructed Cart. - */ - setNotes(notes: string): Cart; - - /** - * Adds a single item or list of items to the cart. - * - * @param {LineItem|Array} items Line Items to add. - * @return {Cart} Returns current constructed Cart. - */ - addLineItems(items: LineItem | LineItem[]): Cart; - - /** - * Adds a single item or list of items to the non-items list of this cart. - * - * @param {LineItem|Array} items Line Items to add. - * @return {Cart} Returns current constructed Cart. - */ - addOtherItems(items: LineItem | LineItem[]): Cart; -} - -/** - * Class for initializing and constructing LineItem with chainable interface. - */ -export class LineItem { - /** - * Item ID. - */ - readonly id: string; - - /** - * Name of the item. - */ - readonly name: string; - - /** - * Item price. - */ - readonly price: Price; - - /** - * Sublines for current item. Only valid if item type is REGULAR. - */ - readonly sublines: string[] | LineItem[]; - - /** - * Image of the item. - */ - readonly image: Image; - - /** - * Type of the item. One of TransactionValues.ItemType. - */ - readonly type: ItemType; - - /** - * Quantity of the item. - */ - readonly quantity: number; - - /** - * Description for the item. - */ - readonly description: string; - - /** - * Offer ID for the item. - */ - readonly offerId: string; - - /** - * Constructor for LineItem. - * - * @param {string} lineItemId Unique identifier for the item. - * @param {string} name Name of the item. - */ - constructor(lineItemId: string, name: string); - - /** - * Adds a single item or list of items or notes to the sublines. Only valid - * if item type is REGULAR. - * - * @param {string|LineItem|Array} items Sublines to add. - * @return {LineItem} Returns current constructed LineItem. - */ - addSublines(items: string | LineItem | string[] | LineItem[]): LineItem; - - /** - * Sets the image for this item. - * - * @param {string} url Image source URL. - * @param {string} accessibilityText Text to replace for image for - * accessibility. - * @param {number=} width Width of the image. - * @param {number=} height Height of the image. - * @return {LineItem} Returns current constructed LineItem. - */ - setImage(url: string, accessibilityText: string, width?: number, height?: number): LineItem; - - /** - * Sets the price of this item. - * - * @param {string} priceType One of TransactionValues.PriceType. - * @param {string} currencyCode Currency code of price. - * @param {number} units Unit count of price. - * @param {number=} nanos Partial unit count of price. - * @return {LineItem} Returns current constructed LineItem. - */ - setPrice(priceType: PriceType, currencyCode: string, units: number, nanos?: number): LineItem; - - /** - * Set the type of the item. - * - * @param {string} type Type of the item. One of TransactionValues.ItemType. - * @return {LineItem} Returns current constructed LineItem. - */ - setType(type: ItemType): LineItem; - - /** - * Set the quantity of the item. - * - * @param {number} quantity Quantity of the item. - * @return {LineItem} Returns current constructed LineItem. - */ - setQuantity(quantity: number): LineItem; - - /** - * Set the description of the item. - * - * @param {string} description Description of the item. - * @return {LineItem} Returns current constructed LineItem. - */ - setDescription(description: string): LineItem; - - /** - * Set the Offer ID of the item. - * - * @param {string} offerId Offer ID of the item. - * @return {LineItem} Returns current constructed LineItem. - */ - setOfferId(offerId: string): LineItem; -} - -/** - * Class for initializing and constructing OrderUpdate with chainable interface. - */ -export class OrderUpdate { - /** - * Google provided identifier of the order. - * @type {string} - */ - readonly googleOrderId?: string; - - /** - * App provided identifier of the order. - * @type {string} - */ - readonly actionOrderId?: string; - - /** - * State of the order. - * @type {Object} - */ - readonly orderState?: OrderState; - - /** - * Updates for items in the order. Mapped by item id to state or price. - * @type {Object} - */ - readonly lineItemUpdates?: object; - - /** - * UTC timestamp of the order update. - * @type {Object} - */ - readonly updateTime?: object; - - /** - * Actionable items presented to the user to manage the order. - * @type {Object} - */ - readonly orderManagementActions: object[]; - - /** - * Notification content to the user for the order update. - * @type {Object} - */ - readonly userNotification: object; - - /** - * Updated total price of the order. - * @type {Price} - */ - readonly totalPrice: Price; - - /** - * Constructor for OrderUpdate. - * - * @param {string} orderId Unique identifier of the order. - * @param {boolean} isGoogleOrderId True if the order ID is provided by - * Google. False if the order ID is app provided. - */ - constructor(orderId: string, isGoogleOrderId: boolean); - - /** - * Set the Google provided order ID of the order. - * - * @param {string} orderId Google provided order ID. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setGoogleOrderId(orderId: string): OrderUpdate; - - /** - * Set the Action provided order ID of the order. - * - * @param {string} orderId Action provided order ID. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setActionOrderId(orderId: string): OrderUpdate; - - /** - * Set the state of the order. - * - * @param {string} state One of TransactionValues.OrderState. - * @param {string} label Label for the order state. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setOrderState(state: OrderState, label: string): OrderUpdate; - - /** - * Set the update time of the order. - * - * @param {number} seconds Seconds since Unix epoch. - * @param {number=} nanos Partial time units. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setUpdateTime(seconds: number, nanos?: number): OrderUpdate; - - /** - * Set the user notification content of the order update. - * - * @param {string} title Title of the notification. - * @param {text} text Text of the notification. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setUserNotification(title: string, text: object): OrderUpdate; - - /** - * Sets the total price for this order. - * - * @param {string} priceType One of TransactionValues.PriceType. - * @param {string} currencyCode Currency code of price. - * @param {number} units Unit count of price. - * @param {number=} nanos Partial unit count of price. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setTotalPrice(priceType: PriceType, currencyCode: string, units: number, nanos?: number): OrderUpdate; - - /** - * Adds an actionable item for the user to manage the order. - * - * @param {string} type One of TransactionValues.OrderActions. - * @param {string} label Button label. - * @param {string} url URL to open when button is clicked. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - addOrderManagementAction(type: OrderAction, label: string, url: string): OrderUpdate; - - /** - * Adds a single price update for a particular line item in the order. - * - * @param {string} itemId Line item ID for the order item updated. - * @param {string} priceType One of TransactionValues.PriceType. - * @param {string} currencyCode Currency code of new price. - * @param {number} units Unit count of new price. - * @param {number=} nanos Partial unit count of new price. - * @param {string=} reason Reason for the price change. Required unless a - * reason for this line item change was already declared in - * addLineItemStateUpdate. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - addLineItemPriceUpdate(itemId: string, priceType: PriceType, currencyCode: string, units: number, nanos?: number, reason?: string): OrderUpdate; - - /** - * Adds a single state update for a particular line item in the order. - * - * @param {string} itemId Line item ID for the order item updated. - * @param {string} state One of TransactionValues.OrderState. - * @param {string} label Label for the new item state. - * @param {string=} reason Reason for the price change. This will overwrite - * any reason given in addLineitemPriceUpdate. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - addLineItemStateUpdate(itemId: string, state: OrderState, label: string, reason?: string): OrderUpdate; - - /** - * Sets some extra information about the order. Takes an order update info - * type, and any accompanying data. This should only be called once per - * order update. - * - * @param {string} type One of TransactionValues.OrderStateInfo. - * @param {Object} data Proper Object matching the data necessary for the info - * type. For instance, for the TransactionValues.OrderStateInfo.RECEIPT info - * type, use the {@link ReceiptInfo} data type. - * @return {OrderUpdate} Returns current constructed OrderUpdate. - */ - setInfo(type: string, data: object): OrderUpdate; -}