diff --git a/google/actions/sdk/v2/BUILD.bazel b/google/actions/sdk/v2/BUILD.bazel new file mode 100644 index 00000000..dbd2f489 --- /dev/null +++ b/google/actions/sdk/v2/BUILD.bazel @@ -0,0 +1,103 @@ +# This file was automatically generated by BuildFileGenerator +# https://github.com/googleapis/gapic-generator/tree/master/rules_gapic/bazel + +# Most of the manual changes to this file will be overwritten. +# It's **only** allowed to change the following rule attribute values: +# - names of *_gapic_assembly_* rules +# - certain parameters of *_gapic_library rules, including but not limited to: +# * extra_protoc_parameters +# * extra_protoc_file_parameters +# The complete list of preserved parameters can be found in the source code. + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( + name = "sdk_proto", + srcs = [ + "account_linking.proto", + "account_linking_secret.proto", + "action.proto", + "actions_sdk.proto", + "actions_testing.proto", + "config_file.proto", + "data_file.proto", + "event_logs.proto", + "files.proto", + "localized_settings.proto", + "manifest.proto", + "settings.proto", + "surface.proto", + "theme_customization.proto", + "validation_results.proto", + "webhook.proto", + ], + deps = [ + "//google/actions/sdk/v2/conversation/prompt/content:content_proto", + "//google/actions/sdk/v2/conversation/prompt:prompt_proto", + "//google/actions/sdk/v2/conversation:conversation_proto", + "//google/actions/sdk/v2/interactionmodel/prompt/content:content_proto", + "//google/actions/sdk/v2/interactionmodel/prompt:prompt_proto", + "//google/actions/sdk/v2/interactionmodel/type:type_proto", + "//google/actions/sdk/v2/interactionmodel:interactionmodel_proto", + "//google/api:annotations_proto", + "//google/api:client_proto", + "//google/api:field_behavior_proto", + "//google/api:resource_proto", + "//google/rpc:status_proto", + "//google/type:latlng_proto", + "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:struct_proto", + "@com_google_protobuf//:timestamp_proto", + "@com_google_protobuf//:wrappers_proto", + ], +) + +proto_library_with_info( + name = "sdk_proto_with_info", + deps = [ + ":sdk_proto", + "//google/cloud:common_resources_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) + +nodejs_gapic_library( + name = "sdk_nodejs_gapic", + src = ":sdk_proto_with_info", + grpc_service_config = "actions_grpc_service_config.json", + package = "google.actions.sdk.v2", + package_name = "@assistant/actions", + service_yaml = "actions_v2.yaml", + deps = [], +) + +nodejs_gapic_assembly_pkg( + name = "actions-v2-nodejs", + deps = [ + ":sdk_nodejs_gapic", + ":sdk_proto", + "//google/actions/sdk/v2/conversation/prompt/content:content_proto", + "//google/actions/sdk/v2/conversation/prompt:prompt_proto", + "//google/actions/sdk/v2/conversation:conversation_proto", + "//google/actions/sdk/v2/interactionmodel/prompt/content:content_proto", + "//google/actions/sdk/v2/interactionmodel/prompt:prompt_proto", + "//google/actions/sdk/v2/interactionmodel/type:type_proto", + "//google/actions/sdk/v2/interactionmodel:interactionmodel_proto", + + ], +) diff --git a/google/actions/sdk/v2/account_linking.proto b/google/actions/sdk/v2/account_linking.proto new file mode 100644 index 00000000..b33299ff --- /dev/null +++ b/google/actions/sdk/v2/account_linking.proto @@ -0,0 +1,126 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "AccountLinkingProto"; +option java_package = "com.google.actions.sdk.v2"; + +// AccountLinking allows Google to guide the user to sign-in to the App's web +// services. +// +// For Google Sign In and OAuth + Google Sign In linking types, Google generates +// a client ID identifying your App to Google ("Client ID issued by Google to +// your Actions" on Console UI). This field is read-only and can be checked by +// navigating to the Console UI's Account Linking page. +// See: https://developers.google.com/assistant/identity/google-sign-in +// +// Note: For all account linking setting types (except for Google Sign In), you +// must provide a username and password for a test account in +// Settings.testing_instructions for the review team to review the app (they +// will not be visible to users). +message AccountLinking { + // The type of Account Linking to perform. + enum LinkingType { + // Unspecified. + LINKING_TYPE_UNSPECIFIED = 0; + + // Google Sign In linking type. + // If using this linking type, no OAuth-related fields need to be set below. + GOOGLE_SIGN_IN = 1; + + // OAuth and Google Sign In linking type. + OAUTH_AND_GOOGLE_SIGN_IN = 2; + + // OAuth linking type. + OAUTH = 3; + } + + // The OAuth2 grant type Google uses to guide the user to sign in to your + // App's web service. + enum AuthGrantType { + // Unspecified. + AUTH_GRANT_TYPE_UNSPECIFIED = 0; + + // Authorization code grant. Requires you to provide both + // authentication URL and access token URL. + AUTH_CODE = 1; + + // Implicit code grant. Only requires you to provide authentication + // URL. + IMPLICIT = 2; + } + + // Required. If `true`, users are allowed to sign up for new accounts via voice. + // If `false`, account creation is only allowed on your website. Select this + // option if you want to display your terms of service or obtain user consents + // during sign-up. + // linking_type cannot be GOOGLE_SIGN_IN when this is `false`. + // linking_type cannot be OAUTH when this is `true`. + bool enable_account_creation = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The linking type to use. + // See https://developers.google.com/assistant/identity for further details on + // the linking types. + LinkingType linking_type = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Indicates the type of authentication for OAUTH linking_type. + AuthGrantType auth_grant_type = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Client ID issued by your App to Google. + // This is the OAuth2 Client ID identifying Google to your service. + // Only set when using OAuth. + string app_client_id = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Endpoint for your sign-in web page that supports OAuth2 code or + // implicit flows. + // URL must use HTTPS. + // Only set when using OAuth. + string authorization_url = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. OAuth2 endpoint for token exchange. + // URL must use HTTPS. + // This is not set when only using OAuth with IMPLICIT grant as the + // linking type. + // Only set when using OAuth. + string token_url = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of permissions the user must consent to in order to use + // your service. + // Only set when using OAuth. + // Make sure to provide a Terms of Service in the directory information in + // LocalizedSettings.terms_of_service_url section if specifying this field. + repeated string scopes = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. This is the web page on your service which describes the + // permissions the user is granting to Google. + // Only set if using OAuth and Google Sign In. + // Make sure to provide a Terms of Service in the directory information in + // LocalizedSettings.terms_of_service_url section if specifying this field. + string learn_more_url = 8 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, allow Google to transmit client ID and secret via HTTP + // basic auth header. Otherwise, Google uses the client ID and secret inside + // the post body. + // Only set when using OAuth. + // Make sure to provide a Terms of Service in the directory information in + // LocalizedSettings.terms_of_service_url section if specifying this field. + bool use_basic_auth_header = 9 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/account_linking_secret.proto b/google/actions/sdk/v2/account_linking_secret.proto new file mode 100644 index 00000000..d0162412 --- /dev/null +++ b/google/actions/sdk/v2/account_linking_secret.proto @@ -0,0 +1,35 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "AccountLinkingSecretProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Information about the encrypted OAuth client secret used in account linking +// flows (for AUTH_CODE grant type). +message AccountLinkingSecret { + // Encrypted account linking client secret ciphertext. + bytes encrypted_client_secret = 1; + + // The version of the crypto key used to encrypt the account linking client + // secret. + // Note that this field is ignored in push, preview, and version creation + // flows. + string encryption_key_version = 2; +} diff --git a/google/actions/sdk/v2/action.proto b/google/actions/sdk/v2/action.proto new file mode 100644 index 00000000..99ebb115 --- /dev/null +++ b/google/actions/sdk/v2/action.proto @@ -0,0 +1,103 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ActionProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Represents the list of Actions defined in a project. +message Actions { + // Defines the engagement mechanisms associated with this action. This + // allows end users to subscribe to push notification and daily update. + message Engagement { + // Defines push notification settings that this engagement supports. + message PushNotification { + + } + + // Defines daily update settings that this engagement supports. + message DailyUpdate { + + } + + // Indicates whether sharing links is enabled for this action and the + // corresponding settings. Action links are used to deep link a user into a + // specific action. + // ActionLink is deprecated. Use AssistantLink instead. + message ActionLink { + option deprecated = true; + + // User friendly display title for the link. + string title = 1; + } + + // Indicates whether sharing links is enabled for this action and the + // corresponding settings. Assistant links are used to deep link a user into + // a specific action. + message AssistantLink { + // User friendly display title for the link. + string title = 1; + } + + // The title of the engagement that will be sent to end users asking for + // their permission to receive updates. The prompt sent to end users for + // daily updates will look like "What time would you like me to send your + // daily {title}" and for push notifications will look like + // "Is it ok if I send push notifications for {title}". + // **This field is localizable.** + string title = 1; + + // Push notification settings that this engagement supports. + PushNotification push_notification = 2; + + // Recurring update settings that this engagement supports. + oneof recurring_update { + // Daily update settings that this engagement supports. + DailyUpdate daily_update = 3; + } + + // Link config for an action which determines whether sharing links is + // enabled for the action and if so, contains the user friendly display name + // for the link. + // ActionLink is deprecated. Use AssistantLink instead. + ActionLink action_link = 4 [deprecated = true]; + + // Link config for an action which determines whether sharing links is + // enabled for the action and if so, contains the user friendly display name + // for the link. + AssistantLink assistant_link = 6; + } + + // Details regarding a custom action. + message CustomAction { + // Engagement mechanisms associated with the action to help end users + // subscribe to push notifications and daily updates. + // Note that the intent name specified in daily updates/push notifications + // slot config needs to match the intent corresponding to this action for + // end users to subscribe to these updates. + Engagement engagement = 2; + } + + // Map from intents to custom Actions to configure invocation for the project. + // The invocation intents could either be system or custom intents defined + // in the "custom/intents/" package. All intents defined here (system + // intents & custom intents) must have a corresponding intent file in the + // "custom/global/" package. + map custom = 3; +} diff --git a/google/actions/sdk/v2/actions_gapic.yaml b/google/actions/sdk/v2/actions_gapic.yaml new file mode 100644 index 00000000..d63eedf6 --- /dev/null +++ b/google/actions/sdk/v2/actions_gapic.yaml @@ -0,0 +1,6 @@ +type: com.google.api.codegen.ConfigProto +config_schema_version: 2.0.0 +language_settings: + nodejs: + package_name: actions.sdk.v2 + domain_layer_location: assistant diff --git a/google/actions/sdk/v2/actions_grpc_service_config.json b/google/actions/sdk/v2/actions_grpc_service_config.json new file mode 100644 index 00000000..e78d2dbe --- /dev/null +++ b/google/actions/sdk/v2/actions_grpc_service_config.json @@ -0,0 +1,16 @@ +{ + "methodConfig": [{ + "name": [{ "service": "google.actions.sdk.v2.ActionsSdk" }], + "timeout": "60s" + }, + { + "name": [ + { "service": "google.actions.sdk.v2.ActionsSdk", "method": "WritePreview" } + ], + "timeout": "180s" + }, + { + "name": [{ "service": "google.actions.sdk.v2.ActionsTesting" }], + "timeout": "60s" + }] +} diff --git a/google/actions/sdk/v2/actions_sdk.proto b/google/actions/sdk/v2/actions_sdk.proto new file mode 100644 index 00000000..edbda450 --- /dev/null +++ b/google/actions/sdk/v2/actions_sdk.proto @@ -0,0 +1,118 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/account_linking_secret.proto"; +import "google/actions/sdk/v2/files.proto"; +import "google/actions/sdk/v2/validation_results.proto"; +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/wrappers.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ActionsSdkProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Actions SDK API which allows developers to build projects using the SDK. +service ActionsSdk { + option (google.api.default_host) = "actions.googleapis.com"; + + // Updates the user's project preview based on the model. + rpc WritePreview(stream WritePreviewRequest) returns (Preview) { + option (google.api.http) = { + post: "/v2/{parent=projects/*}/preview:write" + body: "*" + }; + } +} + +// Streaming RPC request for WritePreview. +message WritePreviewRequest { + // Indicates the preview content will be coming from the Draft. + message ContentFromDraft { + + } + + // Indicates the preview content will be coming from an exiting version. + message ContentFromSubmittedVersion { + // Required. Submitted version of the project to be used to create a preview. + // Format: `projects/{project}/versions/{version}` + string version = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "actions.googleapis.com/Version" + } + ]; + } + + // Settings for updating the preview. + message PreviewSettings { + // Indicates whether or not to run certain operations, such as transactions, + // in sandbox mode. By default, preview requests run these operations in + // sandbox mode. In other words, the default value for `sandbox` is `true`. + google.protobuf.BoolValue sandbox = 1; + } + + // Required. The parent resource name in the format `projects/{project}`. The + // `{project}` is the cloud project ID associated with the project. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "actions.googleapis.com/Preview" + } + ]; + + // Data source used to created the preview. + oneof source { + // List of files sent to the server at a time. This is a list of config + // files or data files. + // 1. The first request must be a ConfigFiles. + // 2. The first request must have a ConfigFile with 'settings'. + // 3. The first request must have a ConfigFile with 'manifest'. + Files files = 5; + + // Content sourced from the project draft. + ContentFromDraft draft = 6; + + // Content sourced from the an exiting version. + ContentFromSubmittedVersion submitted_version = 7; + } + + // Required. The settings for updating the user's preview. + PreviewSettings preview_settings = 4 [(google.api.field_behavior) = REQUIRED]; +} + +// Definition of preview resource. +message Preview { + option (google.api.resource) = { + type: "actions.googleapis.com/Preview" + pattern: "projects/{project}/previews/{preview}" + }; + + // The unique identifier of the preview. + // Format: `projects/{project}/preview` + string name = 1; + + // Validation results associated with the user project preview content. + ValidationResults validation_results = 2; + + // The simulator URL to test the user preview. + string simulator_url = 3; +} diff --git a/google/actions/sdk/v2/actions_testing.proto b/google/actions/sdk/v2/actions_testing.proto new file mode 100644 index 00000000..9de13ea0 --- /dev/null +++ b/google/actions/sdk/v2/actions_testing.proto @@ -0,0 +1,256 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/conversation/intent.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/canvas.proto"; +import "google/actions/sdk/v2/conversation/prompt/prompt.proto"; +import "google/actions/sdk/v2/event_logs.proto"; +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/protobuf/empty.proto"; +import "google/type/latlng.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ActionsTestingProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Actions Testing API which allows developers to run automated tests. +service ActionsTesting { + option (google.api.default_host) = "actions.googleapis.com"; + + // Plays one round of the conversation. + rpc SendInteraction(SendInteractionRequest) returns (SendInteractionResponse) { + option (google.api.http) = { + post: "/v2/{project=projects/*}:sendInteraction" + body: "*" + }; + } + + // Finds the intents that match a given query. + rpc MatchIntents(MatchIntentsRequest) returns (MatchIntentsResponse) { + option (google.api.http) = { + post: "/v2/{project=projects/*}:matchIntents" + body: "*" + }; + option (google.api.method_signature) = "project,query,locale"; + } + + // Sets the Web & App Activity control on a service account. + // + // It is necessary to have this setting enabled in order to use call Actions. + // The setting is originally disabled for service accounts, and it is + // preserved until set to a different value. This means it only needs to be + // enabled once per account (and not necessarily once per test), unless it is + // later disabled. + // + // Returns an error if the caller is not a service account. User accounts can + // change this setting via the Activity Controls page. See + // https://support.google.com/websearch/answer/54068. + rpc SetWebAndAppActivityControl(SetWebAndAppActivityControlRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v2:setWebAndAppActivityControl" + body: "*" + }; + option (google.api.method_signature) = "enabled"; + } +} + +// Request for playing a round of the conversation. +message SendInteractionRequest { + // Required. The project being tested, indicated by the Project ID. + // Format: projects/{project} + string project = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Input provided by the user. + UserInput input = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. Properties of the device used for interacting with the Action. + DeviceProperties device_properties = 3 [(google.api.field_behavior) = REQUIRED]; + + // Opaque token that must be passed as received from SendInteractionResponse + // on the previous interaction. This can be left unset in order to start a new + // conversation, either as the first interaction of a testing session or to + // abandon a previous conversation and start a new one. + string conversation_token = 4; +} + +// User input provided on a conversation round. +message UserInput { + // Indicates the input source, typed query or voice query. + enum InputType { + // Unspecified input source. + INPUT_TYPE_UNSPECIFIED = 0; + + // Query from a GUI interaction. + TOUCH = 1; + + // Voice query. + VOICE = 2; + + // Typed query. + KEYBOARD = 3; + + // The action was triggered by a URL link. + URL = 4; + } + + // Content of the input sent by the user. + string query = 1; + + // Type of the input. + InputType type = 2; +} + +// Properties of device relevant to a conversation round. +message DeviceProperties { + // Possible surfaces used to interact with the Action. + // Additional values may be included in the future. + enum Surface { + // Default value. This value is unused. + SURFACE_UNSPECIFIED = 0; + + // Speaker (e.g. Google Home). + SPEAKER = 1; + + // Phone. + PHONE = 2; + + // Allo Chat. + ALLO = 3; + + // Smart Display Device. + SMART_DISPLAY = 4; + + // KaiOS. + KAI_OS = 5; + } + + // Surface used for interacting with the Action. + Surface surface = 1; + + // Device location such as latitude, longitude, and formatted address. + Location location = 2; + + // Locale as set on the device. + // The format should follow BCP 47: https://tools.ietf.org/html/bcp47 + // Examples: en, en-US, es-419 (more examples at + // https://tools.ietf.org/html/bcp47#appendix-A). + string locale = 3; + + // Time zone as set on the device. + // The format should follow the IANA Time Zone Database, e.g. + // "America/New_York": https://www.iana.org/time-zones + string time_zone = 4; +} + +// Container that represents a location. +message Location { + // Geo coordinates. + // Requires the [DEVICE_PRECISE_LOCATION] + // [google.actions.v2.Permission.DEVICE_PRECISE_LOCATION] permission. + google.type.LatLng coordinates = 1; + + // Display address, e.g., "1600 Amphitheatre Pkwy, Mountain View, CA 94043". + // Requires the [DEVICE_PRECISE_LOCATION] + // [google.actions.v2.Permission.DEVICE_PRECISE_LOCATION] permission. + string formatted_address = 2; + + // Zip code. + // Requires the [DEVICE_PRECISE_LOCATION] + // [google.actions.v2.Permission.DEVICE_PRECISE_LOCATION] or + // [DEVICE_COARSE_LOCATION] + // [google.actions.v2.Permission.DEVICE_COARSE_LOCATION] permission. + string zip_code = 3; + + // City. + // Requires the [DEVICE_PRECISE_LOCATION] + // [google.actions.v2.Permission.DEVICE_PRECISE_LOCATION] or + // [DEVICE_COARSE_LOCATION] + // [google.actions.v2.Permission.DEVICE_COARSE_LOCATION] permission. + string city = 4; +} + +// Response to a round of the conversation. +message SendInteractionResponse { + // Output provided to the user. + Output output = 1; + + // Diagnostics information that explains how the request was handled. + Diagnostics diagnostics = 2; + + // Opaque token to be set on SendInteractionRequest on the next RPC call in + // order to continue the same conversation. + string conversation_token = 3; +} + +// User-visible output to the conversation round. +message Output { + // Spoken response sent to user as a plain string. + string text = 1; + + // Speech content produced by the Action. This may include markup elements + // such as SSML. + repeated string speech = 2; + + // Interactive Canvas content. + google.actions.sdk.v2.conversation.Canvas canvas = 3; + + // State of the prompt at the end of the conversation round. + // More information about the prompt: + // https://developers.google.com/assistant/conversational/prompts + google.actions.sdk.v2.conversation.Prompt actions_builder_prompt = 4; +} + +// Diagnostics information related to the conversation round. +message Diagnostics { + // List of events with details about processing of the conversation round + // throughout the stages of the Actions Builder interaction model. + // Populated for Actions Builder & Actions SDK apps only. + repeated ExecutionEvent actions_builder_events = 1; +} + +// Request for finding matching intents. +message MatchIntentsRequest { + // Required. The project being tested, indicated by the Project ID. + // Format: projects/{project} + string project = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. User query as plain text. + string query = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. Locale to use to evaluate the query, such as "en". + // The format should follow BCP 47: https://tools.ietf.org/html/bcp47 + // See the list of supported languages in + // https://developers.google.com/assistant/console/languages-locales + string locale = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for finding matching intents. +message MatchIntentsResponse { + // Intents matched, ordered from most to least relevant. Only the first + // 50 matches are returned. + repeated google.actions.sdk.v2.conversation.Intent matched_intents = 1; +} + +// Request for setting Web & App Activity preferences. +message SetWebAndAppActivityControlRequest { + // Whether the setting should be set to an enabled or disabled state. + bool enabled = 1; +} diff --git a/google/actions/sdk/v2/actions_v2.yaml b/google/actions/sdk/v2/actions_v2.yaml new file mode 100644 index 00000000..094f8b42 --- /dev/null +++ b/google/actions/sdk/v2/actions_v2.yaml @@ -0,0 +1,11 @@ +type: google.api.Service +config_version: 3 +name: actions.googleapis.com +title: Actions API + +apis: +- name: google.actions.sdk.v2.ActionsSdk +- name: google.actions.sdk.v2.ActionsTesting + +documentation: + summary: A RESTful service for the Actions API. diff --git a/google/actions/sdk/v2/config_file.proto b/google/actions/sdk/v2/config_file.proto new file mode 100644 index 00000000..6e2beac0 --- /dev/null +++ b/google/actions/sdk/v2/config_file.proto @@ -0,0 +1,107 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/account_linking_secret.proto"; +import "google/actions/sdk/v2/action.proto"; +import "google/actions/sdk/v2/interactionmodel/global_intent_event.proto"; +import "google/actions/sdk/v2/interactionmodel/intent.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/static_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/scene.proto"; +import "google/actions/sdk/v2/interactionmodel/type/type.proto"; +import "google/actions/sdk/v2/manifest.proto"; +import "google/actions/sdk/v2/settings.proto"; +import "google/actions/sdk/v2/webhook.proto"; +import "google/protobuf/struct.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ConfigFileProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Wrapper for repeated config files. Repeated fields cannot exist in a oneof. +message ConfigFiles { + // Multiple config files. + repeated ConfigFile config_files = 1; +} + +// Represents a single file which contains structured data. Developers can +// define most of their project using structured config including Actions, +// Settings, Fulfillment. +message ConfigFile { + // Relative path of the config file from the project root in the SDK file + // structure. Each file types below have an allowed file path. + // Eg: settings/settings.yaml + string file_path = 1; + + // Each type of config file should have a corresponding field in the oneof. + oneof file { + // Single manifest file. + // Allowed file path: `manifest.yaml` + Manifest manifest = 2; + + // Single actions file with all the actions defined. + // Allowed file paths: `actions/{language}?/actions.yaml` + Actions actions = 3; + + // Single settings config which includes non-localizable settings and + // settings for the project's default locale (if specified). + // For a locale override file, only localized_settings field will be + // populated. + // Allowed file paths: `settings/{language}?/settings.yaml` + // Note that the non-localized settings file `settings/settings.yaml` must + // be present in the write flow requests. + Settings settings = 4; + + // Single webhook definition. + // Allowed file path: `webhooks/{WebhookName}.yaml` + Webhook webhook = 6; + + // Single intent definition. + // Allowed file paths: `custom/intents/{language}?/{IntentName}.yaml` + google.actions.sdk.v2.interactionmodel.Intent intent = 7; + + // Single type definition. + // Allowed file paths: `custom/types/{language}?/{TypeName}.yaml` + google.actions.sdk.v2.interactionmodel.type.Type type = 8; + + // Single global intent event definition. + // Allowed file paths: `custom/global/{GlobalIntentEventName}.yaml` + // The file name (GlobalIntentEventName) should be the name of the intent + // that this global intent event corresponds to. + google.actions.sdk.v2.interactionmodel.GlobalIntentEvent global_intent_event = 9; + + // Single scene definition. + // Allowed file paths: `custom/scenes/{SceneName}.yaml` + google.actions.sdk.v2.interactionmodel.Scene scene = 10; + + // Single static prompt definition. + // Allowed file paths: `custom/prompts/{language}?/{StaticPromptName}.yaml` + google.actions.sdk.v2.interactionmodel.prompt.StaticPrompt static_prompt = 11; + + // Metadata corresponding to the client secret used in account linking. + // Allowed file path: `settings/accountLinkingSecret.yaml` + AccountLinkingSecret account_linking_secret = 13; + + // Single resource bundle, which is a map from a string to a string or list + // of strings. Resource bundles could be used for localizing strings in + // static prompts. + // Allowed file paths: `resources/strings/{language}?/{multiple + // directories}?/{BundleName}.yaml` + google.protobuf.Struct resource_bundle = 12; + } +} diff --git a/google/actions/sdk/v2/conversation/BUILD.bazel b/google/actions/sdk/v2/conversation/BUILD.bazel new file mode 100644 index 00000000..56560f2a --- /dev/null +++ b/google/actions/sdk/v2/conversation/BUILD.bazel @@ -0,0 +1,30 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "conversation_proto", + srcs = [ + "intent.proto", + "scene.proto", + ], + deps = [ + "//google/actions/sdk/v2/conversation/prompt:prompt_proto", + "@com_google_protobuf//:struct_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/conversation/intent.proto b/google/actions/sdk/v2/conversation/intent.proto new file mode 100644 index 00000000..e2e8bec0 --- /dev/null +++ b/google/actions/sdk/v2/conversation/intent.proto @@ -0,0 +1,52 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/protobuf/struct.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "IntentProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Represents an intent. +message Intent { + // Required. The name of the last matched intent. + string name = 1; + + // Required. Represents parameters identified as part of intent matching. + // This is a map of the name of the identified parameter to the value of the + // parameter identified from user input. All parameters defined in + // the matched intent that are identified will be surfaced here. + map params = 2; + + // Optional. Typed or spoken input from the end user that matched this intent. + // This will be populated when an intent is matched, based on the user input. + string query = 3; +} + +// Represents a value for intent parameter. +message IntentParameterValue { + // Required. Original text value extracted from user utterance. + string original = 1; + + // Required. Structured value for parameter extracted from user input. + // This will only be populated if the parameter is defined in the matched + // intent and the value of the parameter could be identified during intent + // matching. + google.protobuf.Value resolved = 2; +} diff --git a/google/actions/sdk/v2/conversation/prompt/BUILD.bazel b/google/actions/sdk/v2/conversation/prompt/BUILD.bazel new file mode 100644 index 00000000..bbc997a4 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/BUILD.bazel @@ -0,0 +1,30 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "prompt_proto", + srcs = [ + "prompt.proto", + "simple.proto", + "suggestion.proto", + ], + deps = [ + "//google/actions/sdk/v2/conversation/prompt/content:content_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/conversation/prompt/content/BUILD.bazel b/google/actions/sdk/v2/conversation/prompt/content/BUILD.bazel new file mode 100644 index 00000000..3dc71777 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/BUILD.bazel @@ -0,0 +1,37 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "content_proto", + srcs = [ + "canvas.proto", + "card.proto", + "collection.proto", + "content.proto", + "image.proto", + "link.proto", + "list.proto", + "media.proto", + "table.proto", + ], + deps = [ + "@com_google_protobuf//:duration_proto", + "@com_google_protobuf//:struct_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/conversation/prompt/content/canvas.proto b/google/actions/sdk/v2/conversation/prompt/content/canvas.proto new file mode 100644 index 00000000..ca1f8c03 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/canvas.proto @@ -0,0 +1,44 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/protobuf/struct.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "CanvasProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Represents an Interactive Canvas response to be sent to the user. +// This can be used in conjunction with the "first_simple" field in the +// containing prompt to speak to the user in addition to displaying a +// interactive canvas response. The maximum size of the response is 50k bytes. +message Canvas { + // URL of the interactive canvas web app to load. If not set, the url from + // current active canvas will be reused. + string url = 1; + + // Optional. JSON data to be passed through to the immersive experience + // web page as an event. + // If the "override" field in the containing prompt is "false" data values + // defined in this Canvas prompt will be added after data values defined in + // previous Canvas prompts. + repeated google.protobuf.Value data = 4; + + // Optional. Default value: false. + bool suppress_mic = 3; +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/card.proto b/google/actions/sdk/v2/conversation/prompt/content/card.proto new file mode 100644 index 00000000..df4ce0e5 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/card.proto @@ -0,0 +1,51 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/content/image.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/link.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "CardProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// A basic card for displaying some information, e.g. an image and/or text. +message Card { + // Overall title of the card. + // Optional. + string title = 1; + + // Optional. + string subtitle = 2; + + // Body text of the card. + // Supports a limited set of markdown syntax for formatting. + // Required, unless image is present. + string text = 3; + + // A hero image for the card. The height is fixed to 192dp. + // Optional. + Image image = 4; + + // How the image background will be filled. Optional. + Image.ImageFill image_fill = 5; + + // Button. + // Optional. + Link button = 6; +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/collection.proto b/google/actions/sdk/v2/conversation/prompt/content/collection.proto new file mode 100644 index 00000000..8666fced --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/collection.proto @@ -0,0 +1,46 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/content/image.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "CollectionProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// A card for presenting a collection of options to select from. +message Collection { + // An item in the collection + message CollectionItem { + // Required. The NLU key that matches the entry key name in the associated + // Type. + string key = 1; + } + + // Title of the collection. Optional. + string title = 1; + + // Subtitle of the collection. Optional. + string subtitle = 2; + + // min: 2 max: 10 + repeated CollectionItem items = 3; + + // How the image backgrounds of collection items will be filled. Optional. + Image.ImageFill image_fill = 4; +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/content.proto b/google/actions/sdk/v2/conversation/prompt/content/content.proto new file mode 100644 index 00000000..4eeeb0a6 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/content.proto @@ -0,0 +1,57 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/content/canvas.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/card.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/collection.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/image.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/list.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/media.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/table.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "ContentProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Content to be shown. +message Content { + // Content. + oneof content { + // A basic card. + Card card = 1; + + // An image. + Image image = 2; + + // Table card. + Table table = 3; + + // Response indicating a set of media to be played. + Media media = 4; + + // A response to be used for interactive canvas experience. + Canvas canvas = 5 [deprecated = true]; + + // A card presenting a collection of options to select from. + Collection collection = 6; + + // A card presenting a list of options to select from. + List list = 7; + } +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/image.proto b/google/actions/sdk/v2/conversation/prompt/content/image.proto new file mode 100644 index 00000000..1ede5d4f --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/image.proto @@ -0,0 +1,64 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "ImageProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// An image displayed in the card. +message Image { + // Possible image display options for affecting the presentation of the image. + // This should be used for when the image's aspect ratio does not match the + // image container's aspect ratio. + enum ImageFill { + // Unspecified image fill. + UNSPECIFIED = 0; + + // Fill the gaps between the image and the image container with gray bars. + GRAY = 1; + + // Fill the gaps between the image and the image container with white bars. + WHITE = 2; + + // Image is scaled such that the image width and height match or exceed the + // container dimensions. This may crop the top and bottom of the image if + // the scaled image height is greater than the container height, or crop the + // left and right of the image if the scaled image width is greater than the + // container width. This is similar to "Zoom Mode" on a widescreen TV when + // playing a 4:3 video. + CROPPED = 3; + } + + // The source url of the image. Images can be JPG, PNG and GIF (animated and + // non-animated). For example,`https://www.agentx.com/logo.png`. Required. + string url = 1; + + // A text description of the image to be used for accessibility, e.g. screen + // readers. + // Required. + string alt = 2; + + // The height of the image in pixels. + // Optional. + int32 height = 3; + + // The width of the image in pixels. + // Optional. + int32 width = 4; +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/link.proto b/google/actions/sdk/v2/conversation/prompt/content/link.proto new file mode 100644 index 00000000..a3efc812 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/link.proto @@ -0,0 +1,51 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "LinkProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Link content. +message Link { + // Name of the link + string name = 1; + + // What happens when a user opens the link + OpenUrl open = 2; +} + +// Action taken when a user opens a link. +message OpenUrl { + // The url field which could be any of: + // - http/https urls for opening an App-linked App or a webpage + string url = 1; + + // Indicates a hint for the url type. + UrlHint hint = 2; +} + +// Different types of url hints. +enum UrlHint { + // Unspecified + LINK_UNSPECIFIED = 0; + + // URL that points directly to AMP content, or to a canonical URL + // which refers to AMP content via . + AMP = 1; +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/list.proto b/google/actions/sdk/v2/conversation/prompt/content/list.proto new file mode 100644 index 00000000..901dd107 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/list.proto @@ -0,0 +1,41 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "ListProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// A card for presenting a list of options to select from. +message List { + // An item in the list + message ListItem { + // Required. The NLU key that matches the entry key name in the associated + // Type. + string key = 1; + } + + // Title of the list. Optional. + string title = 1; + + // Subtitle of the list. Optional. + string subtitle = 2; + + // min: 2 max: 30 + repeated ListItem items = 3; +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/media.proto b/google/actions/sdk/v2/conversation/prompt/content/media.proto new file mode 100644 index 00000000..49e3d26d --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/media.proto @@ -0,0 +1,97 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/content/image.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "MediaProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Represents one media object. +// Contains information about the media, such as name, description, url, etc. +message Media { + // Media type of this response. + enum MediaType { + // Unspecified media type. + MEDIA_TYPE_UNSPECIFIED = 0; + + // Audio file. + AUDIO = 1; + + // Response to acknowledge a media status report. + MEDIA_STATUS_ACK = 2; + } + + // Optional media control types the media response can support + enum OptionalMediaControls { + // Unspecified value + OPTIONAL_MEDIA_CONTROLS_UNSPECIFIED = 0; + + // Paused event. Triggered when user pauses the media. + PAUSED = 1; + + // Stopped event. Triggered when user exits out of 3p session during media + // play. + STOPPED = 2; + } + + // Media type. + MediaType media_type = 8; + + // Start offset of the first media object. + google.protobuf.Duration start_offset = 5; + + // Optional media control types this media response session can support. + // If set, request will be made to 3p when a certain media event happens. + // If not set, 3p must still handle two default control type, FINISHED and + // FAILED. + repeated OptionalMediaControls optional_media_controls = 6; + + // List of Media Objects + repeated MediaObject media_objects = 7; +} + +// Represents a single media object +message MediaObject { + // Name of this media object. + string name = 1; + + // Description of this media object. + string description = 2; + + // The url pointing to the media content. + string url = 3; + + // Image to show with the media card. + MediaImage image = 4; +} + +// Image to show with the media card. +message MediaImage { + // Image. + oneof image { + // A large image, such as the cover of the album, etc. + Image large = 1; + + // A small image icon displayed on the right from the title. + // It's resized to 36x36 dp. + Image icon = 2; + } +} diff --git a/google/actions/sdk/v2/conversation/prompt/content/table.proto b/google/actions/sdk/v2/conversation/prompt/content/table.proto new file mode 100644 index 00000000..8e07efbc --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/content/table.proto @@ -0,0 +1,92 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/content/image.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/link.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "TableProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// A table card for displaying a table of text. +message Table { + // Overall title of the table. Optional but must be set if subtitle is set. + string title = 1; + + // Subtitle for the table. Optional. + string subtitle = 2; + + // Image associated with the table. Optional. + Image image = 4; + + // Headers and alignment of columns. + repeated TableColumn columns = 5; + + // Row data of the table. The first 3 rows are guaranteed to be shown but + // others might be cut on certain surfaces. Please test with the simulator to + // see which rows will be shown for a given surface. On surfaces that support + // the WEB_BROWSER capability, you can point the user to + // a web page with more data. + repeated TableRow rows = 6; + + // Button. + Link button = 7; +} + +// Describes a column in a table. +message TableColumn { + // The alignment of the content within the cell. + enum HorizontalAlignment { + // Unspecified horizontal alignment. + UNSPECIFIED = 0; + + // Leading edge of the cell. This is the default. + LEADING = 1; + + // Content is aligned to the center of the column. + CENTER = 2; + + // Content is aligned to the trailing edge of the column. + TRAILING = 3; + } + + // Header text for the column. + string header = 1; + + // Horizontal alignment of content w.r.t column. If unspecified, content + // will be aligned to the leading edge. + HorizontalAlignment align = 2; +} + +// Describes a cell in a row. +message TableCell { + // Text content of the cell. + string text = 1; +} + +// Describes a row in the table. +message TableRow { + // Cells in this row. The first 3 cells are guaranteed to be shown but + // others might be cut on certain surfaces. Please test with the simulator + // to see which cells will be shown for a given surface. + repeated TableCell cells = 1; + + // Indicates whether there should be a divider after each row. + bool divider = 2; +} diff --git a/google/actions/sdk/v2/conversation/prompt/prompt.proto b/google/actions/sdk/v2/conversation/prompt/prompt.proto new file mode 100644 index 00000000..a3ce25ac --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/prompt.proto @@ -0,0 +1,81 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/content/canvas.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/content.proto"; +import "google/actions/sdk/v2/conversation/prompt/content/link.proto"; +import "google/actions/sdk/v2/conversation/prompt/simple.proto"; +import "google/actions/sdk/v2/conversation/prompt/suggestion.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "PromptProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Represent a response to a user. +message Prompt { + // Optional. Mode for how this messages should be merged with previously + // defined messages. + // "false" will clear all previously defined messages (first and last + // simple, content, suggestions link and canvas) and add messages defined in + // this prompt. + // "true" will add messages defined in this prompt to messages defined in + // previous responses. Setting this field to "true" will also enable appending + // to some fields inside Simple prompts, the Suggestion prompt and the Canvas + // prompt (part of the Content prompt). The Content and Link messages will + // always be overwritten if defined in the prompt. + // Default value is "false". + bool append = 1 [deprecated = true]; + + // Optional. Mode for how this messages should be merged with previously + // defined messages. + // "true" clears all previously defined messages (first and last + // simple, content, suggestions link and canvas) and adds messages defined in + // this prompt. + // "false" adds messages defined in this prompt to messages defined in + // previous responses. Leaving this field to "false" also enables + // appending to some fields inside Simple prompts, the Suggestions prompt, + // and the Canvas prompt (part of the Content prompt). The Content and Link + // messages are always overwritten if defined in the prompt. Default + // value is "false". + bool override = 8; + + // Optional. The first voice and text-only response. + Simple first_simple = 2; + + // Optional. A content like a card, list or media to display to the user. + Content content = 3; + + // Optional. The last voice and text-only response. + Simple last_simple = 4; + + // Optional. Suggestions to be displayed to the user which will always appear + // at the end of the response. + // If the "override" field in the containing prompt is "false", the titles + // defined in this field will be added to titles defined in any previously + // defined suggestions prompts and duplicate values will be removed. + repeated Suggestion suggestions = 5; + + // Optional. An additional suggestion chip that can link out to the associated app + // or site. + // The chip will be rendered with the title "Open ". Max 20 chars. + Link link = 6; + + // Optional. Represents a Interactive Canvas response to be sent to the user. + Canvas canvas = 9; +} diff --git a/google/actions/sdk/v2/conversation/prompt/simple.proto b/google/actions/sdk/v2/conversation/prompt/simple.proto new file mode 100644 index 00000000..4feda060 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/simple.proto @@ -0,0 +1,38 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "SimpleProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Represents a simple prompt to be send to a user. +message Simple { + // Optional. Represents the speech to be spoken to the user. Can be SSML or + // text to speech. + // If the "override" field in the containing prompt is "true", the speech + // defined in this field replaces the previous Simple prompt's speech. + string speech = 1; + + // Optional text to display in the chat bubble. If not given, a display + // rendering of the speech field above will be used. Limited to 640 + // chars. + // If the "override" field in the containing prompt is "true", the text + // defined in this field replaces to the previous Simple prompt's text. + string text = 2; +} diff --git a/google/actions/sdk/v2/conversation/prompt/suggestion.proto b/google/actions/sdk/v2/conversation/prompt/suggestion.proto new file mode 100644 index 00000000..228c3998 --- /dev/null +++ b/google/actions/sdk/v2/conversation/prompt/suggestion.proto @@ -0,0 +1,31 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "SuggestionProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Input suggestion to be presented to the user. +message Suggestion { + // Required. The text shown in the suggestion chip. When tapped, this text will be + // posted back to the conversation verbatim as if the user had typed it. + // Each title must be unique among the set of suggestion chips. + // Max 25 chars + string title = 1; +} diff --git a/google/actions/sdk/v2/conversation/scene.proto b/google/actions/sdk/v2/conversation/scene.proto new file mode 100644 index 00000000..c042eba7 --- /dev/null +++ b/google/actions/sdk/v2/conversation/scene.proto @@ -0,0 +1,92 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.conversation; + +import "google/actions/sdk/v2/conversation/prompt/prompt.proto"; +import "google/protobuf/struct.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/conversation;conversation"; +option java_multiple_files = true; +option java_outer_classname = "SceneProto"; +option java_package = "com.google.actions.sdk.v2.conversation"; + +// Represents the current status of slot filling. +enum SlotFillingStatus { + // Fallback value when the usage field is not populated. + UNSPECIFIED = 0; + + // The slots have been initialized but slot filling has not started. + INITIALIZED = 1; + + // The slot values are being collected. + COLLECTING = 2; + + // All slot values are final and cannot be changed. + FINAL = 4; +} + +// Represents a slot. +message Slot { + // Represents the mode of a slot, that is, if it is required or not. + enum SlotMode { + // Fallback value when the usage field is not populated. + MODE_UNSPECIFIED = 0; + + // Indicates that the slot is not required to complete slot filling. + OPTIONAL = 1; + + // Indicates that the slot is required to complete slot filling. + REQUIRED = 2; + } + + // Represents the status of a slot. + enum SlotStatus { + // Fallback value when the usage field is not populated. + SLOT_UNSPECIFIED = 0; + + // Indicates that the slot does not have any values. This status cannot be + // modified through the response. + EMPTY = 1; + + // Indicates that the slot value is invalid. This status can be set + // through the response. + INVALID = 2; + + // Indicates that the slot has a value. This status cannot be modified + // through the response. + FILLED = 3; + } + + // The mode of the slot (required or optional). Can be set by developer. + SlotMode mode = 1; + + // The status of the slot. + SlotStatus status = 2; + + // The value of the slot. Changing this value in the response, will + // modify the value in slot filling. + google.protobuf.Value value = 3; + + // Indicates if the slot value was collected on the last turn. + // This field is read-only. + bool updated = 4; + + // Optional. This prompt is sent to the user when needed to fill a required + // slot. This prompt overrides the existing prompt defined in the console. + // This field is not included in the webhook request. + Prompt prompt = 5; +} diff --git a/google/actions/sdk/v2/data_file.proto b/google/actions/sdk/v2/data_file.proto new file mode 100644 index 00000000..5617bd2b --- /dev/null +++ b/google/actions/sdk/v2/data_file.proto @@ -0,0 +1,59 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "DataFileProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Wrapper for repeated data file. Repeated fields cannot exist in a oneof. +message DataFiles { + // Multiple data files. + repeated DataFile data_files = 1; +} + +// Represents a single file which contains unstructured data. Examples include +// image files, audio files, and cloud function source code. +message DataFile { + // Relative path of the data file from the project root in the SDK file + // structure. + // Allowed file paths: + // - Images: `resources/images/{multiple + // directories}?/{ImageName}.{extension}` + // - Audio: `resources/audio/{multiple + // directories}?/{AudioFileName}.{extension}` + // - Inline Cloud Function Code: `webhooks/{WebhookName}.zip` + // Allowed extensions: + // - Images: `png`, `jpg`, `jpeg` + // - Audio: `mp3`, `mpeg` + // - Inline Cloud Functions: `zip` + string file_path = 1; + + // Required. The content type of this asset. Example: `text/html`. The content + // type must comply with the specification + // (http://www.w3.org/Protocols/rfc1341/4_Content-Type.html). + // Cloud functions must be in zip format and the content type should + // be `application/zip;zip_type=cloud_function`. The zip_type parameter + // indicates that the zip is for a cloud function. + string content_type = 2; + + // Content of the data file. Examples would be raw bytes of images, audio + // files, or cloud function zip format. + // There is 10 MB strict limit on the payload size. + bytes payload = 3; +} diff --git a/google/actions/sdk/v2/event_logs.proto b/google/actions/sdk/v2/event_logs.proto new file mode 100644 index 00000000..33e002ff --- /dev/null +++ b/google/actions/sdk/v2/event_logs.proto @@ -0,0 +1,246 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/conversation/intent.proto"; +import "google/actions/sdk/v2/conversation/prompt/prompt.proto"; +import "google/actions/sdk/v2/conversation/scene.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "EventLogsProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Contains information about execution event which happened during processing +// Actions Builder conversation request. For an overview of the stages involved +// in a conversation request, see +// https://developers.google.com/assistant/conversational/actions. +message ExecutionEvent { + // Timestamp when the event happened. + google.protobuf.Timestamp event_time = 1; + + // State of the execution during this event. + ExecutionState execution_state = 2; + + // Resulting status of particular execution step. + google.rpc.Status status = 3; + + // Detailed information specific to different of events that may be involved + // in processing a conversation round. The field set here defines the type of + // this event. + oneof EventData { + // User input handling event. + UserConversationInput user_input = 4; + + // Intent matching event. + IntentMatch intent_match = 5; + + // Condition evaluation event. + ConditionsEvaluated conditions_evaluated = 6; + + // OnSceneEnter execution event. + OnSceneEnter on_scene_enter = 7; + + // Webhook request dispatch event. + WebhookRequest webhook_request = 8; + + // Webhook response receipt event. + WebhookResponse webhook_response = 9; + + // Webhook-initiated transition event. + WebhookInitiatedTransition webhook_initiated_transition = 10; + + // Slot matching event. + SlotMatch slot_match = 11; + + // Slot requesting event. + SlotRequested slot_requested = 12; + + // Slot validation event. + SlotValidated slot_validated = 13; + + // Form filling event. + FormFilled form_filled = 14; + + // Waiting-for-user-input event. + WaitingForUserInput waiting_user_input = 15; + + // End-of-conversation event. + EndConversation end_conversation = 16; + } + + // List of warnings generated during execution of this Event. Warnings are + // tips for the developer discovered during the conversation request. These + // are usually non-critical and do not halt the execution of the request. For + // example, a warnings might be generated when webhook tries to override a + // custom Type which does not exist. Errors are reported as a failed status + // code, but warnings can be present even when the status is OK. + repeated string warning_messages = 17; +} + +// Current state of the execution. +message ExecutionState { + // ID of the scene which is currently active. + string current_scene_id = 1; + + // State of the session storage: + // https://developers.google.com/assistant/conversational/storage-session + google.protobuf.Struct session_storage = 2; + + // State of the slots filling, if applicable: + // https://developers.google.com/assistant/conversational/scenes#slot_filling + Slots slots = 5; + + // Prompt queue: + // https://developers.google.com/assistant/conversational/prompts + repeated google.actions.sdk.v2.conversation.Prompt prompt_queue = 7; + + // State of the user storage: + // https://developers.google.com/assistant/conversational/storage-user + google.protobuf.Struct user_storage = 6; + + // State of the home storage: + // https://developers.google.com/assistant/conversational/storage-home + google.protobuf.Struct household_storage = 8; +} + +// Represents the current state of a the scene's slots. +message Slots { + // The current status of slot filling. + google.actions.sdk.v2.conversation.SlotFillingStatus status = 2; + + // The slots associated with the current scene. + map slots = 3; +} + +// Information related to user input. +message UserConversationInput { + // Type of user input. E.g. keyboard, voice, touch, etc. + string type = 1; + + // Original text input from the user. + string original_query = 2; +} + +// Information about triggered intent match (global or within a scene): +// https://developers.google.com/assistant/conversational/intents +message IntentMatch { + // Intent id which triggered this interaction. + string intent_id = 1; + + // Parameters of intent which triggered this interaction. + map intent_parameters = 5; + + // Name of the handler attached to this interaction. + string handler = 3; + + // Scene to which this interaction leads to. + string next_scene_id = 4; +} + +// Results of conditions evaluation: +// https://developers.google.com/assistant/conversational/scenes#conditions +message ConditionsEvaluated { + // List of conditions which were evaluated to 'false'. + repeated Condition failed_conditions = 1; + + // The first condition which was evaluated to 'true', if any. + Condition success_condition = 2; +} + +// Evaluated condition. +message Condition { + // Expression specified in this condition. + string expression = 1; + + // Handler name specified in evaluated condition. + string handler = 2; + + // Destination scene specified in evaluated condition. + string next_scene_id = 3; +} + +// Information about execution of onSceneEnter stage: +// https://developers.google.com/assistant/conversational/scenes#on_enter +message OnSceneEnter { + // Handler name specified in onSceneEnter event. + string handler = 1; +} + +// Event triggered by destination scene returned from webhook: +// https://developers.google.com/assistant/conversational/webhooks#transition_scenes +message WebhookInitiatedTransition { + // ID of the scene the transition is leading to. + string next_scene_id = 1; +} + +// Information about a request dispatched to the Action webhook: +// https://developers.google.com/assistant/conversational/webhooks#payloads +message WebhookRequest { + // Payload of the webhook request. + string request_json = 1; +} + +// Information about a response received from the Action webhook: +// https://developers.google.com/assistant/conversational/webhooks#payloads +message WebhookResponse { + // Payload of the webhook response. + string response_json = 1; +} + +// Information about matched slot(s): +// https://developers.google.com/assistant/conversational/scenes#slot_filling +message SlotMatch { + // Parameters extracted by NLU from user input. + map nlu_parameters = 2; +} + +// Information about currently requested slot: +// https://developers.google.com/assistant/conversational/scenes#slot_filling +message SlotRequested { + // Name of the requested slot. + string slot = 1; + + // Slot prompt. + google.actions.sdk.v2.conversation.Prompt prompt = 3; +} + +// Event which happens after webhook validation was finished for slot(s): +// https://developers.google.com/assistant/conversational/scenes#slot_filling +message SlotValidated { + +} + +// Event which happens when form is fully filled: +// https://developers.google.com/assistant/conversational/scenes#slot_filling +message FormFilled { + +} + +// Event which happens when system needs user input: +// https://developers.google.com/assistant/conversational/scenes#input +message WaitingForUserInput { + +} + +// Event which informs that conversation with agent was ended. +message EndConversation { + +} diff --git a/google/actions/sdk/v2/files.proto b/google/actions/sdk/v2/files.proto new file mode 100644 index 00000000..529b25ed --- /dev/null +++ b/google/actions/sdk/v2/files.proto @@ -0,0 +1,40 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/config_file.proto"; +import "google/actions/sdk/v2/data_file.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "FilesProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Wrapper for a list of files. +message Files { + // Only one type of files can be sent to the server at a time, config files or + // data files. + oneof file_type { + // List of config files. This includes manifest, settings, interaction model + // resource bundles and more. + ConfigFiles config_files = 1; + + // List of data files. This includes image, audio file, cloud function + // source code. + DataFiles data_files = 2; + } +} diff --git a/google/actions/sdk/v2/interactionmodel/BUILD.bazel b/google/actions/sdk/v2/interactionmodel/BUILD.bazel new file mode 100644 index 00000000..4312be43 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/BUILD.bazel @@ -0,0 +1,37 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "interactionmodel_proto", + srcs = [ + "conditional_event.proto", + "event_handler.proto", + "global_intent_event.proto", + "intent.proto", + "intent_event.proto", + "scene.proto", + "slot.proto", + ], + deps = [ + "//google/actions/sdk/v2/interactionmodel/prompt:prompt_proto", + "//google/actions/sdk/v2/interactionmodel/type:type_proto", + "//google/api:field_behavior_proto", + "@com_google_protobuf//:struct_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/interactionmodel/conditional_event.proto b/google/actions/sdk/v2/interactionmodel/conditional_event.proto new file mode 100644 index 00000000..35cb4868 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/conditional_event.proto @@ -0,0 +1,55 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/event_handler.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "ConditionalEventProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Registers events that trigger as the result of a true condition. +message ConditionalEvent { + // Required. Filter condition for this event to trigger. If condition is evaluated to + // true then the associated `handler` will be triggered. + // The following variable references are supported: + // `$session` - To reference data in session storage. + // `$user` - To reference data in user storage. + // The following boolean operators are supported (with examples): + // `&&` - `session.params.counter > 0 && session.params.counter < 100` + // `||` - `session.params.foo == "John" || session.params.counter == "Adam"` + // `!` - `!(session.params.counter == 5)` + // The following comparisons are supported: + // `==`, `!=`, `<`, `>`, `<=`, `>=` + // The following list and string operators are supported (with examples): + // `in` - "Watermelon" in `session.params.fruitList` + // `size` - `size(session.params.fruitList) > 2` + // `substring` - `session.params.fullName.contains("John")` + string condition = 1 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Destination scene which the conversation should jump to when the associated + // condition is evaluated to true. The state of the current scene is destroyed + // on the transition. + string transition_to_scene = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Event handler which is triggered when the associated condition is evaluated + // to `true`. Should execute before transitioning to the destination scene. + // Useful to generate Prompts in response to events. + EventHandler handler = 3 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/event_handler.proto b/google/actions/sdk/v2/interactionmodel/event_handler.proto new file mode 100644 index 00000000..99d01153 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/event_handler.proto @@ -0,0 +1,41 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/prompt/static_prompt.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "EventHandlerProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Defines a handler to be executed after an event. Examples of events are +// intent and condition based events in a scene. +message EventHandler { + // Name of the webhook handler to call. + string webhook_handler = 1; + + // Prompts can either be inlined or referenced by name. + oneof prompt { + // Inlined static prompt. Can contain references to string resources in + // bundles. + google.actions.sdk.v2.interactionmodel.prompt.StaticPrompt static_prompt = 2; + + // Name of the static prompt to invoke. + string static_prompt_name = 3; + } +} diff --git a/google/actions/sdk/v2/interactionmodel/global_intent_event.proto b/google/actions/sdk/v2/interactionmodel/global_intent_event.proto new file mode 100644 index 00000000..e825f3bf --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/global_intent_event.proto @@ -0,0 +1,45 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/event_handler.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "GlobalIntentEventProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Defines a global intent handler. Global intent events are scoped to the +// entire Actions project and may be overridden by intent handlers in a scene. +// Intent names must be unique within an Actions project. +// +// Global intents can be matched anytime during a session, allowing users to +// access common flows like "get help" or "go back home." They can also be +// used to deep link users into specific flows when they invoke an Action. +// +// Note, the intent name is specified in the name of the file. +message GlobalIntentEvent { + // Optional. Destination scene which the conversation should jump to. The state of the + // current scene is destroyed on the transition. + string transition_to_scene = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Event handler which is triggered when the intent is matched. Should execute + // before transitioning to the destination scene. Useful to generate Prompts + // in response to events. + EventHandler handler = 2 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/intent.proto b/google/actions/sdk/v2/interactionmodel/intent.proto new file mode 100644 index 00000000..1d64ce77 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/intent.proto @@ -0,0 +1,66 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/type/class_reference.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "IntentProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Intents map open-ended user input to structured objects. Spoken +// phrases are matched to intents with Google's Natural Language Understanding +// (NLU). Intent matches can trigger events in your conversation design to +// progress the user's conversation. +// The intent name is specified in the name of the file. +message Intent { + // Definition of a parameter which can be used inside training phrases. + message IntentParameter { + // Required. Unique name of the intent parameter. Can be used in conditions and + // responses to reference intent parameters extracted by NLU with + // $intent.params.[name].resolved + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // The type of the intent parameter. + oneof parameter_type { + // Optional. Declares the data type of this parameter. + // This should not be set for built-in intents. + google.actions.sdk.v2.interactionmodel.type.ClassReference type = 2 [(google.api.field_behavior) = OPTIONAL]; + } + } + + // The list of parameters within the training phrases. All parameters must be + // defined here to be used in the training phrase. + repeated IntentParameter parameters = 1; + + // Training phrases allow Google’s NLU to automatically match intents with + // user input. The more unique phrases that are provided, the better chance + // this intent will be matched. + // The following is the format of training phrase part which are annotated. + // Note that `auto` field is optional and the default behavior when `auto` is + // not specified is equivalent to `auto=false`. + // `($ '' auto=)` + // `auto = true` means the part was auto annotated by NLU. + // `auto = false` means the part was annotated by the user. This is the + // default when auto is not specified. + // Example: + // "Book a flight from ($source 'San Francisco' auto=false) to ($dest + // 'Vancouver')" + repeated string training_phrases = 2; +} diff --git a/google/actions/sdk/v2/interactionmodel/intent_event.proto b/google/actions/sdk/v2/interactionmodel/intent_event.proto new file mode 100644 index 00000000..f765a86a --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/intent_event.proto @@ -0,0 +1,40 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/event_handler.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "IntentEventProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Registers Events which trigger as the result of an intent match. +message IntentEvent { + // Required. Intent triggering the event. + string intent = 1 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Destination scene which the conversation should jump to. The state of the + // current scene is destroyed on the transition. + string transition_to_scene = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Event handler which is triggered when the intent is matched. Should execute + // before transitioning to the destination scene. Useful to generate prompts + // in response to events. + EventHandler handler = 3 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/BUILD.bazel b/google/actions/sdk/v2/interactionmodel/prompt/BUILD.bazel new file mode 100644 index 00000000..c7eaf2b3 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/BUILD.bazel @@ -0,0 +1,32 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "prompt_proto", + srcs = [ + "static_prompt.proto", + "static_simple_prompt.proto", + "suggestion.proto", + "surface_capabilities.proto", + ], + deps = [ + "//google/actions/sdk/v2/interactionmodel/prompt/content:content_proto", + "//google/api:field_behavior_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/BUILD.bazel b/google/actions/sdk/v2/interactionmodel/prompt/content/BUILD.bazel new file mode 100644 index 00000000..213d2554 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/BUILD.bazel @@ -0,0 +1,39 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "content_proto", + srcs = [ + "static_canvas_prompt.proto", + "static_card_prompt.proto", + "static_collection_browse_prompt.proto", + "static_collection_prompt.proto", + "static_content_prompt.proto", + "static_image_prompt.proto", + "static_link_prompt.proto", + "static_list_prompt.proto", + "static_media_prompt.proto", + "static_table_prompt.proto", + ], + deps = [ + "//google/api:field_behavior_proto", + "@com_google_protobuf//:duration_proto", + "@com_google_protobuf//:struct_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_canvas_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_canvas_prompt.proto new file mode 100644 index 00000000..8d4ca581 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_canvas_prompt.proto @@ -0,0 +1,49 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/api/field_behavior.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/struct.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticCanvasPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Represents a Interactive Canvas response to be sent to the user. +// This can be used in conjunction with the `first_simple` field in the +// containing prompt to speak to the user in addition to displaying a +// interactive canvas response. +message StaticCanvasPrompt { + // Required. URL of the web view to load. + string url = 1 [(google.api.field_behavior) = REQUIRED]; + + // Optional. JSON data to be passed through to the immersive experience web page as an + // event. If the `override` field in the containing prompt is `false` data + // values defined in this Canvas prompt will be added after data values + // defined in previous Canvas prompts. + repeated google.protobuf.Value data = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A true value means that the mic won't be opened for capturing input after + // this immersive response is presented to the user. + bool suppress_mic = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If `true`, conversation related metadata is included and send back to the + // canvas application. + bool send_state_data_to_canvas_app = 5 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_card_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_card_prompt.proto new file mode 100644 index 00000000..17d59e2b --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_card_prompt.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticCardPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// A basic card for displaying some information, e.g. an image and/or text. +message StaticCardPrompt { + // Optional. Overall title of the card. + string title = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Subtitle of the card. + string subtitle = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. Body text of the card which is needed unless image is present. Supports a + // limited set of markdown syntax for formatting. + string text = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. A hero image for the card. The height is fixed to 192dp. + StaticImagePrompt image = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. How the image background will be filled. + StaticImagePrompt.ImageFill image_fill = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A clickable button to be shown in the Card. + StaticLinkPrompt button = 6 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_browse_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_browse_prompt.proto new file mode 100644 index 00000000..a2c8b9e9 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_browse_prompt.proto @@ -0,0 +1,56 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticCollectionBrowsePromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Presents a set of web documents as a collection of large-tile items. Items +// may be selected to launch their associated web document in a web viewer. +message StaticCollectionBrowsePrompt { + // Item in the collection. + message CollectionBrowseItem { + // Required. Title of the collection item. + string title = 1 [(google.api.field_behavior) = REQUIRED]; + + // Description of the collection item. + string description = 2; + + // Footer text for the collection item, displayed below the description. + // Single line of text, truncated with an ellipsis. + string footer = 3; + + // Image for the collection item. + StaticImagePrompt image = 4; + + // Required. URI to open if the item selected. + OpenUrl open_uri_action = 5 [(google.api.field_behavior) = REQUIRED]; + } + + // Items in the browse collection. The list size should be in the range [2, + // 10]. + repeated CollectionBrowseItem items = 1; + + // Image display option for images in the collection. + StaticImagePrompt.ImageFill image_fill = 2; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_prompt.proto new file mode 100644 index 00000000..cfb9fa8f --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_prompt.proto @@ -0,0 +1,59 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticCollectionPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// A card for presenting a collection of options to select from. +message StaticCollectionPrompt { + // An item in the collection. + message CollectionItem { + // Required. The NLU key that matches the entry key name in the associated + // Type. When item tapped, this key will be posted back as a select option + // parameter. + string key = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Title of the item. When tapped, this text will be + // posted back to the conversation verbatim as if the user had typed it. + // Each title must be unique among the set of items. + string title = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Body text of the item. + string description = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Item image. + StaticImagePrompt image = 4 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. Title of the collection. + string title = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Subtitle of the collection. + string subtitle = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. Collection items. + repeated CollectionItem items = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Type of image display option. + StaticImagePrompt.ImageFill image_fill = 4 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_content_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_content_prompt.proto new file mode 100644 index 00000000..0d253895 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_content_prompt.proto @@ -0,0 +1,57 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_card_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_browse_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_collection_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_list_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_media_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_table_prompt.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticContentPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// A placeholder for the Content part of a StaticPrompt. +message StaticContentPrompt { + // Only one type of content can be present in a Prompt. + oneof content { + // A basic card. + StaticCardPrompt card = 1; + + // An image. + StaticImagePrompt image = 2; + + // Table card. + StaticTablePrompt table = 3; + + // Response indicating a set of media to be played. + StaticMediaPrompt media = 4; + + // A card for presenting a list of options to select from. + StaticListPrompt list = 5; + + // A card presenting a list of options to select from. + StaticCollectionPrompt collection = 6; + + // A card presenting a collection of web pages to open. + StaticCollectionBrowsePrompt collection_browse = 7; + } +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto new file mode 100644 index 00000000..34d6e742 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto @@ -0,0 +1,63 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticImagePromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// An image displayed in the card. +message StaticImagePrompt { + // Possible image display options for affecting the presentation of the image. + // This should be used for when the image's aspect ratio does not match the + // image container's aspect ratio. + enum ImageFill { + // ImageFill unspecified. + UNSPECIFIED = 0; + + // Fill the gaps between the image and the image container with gray bars. + GRAY = 1; + + // Fill the gaps between the image and the image container with white bars. + WHITE = 2; + + // Image is scaled such that the image width and height match or exceed the + // container dimensions. This may crop the top and bottom of the image if + // the scaled image height is greater than the container height, or crop the + // left and right of the image if the scaled image width is greater than the + // container width. This is similar to "Zoom Mode" on a widescreen TV when + // playing a 4:3 video. + CROPPED = 3; + } + + // Required. The source url of the image. Images can be JPG, PNG and GIF (animated and + // non-animated). For example,`https://www.agentx.com/logo.png`. + string url = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. A text description of the image to be used for accessibility, e.g. screen + // readers. + string alt = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The height of the image in pixels. + int32 height = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The width of the image in pixels. + int32 width = 4 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto new file mode 100644 index 00000000..258b7244 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto @@ -0,0 +1,52 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticLinkPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Defines a link which will be displayed as a suggestion chip and can be opened +// by the user. +message StaticLinkPrompt { + // Name of the link + string name = 1; + + // Defines behavior when the user opens the link. + OpenUrl open = 2; +} + +// Defines behavior when the user opens the link. +message OpenUrl { + // The url field which could be any of: + // - http/https urls for opening an App-linked App or a webpage + string url = 1; + + // Indicates a hint for the url type. + UrlHint hint = 2; +} + +// Different types of url hints. +enum UrlHint { + // Unspecified + HINT_UNSPECIFIED = 0; + + // URL that points directly to AMP content, or to a canonical URL + // which refers to AMP content via ``. + AMP = 1; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_list_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_list_prompt.proto new file mode 100644 index 00000000..6869a69f --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_list_prompt.proto @@ -0,0 +1,55 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticListPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// A card for presenting a list of options to select from. +message StaticListPrompt { + // An item in the list. + message ListItem { + // Required. The NLU key that matches the entry key name in the associated type. When + // item tapped, this key will be posted back as a select option parameter. + string key = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Title of the item. When tapped, this text will be posted back to the + // conversation verbatim as if the user had typed it. Each title must be + // unique among the set of items. + string title = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Body text of the item. + string description = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Item image. + StaticImagePrompt image = 4 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. Title of the list. + string title = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Subtitle of the list. + string subtitle = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. List items. + repeated ListItem items = 3 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_media_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_media_prompt.proto new file mode 100644 index 00000000..2ec544c8 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_media_prompt.proto @@ -0,0 +1,96 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticMediaPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Contains information about the media, such as name, description, url, etc. +// Next id: 10 +message StaticMediaPrompt { + // Media type of this response. + enum MediaType { + // UNSPECIFIED value + MEDIA_TYPE_UNSPECIFIED = 0; + + // Audio file. + AUDIO = 1; + + // Response to acknowledge a media status report. + MEDIA_STATUS_ACK = 2; + } + + // Media control types the media response can supported optionally + enum OptionalMediaControls { + // Unspecified value + OPTIONAL_MEDIA_CONTROLS_UNSPECIFIED = 0; + + // Paused event. Triggered when user pauses the media. + PAUSED = 1; + + // Stopped event. Triggered when user exit out 3p session during media play. + STOPPED = 2; + } + + // Media type of this response. + MediaType media_type = 8; + + // Start offset of the first media object. + google.protobuf.Duration start_offset = 5; + + // Optional media control types this media response session can support. + // If set, request will be made to 3p when a certain media event happens. + // If not set, 3p must still handle two default control type, FINISHED and + // FAILED. + repeated OptionalMediaControls optional_media_controls = 6; + + // List of media objects. + repeated MediaObject media_objects = 7; +} + +// Represents a single media object. +message MediaObject { + // Name of this media object. + string name = 1; + + // Description of this media object. + string description = 2; + + // The url pointing to the media content. + string url = 3; + + // Image to show with the media card. + MediaImage image = 4; +} + +// Image to be shown inside a MediaPrompt. +message MediaImage { + // Only one type of MediaImage is allowed. + oneof image { + // A large image, such as the cover of the album, etc. + StaticImagePrompt large = 1; + + // A small image icon displayed on the right from the title. + // It's resized to 36x36 dp. + StaticImagePrompt icon = 2; + } +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/content/static_table_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/content/static_table_prompt.proto new file mode 100644 index 00000000..1e67ddd0 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/content/static_table_prompt.proto @@ -0,0 +1,93 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticTablePromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// A table card for displaying a table of text. +message StaticTablePrompt { + // Optional. Overall title of the table. Must be set if subtitle is set. + string title = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Subtitle for the table. + string subtitle = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Image associated with the table. + StaticImagePrompt image = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Headers and alignment of columns. + repeated TableColumn columns = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Row data of the table. The first 3 rows are guaranteed to be shown but + // others might be cut on certain surfaces. Please test with the simulator to + // see which rows will be shown for a given surface. On surfaces that support + // the `WEB_BROWSER` capability, you can point the user to + // a web page with more data. + repeated TableRow rows = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Button. + StaticLinkPrompt button = 6 [(google.api.field_behavior) = OPTIONAL]; +} + +// Describes a column in the table. +message TableColumn { + // The alignment of the content within the cell. + enum HorizontalAlignment { + // HorizontalAlignment unspecified. + UNSPECIFIED = 0; + + // Leading edge of the cell. This is the default. + LEADING = 1; + + // Content is aligned to the center of the column. + CENTER = 2; + + // Content is aligned to the trailing edge of the column. + TRAILING = 3; + } + + // Header text for the column. + string header = 1; + + // Horizontal alignment of content w.r.t column. If unspecified, content + // will be aligned to the leading edge. + HorizontalAlignment align = 2; +} + +// Describes a cell in a row. +message TableCell { + // Text content of the cell. + string text = 1; +} + +// Describes a row in the table. +message TableRow { + // Cells in this row. The first 3 cells are guaranteed to be shown but + // others might be cut on certain surfaces. Please test with the simulator + // to see which cells will be shown for a given surface. + repeated TableCell cells = 1; + + // Indicates whether there should be a divider after each row. + bool divider = 2; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/static_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/static_prompt.proto new file mode 100644 index 00000000..f842e920 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/static_prompt.proto @@ -0,0 +1,96 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_canvas_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_content_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/content/static_link_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/static_simple_prompt.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/suggestion.proto"; +import "google/actions/sdk/v2/interactionmodel/prompt/surface_capabilities.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticPromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Represents a list of prompt candidates, one of which will be selected as the +// prompt to be shown in the response to the user. +// **This message is localizable.** +message StaticPrompt { + // Represents a static prompt candidate. + message StaticPromptCandidate { + // Represents structured responses to send to the user, such as text, + // speech, cards, canvas data, suggestion chips, etc. + message StaticPromptResponse { + // Optional. The first voice and text-only response. + StaticSimplePrompt first_simple = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A content like a card, list or media to display to the user. + StaticContentPrompt content = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The last voice and text-only response. + StaticSimplePrompt last_simple = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Suggestions to be displayed to the user which will always + // appear at the end of the response. If the `append` field in the + // containing prompt is `true` the titles defined in this field will be + // added to titles defined in any previously defined suggestions prompts + // and duplicate values will be removed. + repeated Suggestion suggestions = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. An additional suggestion chip that can link out to the associated app + // or site. + // The chip will be rendered with the title "Open ". Max 20 chars. + StaticLinkPrompt link = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Mode for how this messages should be merged with previously defined + // messages. + // `true` will clear all previously defined messages (first and last + // simple, content, suggestions link and canvas) and add messages defined + // in this prompt. `false` will add messages defined in this prompt to + // messages defined in previous responses. Setting this field to `false` + // will also enable appending to some fields inside Simple prompts, the + // Suggestions prompt and the Canvas prompt (part of the Content prompt). + // The Content and Link messages will always be overwritten if defined in + // the prompt. Default value is `false`. + bool override = 7 [(google.api.field_behavior) = OPTIONAL]; + + // A response to be used for interactive canvas experience. + StaticCanvasPrompt canvas = 8; + } + + // Optional. The criteria for whether this prompt matches a request. If the selector + // is empty, this prompt will always be triggered. + Selector selector = 1 [(google.api.field_behavior) = OPTIONAL]; + + // The prompt response associated with the selector. + StaticPromptResponse prompt_response = 2; + } + + // Defines the criteria for whether a prompt matches a request. + message Selector { + // The set of required surface capabilities. + SurfaceCapabilities surface_capabilities = 1; + } + + // The list of candidate prompts to be sent to the client. Each prompt has a + // selector to determine when it can be used. The first selector that matches + // a request will be sent and the rest will be ignored. + repeated StaticPromptCandidate candidates = 1; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/static_simple_prompt.proto b/google/actions/sdk/v2/interactionmodel/prompt/static_simple_prompt.proto new file mode 100644 index 00000000..0d21f974 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/static_simple_prompt.proto @@ -0,0 +1,48 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "StaticSimplePromptProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Represents a simple prompt to be send to a user. +message StaticSimplePrompt { + // Represents a variant which is part of the simple prompt. + message Variant { + // Optional. Represents the speech to be spoken to the user. Can be SSML or text to + // speech. + // By default, speech will be appended to previous Simple prompt's + // speech. If the `override` field in the containing prompt is `true` the + // speech defined in this field will override previous Simple prompt's + // speech. + string speech = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Text to display in the chat bubble. If not given, a display rendering of + // the speech field above will be used. Limited to 640 chars. + // By default, text will be appended to previous Simple prompt's text. + // If the `override` field in the containing prompt is `true` the text + // defined in this field will override previous Simple prompt's text. + string text = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // List of possible variants. + repeated Variant variants = 1; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/suggestion.proto b/google/actions/sdk/v2/interactionmodel/prompt/suggestion.proto new file mode 100644 index 00000000..bd841615 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/suggestion.proto @@ -0,0 +1,33 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "SuggestionProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Represents a suggestion chip, a UI element shown to the user for convenience. +message Suggestion { + // Required. The text shown in the suggestion chip. When tapped, this text will be + // posted back to the conversation verbatim as if the user had typed it. + // Each title must be unique among the set of suggestion chips. + // Max 25 chars + string title = 1 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/google/actions/sdk/v2/interactionmodel/prompt/surface_capabilities.proto b/google/actions/sdk/v2/interactionmodel/prompt/surface_capabilities.proto new file mode 100644 index 00000000..4c7d0299 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/prompt/surface_capabilities.proto @@ -0,0 +1,54 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.prompt; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt"; +option java_multiple_files = true; +option java_outer_classname = "SurfaceCapabilitiesProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt"; + +// Represents the surface the user is using to make a request to the Action. +message SurfaceCapabilities { + // Capabilities the device surface supports at the time of the request. + enum Capability { + // Unspecified surface capability. + UNSPECIFIED = 0; + + // Device can speak to the user via text-to-speech or SSML. + SPEECH = 1; + + // Device can display rich responses like cards, lists and tables. + RICH_RESPONSE = 2; + + // Device can play long form audio media like music and podcasts. + LONG_FORM_AUDIO = 3; + + // Device can display a interactive canvas response. + INTERACTIVE_CANVAS = 4; + + // Device can use web links in rich responses to open a web browser. + WEB_LINK = 5; + + // Device can support saving and fetching home storage. + HOME_STORAGE = 6; + } + + // Required. The capabilities of the surface making a request to the Action. + repeated Capability capabilities = 1 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/google/actions/sdk/v2/interactionmodel/scene.proto b/google/actions/sdk/v2/interactionmodel/scene.proto new file mode 100644 index 00000000..e8c4b4b9 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/scene.proto @@ -0,0 +1,60 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/conditional_event.proto"; +import "google/actions/sdk/v2/interactionmodel/event_handler.proto"; +import "google/actions/sdk/v2/interactionmodel/intent_event.proto"; +import "google/actions/sdk/v2/interactionmodel/slot.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "SceneProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Scene is the basic unit of control flow when designing a conversation. They +// can be chained together with other scenes, generate prompts for the end user, +// and define slots. +// The scene name is specified in the name of the file. +message Scene { + // Handler to invoke when transitioning into this scene. + EventHandler on_enter = 1; + + // The list of events that trigger based on intents. These events can + // be triggered at any time after the on_load Handler has been called. + // Important - these events define the set of intents which are scoped to + // this scene and will take precedence over any globally defined events that + // have the same intents or their triggering phrases. Intent names must be + // unique within a scene. + repeated IntentEvent intent_events = 2; + + // The list of events to trigger based on conditional statements. These are + // evaluated after the form has been filled or immediately after on_load if + // this scene does not have a form (evaluation is only done once). Only the + // first matching event will be triggered. + repeated ConditionalEvent conditional_events = 3; + + // Ordered list of slots. Each slot defines the type of data + // that it will resolve and configuration to customize the experience of this + // resolution (e.g. prompts). + repeated Slot slots = 4; + + // Handler called when there is a change in state of a slot not + // caused by updates within another Handler. This allows slots to be + // invalidated, the scene invalidated or other changes to scene state. + EventHandler on_slot_updated = 5; +} diff --git a/google/actions/sdk/v2/interactionmodel/slot.proto b/google/actions/sdk/v2/interactionmodel/slot.proto new file mode 100644 index 00000000..114fe4a2 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/slot.proto @@ -0,0 +1,133 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel; + +import "google/actions/sdk/v2/interactionmodel/event_handler.proto"; +import "google/actions/sdk/v2/interactionmodel/type/class_reference.proto"; +import "google/api/field_behavior.proto"; +import "google/protobuf/struct.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel;interactionmodel"; +option java_multiple_files = true; +option java_outer_classname = "SlotProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel"; + +// Configuration for a slot. Slots are single units of data that can be filled +// through natural language (ie. intent parameters), session parameters, and +// other sources. +message Slot { + // A single place where slot prompts are defined. + message PromptSettings { + // Prompt for the slot value itself. Example: "What size did you want?" + EventHandler initial_prompt = 1; + + // Prompt to give when the user's input does not match the expected + // value type for the slot for the first time. Example: "Sorry, I + // didn't get that." + EventHandler no_match_prompt1 = 2; + + // Prompt to give when the user's input does not match the expected + // value type for the slot for the second time. Example: "Sorry, I + // didn't get that." + EventHandler no_match_prompt2 = 3; + + // Prompt to give when the user's input does not match the expected + // value type for the slot for the last time. Example: "Sorry, I + // didn't get that." + EventHandler no_match_final_prompt = 4; + + // Prompt to give when the user does not provide an input for the first + // time. Example: "Sorry, I didn't get that." + EventHandler no_input_prompt1 = 5; + + // Prompt to give when the user does not provide an input for the second + // time. Example: "Sorry, I didn't get that." + EventHandler no_input_prompt2 = 6; + + // Prompt to give when the user does not provide an input for the last + // time. Example: "Sorry, I didn't get that." + EventHandler no_input_final_prompt = 7; + } + + // Message describing the commit behavior associated with the slot after it + // has been successfully filled. + message CommitBehavior { + // The session parameter to write the slot value after it is filled. Note + // that nested paths are not currently supported. "$$" is used to write the + // slot value to a session parameter with same name as the slot. + // Eg: write_session_param = "fruit" corresponds to "$session.params.fruit". + // write_session_param = "ticket" corresponds to "$session.params.ticket". + string write_session_param = 1; + } + + // Configuration to populate a default value for this slot. + message DefaultValue { + // Optional. The session parameter to be used to initialize the slot value, if it has + // a non-empty value. The type of the value must match the type of the slot. + // Note that nested paths are not currently supported. + // Eg: `session_param = "fruit"` corresponds to `$session.params.fruit`. + // `session_param = "ticket"` corresponds to `$session.params.ticket`. + string session_param = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Constant default value for the slot. This will only be used if a value + // for this slot was not populated through the `session_param`. The + // type for this value must match the type of the slot. + google.protobuf.Value constant = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // Required. Name of the slot. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Declares the data type of this slot. + google.actions.sdk.v2.interactionmodel.type.ClassReference type = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Indicates whether the slot is required to be filled before + // advancing. Required slots that are not filled will trigger a customizable + // prompt to the user. + bool required = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Registers Prompts for different stages of slot filling. + PromptSettings prompt_settings = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Commit behavior associated with the slot. + CommitBehavior commit_behavior = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Additional configuration associated with the slot which is + // used for filling the slot. The format of the config is specific to the + // type of the slot. Resource references to user or session parameter can be + // added to this config. This config is needed for filling slots related to + // transactions and user engagement. + // + // Example: + // For a slot of type actions.type.CompletePurchaseValue, the following + // config proposes a digital good order with a reference to a client defined + // session parameter `userSelectedSkuId`: + // + // { + // "@type": "type.googleapis.com/ + // google.actions.transactions.v3.CompletePurchaseValueSpec", + // "skuId": { + // "skuType": "SKU_TYPE_IN_APP", + // "id": "$session.params.userSelectedSkuId", + // "packageName": "com.example.company" + // } + // } + google.protobuf.Value config = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Configuration to populate a default value for this slot. + DefaultValue default_value = 7 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/type/BUILD.bazel b/google/actions/sdk/v2/interactionmodel/type/BUILD.bazel new file mode 100644 index 00000000..9d5191c1 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/BUILD.bazel @@ -0,0 +1,33 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") + +proto_library( + name = "type_proto", + srcs = [ + "class_reference.proto", + "entity_display.proto", + "free_text_type.proto", + "regular_expression_type.proto", + "synonym_type.proto", + "type.proto", + ], + deps = [ + "//google/api:field_behavior_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) diff --git a/google/actions/sdk/v2/interactionmodel/type/class_reference.proto b/google/actions/sdk/v2/interactionmodel/type/class_reference.proto new file mode 100644 index 00000000..496b3c9a --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/class_reference.proto @@ -0,0 +1,36 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.type; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/type;type"; +option java_multiple_files = true; +option java_outer_classname = "ClassReferenceProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.type"; + +// A reference to a class which is used to declare the type of a field or return +// value. Enums are also a type of class that can be referenced using +// ClassReference. +message ClassReference { + // Required. Name of a built-in type or custom type of the parameter. Examples: + // `PizzaToppings`, `actions.type.Number` + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Indicates whether the data type represents a list of values. + bool list = 2 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/type/entity_display.proto b/google/actions/sdk/v2/interactionmodel/type/entity_display.proto new file mode 100644 index 00000000..6a292220 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/entity_display.proto @@ -0,0 +1,35 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.type; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/type;type"; +option java_multiple_files = true; +option java_outer_classname = "EntityDisplayProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.type"; + +// Elements that will be displayed on the canvas once a particular type's entity +// is extracted from a query. Only relevant for canvas enabled apps. +// **This message is localizable.** +message EntityDisplay { + // Optional. Title of the icon. + string icon_title = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Required. Url of the icon. + string icon_url = 2 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/google/actions/sdk/v2/interactionmodel/type/free_text_type.proto b/google/actions/sdk/v2/interactionmodel/type/free_text_type.proto new file mode 100644 index 00000000..f35c6b09 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/free_text_type.proto @@ -0,0 +1,33 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.type; + +import "google/actions/sdk/v2/interactionmodel/type/entity_display.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/type;type"; +option java_multiple_files = true; +option java_outer_classname = "FreeTextTypeProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.type"; + +// Type that matches any text if surrounding words context is close to provided +// training examples. +message FreeTextType { + // Optional. Elements that will be displayed on the canvas once an entity is extracted + // from a query. Only relevant for canvas enabled apps. + EntityDisplay display = 2 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/interactionmodel/type/regular_expression_type.proto b/google/actions/sdk/v2/interactionmodel/type/regular_expression_type.proto new file mode 100644 index 00000000..2c0af7a6 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/regular_expression_type.proto @@ -0,0 +1,44 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.type; + +import "google/actions/sdk/v2/interactionmodel/type/entity_display.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/type;type"; +option java_multiple_files = true; +option java_outer_classname = "RegularExpressionTypeProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.type"; + +// Type that matches text by regular expressions. +// **This message is localizable.** +message RegularExpressionType { + // Represents an entity object that contains the regular expression that is + // used for comparison. + message Entity { + // Optional. Elements that will be displayed on the canvas once an entity is + // extracted from a query. Only relevant for canvas enabled apps. + EntityDisplay display = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Required. Uses RE2 regex syntax (See + // https://github.com/google/re2/wiki/Syntax for more details) + repeated string regular_expressions = 2 [(google.api.field_behavior) = REQUIRED]; + } + + // Required. Named map of entities which each contain Regex strings. + map entities = 1 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/google/actions/sdk/v2/interactionmodel/type/synonym_type.proto b/google/actions/sdk/v2/interactionmodel/type/synonym_type.proto new file mode 100644 index 00000000..bdca1189 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/synonym_type.proto @@ -0,0 +1,66 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.type; + +import "google/actions/sdk/v2/interactionmodel/type/entity_display.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/type;type"; +option java_multiple_files = true; +option java_outer_classname = "SynonymTypeProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.type"; + +// Type that matches text by set of synonyms. +message SynonymType { + // Represents a synonym entity field that contains the details of a single + // entry inside the type. + message Entity { + // Optional. The entity display details. + EntityDisplay display = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The list of synonyms for the entity. + // **This field is localizable.** + repeated string synonyms = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // The type of matching that entries in this type will use. This will ensure + // all of the types use the same matching method and allow variation of + // matching for synonym matching (i.e. fuzzy versus exact). If the value is + // `UNSPECIFIED` it will be defaulted to `EXACT_MATCH`. + enum MatchType { + // Defaults to `EXACT_MATCH`. + UNSPECIFIED = 0; + + // Looks for an exact match of the synonym or name. + EXACT_MATCH = 1; + + // Looser than `EXACT_MATCH`. Looks for similar matches as well as exact + // matches. + FUZZY_MATCH = 2; + } + + // Optional. The match type for the synonym. + MatchType match_type = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When set to true this will match unknown words or phrases based on + // surrounding input and intent training data, such as items that might be + // added to a grocery list. + bool accept_unknown_values = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Required. Named map of synonym entities. + map entities = 2 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/google/actions/sdk/v2/interactionmodel/type/type.proto b/google/actions/sdk/v2/interactionmodel/type/type.proto new file mode 100644 index 00000000..8b4bc3f3 --- /dev/null +++ b/google/actions/sdk/v2/interactionmodel/type/type.proto @@ -0,0 +1,50 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2.interactionmodel.type; + +import "google/actions/sdk/v2/interactionmodel/type/free_text_type.proto"; +import "google/actions/sdk/v2/interactionmodel/type/regular_expression_type.proto"; +import "google/actions/sdk/v2/interactionmodel/type/synonym_type.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/type;type"; +option java_multiple_files = true; +option java_outer_classname = "TypeProto"; +option java_package = "com.google.actions.sdk.v2.interactionmodel.type"; + +// Declaration of a custom type, as opposed to built-in types. Types can be +// assigned to slots in a scene or parameters of an intent's training phrases. +// Practically, Types can be thought of as enums. +// Note, type name is specified in the name of the file. +message Type { + // Selection of sub type based on the type of matching to be done. + oneof sub_type { + // Synonyms type, which is essentially an enum. + SynonymType synonym = 1; + + // Regex type, allows regular expression matching. + RegularExpressionType regular_expression = 2; + + // FreeText type. + FreeTextType free_text = 3; + } + + // Set of exceptional words/phrases that shouldn't be matched by type. + // Note: If word/phrase is matched by the type but listed as an exclusion it + // won't be returned in parameter extraction result. + // **This field is localizable.** + repeated string exclusions = 4; +} diff --git a/google/actions/sdk/v2/localized_settings.proto b/google/actions/sdk/v2/localized_settings.proto new file mode 100644 index 00000000..ef5bb8e4 --- /dev/null +++ b/google/actions/sdk/v2/localized_settings.proto @@ -0,0 +1,92 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/theme_customization.proto"; +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "LocalizedSettingsProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Represents settings of an Actions project that are specific to a user locale. +// In this instance, user means the end user who invokes your Actions. +// **This message is localizable.** +message LocalizedSettings { + // Required. The default display name for this Actions project (if there is no + // translation available) + string display_name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The pronunciation of the display name to invoke it within a voice + // (spoken) context. + string pronunciation = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The default short description for the Actions project (if there is no + // translation available). 80 character limit. + string short_description = 3 [(google.api.field_behavior) = REQUIRED]; + + // Required. The default long description for the Actions project (if there is no + // translation available). 4000 character limit. + string full_description = 4 [(google.api.field_behavior) = REQUIRED]; + + // Required. Small square image, 192 x 192 px. + // This should be specified as a reference to the corresponding image in the + // `resources/images/` directory. Eg: `$resources.images.foo` (without the + // extension) for image in `resources/images/foo.jpg` + // When working on a project pulled from Console the Google managed url pulled + // could be used. + string small_logo_image = 5 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Large landscape image, 1920 x 1080 px. + // This should be specified as a reference to the corresponding image in the + // `resources/images/` directory. Eg: `$resources.images.foo` (without the + // extension) for image in `resources/images/foo.jpg` + // When working on a project pulled from Console the Google managed url pulled + // could be used. + string large_banner_image = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The name of the developer to be displayed to users. + string developer_name = 7 [(google.api.field_behavior) = REQUIRED]; + + // Required. The contact email address for the developer. + string developer_email = 8 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The terms of service URL. + string terms_of_service_url = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The Google Assistant voice type that users hear when they interact with + // your Actions. The supported values are "male_1", "male_2", "female_1", and + // "female_2". + string voice = 10 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The locale for the specified voice. If not specified, this resolves + // to the user's Assistant locale. If specified, the voice locale must have + // the same root language as the locale specified in LocalizedSettings. + string voice_locale = 14 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The privacy policy URL. + string privacy_policy_url = 11 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Sample invocation phrases displayed as part of your Actions project's + // description in the Assistant directory. This will help users learn how to + // use it. + repeated string sample_invocations = 12 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Theme customizations for visual components of your Actions. + ThemeCustomization theme_customization = 13 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/actions/sdk/v2/manifest.proto b/google/actions/sdk/v2/manifest.proto new file mode 100644 index 00000000..2bfd70b8 --- /dev/null +++ b/google/actions/sdk/v2/manifest.proto @@ -0,0 +1,30 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ManifestProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Contains information that's "transportable" i.e. not specific to any given +// project and can be moved between projects. +message Manifest { + // Version of the file format. The current file format version is 1.0 + // Example: "1.0" + string version = 1; +} diff --git a/google/actions/sdk/v2/settings.proto b/google/actions/sdk/v2/settings.proto new file mode 100644 index 00000000..f89435ea --- /dev/null +++ b/google/actions/sdk/v2/settings.proto @@ -0,0 +1,179 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/actions/sdk/v2/account_linking.proto"; +import "google/actions/sdk/v2/localized_settings.proto"; +import "google/actions/sdk/v2/surface.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "SettingsProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Represents settings of an Actions project that are not locale specific. +message Settings { + // The category choices for an Actions project. + enum Category { + // Unknown / Unspecified. + CATEGORY_UNSPECIFIED = 0; + + // Business and Finance category. + BUSINESS_AND_FINANCE = 2; + + // Education and Reference category. + EDUCATION_AND_REFERENCE = 3; + + // Food and Drink category. + FOOD_AND_DRINK = 4; + + // Games and Trivia category. + GAMES_AND_TRIVIA = 5; + + // Health and Fitness category. + HEALTH_AND_FITNESS = 6; + + // Kids and Family category. + KIDS_AND_FAMILY = 20; + + // Lifestyle category. + LIFESTYLE = 7; + + // Local category. + LOCAL = 8; + + // Movies and TV category. + MOVIES_AND_TV = 9; + + // Music and Audio category. + MUSIC_AND_AUDIO = 10; + + // News category, + NEWS = 1; + + // Novelty and Humor category. + NOVELTY_AND_HUMOR = 11; + + // Productivity category. + PRODUCTIVITY = 12; + + // Shopping category. + SHOPPING = 13; + + // Social category. + SOCIAL = 14; + + // Sports category. + SPORTS = 15; + + // Travel and Transportation category. + TRAVEL_AND_TRANSPORTATION = 16; + + // Utilities category. + UTILITIES = 17; + + // Weather category. + WEATHER = 18; + + // Home Control category. + HOME_CONTROL = 19; + } + + // Actions project id. + string project_id = 1; + + // Locale which is default for the project. For all files except under + // `resources/` with no locale in the path, the localized data is attributed + // to this `default_locale`. For files under `resources/` no locale means that + // the resource is applicable to all locales. + string default_locale = 2; + + // Represents the regions where users can invoke your Actions, which is + // based on the user's location of presence. Cannot be set if + // `disabled_regions` is set. If both `enabled_regions` and `disabled_regions` + // are not specified, users can invoke your Actions in all regions. Each + // region is represented using the Canonical Name of Adwords geotargets. See + // https://developers.google.com/adwords/api/docs/appendix/geotargeting + // Examples include: + // - "Germany" + // - "Ghana" + // - "Greece" + // - "Grenada" + // - "United Kingdom" + // - "United States" + // - "United States Minor Outlying Islands" + // - "Uruguay" + repeated string enabled_regions = 3; + + // Represents the regions where your Actions are blocked, based on the user's + // location of presence. Cannot be set if `enabled_regions` is set. + // Each region is represented using the Canonical Name of Adwords geotargets. + // See https://developers.google.com/adwords/api/docs/appendix/geotargeting + // Examples include: + // - "Germany" + // - "Ghana" + // - "Greece" + // - "Grenada" + // - "United Kingdom" + // - "United States" + // - "United States Minor Outlying Islands" + // - "Uruguay" + repeated string disabled_regions = 4; + + // The category for this Actions project. + Category category = 5; + + // Whether Actions can use transactions (for example, making + // reservations, taking orders, etc.). If false, then attempts to use the + // Transactions APIs fail. + bool uses_transactions_api = 6; + + // Whether Actions can perform transactions for digital goods. + bool uses_digital_purchase_api = 7; + + // Whether Actions use Interactive Canvas. + bool uses_interactive_canvas = 8; + + // Whether Actions use the home storage feature. + bool uses_home_storage = 17; + + // Whether Actions content is designed for family (DFF). + bool designed_for_family = 9; + + // Whether Actions contains alcohol or tobacco related content. + bool contains_alcohol_or_tobacco_content = 11; + + // Whether Actions may leave mic open without an explicit prompt during + // conversation. + bool keeps_mic_open = 12; + + // The surface requirements that a client surface must support to invoke + // Actions in this project. + SurfaceRequirements surface_requirements = 13; + + // Free-form testing instructions for Actions reviewer (for example, account + // linking instructions). + string testing_instructions = 14; + + // Localized settings for the project's default locale. Every additional + // locale should have its own settings file in its own directory. + LocalizedSettings localized_settings = 15; + + // Allow users to create or link accounts through Google sign-in and/or your + // own OAuth service. + AccountLinking account_linking = 16; +} diff --git a/google/actions/sdk/v2/surface.proto b/google/actions/sdk/v2/surface.proto new file mode 100644 index 00000000..a68276a9 --- /dev/null +++ b/google/actions/sdk/v2/surface.proto @@ -0,0 +1,64 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "SurfaceProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Contains a set of requirements that the client surface must support to invoke +// Actions in your project. +message SurfaceRequirements { + // The minimum set of capabilities needed to invoke the Actions in your + // project. If the surface is missing any of these, the Action will not be + // triggered. + repeated CapabilityRequirement minimum_requirements = 1; +} + +// Represents a requirement about the availability of a given capability. +message CapabilityRequirement { + // Possible set of surface capabilities. + enum SurfaceCapability { + // Unknown / Unspecified. + SURFACE_CAPABILITY_UNSPECIFIED = 0; + + // Surface supports audio output. + AUDIO_OUTPUT = 1; + + // Surface supports screen/visual output. + SCREEN_OUTPUT = 2; + + // Surface supports media response audio. + MEDIA_RESPONSE_AUDIO = 3; + + // Surface supports web browsers. + WEB_BROWSER = 4; + + // Surface supports account linking. + ACCOUNT_LINKING = 7; + + // Surface supports Interactive Canvas. + INTERACTIVE_CANVAS = 8; + + // Surface supports home storage. + HOME_STORAGE = 9; + } + + // The type of capability. + SurfaceCapability capability = 1; +} diff --git a/google/actions/sdk/v2/theme_customization.proto b/google/actions/sdk/v2/theme_customization.proto new file mode 100644 index 00000000..dc7623c3 --- /dev/null +++ b/google/actions/sdk/v2/theme_customization.proto @@ -0,0 +1,83 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ThemeCustomizationProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Styles applied to cards that are presented to users +message ThemeCustomization { + // Describes how the borders of images should be rendered. + enum ImageCornerStyle { + // Undefined / Unspecified. + IMAGE_CORNER_STYLE_UNSPECIFIED = 0; + + // Round corner for image. + CURVED = 1; + + // Rectangular corner for image. + ANGLED = 2; + } + + // Background color of cards. Acts as a fallback if `background_image` is + // not provided by developers or `background_image` doesn't fit for certain + // surfaces. + // Example usage: #FAFAFA + string background_color = 1; + + // Primary theme color of the Action will be used to set text color of title, + // action item background color for Actions on Google cards. + // Example usage: #FAFAFA + string primary_color = 2; + + // The font family that will be used for title of cards. + // Supported fonts: + // - Sans Serif + // - Sans Serif Medium + // - Sans Serif Bold + // - Sans Serif Black + // - Sans Serif Condensed + // - Sans Serif Condensed Medium + // - Serif + // - Serif Bold + // - Monospace + // - Cursive + // - Sans Serif Smallcaps + string font_family = 3; + + // Border style of foreground image of cards. For example, can be applied on + // the foreground image of a basic card or carousel card. + ImageCornerStyle image_corner_style = 4; + + // Landscape mode (minimum 1920x1200 pixels). + // This should be specified as a reference to the corresponding image in the + // `resources/images/` directory. Eg: `$resources.images.foo` (without the + // extension) for image in `resources/images/foo.jpg` + // When working on a project pulled from Console the Google managed url pulled + // could be used. + string landscape_background_image = 5; + + // Portrait mode (minimum 1200x1920 pixels). + // This should be specified as a reference to the corresponding image in the + // `resources/images/` directory. Eg: `$resources.images.foo` (without the + // extension) for image in `resources/images/foo.jpg` + // When working on a project pulled from Console the Google managed url pulled + // could be used. + string portrait_background_image = 6; +} diff --git a/google/actions/sdk/v2/validation_results.proto b/google/actions/sdk/v2/validation_results.proto new file mode 100644 index 00000000..08993c1a --- /dev/null +++ b/google/actions/sdk/v2/validation_results.proto @@ -0,0 +1,46 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "ValidationResultsProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Wrapper for repeated validation result. +message ValidationResults { + // Multiple validation results. + repeated ValidationResult results = 1; +} + +// Represents a validation result associated with the app content. +message ValidationResult { + // Context to identify the resource the validation message relates to. + message ValidationContext { + // Language code of the lozalized resource. + // Empty if the error is for non-localized resource. + // See the list of supported languages in + // https://developers.google.com/assistant/console/languages-locales + string language_code = 1; + } + + // Holds the validation message. + string validation_message = 1; + + // Context to identify the resource the validation message relates to. + ValidationContext validation_context = 2; +} diff --git a/google/actions/sdk/v2/webhook.proto b/google/actions/sdk/v2/webhook.proto new file mode 100644 index 00000000..23f5bad9 --- /dev/null +++ b/google/actions/sdk/v2/webhook.proto @@ -0,0 +1,82 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.actions.sdk.v2; + +import "google/api/field_behavior.proto"; + +option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2;sdk"; +option java_multiple_files = true; +option java_outer_classname = "WebhookProto"; +option java_package = "com.google.actions.sdk.v2"; + +// Metadata for different types of webhooks. If you're using +// `inlineCloudFunction`, your source code must be in a directory with the same +// name as the value for the `executeFunction` key. +// For example, a value of `my_webhook` for the`executeFunction` key would have +// a code structure like this: +// - `/webhooks/my_webhook.yaml` +// - `/webhooks/my_webhook/index.js` +// - `/webhooks/my_webhook/package.json` +message Webhook { + // Declares the name of the webhoook handler. A webhook can have + // multiple handlers registered. These handlers can be called from multiple + // places in your Actions project. + message Handler { + // Required. Name of the handler. Must be unique across all handlers the Actions + // project. You can check the name of this handler to invoke the correct + // function in your fulfillment source code. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + } + + // REST endpoint to notify if you're not using the inline editor. + message HttpsEndpoint { + // The HTTPS base URL for your fulfillment endpoint (HTTP is not supported). + // Handler names are appended to the base URL path after a colon + // (following the style guide in + // https://cloud.google.com/apis/design/custom_methods). + // For example a base URL of 'https://gactions.service.com/api' would + // receive requests with URL 'https://gactions.service.com/api:{method}'. + string base_url = 1; + + // Map of HTTP parameters to be included in the POST request. + map http_headers = 2; + + // Version of the protocol used by the endpoint. This is the protocol shared + // by all fulfillment types and not specific to Google fulfillment type. + int32 endpoint_api_version = 3; + } + + // Holds the metadata of an inline Cloud Function deployed from the + // webhooks folder. + message InlineCloudFunction { + // The name of the Cloud Function entry point. The value of this field + // should match the name of the method exported from the source code. + string execute_function = 1; + } + + // List of handlers for this webhook. + repeated Handler handlers = 1; + + // Only one webhook type is supported. + oneof webhook_type { + // Custom webhook HTTPS endpoint. + HttpsEndpoint https_endpoint = 2; + + // Metadata for cloud function deployed from code in the webhooks folder. + InlineCloudFunction inline_cloud_function = 3; + } +}