package Ġcom . t ms dur ham . actions Ċ Ċ import Ġcom . t ms dur ham . dialogflow . google . Google Data Ċ import Ġcom . t ms dur ham . actions . actions .* Ċ import Ġcom . t ms dur ham . dialogflow . Dialog flow Response ĊĊ Ċ // ĠConstants Ċ val ĠCON VER S ATION _ API _ AGENT _ VERSION _ HEADER Ġ= Ġ" Agent - Version - Label " Ċ val ĠINPUT S _ MAX Ġ= Ġ 3 Ċ Ċ // Ġ--------------------------------------------------------------------------- Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActions ĠSDK Ġsupport Ċ // Ġ--------------------------------------------------------------------------- Ċ Ċ /** Ċ Ġ* ĠComp letes Ġserialization / de serialization Ġof Ġresponse , Ġrequest , Ġdialog State Ċ Ġ*/ Ċ interface ĠSerializer Ġ{ ĊĠĠĠ Ġfun Ġ< T > Ġserialize ( obj : ĠT ): ĠString ĊĠĠĠ Ġfun Ġ< T > Ġdeserialize ( str : ĠString , Ġclazz : ĠClass < T >): ĠT Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġclass Ġthat Ġhandles Ġthe Ġconversation ĠAPI Ġdirectly Ġfrom ĠAssistant , Ċ Ġ* Ġproviding Ġimplementation Ġfor Ġall Ġthe Ġmethods Ġavailable Ġin Ġthe ĠAPI . Ċ Ġ*/ Ċ class ĠActions Sdk App Ġ: ĠAssistant App < Action Request , ĠAction Response > Ġ{ ĊĊĠĠĠ Ġval Ġserializer : ĠSerializer ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġfor ĠActions Sdk App Ġobject . ĊĠĠĠĠ Ġ* ĠTo Ġbe Ġused Ġin Ġthe ĠActions ĠSDK ĠHTTP Ġendpoint Ġlogic . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval ĠActions Sdk App Ġ= Ġrequire (" actions - on - google "). Actions Sdk App ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= Ġnew ĠActions Sdk App ({ request : Ġrequest , Ġresponse : Ġresponse , ĊĠĠĠĠ Ġ* ĠĠ Ġsession Started : session Started }) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġoptions ĠJSON Ġconfiguration . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġoptions . request ĠExpress ĠHTTP Ġrequest Ġobject . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġoptions . response ĠExpress ĠHTTP Ġresponse Ġobject . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ fun =} Ġoptions . session Started Ġfun Ġcallback Ġwhen Ġsession Ġstarts . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( request : ĠRequest Wrapper < Action Request >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse Wrapper < Action Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Started : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer : ĠSerializer ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper ( request , Ġresponse , Ġsession Started ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" Actions Sdk App Ġconstructor ") ĊĠĠĠĠĠĠĠ Ġthis . serializer Ġ= Ġserializer ĊĠĠĠĠĠĠĠ Ġresponse . body Ġ= ĠAction Response () ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġrequest Ġis ĠA o G Ġand Ġin ĠProto 2 Ġformat , Ġconvert Ġto ĠProto 3 . ĊĠĠĠĠĠĠĠ Ġ// TODO Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! isNot ApiVersion One ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . body . transform To Camel Case () Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request . body . conversation ?. type Ġ== ĠCON VER S ATION _ ST AGES . NEW Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Started Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Started () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġrequest ĠCon versation ĠAPI Ġversion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* Ġval ĠapiVersion Ġ= Ġapp . get ApiVersion () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠVersion Ġvalue Ġor Ġnull Ġif Ġno Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ApiVersion (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" get ApiVersion ") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( apiVersion _ Ġ!= Ġnull ) ĠapiVersion _ Ġelse Ġactions ApiVersion ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġuser " s Ġraw Ġinput Ġquery . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* Ġapp . tell (" You Ġsaid Ġ" Ġ+ Ġapp . getRaw Input ()) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠUser " s Ġraw Ġquery Ġor Ġnull Ġif Ġno Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Raw Input (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" getRaw Input ") ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġget Top Input () ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Failed Ġto Ġget Ġtop ĠInput .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input ?. raw Inputs ?. size Ġ?: Ġ 0 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Missing Ġuser Ġraw Ġinput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġraw Input Ġ= Ġinput . raw Inputs ?. get ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( raw Input ?. query Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Missing Ġquery Ġfor Ġuser Ġraw Ġinput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġraw Input . query ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġprevious ĠJSON Ġdialog Ġstate Ġthat Ġthe Ġapp Ġsent Ġto ĠAssistant . ĊĠĠĠĠ Ġ* ĠAlternatively , Ġuse Ġthe Ġapp . data Ġfield Ġto Ġstore ĠJSON Ġvalues Ġbetween Ġrequests . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* Ġval Ġdialog State Ġ= Ġapp . get Dialog State () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String | Dialog State } ĠJSON Ġobject Ġprovided Ġto Ġthe ĠAssistant Ġin Ġthe Ġprevious ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġuser Ġturn Ġor Ġ{} Ġif Ġno Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Dialog State (): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" get Dialog State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( this . request . body . conversation ?. con vers ationToken ?. isNotBlank () Ġ?: Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtoken Ġ= Ġrequest . body . conversation ?. con vers ationToken ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog State Ġ= Ġserializer . deserialize ( token !! , Ġmutable Map Of < String , ĠAny ?> () :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" Error Ġde serializing Ġcon vers ationToken : Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdialog State ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable Map Of < String , ĠAny ?> () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġ" version Label " Ġspecified Ġinside Ġthe ĠAction ĠPackage . ĊĠĠĠĠ Ġ* ĠUsed Ġby Ġapp Ġto Ġdo Ġversion Ġcontrol . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* Ġval Ġaction Version Label Ġ= Ġapp . getAction Version Label () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠThe Ġspecified Ġversion Ġlabel Ġor Ġnull Ġif Ġunspecified . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Action Version Label (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" getAction Version Label ") ĊĠĠĠĠĠĠĠ Ġval Ġversion Label Ġ= Ġrequest . get ( CONVER S ATION _ API _ AGENT _ VERSION _ HEADER ) ĊĠĠĠĠĠĠĠ Ġif Ġ( version Label Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġversion Label ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* Ġval Ġconversation Id Ġ= Ġapp . get Conversation Id () ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠCon versation ĠID Ġor Ġnull Ġif Ġno Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Conversation Id (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" get Conversation Id ") ĊĠĠĠĠĠĠĠ Ġif Ġ( request . body . conversation ?. conversation Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . handleError (" No Ġconversation ĠID ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest . body . conversation . conversation Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġintent . ĠAlternatively , Ġusing Ġa Ġhandler ĠMap Ġwith ĊĠĠĠĠ Ġ* Ġ{@ link ĠAssistant App # handle Request | handle Request }, Ġthe Ġclient Ġlibrary Ġwill ĊĠĠĠĠ Ġ* Ġautomatically Ġhandle Ġthe Ġincoming Ġintent s . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġresponse Handler Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġval Ġintent Ġ= Ġapp . get Intent () ĊĠĠĠĠ Ġ* ĠĠ Ġwhen Ġ( intent ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . Standard Intent s . MAIN Ġ-> Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġapp . build Input Prompt ( false , Ġ" Welcome Ġto Ġaction Ġsnippets ! ĠS ay Ġanything .") ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġapp . ask ( input Prompt ) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . Standard Intent s . TEXT Ġ-> ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġapp . tell (" You Ġsaid Ġ" Ġ+ Ġapp . getRaw Input ()) ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġapp . handle Request ( response Handler ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠIntent Ġid Ġor Ġnull Ġif Ġno Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Intent (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" get Intent ") ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġget Top Input () ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Missing Ġintent Ġfrom Ġrequest Ġbody ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . intent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 . Ġ" v 1 "), ĊĠĠĠĠ Ġ* Ġthe Ġargument Ġobject Ġwill Ġbe Ġin ĠProto 2 Ġformat Ġ( snake _ case , Ġetc ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ String } Ġarg Name ĠName Ġof Ġthe Ġargument . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠArgument Ġvalue Ġmatching Ġarg Name ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġor Ġnull Ġif Ġno Ġmatching Ġargument . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Argument ( arg Name : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Argument Common ( arg Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġoption Ġkey Ġuser Ġchose Ġfrom Ġoptions Ġresponse . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠApp ( request Ġ= Ġreq , Ġresponse Ġ= Ġres ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġpick Option Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġif Ġ( app . has Surface Capability ( app . Surface Capabilities . SCREEN _ OUTPUT )) Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . ask With Carousel (" Which Ġof Ġthese Ġlooks Ġgood ?", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġapp . build Carousel (). add Items ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġapp . build Option Item (" another _ choice ", Ġ[" Another Ġchoice "]). ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ ĠsetTitle (" Another Ġchoice "). setDescription (" Choose Ġme ! "))) ĊĠĠĠĠ Ġ* ĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . ask (" What Ġwould Ġyou Ġlike ?") ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġoption Pick ed Ġ( app : ĠActions Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġapp . ask (" You Ġpicked Ġ" Ġ+ Ġapp . getSelected Option ()) ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġaction Map Ġ= Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . TEXT Ġto Ġpick Option , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . OPTION Ġto Ġoption Pick ed ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġapp . handle Request ( action Map ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ String } ĠOption Ġkey Ġof Ġselected Ġitem . ĠNull Ġif Ġno Ġoption Ġselected Ġor ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġif Ġcurrent Ġintent Ġis Ġnot ĠOPTION Ġintent . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Selected Option (): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" getSelected Option ") ĊĠĠĠĠĠĠĠ Ġif Ġ( get Argument ( BUIL T _ IN _ ARG _ NAMES . OPTION ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Argument ( BUIL T _ IN _ ARG _ NAMES . OPTION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdebug (" Failed Ġto Ġget Ġselected Ġoption ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAsk s Ġto Ġcollect Ġuser " s Ġinput Ġall Ġuser " s Ġqueries Ġneed Ġto Ġbe Ġsent Ġto ĊĠĠĠĠ Ġ* Ġthe Ġapp . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġmain Intent Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġval Ġinput Prompt Ġ= Ġapp . build Input Prompt ( true , Ġ"< speak > Hi ! Ġ< break Ġtime =" 1 "/> Ġ" Ġ+ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ" I Ġcan Ġread Ġout Ġan Ġordinal Ġlike Ġ" Ġ+ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ"< say - as Ġinterpret - as =" ordinal "> 1 2 3 </ say - as >. ĠS ay Ġa Ġnumber .</ speak >", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ[" I Ġdidn \" t Ġhear Ġa Ġnumber ", Ġ" If Ġyou \" re Ġstill Ġthere , Ġwhat \" s Ġthe Ġnumber ?", Ġ" What Ġis Ġthe Ġnumber ? "]) ĊĠĠĠĠ Ġ* ĠĠ Ġapp . ask ( input Prompt ) ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġraw Input Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġif Ġ( app . getRaw Input () Ġ== Ġ" bye ") Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . tell (" Good bye !") ĊĠĠĠĠ Ġ* ĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġapp . build Input Prompt ( true , Ġ"< speak > You Ġsaid , Ġ< say - as Ġinterpret - as =" ordinal ">" Ġ+ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġapp . getRaw Input () Ġ+ Ġ"</ say - as ></ speak >", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ[" I Ġdidn \" t Ġhear Ġa Ġnumber ", Ġ" If Ġyou \" re Ġstill Ġthere , Ġwhat \" s Ġthe Ġnumber ?", Ġ" What Ġis Ġthe Ġnumber ? "]) ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . ask ( input Prompt ) ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġaction Map Ġ= Ġ Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . MAIN Ġto Ġ:: main Intent , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . TEXT Ġto Ġ:: raw Input ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġapp . handle Request ( action Map ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object | Simple Response | Rich Response } Ġinput Prompt ĠHold ing Ġinitial Ġand ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġno - input Ġpromp ts . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object =} Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠApp . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresponse Ġthat Ġis Ġsent Ġto ĠAssistant Ġto Ġask Ġuser Ġto Ġprovide Ġinput . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġask ( input Prompt : ĠSimple Response , Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask : Ġinput Prompt =$ input Prompt , Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . TEXT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġask ( speech : ĠString , Ġdisplay Text : ĠString ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" tell : Ġspeech =$ speech Ġdisplay Text =$ display Text ") ĊĠĠĠĠĠĠĠ Ġval Ġsimple Response Ġ= ĠSimple Response () ĊĠĠĠĠĠĠĠ Ġval Ġfinal Response Ġ= ĠFinal Response () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ss ml ( speech )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Response . ss ml Ġ= Ġspeech ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Response . text ToS peech Ġ= Ġspeech ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsimple Response . display Text Ġ= Ġdisplay Text ĊĠĠĠĠĠĠĠ Ġif Ġ( display Text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Response . speech Response Ġ= Ġsimple Response ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Response . rich Response Ġ= Ġbuild Rich Response (). add Simple Response ( simple Response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġbuild Response Helper ( null , Ġtrue , Ġnull , Ġfinal Response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . do Response ( response , ĠRESP ONSE _ CODE _ OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġask ( init : ĠSimple Response . () Ġ-> ĠUnit ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsimple Response Ġ= ĠSimple Response () ĊĠĠĠĠĠĠĠ Ġsimple Response . init () ĊĠĠĠĠĠĠĠ Ġreturn Ġask ( simple Response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġask ( input Prompt : ĠInput Prompt ?, Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask : Ġinput Prompt =$ input Prompt , Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( input Prompt Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Input Prompt Ġcan Ġnot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . TEXT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġask ( speech : ĠString ?, Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask : Ġspeech =$ speech , Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . TEXT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( speech , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġask ( input Prompt : ĠRich Response ?, Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask : Ġinput Prompt =$ input Prompt , Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . TEXT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Ask Helper ( input Prompt : ĠRich Response ?, Ġpossible Intent s : ĠMutable List < Actions Sdk App . Expected Intent >, Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask : Ġinput Prompt =$ input Prompt , Ġdialog State =$ dialog State ") ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= ĠInput Prompt ( rich Initial Prompt Ġ= Ġinput Prompt ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġpossible Intent s , Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAsk s Ġto Ġcollect Ġuser " s Ġinput Ġwith Ġa Ġlist . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request , Ġresponse ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġwelcome Intent Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġapp . ask With list (" Which Ġof Ġthese Ġlooks Ġgood ?", ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . build List (" List Ġtitle ") ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ. add Items ([ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġapp . build Option Item ( SELECTION _ KEY _ ONE , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[" syn onym Ġof ĠKEY _ ONE Ġ 1 ", Ġ" syn onym Ġof ĠKEY _ ONE Ġ 2 "]) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Number Ġone "), ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġapp . build Option Item ( SELECTION _ KEY _ TWO , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[" syn onym Ġof ĠKEY _ TWO Ġ 1 ", Ġ" syn onym Ġof ĠKEY _ TWO Ġ 2 "]) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Number Ġtwo "), ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ] )) ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġoption Intent Ġ( app : ĠAction SDK App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġif Ġ( app . getSelected Option () Ġ== ĠSE LECTION _ KEY _ ONE ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . tell (" Number Ġone Ġis Ġa Ġgreat Ġchoice !") ĊĠĠĠĠ Ġ* ĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . tell (" Number Ġtwo Ġis Ġa Ġgreat Ġchoice !") ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġaction Map Ġ= Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . TEXT Ġto Ġ:: welcome Intent ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . OPTION Ġto Ġ:: option Intent ) ĊĠĠĠĠ Ġ* Ġapp . handle Request ( action Map ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object | Simple Response | Rich Response } Ġinput Prompt ĠHold ing Ġinitial Ġand ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġno - input Ġpromp ts . ĠCannot Ġcontain Ġbasic Ġcard . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ List } Ġlist ĠList Ġbuilt Ġwith Ġ{@ link ĠAssistant App # build List | build List }. ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object =} Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresponse Ġthat Ġis Ġsent Ġto ĠAssistant Ġto Ġask Ġuser Ġto Ġprovide Ġinput . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġask With List ( input Prompt : ĠAny , Ġlist : ĠList , Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask With List : Ġinput Prompt =$ input Prompt , Ġlist =$ list , Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( list . items . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" List Ġrequires Ġat Ġleast Ġ 2 Ġitems ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . OPTION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( isNot ApiVersion One ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . OPTION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Select Ġ= Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Intent . input Value Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Value Spec Ġ= ĠGoogle Data . Option Value Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Select Ġ= Ġlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( input Prompt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Response Ġ-> Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRich Response Ġ-> Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" unknown Ġinput Prompt Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAsk s Ġuser Ġfor Ġdelivery Ġaddress . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request , Ġresponse ) ĊĠĠĠĠ Ġ* Ġval ĠW EL CO ME _ INT ENT Ġ= Ġapp . Standard Intent s . MAIN ĊĠĠĠĠ Ġ* Ġval ĠDE LI VERY _ INT ENT Ġ= Ġapp . Standard Intent s . DE LI VERY _ ADDRESS ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġwelcome Intent Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġapp . ask For Delivery Address (" To Ġmake Ġsure ĠI Ġcan Ġdeliver Ġto Ġyou ") ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġaddress Intent Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġval Ġpostal Code Ġ= Ġapp . get Delivery Address (). postal Address . postal Code ĊĠĠĠĠ Ġ* ĠĠ Ġif Ġ( isIn Delivery Zone ( postal Code )) Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġ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 .") ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġaction Map Ġ= Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠW EL CO ME _ INT ENT Ġto Ġ:: welcome Intent , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠDE LI VERY _ INT ENT Ġto Ġ:: address Intent ) ĊĠĠĠĠ Ġ* Ġapp . handle Request ( action Map ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ String } Ġreason ĠReason Ġgiven Ġto Ġuser Ġfor Ġasking Ġdelivery Ġaddress . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object =} Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ dialogflow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġask For Delivery Address ( reason : ĠString , Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask For Delivery Address : Ġreason =$ reason ") ĊĠĠĠĠĠĠĠ Ġif Ġ( reason . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" reason Ġcannot Ġbe Ġempty ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . DE LI VERY _ ADDRESS ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . DE LI VERY _ ADDRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Options Ġ= ĠGoogle Data . Address Options ( reason Ġ= Ġreason ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġbuild Input Prompt ( false , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PLACE HOLDER _ FOR _ DE LI VERY _ ADDRESS ") ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAsk s Ġto Ġcollect Ġuser " s Ġinput Ġwith Ġa Ġcarousel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request , Ġresponse ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġwelcome Intent Ġ( app : ĠAction Sdk App ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġapp . ask With Carousel (" Which Ġof Ġthese Ġlooks Ġgood ?", ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . build Carousel () ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ. add Items ([ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġapp . build Option Item ( SELECTION _ KEY _ ONE , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[" syn onym Ġof ĠKEY _ ONE Ġ 1 ", Ġ" syn onym Ġof ĠKEY _ ONE Ġ 2 "]) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Number Ġone "), ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ Ġapp . build Option Item ( SELECTION _ KEY _ TWO , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[" syn onym Ġof ĠKEY _ TWO Ġ 1 ", Ġ" syn onym Ġof ĠKEY _ TWO Ġ 2 "]) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Number Ġtwo "), ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ] )) ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġoption Intent Ġ( app : ĠAction Sdk ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġif Ġ( app . getSelected Option () Ġ== ĠSE LECTION _ KEY _ ONE ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . tell (" Number Ġone Ġis Ġa Ġgreat Ġchoice !") ĊĠĠĠĠ Ġ* ĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . tell (" Number Ġtwo Ġis Ġa Ġgreat Ġchoice !") ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġaction Map Ġ= Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . TEXT Ġto Ġ:: welcome Intent ) ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . Standard Intent s . OPTION Ġto Ġ:: option Intent ) ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġapp . handle Request ( action Map ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object | Simple Response | Rich Response } Ġinput Prompt ĠHold ing Ġinitial Ġand ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġno - input Ġpromp ts . ĠCannot Ġcontain Ġbasic Ġcard . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Carousel } Ġcarousel ĠCar ousel Ġbuilt Ġwith ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ{@ link ĠAssistant App # build Carousel | build Carousel }. ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object =} Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresponse Ġthat Ġis Ġsent Ġto ĠAssistant Ġto Ġask Ġuser Ġto Ġprovide Ġinput . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġask With Carousel ( input Prompt : ĠAny , Ġcarousel : ĠCar ousel , Ġdialog State : ĠMutable Map < String , ĠAny ?> ? Ġ= Ġnull ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ask With Carousel : Ġinput Prompt =$ input Prompt , Ġcarousel =$ carousel , Ġdialog State =$ dialog State ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( carousel . items . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . handleError (" Carousel Ġrequires Ġat Ġleast Ġ 2 Ġitems ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= Ġbuild Expected Intent ( STANDARD _ INT ENTS . OPTION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Error Ġin Ġbuilding Ġexpected Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( isNot ApiVersion One ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . OPTION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarousel Select Ġ= Ġcarousel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Intent . input Value Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Value Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarousel Select Ġ= Ġcarousel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( input Prompt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Response Ġ-> Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRich Response Ġ-> Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġdialog State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" unknown Ġinput Prompt Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTell s ĠAssistant Ġto Ġrender Ġthe Ġspeech Ġresponse Ġand Ġclose Ġthe Ġmic . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġapp Ġ= ĠActions Sdk App ( request Ġ= Ġrequest , Ġresponse Ġ= Ġresponse ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġmain Intent Ġ( app ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġval Ġinput Prompt Ġ= Ġapp . build Input Prompt ( true , Ġ"< speak > Hi ! Ġ< break Ġtime =" 1 "/> Ġ" Ġ+ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ" I Ġcan Ġread Ġout Ġan Ġordinal Ġlike Ġ" Ġ+ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ"< say - as Ġinterpret - as =" ordinal "> 1 2 3 </ say - as >. ĠS ay Ġa Ġnumber .</ speak >", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ[" I Ġdidn \" t Ġhear Ġa Ġnumber ", Ġ" If Ġyou \" re Ġstill Ġthere , Ġwhat \" s Ġthe Ġnumber ?", Ġ" What Ġis Ġthe Ġnumber ? "]) ĊĠĠĠĠ Ġ* ĠĠ Ġapp . ask ( input Prompt ) ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfun Ġraw Input Ġ( app ) Ġ{ ĊĠĠĠĠ Ġ* ĠĠ Ġif Ġ( app . getRaw Input () Ġ== Ġ" bye ") Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . tell (" Good bye !") ĊĠĠĠĠ Ġ* ĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġapp . build Input Prompt ( true , Ġ"< speak > You Ġsaid , Ġ< say - as Ġinterpret - as =" ordinal ">" Ġ+ ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġapp . getRaw Input () Ġ+ Ġ"</ say - as ></ speak >", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġ[" I Ġdidn \" t Ġhear Ġa Ġnumber ", Ġ" If Ġyou \" re Ġstill Ġthere , Ġwhat \" s Ġthe Ġnumber ?", Ġ" What Ġis Ġthe Ġnumber ? "]) ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġapp . ask ( input Prompt ) ĊĠĠĠĠ Ġ* ĠĠ Ġ} ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġval Ġaction Map Ġ= Ġnew ĠMap () ĊĠĠĠĠ Ġ* Ġaction Map . set ( app . Standard Intent s . MAIN , Ġmain Intent ) ĊĠĠĠĠ Ġ* Ġaction Map . set ( app . Standard Intent s . TEXT , Ġraw Input ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġapp . handle Request ( action Map ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ string | Simple Response | Rich Response } Ġtext ToS peech ĠFinal Ġresponse . ĊĠĠĠĠ Ġ* ĠĠĠĠ ĠS po ken Ġresponse Ġcan Ġbe ĠSS ML . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe ĠHTTP Ġresponse Ġthat Ġis Ġsent Ġback Ġto ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġtell ( speech : ĠString , Ġdisplay Text : ĠString ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" tell : Ġspeech =$ speech Ġdisplay Text =$ display Text ") ĊĠĠĠĠĠĠĠ Ġval Ġsimple Response Ġ= ĠSimple Response () ĊĠĠĠĠĠĠĠ Ġval Ġfinal Response Ġ= ĠFinal Response () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ss ml ( speech )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Response . ss ml Ġ= Ġspeech ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Response . text ToS peech Ġ= Ġspeech ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsimple Response . display Text Ġ= Ġdisplay Text ĊĠĠĠĠĠĠĠ Ġif Ġ( display Text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Response . speech Response Ġ= Ġsimple Response ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Response . rich Response Ġ= Ġbuild Rich Response (). add Simple Response ( simple Response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġbuild Response Helper ( null , Ġfalse , Ġnull , Ġfinal Response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . do Response ( response , ĠRESP ONSE _ CODE _ OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtell ( speech : ĠString ): ĠResponse Wrapper < Action Response >? Ġ= Ġtell ( speech , Ġnull ) ĊĊĠĠĠ Ġoverride Ġfun Ġtell ( simple Response : ĠSimple Response ): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" tell : Ġsimple Response =$ simple Response ") ĊĠĠĠĠĠĠĠ Ġval Ġfinal Response Ġ= ĠFinal Response () ĊĊĠĠĠĠĠĠĠ Ġfinal Response . rich Response Ġ= Ġthis . build Rich Response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Simple Response ( simple Response ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġbuild Response Helper ( null , Ġfalse , Ġnull , Ġfinal Response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . do Response ( response , ĠRESP ONSE _ CODE _ OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtell ( rich Response : ĠRich Response ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" tell : Ġrich Response =$ rich Response ") ĊĠĠĠĠĠĠĠ Ġval Ġfinal Response Ġ= ĠFinal Response () ĊĠĠĠĠĠĠĠ Ġfinal Response . rich Response Ġ= Ġrich Response ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġbuild Response Helper ( null , Ġfalse , Ġnull , Ġfinal Response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdo Response ( response , ĠRESP ONSE _ CODE _ OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġthe Ġ{@ link Ġhttps :// developers . google . com / actions / reference / conversation # Input Prompt | Input Prompt Ġobject } ĊĠĠĠĠ Ġ* Ġfrom Ġinitial Ġprompt Ġand Ġno - input Ġpromp ts . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ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 Ġpromp ts Ġ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 Ġpromp ts Ġrequired Ġhere Ġin Ġorder Ġto Ġensure Ġa ĊĠĠĠĠ Ġ* Ġgood Ġuser Ġexperience . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ example ĊĠĠĠĠ Ġ* Ġval Ġinput Prompt Ġ= Ġapp . build Input Prompt ( false , Ġ" Welcome Ġto Ġaction Ġsnippets ! ĠS ay Ġa Ġnumber .", ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġ[" Say Ġany Ġnumber ", Ġ" Pick Ġa Ġnumber ", Ġ" What Ġis Ġthe Ġnumber ? "]) ĊĠĠĠĠ Ġ* Ġapp . ask ( input Prompt ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ boolean } Ġis Ss ml ĠIndicates Ġwhether Ġthe Ġtext Ġto Ġspeech Ġis ĠSS ML Ġor Ġnot . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ string } Ġinitial Prompt ĠThe Ġinitial Ġprompt Ġthe ĠApp Ġasks Ġthe Ġuser . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Array < string >= } Ġno Inputs ĠArray Ġof Ġre - pro mp ts Ġwhen Ġthe Ġuser Ġdoes Ġnot Ġrespond Ġ( max Ġ 3 ). ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠAn Ġ{@ link Ġhttps :// developers . google . com / actions / reference / conversation # Input Prompt | Input Prompt Ġobject }. ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Input Prompt ( is Ss ml : ĠBoolean , Ġinitial Prompt : ĠString , Ġno Inputs : ĠMutable List < String > Ġ= Ġmutable ListOf ()): ĠInput Prompt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" build Input Prompt : Ġis Ss ml =$ is Ss ml , Ġinitial Prompt =$ initial Prompt , Ġno Inputs =$ no Inputs ") ĊĠĠĠĠĠĠĠ Ġval Ġinitial s Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( no Inputs . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( no Inputs . size Ġ> ĠINPUT S _ MAX ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Invalid Ġnumber Ġof Ġno Ġinputs ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmaybe AddItem ToArray ( initial Prompt , Ġinitial s ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ss ml ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInput Prompt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Pro mp ts Ġ= Ġbuild Pro mp ts From Ss ml Helper ( initial s ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Input Pro mp ts Ġ= Ġbuild Pro mp ts From Ss ml Helper ( no Inputs . map Ġ{ Ġit Ġ}. to Mutable List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInput Prompt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Pro mp ts Ġ= Ġbuild Pro mp ts From Plain Text Helper ( initial s ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Input Pro mp ts Ġ= Ġbuild Pro mp ts From Plain Text Helper ( no Inputs . map Ġ{ Ġit Ġ}. to Mutable List ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // Ġ--------------------------------------------------------------------------- Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate ĠHelpers Ċ // Ġ--------------------------------------------------------------------------- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġtop Ġmost ĠInput Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ object } ĠInput Ġobject . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Top Input (): ĠInput ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" get Top Input ") ĊĠĠĠĠĠĠĠ Ġif Ġ( request . body . inputs ?. size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . handleError (" Missing Ġinputs Ġfrom Ġrequest Ġbody ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest . body . inputs ?. get ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġthe Ġresponse Ġto Ġsend Ġback Ġto ĠAssistant . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ string } Ġcon vers ationToken ĠThe Ġdialog Ġstate . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ boolean } Ġexpect User Response ĠThe Ġexpected Ġuser Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġexpected Input ĠThe Ġexpected Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ boolean } Ġfinal Response ĠThe Ġfinal Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠFinal Ġresponse Ġreturned Ġto Ġserver . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Response Helper ( con vers ationToken : ĠString ?, Ġexpect User Response : ĠBoolean , Ġexpected Input : ĠExpected Input ?, Ġfinal Response : ĠFinal Response ?): ĠResponse Wrapper < Action Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" build Response Helper : Ġcon vers ationToken =$ con vers ationToken , Ġexpect User Response =$ expect User Response , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" expected Input =$ expected Input , Ġfinal Response =$ final Response ") ĊĠĠĠĠĠĠĠ Ġresponse . body Ġ= ĠAction Response () ĊĠĠĠĠĠĠĠ Ġif Ġ(! con vers ationToken . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. con vers ationToken Ġ= Ġcon vers ationToken ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresponse . body ?. expect User Response Ġ= Ġexpect User Response ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Input Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. expected Inputs Ġ= Ġmutable ListOf ( expected Input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! expect User Response Ġ&& Ġfinal Response Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. final Response Ġ= Ġfinal Response ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġto Ġadd Ġitem Ġto Ġan Ġarray . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġmaybe AddItem ToArray ( item : ĠT , Ġarray : ĠMutable List < T >): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" maybe AddItem ToArray _: Ġitem =$ item , Ġarray =$ array ") ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore Ġadd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray . add ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExtract Ġsession Ġdata Ġfrom Ġthe Ġincoming ĠJSON Ġrequest . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġextract Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" extract Data ") ĊĠĠĠĠĠĠĠ Ġif Ġ( request . body . conversation ?. con vers ationToken Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġrequest . body . conversation . con vers ationToken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġextract Ġstate Ġfrom Ġtoken Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġjson . data Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġjson ?. get (" state ") Ġas ĠString ? ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUses Ġa ĠPermissions Value Spec Ġobject Ġto Ġconstruct Ġand Ġsend Ġa ĊĠĠĠĠ Ġ* Ġpermissions Ġrequest Ġto Ġuser . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġpermissions Value Spec ĠPermissions Value Spec Ġobject Ġcontaining ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġthe Ġpermissions Ġprefix Ġand Ġthe Ġpermissions Ġrequested . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse Ġobject . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfulfill Permissions Request ( permissions Spec : ĠGoogle Data . Permissions Request , Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ful fill Permissions Request _: Ġpermissions Value Spec =$ permissions Spec , Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġan ĠExpected ĠIntent Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠST AND ARD _ INT ENTS . PERMISSION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isNot ApiVersion One ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopt Context Ġ= Ġpermissions Spec . opt Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Ġ= Ġpermissions Spec . permissions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect User Response Ġ= Ġpermissions Spec . expect User Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Intent . input Value Spec Ġ= ĠInput Value Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Value Spec Ġ= Ġpermissions Spec ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġthis . build Input Prompt ( false , Ġ" PLACE HOLDER _ FOR _ PERMISSION ") ĊĠĠĠĠĠĠĠ Ġvar Ġout Dialog State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dialog State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġstate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġthis . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġout Dialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUses ĠTransaction Requirements Check Value Spec Ġto Ġconstruct Ġand Ġsend Ġa ĊĠĠĠĠ Ġ* Ġtransaction Ġrequirements Ġrequest Ġto ĠGoogle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġtransaction Requirements Spec ĠTransaction Requirements Spec ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġobject . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfulfill Transaction Requirements Check ( transaction Requirements Spec : ĠTransaction Requirements Check Spec , Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ful fill Transaction Requirements Check : Ġtransaction Requirements Spec =$ transaction Requirements Spec ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġan ĠExpected ĠIntent Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠST AND ARD _ INT ENTS . TRANSACTION _ REQUIRE MENTS _ CHECK ) ĊĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . TRANSACTION _ REQ _ CHECK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Options Ġ= Ġtransaction Requirements Spec . payment Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Options Ġ= Ġtransaction Requirements Spec . order Options ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġthis . build Input Prompt ( false , Ġ" PLACE HOLDER _ FOR _ TX N _ REQUIRE MENTS ") ĊĠĠĠĠĠĠĠ Ġvar Ġout State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġthis . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġthis . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġout State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUses ĠTransaction Decision Value Spec Ġto Ġconstruct Ġand Ġsend Ġa Ġtransaction ĊĠĠĠĠ Ġ* Ġrequirements Ġrequest Ġto ĠGoogle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġtransaction Decision Value Spec ĠTransaction Decision Value Spec ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġobject . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfulfill Transaction Decision ( transaction Decision Value Spec : ĠTransaction Decision Value Spec , Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ful fill Transaction Decision : Ġtransaction Decision Value Spec =$ transaction Decision Value Spec " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġan ĠExpected ĠIntent Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠST AND ARD _ INT ENTS . TRANSACTION _ DEC ISION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . TRANSACTION _ DEC ISION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproposed Order Ġ= Ġtransaction Decision Value Spec . pro posed Order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Options Ġ= Ġtransaction Decision Value Spec . order Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Options Ġ= Ġtransaction Decision Value Spec . payment Options ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġan ĠAsk Ġrequest Ġto ĠAssistant . ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġthis . build Input Prompt ( false , Ġ" PLACE HOLDER _ FOR _ TX N _ DEC ISION ") ĊĠĠĠĠĠĠĠ Ġvar Ġout Dialog State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dialog State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġthis . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġthis . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġout Dialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUses ĠConfirm ation Value Spec Ġto Ġconstruct Ġand Ġsend Ġa Ġconfirmation Ġrequest Ġto ĊĠĠĠĠ Ġ* ĠGoogle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } Ġconfirmation Value Spec ĠConfirm ation Value Spec Ġobject . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfulfill Confirmation Request ( confirmation Value Spec : ĠConfirm ation Value Spec , Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ful fill Confirmation Request _: Ġconfirmation Value Spec =$ confirmation Value Spec ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġan ĠExpected ĠIntent Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠST AND ARD _ INT ENTS . CONFIRM ATION ) ĊĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . CONFIRM ATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Spec Ġ= Ġconfirmation Value Spec . dialog Spec ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġan ĠAsk Ġrequest Ġto ĠAssistant . ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġthis . build Input Prompt ( false , Ġ" PLACE HOLDER _ FOR _ CONFIRM ATION ") ĊĠĠĠĠĠĠĠ Ġvar Ġout Dialog State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dialog State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġthis . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġthis . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġout Dialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠDateTime Value Spec ( var Ġtmp : ĠString ? Ġ= Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUses ĠDateTime Value Spec Ġto Ġconstruct Ġand Ġsend Ġa Ġdatetime Ġrequest Ġto ĠGoogle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Object } ĠdateTime Value Spec ĠDateTime Value Spec Ġobject . ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfulfill DateTime Request ( confirmation Value Spec : ĠConfirm ation Value Spec , Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ful fill DateTime Request _: ĠdateTime Value Spec =$ confirmation Value Spec ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġan ĠExpected ĠIntent Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠST AND ARD _ INT ENTS . DATETIME ) ĊĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ`@ type ` Ġ= ĠINPUT _ VALUE _ DATA _ TYPES . DATETIME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Spec Ġ= Ġconfirmation Value Spec . dialog Spec ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġan ĠAsk Ġrequest Ġto ĠAssistant . ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġthis . build Input Prompt ( false , Ġ" PLACE HOLDER _ FOR _ DATETIME ") ĊĠĠĠĠĠĠĠ Ġvar Ġout Dialog State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dialog State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġthis . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġthis . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġout Dialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstruct Ġand Ġsend Ġa Ġsign Ġin Ġrequest Ġto ĠGoogle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠHTTP Ġresponse . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfulfill SignIn Request ( dialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" ful fill SignIn Request _: Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġan ĠExpected ĠIntent Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠST AND ARD _ INT ENTS . SIGN _ IN ) ĊĠĠĠĠĠĠĠ Ġexpected Intent . input Value Data Ġ= ĠInput Value Data () ĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġan ĠAsk Ġrequest Ġto ĠAssistant . ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġbuild Input Prompt ( false , Ġ" PLACE HOLDER _ FOR _ SIGN _ IN ") ĊĠĠĠĠĠĠĠ Ġvar Ġout Dialog State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dialog State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġthis . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġmutable ListOf ( expected Intent ), Ġout Dialog State ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġfulfill System Intent ( intent : ĠString , Ġspec Type : ĠString , Ġintent Spec : ĠNew Surface Value Spec , Ġprompt Placeholder : ĠString ?, Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented Ġfor ĠActions ĠSDK Ġ- Ġplease Ġmake Ġan Ġissue Ġon Ġactions - on - google - kotlin Ġif Ġthis Ġis Ġneeded ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfulfill Register Update Intent ( intent : ĠString , Ġspec Type : ĠString , Ġintent Spec : ĠRegister Update Value Spec , Ġprompt Placeholder : ĠString ?, Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented Ġfor ĠActions ĠSDK Ġ- Ġplease Ġmake Ġan Ġissue Ġon Ġactions - on - google - kotlin Ġif Ġthis Ġis Ġneeded ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġthe Ġask Ġresponse Ġto Ġsend Ġback Ġto ĠAssistant . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Input Prompt } Ġinput Prompt ĠHold ing Ġinitial Ġand Ġno - input Ġpromp ts . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Array } Ġpossible Intent s ĠArray Ġof ĠExpected Intent s . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Dialog State } Ġdialog State ĠJSON Ġobject Ġthe Ġapp Ġuses Ġto Ġhold Ġdialog Ġstate Ġthat ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġwill Ġbe Ġcir cul ated Ġback Ġby ĠAssistant . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresponse Ġthat Ġis Ġsent Ġto ĠAssistant Ġto Ġask Ġuser Ġto Ġprovide Ġinput . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Ask Helper ( input Prompt : ĠInput Prompt ?, Ġpossible Intent s : ĠMutable List < Actions Sdk App . Expected Intent >, Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" build Ask Helper _: Ġinput Prompt =$ input Prompt , Ġpossible Intent s , Ġ Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( input Prompt Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Invalid Ġinput Ġprompt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġout Dialog State Ġ= Ġdialog State ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dialog State Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġthis . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġthis . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Inputs Ġ= ĠExpected Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Prompt Ġ= Ġinput Prompt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Intent s Ġ= Ġpossible Intent s ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbuild Response Helper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer . serialize ( out Dialog State ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , Ġ// Ġexpected User Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Inputs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ// Ġfinal Response Ġis Ġnull Ġb / c Ġdialog Ġis Ġactive ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdo Response ( response , ĠRESP ONSE _ CODE _ OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Ask Helper ( input Prompt : ĠString ?, Ġpossible Intent s : ĠMutable List < Expected Intent >, Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" build Ask Helper : Ġinput Prompt =$ input Prompt , Ġpossible Intent s =$ possible Intent s , Ġ Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( input Prompt Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Invalid Ġinput Ġprompt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġbuild Input Prompt ( is Ss ml ( input Prompt ), Ġinput Prompt ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġpossible Intent s , Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Ask Helper ( simple Response : ĠSimple Response , Ġpossible Intent s : ĠMutable List < Expected Intent >, Ġdialog State : ĠMutable Map < String , ĠAny ?> ?): ĠResponse Wrapper < Action Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" build Ask Helper : Ġinput Prompt =$ simple Response , Ġpossible Intent s =$ possible Intent s , Ġ Ġdialog State =$ dialog State ") ĊĠĠĠĠĠĠĠ Ġif Ġ( simple Response Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Invalid Ġinput Ġprompt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= Ġbuild Input Prompt ( is Ss ml ( simple Response . text ToS peech Ġ?: Ġ""), Ġsimple Response . text ToS peech Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġinput Prompt Ġ= ĠInput Prompt ( rich Initial Prompt Ġ= Ġbuild Rich Response (). add Simple Response ( simple Response )) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Ask Helper ( input Prompt , Ġpossible Intent s , Ġdialog State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġan ĠExpected Intent Ġobject . ĠRefer Ġto Ġ{@ link ĠActions Sdk App # new Runtime Entity } Ġto Ġcreate Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġof Ġruntime Ġentities Ġrequired Ġby Ġthis Ġmethod . ĠRuntime Ġentities Ġneed Ġto Ġbe Ġdefined Ġin ĊĠĠĠĠ Ġ* Ġthe ĠAction ĠPackage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ string } Ġintent ĠDeveloper Ġspecified Ġin - dialog Ġintent Ġinside Ġthe ĠAction ĊĠĠĠĠ Ġ* ĠĠĠĠ ĠPackage Ġor Ġan ĠApp Ġbuilt - in Ġintent Ġlike ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġ" assistant . intent . action . TEXT ". ĊĠĠĠĠ Ġ* Ġ@ return Ġ{ Object } ĠAn Ġ{@ link Ġhttps :// developers . google . com / actions / reference / conversation # Expected Intent | Expected Intent Ġobject } ĊĠĠĠ Ġencaps ulating Ġthe Ġintent Ġand Ġthe Ġruntime Ġentities . ĊĠĠĠĠ Ġ* Ġ@ private ĊĠĠĠĠ Ġ* Ġ@ action ssdk ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Expected Intent ( intent : ĠString ): ĠExpected Intent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" build Expected Intent _: Ġintent =$ intent ") ĊĠĠĠĠĠĠĠ Ġif Ġ( intent . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error (" Invalid Ġintent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Intent Ġ= ĠExpected Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= Ġintent ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexpected Intent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠExpected Intent ( var Ġintent : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinput ValueType : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinput Value Spec : ĠInput Value Spec ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinput Value Data : ĠInput Value Data ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġinput Value Data ( init : ĠInput Value Data . () Ġ-> ĠUnit ): ĠInput Value Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input Value Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Value Data Ġ= ĠInput Value Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Value Data ?. init () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput Value Data !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinput Value Spec ( init : ĠInput Value Spec . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input Value Spec Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Value Data Ġ= ĠInput Value Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Value Spec ?. init () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠInput Value Spec ( var Ġpermission Value Spec : ĠGoogle Data . Permissions Request ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoption Value Spec : ĠGoogle Data . Option Value Spec ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġoption Value Spec ( init : ĠGoogle Data . Option Value Spec . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option Value Spec Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Value Spec Ġ= ĠGoogle Data . Option Value Spec () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoption Value Spec ?. init () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠInput Value Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ`@ type `: ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaddress Options : ĠGoogle Data . Address Options ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlist Select : ĠList ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġproposed Order : ĠOrder ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġorder Options : ĠGoogle Data . Order Options ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpayment Options : ĠGoogle Data . Payment Options ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdialog Spec : ĠAssistant App . Dialog Spec ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcarousel Select : ĠCar ousel ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġopt Context : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpermissions : ĠMutable List < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexpect User Response : ĠBoolean Ġ= Ġfalse ) Ċ Ċ } Ċ Ċ data Ġclass ĠExpected Input ( var Ġinput Prompt : ĠInput Prompt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpossible Intent s : ĠMutable List < Actions Sdk App . Expected Intent >? Ġ= Ġnull ) ĊĊ