├── settings.gradle ├── art └── actions_web_simulator.png ├── gactions ├── src │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── frogermcs │ │ │ └── gactions │ │ │ ├── api │ │ │ ├── response │ │ │ │ ├── UrlTypeHint.java │ │ │ │ ├── ImageDisplayOptions.java │ │ │ │ ├── Image.java │ │ │ │ ├── Status.java │ │ │ │ ├── SuggestionResponse.java │ │ │ │ ├── SimpleResponse.java │ │ │ │ ├── Button.java │ │ │ │ ├── VersionFilter.java │ │ │ │ ├── FinalResponse.java │ │ │ │ ├── RichInitialPromptItem.java │ │ │ │ ├── SpeechResponse.java │ │ │ │ ├── AndroidApp.java │ │ │ │ ├── ResponseMetadata.java │ │ │ │ ├── OpenUrlAction.java │ │ │ │ ├── PermissionValueSpec.java │ │ │ │ ├── RichInitialPrompt.java │ │ │ │ ├── InputPrompt.java │ │ │ │ ├── ExpectedInputs.java │ │ │ │ ├── BasicCard.java │ │ │ │ ├── InputValueData.java │ │ │ │ ├── RootResponse.java │ │ │ │ └── ExpectedIntent.java │ │ │ ├── request │ │ │ │ ├── InputType.java │ │ │ │ ├── ConversationType.java │ │ │ │ ├── Device.java │ │ │ │ ├── Time.java │ │ │ │ ├── Coordinates.java │ │ │ │ ├── RawInput.java │ │ │ │ ├── Conversation.java │ │ │ │ ├── UserProfile.java │ │ │ │ ├── Inputs.java │ │ │ │ ├── RootRequest.java │ │ │ │ ├── User.java │ │ │ │ ├── Argument.java │ │ │ │ ├── Location.java │ │ │ │ └── PostalAddress.java │ │ │ ├── StandardIntents.java │ │ │ ├── AssistantIntents.java │ │ │ ├── SupportedPermissions.java │ │ │ ├── ActionsConfig.java │ │ │ ├── RequestHandler.java │ │ │ └── permission │ │ │ │ └── PermissionRequestHandler.java │ │ │ ├── AssistantUtils.java │ │ │ ├── ResponseHandler.java │ │ │ ├── AssistantActions.java │ │ │ └── ResponseBuilder.java │ └── test │ │ └── java │ │ └── com │ │ └── frogermcs │ │ └── gactions │ │ ├── AssistantUtilsTest.java │ │ ├── testUtils │ │ └── TestObjects.java │ │ ├── AssistantActionsTest.java │ │ ├── api │ │ └── permission │ │ │ └── PermissionRequestHandlerTest.java │ │ └── ResponseBuilderTest.java └── build.gradle ├── gradle ├── wrapper │ └── gradle-wrapper.properties └── gradle-bintray-push.gradle ├── gactions-sample ├── action.json ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── frogermcs │ │ │ └── gactions │ │ │ └── sample │ │ │ ├── MainRequestHandlerFactory.java │ │ │ ├── TextRequestHandlerFactory.java │ │ │ ├── MyPermissionRequestHandlerFactory.java │ │ │ ├── TextRequestHandler.java │ │ │ ├── MainRequestHandler.java │ │ │ ├── MyPermissionRequestHandler.java │ │ │ ├── AppEngineResponseHandler.java │ │ │ └── ActionsServlet.java │ │ └── webapp │ │ └── WEB-INF │ │ ├── web.xml │ │ └── appengine-web.xml └── build.gradle ├── LICENSE.md ├── gradle.properties ├── .gitignore ├── gradlew.bat ├── gradlew └── README.md /settings.gradle: -------------------------------------------------------------------------------- 1 | include 'gactions' 2 | include 'gactions-sample' 3 | 4 | -------------------------------------------------------------------------------- /art/actions_web_simulator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frogermcs/Google-Actions-Java-SDK/HEAD/art/actions_web_simulator.png -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/UrlTypeHint.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | public enum UrlTypeHint { 4 | URL_TYPE_HINT_UNSPECIFIED, 5 | AMP_CONTENT; 6 | } 7 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/ImageDisplayOptions.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | public enum ImageDisplayOptions { 4 | DEFAULT, 5 | WHITE, 6 | CROPPED; 7 | } 8 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/Image.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | public class Image { 4 | public String url; 5 | public String accessibilityText; 6 | public int height; 7 | public int width; 8 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun May 27 11:25:37 CEST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip 7 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/InputType.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | /** 4 | * Created by froger_mcs on 17/01/2017. 5 | */ 6 | public enum InputType { 7 | UNSPECIFIC_INPUT_TYPE, 8 | KEYBOARD, 9 | TOUCH, 10 | VOICE 11 | } 12 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/Status.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class Status { 11 | public String message; 12 | } 13 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/ConversationType.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | /** 4 | * Created by froger_mcs on 17/01/2017. 5 | */ 6 | public enum ConversationType { 7 | TYPE_UNSPECIFIED, 8 | NEW, 9 | ACTIVE, 10 | EXPIRED, 11 | ARCHIVED 12 | } 13 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/SuggestionResponse.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class SuggestionResponse { 11 | public String title; 12 | } 13 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/SimpleResponse.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class SimpleResponse { 11 | public SpeechResponse simpleResponse; 12 | } 13 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/Button.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class Button { 11 | public String title; 12 | public OpenUrlAction openUrlAction; 13 | } 14 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/VersionFilter.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class VersionFilter { 11 | public int minVersion; 12 | public int maxVersion; 13 | } 14 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/Device.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * Created by froger_mcs on 17/01/2017. 7 | */ 8 | @Builder 9 | @EqualsAndHashCode 10 | @ToString 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class Device { 14 | public Location location; 15 | } 16 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/FinalResponse.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class FinalResponse { 11 | public RichInitialPrompt richResponse; 12 | public SpeechResponse speechResponse; 13 | } 14 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/Time.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * Created by froger_mcs on 17/01/2017. 7 | */ 8 | @Builder 9 | @EqualsAndHashCode 10 | @ToString 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class Time { 14 | public int seconds; 15 | public int nanos; 16 | } 17 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/RichInitialPromptItem.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class RichInitialPromptItem { 11 | public SpeechResponse simpleResponse; 12 | public BasicCard basicCard; 13 | } 14 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/SpeechResponse.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class SpeechResponse { 11 | public String displayText; 12 | public String textToSpeech; 13 | public String ssml; 14 | } 15 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/AndroidApp.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | @Builder 8 | @EqualsAndHashCode 9 | @ToString 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class AndroidApp { 13 | public String packageName; 14 | public List versions; 15 | } 16 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/ResponseMetadata.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.Map; 6 | 7 | @Builder 8 | @EqualsAndHashCode 9 | @ToString 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class ResponseMetadata { 13 | public Map specs; 14 | public Status status; 15 | } 16 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/OpenUrlAction.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | @Builder 6 | @EqualsAndHashCode 7 | @ToString 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class OpenUrlAction { 11 | 12 | public String url; 13 | public AndroidApp androidApp; 14 | public UrlTypeHint urlTypeHint; 15 | } 16 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/PermissionValueSpec.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | @Builder 8 | @EqualsAndHashCode 9 | @ToString 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class PermissionValueSpec { 13 | public String optContext; 14 | public List permissions; 15 | } 16 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/Coordinates.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * Created by froger_mcs on 17/01/2017. 7 | */ 8 | @Builder 9 | @EqualsAndHashCode 10 | @ToString 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class Coordinates { 14 | public double latitude; 15 | public double longitude; 16 | } 17 | -------------------------------------------------------------------------------- /gactions-sample/action.json: -------------------------------------------------------------------------------- 1 | { 2 | "versionLabel": "1.0.0", 3 | "agentInfo": { 4 | "languageCode": "en-US", 5 | "projectId": "hello", 6 | "voiceName": "male_1" 7 | }, 8 | "actions": [ 9 | { 10 | "initialTrigger": { 11 | "intent": "assistant.intent.action.MAIN" 12 | }, 13 | "httpExecution": { 14 | "url": "https://application-id.appspot.com/" 15 | } 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/RichInitialPrompt.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | @Builder 8 | @EqualsAndHashCode 9 | @ToString 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class RichInitialPrompt { 13 | public List items; 14 | public List suggestions; 15 | } 16 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/RawInput.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * Created by froger_mcs on 17/01/2017. 7 | */ 8 | @Builder 9 | @EqualsAndHashCode 10 | @ToString 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class RawInput { 14 | public Time create_time; 15 | public String query; 16 | public InputType inputType; 17 | } 18 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/Conversation.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * Created by froger_mcs on 17/01/2017. 7 | */ 8 | @Builder 9 | @EqualsAndHashCode 10 | @ToString 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class Conversation { 14 | public String conversationId; 15 | public ConversationType type; 16 | public String conversationToken; 17 | } 18 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/UserProfile.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * Created by froger_mcs on 17/01/2017. 7 | */ 8 | @Builder 9 | @EqualsAndHashCode 10 | @ToString 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class UserProfile { 14 | public String givenName; 15 | public String familyName; 16 | public String displayName; 17 | public String email; 18 | } 19 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/InputPrompt.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | @Builder 8 | @EqualsAndHashCode 9 | @ToString 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class InputPrompt { 13 | public RichInitialPrompt richInitialPrompt; 14 | public List initialPrompts; 15 | public List noInputPrompts; 16 | } 17 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/Inputs.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by froger_mcs on 17/01/2017. 9 | */ 10 | @Builder 11 | @EqualsAndHashCode 12 | @ToString 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class Inputs { 16 | public String intent; 17 | public List rawInputs; 18 | public List arguments; 19 | } 20 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/ExpectedInputs.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by froger_mcs on 17/01/2017. 9 | */ 10 | @Builder 11 | @EqualsAndHashCode 12 | @ToString 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | public class ExpectedInputs { 16 | public InputPrompt inputPrompt; 17 | public List possibleIntents; 18 | } 19 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/request/RootRequest.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.request; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by froger_mcs on 17/01/2017. 9 | */ 10 | @Builder 11 | @EqualsAndHashCode 12 | @ToString 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class RootRequest { 16 | public User user; 17 | public Device device; 18 | public Conversation conversation; 19 | public List inputs; 20 | } 21 | -------------------------------------------------------------------------------- /gactions/src/main/java/com/frogermcs/gactions/api/response/BasicCard.java: -------------------------------------------------------------------------------- 1 | package com.frogermcs.gactions.api.response; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | 7 | @Builder 8 | @EqualsAndHashCode 9 | @ToString 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class BasicCard { 13 | public String title; 14 | public String subtitle; 15 | public String formattedText; 16 | public Image image; 17 | public List