feat: added support for test cases and agent validation

PiperOrigin-RevId: 352834280
This commit is contained in:
Google APIs 2021-01-20 11:21:52 -08:00 committed by Copybara-Service
parent ceaaf31b3d
commit f83715b483
14 changed files with 1226 additions and 540 deletions

View File

@ -25,7 +25,6 @@ proto_library(
"audio_config.proto",
"entity_type.proto",
"environment.proto",
"experiment.proto",
"flow.proto",
"fulfillment.proto",
"intent.proto",
@ -34,7 +33,9 @@ proto_library(
"security_settings.proto",
"session.proto",
"session_entity_type.proto",
"test_case.proto",
"transition_route_group.proto",
"validation_message.proto",
"version.proto",
"webhook.proto",
],
@ -88,7 +89,6 @@ java_grpc_library(
java_gapic_library(
name = "cx_java_gapic",
srcs = [":cx_proto_with_info"],
gapic_yaml = "dialogflow_gapic.yaml",
grpc_service_config = "dialogflow_grpc_service_config.json",
package = "google.cloud.dialogflow.cx.v3beta1",
test_deps = [
@ -105,13 +105,13 @@ java_gapic_test(
"com.google.cloud.dialogflow.cx.v3beta1.AgentsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.EntityTypesClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.EnvironmentsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.ExperimentsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.FlowsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.IntentsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.PagesClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.SecuritySettingsServiceClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.SessionEntityTypesClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.SessionsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.TestCasesClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.TransitionRouteGroupsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.VersionsClientTest",
"com.google.cloud.dialogflow.cx.v3beta1.WebhooksClientTest",
@ -214,50 +214,51 @@ py_gapic_assembly_pkg(
],
)
# TODO(b/177677397): Unable to generate PHP library.
##############################################################################
# PHP
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"php_gapic_assembly_pkg",
"php_gapic_library",
"php_grpc_library",
"php_proto_library",
)
# load(
# "@com_google_googleapis_imports//:imports.bzl",
# "php_gapic_assembly_pkg",
# "php_gapic_library",
# "php_grpc_library",
# "php_proto_library",
# )
php_proto_library(
name = "cx_php_proto",
deps = [":cx_proto"],
)
# php_proto_library(
# name = "cx_php_proto",
# deps = [":cx_proto"],
# )
php_grpc_library(
name = "cx_php_grpc",
srcs = [":cx_proto"],
deps = [":cx_php_proto"],
)
# php_grpc_library(
# name = "cx_php_grpc",
# srcs = [":cx_proto"],
# deps = [":cx_php_proto"],
# )
php_gapic_library(
name = "cx_php_gapic",
src = ":cx_proto_with_info",
gapic_yaml = "dialogflow_gapic.yaml",
grpc_service_config = "dialogflow_grpc_service_config.json",
package = "google.cloud.dialogflow.cx.v3beta1",
service_yaml = "dialogflow_v3beta1.yaml",
deps = [
":cx_php_grpc",
":cx_php_proto",
],
)
# php_gapic_library(
# name = "cx_php_gapic",
# src = ":cx_proto_with_info",
# gapic_yaml = "dialogflow_gapic.yaml",
# grpc_service_config = "dialogflow_grpc_service_config.json",
# package = "google.cloud.dialogflow.cx.v3beta1",
# service_yaml = "dialogflow_v3beta1.yaml",
# deps = [
# ":cx_php_grpc",
# ":cx_php_proto",
# ],
# )
# Open Source Packages
php_gapic_assembly_pkg(
name = "google-cloud-dialogflow-cx-v3beta1-php",
deps = [
":cx_php_gapic",
":cx_php_grpc",
":cx_php_proto",
],
)
# # Open Source Packages
# php_gapic_assembly_pkg(
# name = "google-cloud-dialogflow-cx-v3beta1-php",
# deps = [
# ":cx_php_gapic",
# ":cx_php_grpc",
# ":cx_php_proto",
# ],
# )
##############################################################################
# Node.js

View File

@ -109,6 +109,25 @@ service Agents {
metadata_type: "google.protobuf.Struct"
};
}
// Validates the specified agent and creates or updates validation results.
// The agent in draft version is validated. Please call this API after the
// training is completed to get the complete validation results.
rpc ValidateAgent(ValidateAgentRequest) returns (AgentValidationResult) {
option (google.api.http) = {
post: "/v3beta1/{name=projects/*/locations/*/agents/*}:validate"
body: "*"
};
}
// Gets the latest agent validation result. Agent validation is performed
// when ValidateAgent is called.
rpc GetAgentValidationResult(GetAgentValidationResultRequest) returns (AgentValidationResult) {
option (google.api.http) = {
get: "/v3beta1/{name=projects/*/locations/*/agents/*/validationResult}"
};
option (google.api.method_signature) = "name";
}
}
// Settings related to speech recognition.
@ -122,13 +141,9 @@ message SpeechToTextSettings {
// in your app, product, or service to determine user intent and respond to the
// user in a natural way.
//
// After you create an agent, you can add
// [Intents][google.cloud.dialogflow.cx.v3beta1.Intent], [Entity
// Types][google.cloud.dialogflow.cx.v3beta1.EntityType],
// [Flows][google.cloud.dialogflow.cx.v3beta1.Flow],
// [Fulfillments][google.cloud.dialogflow.cx.v3beta1.Fulfillment],
// [Webhooks][google.cloud.dialogflow.cx.v3beta1.Webhook], and so on to manage
// the conversation flows..
// After you create an agent, you can add [Intents][google.cloud.dialogflow.cx.v3beta1.Intent],
// [Entity Types][google.cloud.dialogflow.cx.v3beta1.EntityType], [Flows][google.cloud.dialogflow.cx.v3beta1.Flow], [Fulfillments][google.cloud.dialogflow.cx.v3beta1.Fulfillment],
// [Webhooks][google.cloud.dialogflow.cx.v3beta1.Webhook], and so on to manage the conversation flows..
message Agent {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/Agent"
@ -136,10 +151,7 @@ message Agent {
};
// The unique identifier of the agent.
// Required for the
// [Agents.UpdateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.UpdateAgent]
// method.
// [Agents.CreateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.CreateAgent]
// Required for the [Agents.UpdateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.UpdateAgent] method. [Agents.CreateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.CreateAgent]
// populates the name automatically.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string name = 1;
@ -151,9 +163,7 @@ message Agent {
// See [Language
// Support](https://cloud.google.com/dialogflow/docs/reference/language)
// for a list of the currently supported language codes.
// This field cannot be set by the
// [Agents.UpdateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.UpdateAgent]
// method.
// This field cannot be set by the [Agents.UpdateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.UpdateAgent] method.
string default_language_code = 3 [(google.api.field_behavior) = IMMUTABLE];
// Required. The time zone of the agent from the [time zone
@ -174,15 +184,25 @@ message Agent {
// Speech recognition related settings.
SpeechToTextSettings speech_to_text_settings = 13;
// Immutable. Name of the start flow in this agent. A start flow will be
// automatically created when the agent is created, and can only be deleted by
// deleting the agent. Format: `projects/<Project ID>/locations/<Location
// ID>/agents/<Agent ID>/flows/<Flow ID>`.
// Immutable. Name of the start flow in this agent. A start flow will be automatically
// created when the agent is created, and can only be deleted by deleting the
// agent.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/flows/<Flow ID>`.
string start_flow = 16 [
(google.api.field_behavior) = IMMUTABLE,
(google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" }
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Flow"
}
];
// Name of the [SecuritySettings][google.cloud.dialogflow.cx.v3beta1.SecuritySettings] reference for the agent.
// Format: `projects/<Project ID>/locations/<Location
// ID>/securitySettings/<Security Settings ID>`.
string security_settings = 17 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/SecuritySettings"
}];
// Indicates if stackdriver logging is enabled for the agent.
bool enable_stackdriver_logging = 18;
@ -191,8 +211,7 @@ message Agent {
bool enable_spell_correction = 20;
}
// The request message for
// [Agents.ListAgents][google.cloud.dialogflow.cx.v3beta1.Agents.ListAgents].
// The request message for [Agents.ListAgents][google.cloud.dialogflow.cx.v3beta1.Agents.ListAgents].
message ListAgentsRequest {
// Required. The location to list all agents for.
// Format: `projects/<Project ID>/locations/<Location ID>`.
@ -211,8 +230,7 @@ message ListAgentsRequest {
string page_token = 3;
}
// The response message for
// [Agents.ListAgents][google.cloud.dialogflow.cx.v3beta1.Agents.ListAgents].
// The response message for [Agents.ListAgents][google.cloud.dialogflow.cx.v3beta1.Agents.ListAgents].
message ListAgentsResponse {
// The list of agents. There will be a maximum number of items returned based
// on the page_size field in the request.
@ -223,8 +241,7 @@ message ListAgentsResponse {
string next_page_token = 2;
}
// The request message for
// [Agents.GetAgent][google.cloud.dialogflow.cx.v3beta1.Agents.GetAgent].
// The request message for [Agents.GetAgent][google.cloud.dialogflow.cx.v3beta1.Agents.GetAgent].
message GetAgentRequest {
// Required. The name of the agent.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
@ -236,8 +253,7 @@ message GetAgentRequest {
];
}
// The request message for
// [Agents.CreateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.CreateAgent].
// The request message for [Agents.CreateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.CreateAgent].
message CreateAgentRequest {
// Required. The location to create a agent for.
// Format: `projects/<Project ID>/locations/<Location ID>`.
@ -252,8 +268,7 @@ message CreateAgentRequest {
Agent agent = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for
// [Agents.UpdateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.UpdateAgent].
// The request message for [Agents.UpdateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.UpdateAgent].
message UpdateAgentRequest {
// Required. The agent to update.
Agent agent = 1 [(google.api.field_behavior) = REQUIRED];
@ -263,8 +278,7 @@ message UpdateAgentRequest {
google.protobuf.FieldMask update_mask = 2;
}
// The request message for
// [Agents.DeleteAgent][google.cloud.dialogflow.cx.v3beta1.Agents.DeleteAgent].
// The request message for [Agents.DeleteAgent][google.cloud.dialogflow.cx.v3beta1.Agents.DeleteAgent].
message DeleteAgentRequest {
// Required. The name of the agent to delete.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
@ -276,8 +290,7 @@ message DeleteAgentRequest {
];
}
// The request message for
// [Agents.ExportAgent][google.cloud.dialogflow.cx.v3beta1.Agents.ExportAgent].
// The request message for [Agents.ExportAgent][google.cloud.dialogflow.cx.v3beta1.Agents.ExportAgent].
message ExportAgentRequest {
// Required. The name of the agent to export.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
@ -288,21 +301,19 @@ message ExportAgentRequest {
}
];
// Optional. The [Google Cloud
// Storage](https://cloud.google.com/storage/docs/) URI to export the agent
// to. The format of this URI must be `gs://<bucket-name>/<object-name>`. If
// left unspecified, the serialized agent is returned inline.
// Optional. The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to
// export the agent to. The format of this URI must be
// `gs://<bucket-name>/<object-name>`.
// If left unspecified, the serialized agent is returned inline.
string agent_uri = 2 [(google.api.field_behavior) = OPTIONAL];
}
// The response message for
// [Agents.ExportAgent][google.cloud.dialogflow.cx.v3beta1.Agents.ExportAgent].
// The response message for [Agents.ExportAgent][google.cloud.dialogflow.cx.v3beta1.Agents.ExportAgent].
message ExportAgentResponse {
// The exported agent.
oneof agent {
// The URI to a file containing the exported agent. This field is populated
// only if `agent_uri` is specified in
// [ExportAgentRequest][google.cloud.dialogflow.cx.v3beta1.ExportAgentRequest].
// only if `agent_uri` is specified in [ExportAgentRequest][google.cloud.dialogflow.cx.v3beta1.ExportAgentRequest].
string agent_uri = 1;
// Uncompressed raw byte content for agent.
@ -310,8 +321,7 @@ message ExportAgentResponse {
}
}
// The request message for
// [Agents.RestoreAgent][google.cloud.dialogflow.cx.v3beta1.Agents.RestoreAgent].
// The request message for [Agents.RestoreAgent][google.cloud.dialogflow.cx.v3beta1.Agents.RestoreAgent].
message RestoreAgentRequest {
// Required. The name of the agent to restore into.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
@ -333,3 +343,50 @@ message RestoreAgentRequest {
bytes agent_content = 3;
}
}
// The request message for [Agents.ValidateAgent][google.cloud.dialogflow.cx.v3beta1.Agents.ValidateAgent].
message ValidateAgentRequest {
// Required. The agent to validate.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Agent"
}
];
// If not specified, the agent's default language is used.
string language_code = 2;
}
// The request message for [Agents.GetAgentValidationResult][google.cloud.dialogflow.cx.v3beta1.Agents.GetAgentValidationResult].
message GetAgentValidationResultRequest {
// Required. The agent name.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/validationResult`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/AgentValidationResult"
}
];
// If not specified, the agent's default language is used.
string language_code = 2;
}
// The response message for [Agents.GetAgentValidationResult][google.cloud.dialogflow.cx.v3beta1.Agents.GetAgentValidationResult].
message AgentValidationResult {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/AgentValidationResult"
pattern: "projects/{project}/locations/{location}/agents/{agent}/validationResult"
};
// The unique identifier of the agent validation result.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/validationResult`.
string name = 1;
// Contains all flow validation results.
repeated FlowValidationResult flow_validation_results = 2;
}

View File

@ -204,6 +204,9 @@ message VoiceSelectionParams {
// Optional. The name of the voice. If not set, the service will choose a
// voice based on the other parameters such as language_code and
// [ssml_gender][google.cloud.dialogflow.cx.v3beta1.VoiceSelectionParams.ssml_gender].
//
// For the list of available voices, please refer to [Supported voices and
// languages](https://cloud.google.com/text-to-speech/docs/voices).
string name = 1;
// Optional. The preferred gender of the voice. If not set, the service will

View File

@ -7,20 +7,29 @@ apis:
- name: google.cloud.dialogflow.cx.v3beta1.Agents
- name: google.cloud.dialogflow.cx.v3beta1.EntityTypes
- name: google.cloud.dialogflow.cx.v3beta1.Environments
- name: google.cloud.dialogflow.cx.v3beta1.Experiments
- name: google.cloud.dialogflow.cx.v3beta1.Flows
- name: google.cloud.dialogflow.cx.v3beta1.Intents
- name: google.cloud.dialogflow.cx.v3beta1.Pages
- name: google.cloud.dialogflow.cx.v3beta1.SecuritySettingsService
- name: google.cloud.dialogflow.cx.v3beta1.SessionEntityTypes
- name: google.cloud.dialogflow.cx.v3beta1.Sessions
- name: google.cloud.dialogflow.cx.v3beta1.TestCases
- name: google.cloud.dialogflow.cx.v3beta1.TransitionRouteGroups
- name: google.cloud.dialogflow.cx.v3beta1.Versions
- name: google.cloud.dialogflow.cx.v3beta1.Webhooks
types:
- name: google.cloud.dialogflow.cx.v3beta1.BatchRunTestCasesMetadata
- name: google.cloud.dialogflow.cx.v3beta1.BatchRunTestCasesResponse
- name: google.cloud.dialogflow.cx.v3beta1.CreateVersionOperationMetadata
- name: google.cloud.dialogflow.cx.v3beta1.ExportAgentResponse
- name: google.cloud.dialogflow.cx.v3beta1.ExportTestCasesMetadata
- name: google.cloud.dialogflow.cx.v3beta1.ExportTestCasesResponse
- name: google.cloud.dialogflow.cx.v3beta1.ImportTestCasesMetadata
- name: google.cloud.dialogflow.cx.v3beta1.ImportTestCasesResponse
- name: google.cloud.dialogflow.cx.v3beta1.RunTestCaseMetadata
- name: google.cloud.dialogflow.cx.v3beta1.RunTestCaseResponse
- name: google.cloud.dialogflow.cx.v3beta1.TestError
- name: google.cloud.dialogflow.cx.v3beta1.WebhookRequest
- name: google.cloud.dialogflow.cx.v3beta1.WebhookResponse
@ -52,8 +61,6 @@ backend:
deadline: 60.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.Environments.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.Experiments.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.Flows.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.Intents.*'
@ -72,6 +79,8 @@ backend:
deadline: 60.0
- selector: google.cloud.dialogflow.cx.v3beta1.Sessions.StreamingDetectIntent
deadline: 220.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.TestCases.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.TransitionRouteGroups.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.cx.v3beta1.Versions.*'
@ -98,11 +107,6 @@ authentication:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.cx.v3beta1.Experiments.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.cx.v3beta1.Flows.*'
oauth:
canonical_scopes: |-
@ -133,6 +137,11 @@ authentication:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.cx.v3beta1.TestCases.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.cx.v3beta1.TransitionRouteGroups.*'
oauth:
canonical_scopes: |-

View File

@ -115,7 +115,6 @@ message EntityType {
};
// An **entity entry** for an associated entity type.
// Next Id = 8
message Entity {
// Required. The primary value associated with this entity entry.
// For example, if the entity type is *vegetable*, the value could be

View File

@ -1,415 +0,0 @@
// 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.cloud.dialogflow.cx.v3beta1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.Cx.V3Beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3beta1;cx";
option java_multiple_files = true;
option java_outer_classname = "ExperimentProto";
option java_package = "com.google.cloud.dialogflow.cx.v3beta1";
option objc_class_prefix = "DF";
// Service for managing [Experiments][google.cloud.dialogflow.cx.v3beta1.Experiment].
service Experiments {
option (google.api.default_host) = "dialogflow.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/dialogflow";
// Returns the list of all experiments in the specified [Environment][google.cloud.dialogflow.cx.v3beta1.Environment].
rpc ListExperiments(ListExperimentsRequest) returns (ListExperimentsResponse) {
option (google.api.http) = {
get: "/v3beta1/{parent=projects/*/locations/*/agents/*/environments/*}/experiments"
};
option (google.api.method_signature) = "parent";
}
// Retrieves the specified [Experiment][google.cloud.dialogflow.cx.v3beta1.Experiment].
rpc GetExperiment(GetExperimentRequest) returns (Experiment) {
option (google.api.http) = {
get: "/v3beta1/{name=projects/*/locations/*/agents/*/environments/*/experiments/*}"
};
option (google.api.method_signature) = "name";
}
// Creates an [Experiment][google.cloud.dialogflow.cx.v3beta1.Experiment] in the specified [Environment][google.cloud.dialogflow.cx.v3beta1.Environment].
rpc CreateExperiment(CreateExperimentRequest) returns (Experiment) {
option (google.api.http) = {
post: "/v3beta1/{parent=projects/*/locations/*/agents/*/environments/*}/experiments"
body: "experiment"
};
option (google.api.method_signature) = "parent,experiment";
}
// Updates the specified [Experiment][google.cloud.dialogflow.cx.v3beta1.Experiment].
rpc UpdateExperiment(UpdateExperimentRequest) returns (Experiment) {
option (google.api.http) = {
patch: "/v3beta1/{experiment.name=projects/*/locations/*/agents/*/environments/*/experiments/*}"
body: "experiment"
};
option (google.api.method_signature) = "experiment,update_mask";
}
// Deletes the specified [Experiment][google.cloud.dialogflow.cx.v3beta1.Experiment].
rpc DeleteExperiment(DeleteExperimentRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v3beta1/{name=projects/*/locations/*/agents/*/environments/*/experiments/*}"
};
option (google.api.method_signature) = "name";
}
// Starts the specified [Experiment][google.cloud.dialogflow.cx.v3beta1.Experiment]. This rpc only changes the state of
// experiment from PENDING to RUNNING.
rpc StartExperiment(StartExperimentRequest) returns (Experiment) {
option (google.api.http) = {
post: "/v3beta1/{name=projects/*/locations/*/agents/*/environments/*/experiments/*}:start"
body: "*"
};
option (google.api.method_signature) = "name";
}
// Stops the specified [Experiment][google.cloud.dialogflow.cx.v3beta1.Experiment]. This rpc only changes the state of
// experiment from RUNNING to DONE.
rpc StopExperiment(StopExperimentRequest) returns (Experiment) {
option (google.api.http) = {
post: "/v3beta1/{name=projects/*/locations/*/agents/*/environments/*/experiments/*}:stop"
body: "*"
};
option (google.api.method_signature) = "name";
}
}
// Represents an experiment in an environment.
// Next ID: 13
message Experiment {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/Experiment"
pattern: "projects/{project}/locations/{location}/agents/{agent}/environments/{environment}/experiments/{experiment}"
};
// Definition of the experiment.
// Next ID: 3
message Definition {
// The condition defines which subset of sessions are selected for
// this experiment. If not specified, all sessions are eligible. E.g.
// "query_input.language_code=en" See the [conditions
// reference](https://cloud.google.com/dialogflow/cx/docs/reference/condition).
string condition = 1;
// The variants of the experiment. We currently only support single variant
// experiment.
oneof variants {
// The flow versions as the variants of this experiment.
VersionVariants version_variants = 2;
}
}
// The inference result which includes an objective metric to optimize and the
// confidence interval.
message Result {
// A confidence interval is a range of possible values for the experiment
// objective you are trying to measure.
message ConfidenceInterval {
// The confidence level used to construct the interval, i.e. there is X%
// chance that the true value is within this interval.
double confidence_level = 1;
// The percent change between an experiment metric's value and the value
// for its control.
double ratio = 2;
// Lower bound of the interval.
double lower_bound = 3;
// Upper bound of the interval.
double upper_bound = 4;
}
// Metric and corresponding confidence intervals.
message Metric {
// The type of the metric.
MetricType type = 1;
// The actual value of the metric.
oneof value {
// Ratio value of a metric.
double ratio = 2;
}
// The probability that the treatment is better than all other treatments
// in the experiment
ConfidenceInterval confidence_interval = 3;
}
// Version variant and associated metrics.
message VersionMetrics {
// The name of the flow [Version][google.cloud.dialogflow.cx.v3beta1.Version].
// Format: `projects/<Project Number>/locations/<Location
// ID>/agents/<Agent ID>/flows/<Flow ID>/versions/<Version ID>`.
string version = 1 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Version"
}];
// The metrics and corresponding confidence intervals in the inference
// result.
repeated Metric metrics = 2;
// Number of sessions that were allocated to this version.
int32 session_count = 3;
}
// Types of metric for Dialogflow experiment.
enum MetricType {
// Metric unspecified.
METRIC_UNSPECIFIED = 0;
// Percentage of contained sessions without user calling back in 24 hours.
CONTAINED_SESSION_NO_CALLBACK_RATE = 1;
// Percentage of sessions that were handed to a human agent.
LIVE_AGENT_HANDOFF_RATE = 2;
// Percentage of sessions with the same user calling back.
CALLBACK_SESSION_RATE = 3;
// Percentage of sessions where user hung up.
ABANDONED_SESSION_RATE = 4;
// Percentage of sessions reached Dialogflow 'END_PAGE' or
// 'END_SESSION'.
SESSION_END_RATE = 5;
}
// Version variants and metrics.
repeated VersionMetrics version_metrics = 1;
// The last time the experiment's stats data was updated. Will have default
// value if stats have never been computed for this experiment.
google.protobuf.Timestamp last_update_time = 2;
}
// The state of the experiment.
enum State {
// State unspecified.
STATE_UNSPECIFIED = 0;
// The experiment is created but not started yet.
DRAFT = 1;
// The experiment is running.
RUNNING = 2;
// The experiment is done.
DONE = 3;
}
// The name of the experiment.
// Format: projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>/experiments/<Experiment ID>..
string name = 1;
// Required. The human-readable name of the experiment (unique in an environment). Limit
// of 64 characters.
string display_name = 2 [(google.api.field_behavior) = REQUIRED];
// The human-readable description of the experiment.
string description = 3;
// The current state of the experiment.
// Transition triggered by Expriments.StartExperiment: PENDING->RUNNING.
// Transition triggered by Expriments.CancelExperiment: PENDING->CANCELLED or
// RUNNING->CANCELLED.
State state = 4;
// The definition of the experiment.
Definition definition = 5;
// Inference result of the experiment.
Result result = 6;
// Creation time of this experiment.
google.protobuf.Timestamp create_time = 7;
// Start time of this experiment.
google.protobuf.Timestamp start_time = 8;
// End time of this experiment.
google.protobuf.Timestamp end_time = 9;
// Last update time of this experiment.
google.protobuf.Timestamp last_update_time = 10;
// Maximum number of days to run the experiment.
google.protobuf.Duration experiment_length = 11;
// The history of updates to the experiment variants.
repeated VariantsHistory variants_history = 12;
}
// A list of flow version variants.
message VersionVariants {
// A single flow version with specified traffic allocation.
message Variant {
// The name of the flow version.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/flows/<Flow ID>/versions/<Version ID>`.
string version = 1;
// Percentage of the traffic which should be routed to this
// version of flow. Traffic allocation for a single flow must sum up to 1.0.
float traffic_allocation = 2;
// Whether the variant is for the control group.
bool is_control_group = 3;
}
// A list of flow version variants.
repeated Variant variants = 1;
}
// The history of variants update.
message VariantsHistory {
// The variants updated. We currently only support single variant
// experiment.
oneof variants {
// The flow versions as the variants.
VersionVariants version_variants = 1;
}
// Update time of the variants.
google.protobuf.Timestamp update_time = 2;
}
// The request message for [Experiments.ListExperiments][google.cloud.dialogflow.cx.v3beta1.Experiments.ListExperiments].
message ListExperimentsRequest {
// Required. The [Environment][google.cloud.dialogflow.cx.v3beta1.Environment] to list all environments for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/Experiment"
}
];
// The maximum number of items to return in a single page. By default 20 and
// at most 100.
int32 page_size = 2;
// The next_page_token value returned from a previous list request.
string page_token = 3;
}
// The response message for [Experiments.ListExperiments][google.cloud.dialogflow.cx.v3beta1.Experiments.ListExperiments].
message ListExperimentsResponse {
// The list of experiments. There will be a maximum number of items
// returned based on the page_size field in the request. The list may in some
// cases be empty or contain fewer entries than page_size even if this isn't
// the last page.
repeated Experiment experiments = 1;
// Token to retrieve the next page of results, or empty if there are no more
// results in the list.
string next_page_token = 2;
}
// The request message for [Experiments.GetExperiment][google.cloud.dialogflow.cx.v3beta1.Experiments.GetExperiment].
message GetExperimentRequest {
// Required. The name of the [Environment][google.cloud.dialogflow.cx.v3beta1.Environment].
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>/experiments/<Experiment ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Experiment"
}
];
}
// The request message for [Experiments.CreateExperiment][google.cloud.dialogflow.cx.v3beta1.Experiments.CreateExperiment].
message CreateExperimentRequest {
// Required. The [Agent][google.cloud.dialogflow.cx.v3beta1.Agent] to create an [Environment][google.cloud.dialogflow.cx.v3beta1.Environment] for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/Experiment"
}
];
// Required. The experiment to create.
Experiment experiment = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [Experiments.UpdateExperiment][google.cloud.dialogflow.cx.v3beta1.Experiments.UpdateExperiment].
message UpdateExperimentRequest {
// Required. The experiment to update.
Experiment experiment = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The mask to control which fields get updated.
google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [Experiments.DeleteExperiment][google.cloud.dialogflow.cx.v3beta1.Experiments.DeleteExperiment].
message DeleteExperimentRequest {
// Required. The name of the [Environment][google.cloud.dialogflow.cx.v3beta1.Environment] to delete.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>/experiments/<Experiment ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Experiment"
}
];
}
// The request message for [Experiments.StartExperiment][google.cloud.dialogflow.cx.v3beta1.Experiments.StartExperiment].
message StartExperimentRequest {
// Required. Resource name of the experiment to start.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>/experiments/<Experiment ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Experiment"
}
];
}
// The request message for [Experiments.StopExperiment][google.cloud.dialogflow.cx.v3beta1.Experiments.StopExperiment].
message StopExperimentRequest {
// Required. Resource name of the experiment to stop.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>/experiments/<Experiment ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Experiment"
}
];
}

View File

@ -21,6 +21,7 @@ import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/dialogflow/cx/v3beta1/page.proto";
import "google/cloud/dialogflow/cx/v3beta1/validation_message.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
@ -96,6 +97,25 @@ service Flows {
metadata_type: "google.protobuf.Struct"
};
}
// Validates the specified flow and creates or updates validation results.
// Please call this API after the training is completed to get the complete
// validation results.
rpc ValidateFlow(ValidateFlowRequest) returns (FlowValidationResult) {
option (google.api.http) = {
post: "/v3beta1/{name=projects/*/locations/*/agents/*/flows/*}:validate"
body: "*"
};
}
// Gets the latest flow validation result. Flow validation is performed
// when ValidateFlow is called.
rpc GetFlowValidationResult(GetFlowValidationResultRequest) returns (FlowValidationResult) {
option (google.api.http) = {
get: "/v3beta1/{name=projects/*/locations/*/agents/*/flows/*/validationResult}"
};
option (google.api.method_signature) = "name";
}
}
// Settings related to NLU.
@ -364,3 +384,54 @@ message TrainFlowRequest {
}
];
}
// The request message for [Flows.ValidateFlow][google.cloud.dialogflow.cx.v3beta1.Flows.ValidateFlow].
message ValidateFlowRequest {
// Required. The flow to validate.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/flows/<Flow ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Flow"
}
];
// If not specified, the agent's default language is used.
string language_code = 2;
}
// The request message for [Flows.GetFlowValidationResult][google.cloud.dialogflow.cx.v3beta1.Flows.GetFlowValidationResult].
message GetFlowValidationResultRequest {
// Required. The flow name.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/flows/<Flow ID>/validationResult`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/FlowValidationResult"
}
];
// If not specified, the agent's default language is used.
string language_code = 2;
}
// The response message for [Flows.GetFlowValidationResult][google.cloud.dialogflow.cx.v3beta1.Flows.GetFlowValidationResult].
message FlowValidationResult {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/FlowValidationResult"
pattern: "projects/{project}/locations/{location}/agents/{agent}/flows/{flow}/validationResult"
};
// The unique identifier of the flow validation result.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/flows/<Flow ID>/validationResult`.
string name = 1;
// Contains all validation messages.
repeated ValidationMessage validation_messages = 2;
// Last time the flow was validated.
google.protobuf.Timestamp update_time = 3;
}

View File

@ -155,9 +155,12 @@ message Intent {
// Indicates whether the parameter represents a list of values.
bool is_list = 3;
// Indicates whether the parameter content is logged in text and audio. If
// it is set to true, the parameter content will be replaced to parameter
// id in both request and response. The default value is false.
// Indicates whether the parameter content should be redacted in text and
// audio. If the flag is set to true, the parameter content will be replaced
// by parameter name in both request and response.
// Note: the parameter content is subject to redaction if either parameter
// level redaction or [entity type level redaction][google.cloud.dialogflow.cx.v3beta1.EntityType.redact] is
// enabled.
bool redact = 4;
}

View File

@ -147,9 +147,13 @@ message Page {
//
// * TransitionRoutes defined in the page with intent specified.
// * TransitionRoutes defined in the
// [transition route groups][google.cloud.dialogflow.cx.v3beta1.Page.transition_route_groups].
// [transition route groups][google.cloud.dialogflow.cx.v3beta1.Page.transition_route_groups] with intent
// specified.
// * TransitionRoutes defined in flow with intent specified.
// * TransitionRoutes defined in the page with only condition specified.
// * TransitionRoutes defined in the
// [transition route groups][google.cloud.dialogflow.cx.v3beta1.Page.transition_route_groups] with only
// condition specified.
repeated TransitionRoute transition_routes = 9;
// Handlers associated with the page to handle events such as webhook errors,
@ -238,9 +242,12 @@ message Form {
// the default value will be ignored.
google.protobuf.Value default_value = 9;
// Indicates whether the parameter content is logged in text and audio. If
// it is set to true, the parameter content will be replaced to parameter
// name in both request and response. The default value is false.
// Indicates whether the parameter content should be redacted in text and
// audio. If the flag is set to true, the parameter content will be replaced
// by parameter name in both request and response.
// Note: the parameter content is subject to redaction if either parameter
// level redaction or [entity type level redaction][google.cloud.dialogflow.cx.v3beta1.EntityType.redact] is
// enabled.
bool redact = 11;
}

View File

@ -113,6 +113,25 @@ message ResponseMessage {
bool allow_playback_interruption = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Indicates that interaction with the Dialogflow agent has ended.
// This message is generated by Dialogflow only and not supposed to be
// defined by the user.
message EndInteraction {
}
// Specifies an audio clip to be played by the client as part of the response.
message PlayAudio {
// Required. URI of the audio clip. Dialogflow does not impose any validation on this
// value. It is specific to the client that reads it.
string audio_uri = 1 [(google.api.field_behavior) = REQUIRED];
// Output only. Whether the playback of this message can be interrupted by the end
// user's speech and the client can then starts the next Dialogflow
// request.
bool allow_playback_interruption = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Represents an audio message that is composed of both segments
// synthesized from the Dialogflow agent prompts and ones hosted externally
// at the specified URIs.
@ -144,25 +163,6 @@ message ResponseMessage {
repeated Segment segments = 1;
}
// Indicates that interaction with the Dialogflow agent has ended.
// This message is generated by Dialogflow only and not supposed to be
// defined by the user.
message EndInteraction {
}
// Specifies an audio clip to be played by the client as part of the response.
message PlayAudio {
// Required. URI of the audio clip. Dialogflow does not impose any validation on this
// value. It is specific to the client that reads it.
string audio_uri = 1 [(google.api.field_behavior) = REQUIRED];
// Output only. Whether the playback of this message can be interrupted by the end
// user's speech and the client can then starts the next Dialogflow
// request.
bool allow_playback_interruption = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Required. The rich response message.
oneof message {
// Returns a text response.

View File

@ -0,0 +1,835 @@
// 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.cloud.dialogflow.cx.v3beta1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/dialogflow/cx/v3beta1/flow.proto";
import "google/cloud/dialogflow/cx/v3beta1/intent.proto";
import "google/cloud/dialogflow/cx/v3beta1/page.proto";
import "google/cloud/dialogflow/cx/v3beta1/response_message.proto";
import "google/cloud/dialogflow/cx/v3beta1/session.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/status.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.Cx.V3Beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3beta1;cx";
option java_multiple_files = true;
option java_outer_classname = "TestCaseProto";
option java_package = "com.google.cloud.dialogflow.cx.v3beta1";
option objc_class_prefix = "DF";
// Service for managing [Test Cases][google.cloud.dialogflow.cx.v3beta1.TestCase] and
// [Test Case Results][google.cloud.dialogflow.cx.v3beta1.TestCaseResult].
service TestCases {
option (google.api.default_host) = "dialogflow.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/dialogflow";
// Fetches a list of test cases for a given agent.
rpc ListTestCases(ListTestCasesRequest) returns (ListTestCasesResponse) {
option (google.api.http) = {
get: "/v3beta1/{parent=projects/*/locations/*/agents/*}/testCases"
};
option (google.api.method_signature) = "parent";
}
// Batch deletes test cases.
rpc BatchDeleteTestCases(BatchDeleteTestCasesRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/v3beta1/{parent=projects/*/locations/*/agents/*}/testCases:batchDelete"
body: "*"
};
option (google.api.method_signature) = "parent";
}
// Gets a test case.
rpc GetTestCase(GetTestCaseRequest) returns (TestCase) {
option (google.api.http) = {
get: "/v3beta1/{name=projects/*/locations/*/agents/*/testCases/*}"
};
option (google.api.method_signature) = "name";
}
// Creates a test case for the given agent.
rpc CreateTestCase(CreateTestCaseRequest) returns (TestCase) {
option (google.api.http) = {
post: "/v3beta1/{parent=projects/*/locations/*/agents/*}/testCases"
body: "test_case"
};
option (google.api.method_signature) = "parent,test_case";
}
// Updates the specified test case.
rpc UpdateTestCase(UpdateTestCaseRequest) returns (TestCase) {
option (google.api.http) = {
patch: "/v3beta1/{test_case.name=projects/*/locations/*/agents/*/testCases/*}"
body: "test_case"
};
option (google.api.method_signature) = "test_case,update_mask";
}
// Kicks off a test case run.
rpc RunTestCase(RunTestCaseRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v3beta1/projects/*/locations/*/agents/*/testCases:run"
body: "*"
};
option (google.longrunning.operation_info) = {
response_type: "RunTestCaseResponse"
metadata_type: "RunTestCaseMetadata"
};
}
// Kicks off a batch run of test cases.
rpc BatchRunTestCases(BatchRunTestCasesRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v3beta1/{parent=projects/*/locations/*/agents/*}/testCases:batchRun"
body: "*"
};
option (google.longrunning.operation_info) = {
response_type: "BatchRunTestCasesResponse"
metadata_type: "BatchRunTestCasesMetadata"
};
}
// Calculates the test coverage for an agent.
rpc CalculateCoverage(CalculateCoverageRequest) returns (CalculateCoverageResponse) {
option (google.api.http) = {
get: "/v3beta1/{agent=projects/*/locations/*/agents/*}/testCases:calculateCoverage"
};
}
// Imports the test cases from a Cloud Storage bucket or a local file. It
// always creates new test cases and won't overwite any existing ones. The
// provided ID in the imported test case is neglected.
rpc ImportTestCases(ImportTestCasesRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v3beta1/{parent=projects/*/locations/*/agents/*}/testCases:import"
body: "*"
};
option (google.longrunning.operation_info) = {
response_type: "ImportTestCasesResponse"
metadata_type: "ImportTestCasesMetadata"
};
}
// Exports the test cases under the agent to a Cloud Storage bucket or a local
// file. Filter can be applied to export a subset of test cases.
rpc ExportTestCases(ExportTestCasesRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v3beta1/{parent=projects/*/locations/*/agents/*}/testCases:export"
body: "*"
};
option (google.longrunning.operation_info) = {
response_type: "ExportTestCasesResponse"
metadata_type: "ExportTestCasesMetadata"
};
}
// Fetches a list of results for a given test case.
rpc ListTestCaseResults(ListTestCaseResultsRequest) returns (ListTestCaseResultsResponse) {
option (google.api.http) = {
get: "/v3beta1/{parent=projects/*/locations/*/agents/*/testCases/*}/results"
};
option (google.api.method_signature) = "parent";
}
}
// Represents a test case.
message TestCase {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/TestCase"
pattern: "projects/{project}/locations/{location}/agents/{agent}/testCases/{test_case}"
};
// The unique identifier of the test case.
// [TestCases.CreateTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.CreateTestCase] will populate the name automatically.
// Otherwise use format: `projects/<Project ID>/locations/<LocationID>/agents/
// <AgentID>/testCases/<TestCase ID>`.
string name = 1;
// Tags are short descriptions that users may apply to test cases for
// organizational and filtering purposes. Each tag should start with "#" and
// has a limit of 30 characters.
repeated string tags = 2;
// Required. The human-readable name of the test case, unique within the agent. Limit of
// 200 characters.
string display_name = 3 [(google.api.field_behavior) = REQUIRED];
// Additional freeform notes about the test case. Limit of 400 characters.
string notes = 4;
// Config for the test case.
TestConfig test_config = 13;
// The conversation turns uttered when the test case was created, in
// chronological order. These include the canonical set of agent utterances
// that should occur when the agent is working properly.
repeated ConversationTurn test_case_conversation_turns = 5;
// Output only. When the test was created.
google.protobuf.Timestamp creation_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
// The latest test result.
TestCaseResult last_test_result = 12;
}
// Represents a result from running a test case in an agent environment.
message TestCaseResult {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/TestCaseResult"
pattern: "projects/{project}/locations/{location}/agents/{agent}/testCases/{test_case}/results/{result}"
};
// The resource name for the test case result. Format:
// `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>/testCases/
// <TestCase ID>/results/<TestCaseResult ID>`.
string name = 1;
// Optional. Environment where the test was run. If not set, it indicates the draft
// environment.
string environment = 2 [
(google.api.field_behavior) = OPTIONAL,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Environment"
}
];
// The conversation turns uttered during the test case replay in chronological
// order.
repeated ConversationTurn conversation_turns = 3;
// Whether the test case passed in the agent environment.
TestResult test_result = 4;
// The time that the test was run.
google.protobuf.Timestamp test_time = 5;
}
// Represents configurations for a test case.
message TestConfig {
// Session parameters to be compared when calculating differences.
repeated string tracking_parameters = 1;
// Flow name. If not set, default start flow is assumed.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/flows/<Flow ID>`.
string flow = 2 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Flow"
}];
}
// One interaction between a human and virtual agent. The human provides some
// input and the virtual agent provides a response.
message ConversationTurn {
// The input from the human user.
message UserInput {
// Supports [text input][google.cloud.dialogflow.cx.v3beta1.QueryInput.text], [event input][google.cloud.dialogflow.cx.v3beta1.QueryInput.event],
// [dtmf input][google.cloud.dialogflow.cx.v3beta1.QueryInput.dtmf] in the test case.
QueryInput input = 5;
// Parameters that need to be injected into the conversation during intent
// detection.
google.protobuf.Struct injected_parameters = 2;
// If webhooks should be allowed to trigger in response to the user
// utterance. Often if parameters are injected, webhooks should not be
// enabled.
bool is_webhook_enabled = 3;
}
// The output from the virtual agent.
message VirtualAgentOutput {
// The session parameters available to the bot at this point.
google.protobuf.Struct session_parameters = 4;
// Output only. If this is part of a [result conversation
// turn][TestCaseResult.conversation_turns], the list of differences
// between the original run and the replay for this output, if any.
repeated TestRunDifference differences = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. Input only. The diagnostic
// [info][Session.DetectIntentResponse.QueryResult.diagnostic_info]
// output for the turn.
google.protobuf.Struct diagnostic_info = 6 [
(google.api.field_behavior) = REQUIRED,
(google.api.field_behavior) = INPUT_ONLY
];
// The [Intent][google.cloud.dialogflow.cx.v3beta1.Intent] that triggered the response. Only some fields such as
// name and displayname will be set.
Intent triggered_intent = 7;
// The [Page][google.cloud.dialogflow.cx.v3beta1.Page] on which the utterance was spoken. Only some fields such as
// name and displayname will be set.
Page current_page = 8;
// The [text][google.cloud.dialogflow.cx.v3beta1.ResponseMessage.Text] responses from the agent for the turn.
repeated ResponseMessage.Text text_responses = 9;
// Response error from the agent in the test result. If set, other output
// is empty.
google.rpc.Status status = 10;
}
// The user input.
UserInput user_input = 1;
// The virtual agent output.
VirtualAgentOutput virtual_agent_output = 2;
}
// The description of differences between original and replayed agent output.
message TestRunDifference {
// What part of the message replay differs from the test case.
enum DiffType {
// Should never be used.
DIFF_TYPE_UNSPECIFIED = 0;
// The intent.
INTENT = 1;
// The page.
PAGE = 2;
// The parameters.
PARAMETERS = 3;
// The message utterance.
UTTERANCE = 4;
}
// The type of diff.
DiffType type = 1;
// A description of the diff, showing the actual output vs expected output.
string description = 2;
}
// Transition coverage represents the percentage of all possible transitions
// present within any of a parent's test cases.
message TransitionCoverage {
// The source or target of a transition.
message TransitionNode {
// A TransitionNode can be either a page or a flow.
oneof kind {
// Indicates a transition to a [Page][google.cloud.dialogflow.cx.v3beta1.Page]. Only some fields such as name and
// displayname will be set.
Page page = 1;
// Indicates a transition to a [Flow][google.cloud.dialogflow.cx.v3beta1.Flow]. Only some fields such as name and
// displayname will be set.
Flow flow = 2;
}
}
// A transition in the agent's graph.
message Transition {
// The start node of a transition.
TransitionNode source = 1;
// The index of a transition in the transition list. Starting from 0.
int32 index = 4;
// The end node of a transition.
TransitionNode target = 2;
// Whether or not the transition is covered by at least one of the
// agent's test cases.
bool covered = 3;
// The detailed transition.
oneof detail {
// Intent route or condition route.
TransitionRoute transition_route = 5;
// Event handler.
EventHandler event_handler = 6;
}
}
// The list of Transitions present in the agent.
repeated Transition transitions = 1;
// The percent of transitions in the agent that are covered.
float coverage_score = 2;
}
// Intent coverage represents the percentage of all possible intents in the
// agent that are triggered in any of a parent's test cases.
message IntentCoverage {
// The agent's intent.
message Intent {
// The intent full resource name
string intent = 1 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Intent"
}];
// Whether or not the intent is covered by at least one of the agent's
// test cases.
bool covered = 2;
}
// The list of Intents present in the agent
repeated Intent intents = 1;
// The percent of intents in the agent that are covered.
float coverage_score = 2;
}
// The request message for [TestCases.CalculateCoverage][google.cloud.dialogflow.cx.v3beta1.TestCases.CalculateCoverage].
message CalculateCoverageRequest {
// The type of coverage score requested.
enum CoverageType {
// Should never be used.
COVERAGE_TYPE_UNSPECIFIED = 0;
// Intent coverage.
INTENT = 1;
// Page transition coverage
PAGE_TRANSITION = 2;
}
// Required. The agent to calculate coverage for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string agent = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Agent"
}
];
// Required. The type of coverage requested.
CoverageType type = 2 [(google.api.field_behavior) = REQUIRED];
}
// The response message for [TestCases.CalculateCoverage][google.cloud.dialogflow.cx.v3beta1.TestCases.CalculateCoverage].
message CalculateCoverageResponse {
// The agent to calculate coverage for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string agent = 5 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Agent"
}];
// The type of coverage requested.
oneof coverage_type {
// Intent coverage.
IntentCoverage intent_coverage = 2;
// Transition coverage.
TransitionCoverage transition_coverage = 4;
}
}
// The request message for [TestCases.ListTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ListTestCases].
message ListTestCasesRequest {
// Specifies how much test case information to include in the response.
enum TestCaseView {
// The default / unset value.
// The API will default to the BASIC view.
TEST_CASE_VIEW_UNSPECIFIED = 0;
// Include basic metadata about the test case, but not the conversation
// turns. This is the default value.
BASIC = 1;
// Include everything.
FULL = 2;
}
// Required. The agent to list all pages for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCase"
}
];
// The maximum number of items to return in a single page. By default 20.
// Note that when TestCaseView = FULL, the maximum page size allowed is 20.
// When TestCaseView = BASIC, the maximum page size allowed is 500.
int32 page_size = 2;
// The next_page_token value returned from a previous list request.
string page_token = 3;
// Specifies whether response should include all fields or just the metadata.
TestCaseView view = 4;
}
// The response message for [TestCases.ListTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ListTestCases].
message ListTestCasesResponse {
// The list of test cases. There will be a maximum number of items returned
// based on the page_size field in the request.
repeated TestCase test_cases = 1;
// Token to retrieve the next page of results, or empty if there are no more
// results in the list.
string next_page_token = 2;
}
// The request message for [TestCases.BatchDeleteTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.BatchDeleteTestCases].
message BatchDeleteTestCasesRequest {
// Required. The agent to delete test cases from.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCase"
}
];
// Required. Format of test case names: `projects/<Project ID>/locations/
// <Location ID>/agents/<AgentID>/testCases/<TestCase ID>`.
repeated string names = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/TestCase"
}
];
}
// The request message for [TestCases.CreateTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.CreateTestCase].
message CreateTestCaseRequest {
// Required. The agent to create the test case for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCase"
}
];
// Required. The test case to create.
TestCase test_case = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [TestCases.UpdateTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.UpdateTestCase].
message UpdateTestCaseRequest {
// Required. The test case to update.
TestCase test_case = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The mask to specify which fields should be updated. Only a test case's
// metadata and replayed_conversation_turns may be updated. The original
// test_case_conversation_turns may not be updated.
google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [TestCases.GetTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.GetTestCase].
message GetTestCaseRequest {
// Required. The name of the testcase.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/testCases/<TestCase ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/TestCase"
}
];
}
// The request message for [TestCases.RunTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.RunTestCase].
message RunTestCaseRequest {
// Required. Format of test case name to run: `projects/<Project ID>/locations/
// <Location ID>/agents/<AgentID>/testCases/<TestCase ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/TestCase"
}
];
// Optional. Environment name. If not set, draft environment is assumed.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/environments/<Environment ID>`.
string environment = 2 [
(google.api.field_behavior) = OPTIONAL,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Environment"
}
];
}
// The response message for [TestCases.RunTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.RunTestCase].
message RunTestCaseResponse {
// The result.
TestCaseResult result = 2;
}
// Metadata returned for the [TestCases.RunTestCase][google.cloud.dialogflow.cx.v3beta1.TestCases.RunTestCase] long running operation.
message RunTestCaseMetadata {
}
// The request message for [TestCases.BatchRunTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.BatchRunTestCases].
message BatchRunTestCasesRequest {
// Required. Agent name. Format: `projects/<Project ID>/locations/<Location ID>/agents/
// <AgentID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCase"
}
];
// Optional. If not set, draft environment is assumed. Format: `projects/<Project
// ID>/locations/<Location ID>/agents/<Agent ID>/environments/<Environment
// ID>`.
string environment = 2 [
(google.api.field_behavior) = OPTIONAL,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Environment"
}
];
// Required. Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/testCases/<TestCase ID>`.
repeated string test_cases = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/TestCase"
}
];
}
// The response message for [TestCases.BatchRunTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.BatchRunTestCases].
message BatchRunTestCasesResponse {
// The test case results. The detailed
// [conversation turns][google.cloud.dialogflow.cx.v3beta1.TestCaseResult.conversation_turns] are empty in this
// response.
repeated TestCaseResult results = 1;
}
// Metadata returned for the [TestCases.BatchRunTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.BatchRunTestCases] long running
// operation.
message BatchRunTestCasesMetadata {
// The test errors.
repeated TestError errors = 1;
}
// Error info for running a test.
message TestError {
// The test case resource name.
string test_case = 1 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/TestCase"
}];
// The status associated with the test.
google.rpc.Status status = 2;
// The timestamp when the test was completed.
google.protobuf.Timestamp test_time = 3;
}
// The request message for [TestCases.ImportTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ImportTestCases].
message ImportTestCasesRequest {
// Required. The agent to import test cases to.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCase"
}
];
// Required. The source to import.
oneof source {
// The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI
// to import test cases from. The format of this URI must be
// `gs://<bucket-name>/<object-name>`.
string gcs_uri = 2;
// Uncompressed raw byte content for test cases.
bytes content = 3;
}
}
// The response message for [TestCases.ImportTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ImportTestCases].
message ImportTestCasesResponse {
// The unique identifiers of the new test cases.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/testCases/<TestCase ID>`.
repeated string names = 1 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/TestCase"
}];
}
// Metadata returned for the [TestCases.ImportTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ImportTestCases] long running
// operation.
message ImportTestCasesMetadata {
// Errors for failed test cases.
repeated TestCaseError errors = 1;
}
// Error info for importing a test.
message TestCaseError {
// The test case.
TestCase test_case = 1;
// The status associated with the test case.
google.rpc.Status status = 2;
}
// The request message for [TestCases.ExportTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ExportTestCases].
message ExportTestCasesRequest {
// Data format of the exported test cases.
enum DataFormat {
// Unspecified format.
DATA_FORMAT_UNSPECIFIED = 0;
// Raw bytes.
BLOB = 1;
// JSON format.
JSON = 2;
}
// Required. The agent where to export test cases from.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCase"
}
];
// The destination to export.
oneof destination {
// The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to
// export the test cases to. The format of this URI must be
// `gs://<bucket-name>/<object-name>`. If unspecified, the serialized test
// cases is returned inline.
string gcs_uri = 2;
}
// The data format of the exported test cases. If not specified, `BLOB` is
// assumed.
DataFormat data_format = 3;
// The filter expression used to filter exported test cases, see
// [API Filtering](https://aip.dev/160). The expression is case insensitive
// and supports the following syntax:
//
// name = <value> [OR name = <value>] ...
//
// For example:
//
// * "name = t1 OR name = t2" matches the test case with the exact resource
// name "t1" or "t2".
string filter = 4;
}
// The response message for [TestCases.ExportTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ExportTestCases].
message ExportTestCasesResponse {
// The exported test cases.
oneof destination {
// The URI to a file containing the exported test cases. This field is
// populated only if `gcs_uri` is specified in
// [ExportTestCasesRequest][google.cloud.dialogflow.cx.v3beta1.ExportTestCasesRequest].
string gcs_uri = 1;
// Uncompressed raw byte content for test cases.
bytes content = 2;
}
}
// Metadata returned for the [TestCases.ExportTestCases][google.cloud.dialogflow.cx.v3beta1.TestCases.ExportTestCases] long running
// operation.
message ExportTestCasesMetadata {
}
// The request message for [TestCases.ListTestCaseResults][google.cloud.dialogflow.cx.v3beta1.TestCases.ListTestCaseResults].
message ListTestCaseResultsRequest {
// Required. The test case to list results for.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>/
// testCases/<TestCase ID>`. Specify a `-` as a wildcard for TestCase ID to
// list results across multiple test cases.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/TestCaseResult"
}
];
// The maximum number of items to return in a single page. By default 100 and
// at most 1000.
int32 page_size = 2;
// The next_page_token value returned from a previous list request.
string page_token = 3;
// The filter expression used to filter test case results. See
// [API Filtering](https://aip.dev/160).
//
// The expression is case insensitive. Only 'AND' is supported for logical
// operators. The supported syntax is listed below in detail:
//
// <field> <operator> <value> [AND <field> <operator> <value>] ...
// [AND latest]
//
// The supported fields and operators are:
// field operator
// `environment` `=`, `IN` (Use value `draft` for draft environment)
// `test_time` `>`, `<`
//
// `latest` only returns the latest test result in all results for each test
// case.
//
// Examples:
// * "environment=draft AND latest" matches the latest test result for each
// test case in the draft environment.
// * "environment IN (e1,e2)" matches any test case results with an
// environment resource name of either "e1" or "e2".
// * "test_time > 1602540713" matches any test case results with test time
// later than a unix timestamp in seconds 1602540713.
string filter = 4;
}
// The response message for [TestCases.ListTestCaseResults][google.cloud.dialogflow.cx.v3beta1.TestCases.ListTestCaseResults].
message ListTestCaseResultsResponse {
// The list of test case results.
repeated TestCaseResult test_case_results = 1;
// Token to retrieve the next page of results, or empty if there are no more
// results in the list.
string next_page_token = 2;
}
// The test result for a test case and an agent environment.
enum TestResult {
// Not specified. Should never be used.
TEST_RESULT_UNSPECIFIED = 0;
// The test passed.
PASSED = 1;
// The test did not pass.
FAILED = 2;
}

View File

@ -102,11 +102,6 @@ message TransitionRouteGroup {
string display_name = 2 [(google.api.field_behavior) = REQUIRED];
// Transition routes associated with the [TransitionRouteGroup][google.cloud.dialogflow.cx.v3beta1.TransitionRouteGroup].
// Duplicate transition routes (i.e. using the same
// [`intent`][google.cloud.dialogflow.cx.v3beta1.TransitionRoute.intent]) are not allowed.
//
// Note that the [`name`][google.cloud.dialogflow.cx.v3beta1.TransitionRoute.name] field is not used in the
// transition route group scope.
repeated TransitionRoute transition_routes = 5;
}

View File

@ -0,0 +1,115 @@
// 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.cloud.dialogflow.cx.v3beta1;
import "google/protobuf/struct.proto";
import "google/api/annotations.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.Cx.V3Beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3beta1;cx";
option java_multiple_files = true;
option java_outer_classname = "ValidationMessageProto";
option java_package = "com.google.cloud.dialogflow.cx.v3beta1";
option objc_class_prefix = "DF";
// Agent/flow validation message.
message ValidationMessage {
// Resource types.
enum ResourceType {
// Unspecified.
RESOURCE_TYPE_UNSPECIFIED = 0;
// Agent.
AGENT = 1;
// Intent.
INTENT = 2;
// Intent training phrase.
INTENT_TRAINING_PHRASE = 8;
// Intent parameter.
INTENT_PARAMETER = 9;
// Multiple intents.
INTENTS = 10;
// Multiple training phrases.
INTENT_TRAINING_PHRASES = 11;
// Entity type.
ENTITY_TYPE = 3;
// Multiple entity types.
ENTITY_TYPES = 12;
// Webhook.
WEBHOOK = 4;
// Flow.
FLOW = 5;
// Page.
PAGE = 6;
// Multiple pages.
PAGES = 13;
// Transition route group.
TRANSITION_ROUTE_GROUP = 7;
}
// Severity level.
enum Severity {
// Unspecified.
SEVERITY_UNSPECIFIED = 0;
// The agent doesn't follow Dialogflow best practices.
INFO = 1;
// The agent may not behave as expected.
WARNING = 2;
// The agent may experience failures.
ERROR = 3;
}
// The type of the resources where the message is found.
ResourceType resource_type = 1;
// The names of the resources where the message is found.
repeated string resources = 2 [deprecated = true];
// The resource names of the resources where the message is found.
repeated ResourceName resource_names = 6;
// Indicates the severity of the message.
Severity severity = 3;
// The message detail.
string detail = 4;
}
// Resource name and display name.
message ResourceName {
// Name.
string name = 1;
// Display name.
string display_name = 2;
}

View File

@ -33,6 +33,10 @@ option java_multiple_files = true;
option java_outer_classname = "WebhookProto";
option java_package = "com.google.cloud.dialogflow.cx.v3beta1";
option objc_class_prefix = "DF";
option (google.api.resource_definition) = {
type: "servicedirectory.googleapis.com/Service"
pattern: "projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}"
};
// Service for managing [Webhooks][google.cloud.dialogflow.cx.v3beta1.Webhook].
service Webhooks {
@ -424,9 +428,11 @@ message PageInfo {
message SessionInfo {
// Always present for [WebhookRequest][google.cloud.dialogflow.cx.v3beta1.WebhookRequest]. Ignored for [WebhookResponse][google.cloud.dialogflow.cx.v3beta1.WebhookResponse].
// The unique identifier of the [session][google.cloud.dialogflow.cx.v3beta1.DetectIntentRequest.session]. This
// field can be used by the webhook to identify a user.
// field can be used by the webhook to identify a session.
// Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent
// ID>/sessions/<Session ID>`.
// ID>/sessions/<Session ID>` or `projects/<Project ID>/locations/<Location
// ID>/agents/<Agent ID>/environments/<Environment ID>/sessions/<Session ID>`
// if environment is specified.
string session = 1 [(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Session"
}];