Structures below are described in TypeScript language.

/** Parameter passed to addon at startup. Contains everything addon needs. */
AddonParams {
	config: ServerConfig,
	/** Proxy for REST runtime API */
	dialogApi: DialogV2API;
	/** Observer of this event will be executed while processing message form user after there are is no more skip_user_input = true. That means just before sending response to the browser. */
	afterSkipUserInputCheck: ObserverCollection<{payload:BrowserToServerPayload, skipUserinputCheck: (payload: BrowserToServerPayload) => void }>;
	/** Register request handler */
	registerRequestHandler: (requestName: string, handler: RequestHandler) => void;
}
ObserverCollection<T> {
	(arg: T):void;
	fire:(arg: T)=>void;
	observe:(observer:T) => number;
}
/** Parameters passed to request handler with each call */
export interface RequestHandlerParams {
	/** This is last request from browser containing configurations e.g. keys and credentials for web services) */
	config: ClientConfig;
	/** args field of the request. Shortcut to payload.context.request.args. */
	args: any;
	/** The whole object passed passed from browser. Also a prefilled request to dialog service. */
	payload: BrowserToServerPayload;
}
/** A function that responds to the request passed in context. Results are placed directly to the params.payload.context
 * @param params	object that holds all data needed
 * @param callback 	call this function when complete
*/
RequestHandler {
	(params: RequestHandlerParams, callback: {(error: any): void; (): void;}): void
}
DialogV2API {
	postMessage: (params: BrowserToServerPayload, callback: (err: {message:string; stack:any}, payload: BrowserToServerPayload) => any) => any;
	getWorkspaces: (params: {
		url: string;
		username: string;
		password: string;
	}, callback: (err: {message:string; stack:any}, result: GetWorkspacesResult) => any) => any;
	operGeneral: any;
}
/** The whole object passed between browser and server. Also a prefilled request to dialog service. */
export interface BrowserToServerPayload {
	/** Name of the current workspace */
	name: string;
	/** Url of the conversation service */
	url: string;
	/** Username credential of the conversation service */
	username: string;
	/** Password credential of the conversation service */
	password: string;
	/** Id of the current workspace */
	workspace_id?: string;
	input?: { text: string; };
	output?: OutputUpdate;
	context: Context;
}