1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.cloud.dialogflow.cx.v3; 18 19import "google/api/annotations.proto"; 20import "google/api/client.proto"; 21import "google/api/field_behavior.proto"; 22import "google/api/resource.proto"; 23import "google/cloud/dialogflow/cx/v3/page.proto"; 24import "google/cloud/dialogflow/cx/v3/validation_message.proto"; 25import "google/longrunning/operations.proto"; 26import "google/protobuf/empty.proto"; 27import "google/protobuf/field_mask.proto"; 28import "google/protobuf/struct.proto"; 29import "google/protobuf/timestamp.proto"; 30 31option cc_enable_arenas = true; 32option csharp_namespace = "Google.Cloud.Dialogflow.Cx.V3"; 33option go_package = "cloud.google.com/go/dialogflow/cx/apiv3/cxpb;cxpb"; 34option java_multiple_files = true; 35option java_outer_classname = "FlowProto"; 36option java_package = "com.google.cloud.dialogflow.cx.v3"; 37option objc_class_prefix = "DF"; 38option ruby_package = "Google::Cloud::Dialogflow::CX::V3"; 39 40// Service for managing [Flows][google.cloud.dialogflow.cx.v3.Flow]. 41service Flows { 42 option (google.api.default_host) = "dialogflow.googleapis.com"; 43 option (google.api.oauth_scopes) = 44 "https://www.googleapis.com/auth/cloud-platform," 45 "https://www.googleapis.com/auth/dialogflow"; 46 47 // Creates a flow in the specified agent. 48 // 49 // Note: You should always train a flow prior to sending it queries. See the 50 // [training 51 // documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training). 52 rpc CreateFlow(CreateFlowRequest) returns (Flow) { 53 option (google.api.http) = { 54 post: "/v3/{parent=projects/*/locations/*/agents/*}/flows" 55 body: "flow" 56 }; 57 option (google.api.method_signature) = "parent,flow"; 58 } 59 60 // Deletes a specified flow. 61 rpc DeleteFlow(DeleteFlowRequest) returns (google.protobuf.Empty) { 62 option (google.api.http) = { 63 delete: "/v3/{name=projects/*/locations/*/agents/*/flows/*}" 64 }; 65 option (google.api.method_signature) = "name"; 66 } 67 68 // Returns the list of all flows in the specified agent. 69 rpc ListFlows(ListFlowsRequest) returns (ListFlowsResponse) { 70 option (google.api.http) = { 71 get: "/v3/{parent=projects/*/locations/*/agents/*}/flows" 72 }; 73 option (google.api.method_signature) = "parent"; 74 } 75 76 // Retrieves the specified flow. 77 rpc GetFlow(GetFlowRequest) returns (Flow) { 78 option (google.api.http) = { 79 get: "/v3/{name=projects/*/locations/*/agents/*/flows/*}" 80 }; 81 option (google.api.method_signature) = "name"; 82 } 83 84 // Updates the specified flow. 85 // 86 // Note: You should always train a flow prior to sending it queries. See the 87 // [training 88 // documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training). 89 rpc UpdateFlow(UpdateFlowRequest) returns (Flow) { 90 option (google.api.http) = { 91 patch: "/v3/{flow.name=projects/*/locations/*/agents/*/flows/*}" 92 body: "flow" 93 }; 94 option (google.api.method_signature) = "flow,update_mask"; 95 } 96 97 // Trains the specified flow. Note that only the flow in 'draft' environment 98 // is trained. 99 // 100 // This method is a [long-running 101 // operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). 102 // The returned `Operation` type has the following method-specific fields: 103 // 104 // - `metadata`: An empty [Struct 105 // message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) 106 // - `response`: An [Empty 107 // message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#empty) 108 // 109 // Note: You should always train a flow prior to sending it queries. See the 110 // [training 111 // documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training). 112 rpc TrainFlow(TrainFlowRequest) returns (google.longrunning.Operation) { 113 option (google.api.http) = { 114 post: "/v3/{name=projects/*/locations/*/agents/*/flows/*}:train" 115 body: "*" 116 }; 117 option (google.api.method_signature) = "name"; 118 option (google.longrunning.operation_info) = { 119 response_type: "google.protobuf.Empty" 120 metadata_type: "google.protobuf.Struct" 121 }; 122 } 123 124 // Validates the specified flow and creates or updates validation results. 125 // Please call this API after the training is completed to get the complete 126 // validation results. 127 rpc ValidateFlow(ValidateFlowRequest) returns (FlowValidationResult) { 128 option (google.api.http) = { 129 post: "/v3/{name=projects/*/locations/*/agents/*/flows/*}:validate" 130 body: "*" 131 }; 132 } 133 134 // Gets the latest flow validation result. Flow validation is performed 135 // when ValidateFlow is called. 136 rpc GetFlowValidationResult(GetFlowValidationResultRequest) 137 returns (FlowValidationResult) { 138 option (google.api.http) = { 139 get: "/v3/{name=projects/*/locations/*/agents/*/flows/*/validationResult}" 140 }; 141 option (google.api.method_signature) = "name"; 142 } 143 144 // Imports the specified flow to the specified agent from a binary file. 145 // 146 // This method is a [long-running 147 // operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). 148 // The returned `Operation` type has the following method-specific fields: 149 // 150 // - `metadata`: An empty [Struct 151 // message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) 152 // - `response`: 153 // [ImportFlowResponse][google.cloud.dialogflow.cx.v3.ImportFlowResponse] 154 // 155 // Note: You should always train a flow prior to sending it queries. See the 156 // [training 157 // documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training). 158 rpc ImportFlow(ImportFlowRequest) returns (google.longrunning.Operation) { 159 option (google.api.http) = { 160 post: "/v3/{parent=projects/*/locations/*/agents/*}/flows:import" 161 body: "*" 162 }; 163 option (google.longrunning.operation_info) = { 164 response_type: "ImportFlowResponse" 165 metadata_type: "google.protobuf.Struct" 166 }; 167 } 168 169 // Exports the specified flow to a binary file. 170 // 171 // This method is a [long-running 172 // operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). 173 // The returned `Operation` type has the following method-specific fields: 174 // 175 // - `metadata`: An empty [Struct 176 // message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) 177 // - `response`: 178 // [ExportFlowResponse][google.cloud.dialogflow.cx.v3.ExportFlowResponse] 179 // 180 // Note that resources (e.g. intents, entities, webhooks) that the flow 181 // references will also be exported. 182 rpc ExportFlow(ExportFlowRequest) returns (google.longrunning.Operation) { 183 option (google.api.http) = { 184 post: "/v3/{name=projects/*/locations/*/agents/*/flows/*}:export" 185 body: "*" 186 }; 187 option (google.longrunning.operation_info) = { 188 response_type: "ExportFlowResponse" 189 metadata_type: "google.protobuf.Struct" 190 }; 191 } 192} 193 194// Settings related to NLU. 195message NluSettings { 196 // NLU model type. 197 enum ModelType { 198 // Not specified. `MODEL_TYPE_STANDARD` will be used. 199 MODEL_TYPE_UNSPECIFIED = 0; 200 201 // Use standard NLU model. 202 MODEL_TYPE_STANDARD = 1; 203 204 // Use advanced NLU model. 205 MODEL_TYPE_ADVANCED = 3; 206 } 207 208 // NLU model training mode. 209 enum ModelTrainingMode { 210 // Not specified. `MODEL_TRAINING_MODE_AUTOMATIC` will be used. 211 MODEL_TRAINING_MODE_UNSPECIFIED = 0; 212 213 // NLU model training is automatically triggered when a flow gets modified. 214 // User can also manually trigger model training in this mode. 215 MODEL_TRAINING_MODE_AUTOMATIC = 1; 216 217 // User needs to manually trigger NLU model training. Best for large flows 218 // whose models take long time to train. 219 MODEL_TRAINING_MODE_MANUAL = 2; 220 } 221 222 // Indicates the type of NLU model. 223 ModelType model_type = 1; 224 225 // To filter out false positive results and still get variety in matched 226 // natural language inputs for your agent, you can tune the machine learning 227 // classification threshold. If the returned score value is less than the 228 // threshold value, then a no-match event will be triggered. The score values 229 // range from 0.0 (completely uncertain) to 1.0 (completely certain). If set 230 // to 0.0, the default of 0.3 is used. 231 float classification_threshold = 3; 232 233 // Indicates NLU model training mode. 234 ModelTrainingMode model_training_mode = 4; 235} 236 237// Flows represents the conversation flows when you build your chatbot agent. 238// 239// A flow consists of many pages connected by the transition routes. 240// Conversations always start with the built-in Start Flow (with an all-0 ID). 241// Transition routes can direct the conversation session from the current flow 242// (parent flow) to another flow (sub flow). When the sub flow is finished, 243// Dialogflow will bring the session back to the parent flow, where the sub flow 244// is started. 245// 246// Usually, when a transition route is followed by a matched intent, the intent 247// will be "consumed". This means the intent won't activate more transition 248// routes. However, when the followed transition route moves the conversation 249// session into a different flow, the matched intent can be carried over and to 250// be consumed in the target flow. 251message Flow { 252 option (google.api.resource) = { 253 type: "dialogflow.googleapis.com/Flow" 254 pattern: "projects/{project}/locations/{location}/agents/{agent}/flows/{flow}" 255 }; 256 257 // The unique identifier of the flow. 258 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 259 // ID>/flows/<Flow ID>`. 260 string name = 1; 261 262 // Required. The human-readable name of the flow. 263 string display_name = 2 [(google.api.field_behavior) = REQUIRED]; 264 265 // The description of the flow. The maximum length is 500 characters. If 266 // exceeded, the request is rejected. 267 string description = 3; 268 269 // A flow's transition routes serve two purposes: 270 // 271 // * They are responsible for matching the user's first utterances in the 272 // flow. 273 // * They are inherited by every page's [transition 274 // routes][Page.transition_routes] and can support use cases such as the user 275 // saying "help" or "can I talk to a human?", which can be handled in a common 276 // way regardless of the current page. Transition routes defined in the page 277 // have higher priority than those defined in the flow. 278 // 279 // TransitionRoutes are evalauted in the following order: 280 // 281 // * TransitionRoutes with intent specified. 282 // * TransitionRoutes with only condition specified. 283 // 284 // TransitionRoutes with intent specified are inherited by pages in the flow. 285 repeated TransitionRoute transition_routes = 4; 286 287 // A flow's event handlers serve two purposes: 288 // 289 // * They are responsible for handling events (e.g. no match, 290 // webhook errors) in the flow. 291 // * They are inherited by every page's [event 292 // handlers][Page.event_handlers], which can be used to handle common events 293 // regardless of the current page. Event handlers defined in the page 294 // have higher priority than those defined in the flow. 295 // 296 // Unlike 297 // [transition_routes][google.cloud.dialogflow.cx.v3.Flow.transition_routes], 298 // these handlers are evaluated on a first-match basis. The first one that 299 // matches the event get executed, with the rest being ignored. 300 repeated EventHandler event_handlers = 10; 301 302 // A flow's transition route group serve two purposes: 303 // 304 // * They are responsible for matching the user's first utterances in the 305 // flow. 306 // * They are inherited by every page's [transition 307 // route groups][Page.transition_route_groups]. Transition route groups 308 // defined in the page have higher priority than those defined in the flow. 309 // 310 // Format:`projects/<Project ID>/locations/<Location ID>/agents/<Agent 311 // ID>/flows/<Flow ID>/transitionRouteGroups/<TransitionRouteGroup ID>`. 312 repeated string transition_route_groups = 15 313 [(google.api.resource_reference) = { 314 type: "dialogflow.googleapis.com/TransitionRouteGroup" 315 }]; 316 317 // NLU related settings of the flow. 318 NluSettings nlu_settings = 11; 319} 320 321// The request message for 322// [Flows.CreateFlow][google.cloud.dialogflow.cx.v3.Flows.CreateFlow]. 323message CreateFlowRequest { 324 // Required. The agent to create a flow for. 325 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`. 326 string parent = 1 [ 327 (google.api.field_behavior) = REQUIRED, 328 (google.api.resource_reference) = { 329 child_type: "dialogflow.googleapis.com/Flow" 330 } 331 ]; 332 333 // Required. The flow to create. 334 Flow flow = 2 [(google.api.field_behavior) = REQUIRED]; 335 336 // The language of the following fields in `flow`: 337 // 338 // * `Flow.event_handlers.trigger_fulfillment.messages` 339 // * `Flow.event_handlers.trigger_fulfillment.conditional_cases` 340 // * `Flow.transition_routes.trigger_fulfillment.messages` 341 // * `Flow.transition_routes.trigger_fulfillment.conditional_cases` 342 // 343 // If not specified, the agent's default language is used. 344 // [Many 345 // languages](https://cloud.google.com/dialogflow/cx/docs/reference/language) 346 // are supported. 347 // Note: languages must be enabled in the agent before they can be used. 348 string language_code = 3; 349} 350 351// The request message for 352// [Flows.DeleteFlow][google.cloud.dialogflow.cx.v3.Flows.DeleteFlow]. 353message DeleteFlowRequest { 354 // Required. The name of the flow to delete. 355 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 356 // ID>/flows/<Flow ID>`. 357 string name = 1 [ 358 (google.api.field_behavior) = REQUIRED, 359 (google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" } 360 ]; 361 362 // This field has no effect for flows with no incoming transitions. 363 // For flows with incoming transitions: 364 // 365 // * If `force` is set to false, an error will be returned with message 366 // indicating the incoming transitions. 367 // * If `force` is set to true, Dialogflow will remove the flow, as well as 368 // any transitions to the flow (i.e. [Target 369 // flow][EventHandler.target_flow] in event handlers or [Target 370 // flow][TransitionRoute.target_flow] in transition routes that point to 371 // this flow will be cleared). 372 bool force = 2; 373} 374 375// The request message for 376// [Flows.ListFlows][google.cloud.dialogflow.cx.v3.Flows.ListFlows]. 377message ListFlowsRequest { 378 // Required. The agent containing the flows. 379 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`. 380 string parent = 1 [ 381 (google.api.field_behavior) = REQUIRED, 382 (google.api.resource_reference) = { 383 child_type: "dialogflow.googleapis.com/Flow" 384 } 385 ]; 386 387 // The maximum number of items to return in a single page. By default 100 and 388 // at most 1000. 389 int32 page_size = 2; 390 391 // The next_page_token value returned from a previous list request. 392 string page_token = 3; 393 394 // The language to list flows for. The following fields are language 395 // dependent: 396 // 397 // * `Flow.event_handlers.trigger_fulfillment.messages` 398 // * `Flow.event_handlers.trigger_fulfillment.conditional_cases` 399 // * `Flow.transition_routes.trigger_fulfillment.messages` 400 // * `Flow.transition_routes.trigger_fulfillment.conditional_cases` 401 // 402 // If not specified, the agent's default language is used. 403 // [Many 404 // languages](https://cloud.google.com/dialogflow/cx/docs/reference/language) 405 // are supported. 406 // Note: languages must be enabled in the agent before they can be used. 407 string language_code = 4; 408} 409 410// The response message for 411// [Flows.ListFlows][google.cloud.dialogflow.cx.v3.Flows.ListFlows]. 412message ListFlowsResponse { 413 // The list of flows. There will be a maximum number of items returned based 414 // on the page_size field in the request. 415 repeated Flow flows = 1; 416 417 // Token to retrieve the next page of results, or empty if there are no more 418 // results in the list. 419 string next_page_token = 2; 420} 421 422// The response message for 423// [Flows.GetFlow][google.cloud.dialogflow.cx.v3.Flows.GetFlow]. 424message GetFlowRequest { 425 // Required. The name of the flow to get. 426 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 427 // ID>/flows/<Flow ID>`. 428 string name = 1 [ 429 (google.api.field_behavior) = REQUIRED, 430 (google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" } 431 ]; 432 433 // The language to retrieve the flow for. The following fields are language 434 // dependent: 435 // 436 // * `Flow.event_handlers.trigger_fulfillment.messages` 437 // * `Flow.event_handlers.trigger_fulfillment.conditional_cases` 438 // * `Flow.transition_routes.trigger_fulfillment.messages` 439 // * `Flow.transition_routes.trigger_fulfillment.conditional_cases` 440 // 441 // If not specified, the agent's default language is used. 442 // [Many 443 // languages](https://cloud.google.com/dialogflow/cx/docs/reference/language) 444 // are supported. 445 // Note: languages must be enabled in the agent before they can be used. 446 string language_code = 2; 447} 448 449// The request message for 450// [Flows.UpdateFlow][google.cloud.dialogflow.cx.v3.Flows.UpdateFlow]. 451message UpdateFlowRequest { 452 // Required. The flow to update. 453 Flow flow = 1 [(google.api.field_behavior) = REQUIRED]; 454 455 // The mask to control which fields get updated. If the mask is not present, 456 // all fields will be updated. 457 google.protobuf.FieldMask update_mask = 2; 458 459 // The language of the following fields in `flow`: 460 // 461 // * `Flow.event_handlers.trigger_fulfillment.messages` 462 // * `Flow.event_handlers.trigger_fulfillment.conditional_cases` 463 // * `Flow.transition_routes.trigger_fulfillment.messages` 464 // * `Flow.transition_routes.trigger_fulfillment.conditional_cases` 465 // 466 // If not specified, the agent's default language is used. 467 // [Many 468 // languages](https://cloud.google.com/dialogflow/cx/docs/reference/language) 469 // are supported. 470 // Note: languages must be enabled in the agent before they can be used. 471 string language_code = 3; 472} 473 474// The request message for 475// [Flows.TrainFlow][google.cloud.dialogflow.cx.v3.Flows.TrainFlow]. 476message TrainFlowRequest { 477 // Required. The flow to train. 478 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 479 // ID>/flows/<Flow ID>`. 480 string name = 1 [ 481 (google.api.field_behavior) = REQUIRED, 482 (google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" } 483 ]; 484} 485 486// The request message for 487// [Flows.ValidateFlow][google.cloud.dialogflow.cx.v3.Flows.ValidateFlow]. 488message ValidateFlowRequest { 489 // Required. The flow to validate. 490 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 491 // ID>/flows/<Flow ID>`. 492 string name = 1 [ 493 (google.api.field_behavior) = REQUIRED, 494 (google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" } 495 ]; 496 497 // If not specified, the agent's default language is used. 498 string language_code = 2; 499} 500 501// The request message for 502// [Flows.GetFlowValidationResult][google.cloud.dialogflow.cx.v3.Flows.GetFlowValidationResult]. 503message GetFlowValidationResultRequest { 504 // Required. The flow name. 505 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 506 // ID>/flows/<Flow ID>/validationResult`. 507 string name = 1 [ 508 (google.api.field_behavior) = REQUIRED, 509 (google.api.resource_reference) = { 510 type: "dialogflow.googleapis.com/FlowValidationResult" 511 } 512 ]; 513 514 // If not specified, the agent's default language is used. 515 string language_code = 2; 516} 517 518// The response message for 519// [Flows.GetFlowValidationResult][google.cloud.dialogflow.cx.v3.Flows.GetFlowValidationResult]. 520message FlowValidationResult { 521 option (google.api.resource) = { 522 type: "dialogflow.googleapis.com/FlowValidationResult" 523 pattern: "projects/{project}/locations/{location}/agents/{agent}/flows/{flow}/validationResult" 524 }; 525 526 // The unique identifier of the flow validation result. 527 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 528 // ID>/flows/<Flow ID>/validationResult`. 529 string name = 1; 530 531 // Contains all validation messages. 532 repeated ValidationMessage validation_messages = 2; 533 534 // Last time the flow was validated. 535 google.protobuf.Timestamp update_time = 3; 536} 537 538// The request message for 539// [Flows.ImportFlow][google.cloud.dialogflow.cx.v3.Flows.ImportFlow]. 540message ImportFlowRequest { 541 // Import option. 542 enum ImportOption { 543 // Unspecified. Treated as `KEEP`. 544 IMPORT_OPTION_UNSPECIFIED = 0; 545 546 // Always respect settings in exported flow content. It may cause a 547 // import failure if some settings (e.g. custom NLU) are not supported in 548 // the agent to import into. 549 KEEP = 1; 550 551 // Fallback to default settings if some settings are not supported in the 552 // agent to import into. E.g. Standard NLU will be used if custom NLU is 553 // not available. 554 FALLBACK = 2; 555 } 556 557 // Required. The agent to import the flow into. 558 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent ID>`. 559 string parent = 1 [ 560 (google.api.field_behavior) = REQUIRED, 561 (google.api.resource_reference) = { 562 child_type: "dialogflow.googleapis.com/Flow" 563 } 564 ]; 565 566 // Required. The flow to import. 567 oneof flow { 568 // The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI 569 // to import flow from. The format of this URI must be 570 // `gs://<bucket-name>/<object-name>`. 571 // 572 // Dialogflow performs a read operation for the Cloud Storage object 573 // on the caller's behalf, so your request authentication must 574 // have read permissions for the object. For more information, see 575 // [Dialogflow access 576 // control](https://cloud.google.com/dialogflow/cx/docs/concept/access-control#storage). 577 string flow_uri = 2; 578 579 // Uncompressed raw byte content for flow. 580 bytes flow_content = 3; 581 } 582 583 // Flow import mode. If not specified, `KEEP` is assumed. 584 ImportOption import_option = 4; 585} 586 587// The response message for 588// [Flows.ImportFlow][google.cloud.dialogflow.cx.v3.Flows.ImportFlow]. 589message ImportFlowResponse { 590 // The unique identifier of the new flow. 591 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 592 // ID>/flows/<Flow ID>`. 593 string flow = 1 [ 594 (google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" } 595 ]; 596} 597 598// The request message for 599// [Flows.ExportFlow][google.cloud.dialogflow.cx.v3.Flows.ExportFlow]. 600message ExportFlowRequest { 601 // Required. The name of the flow to export. 602 // Format: `projects/<Project ID>/locations/<Location ID>/agents/<Agent 603 // ID>/flows/<Flow ID>`. 604 string name = 1 [ 605 (google.api.field_behavior) = REQUIRED, 606 (google.api.resource_reference) = { type: "dialogflow.googleapis.com/Flow" } 607 ]; 608 609 // Optional. The [Google Cloud 610 // Storage](https://cloud.google.com/storage/docs/) URI to export the flow to. 611 // The format of this URI must be `gs://<bucket-name>/<object-name>`. If left 612 // unspecified, the serialized flow is returned inline. 613 // 614 // Dialogflow performs a write operation for the Cloud Storage object 615 // on the caller's behalf, so your request authentication must 616 // have write permissions for the object. For more information, see 617 // [Dialogflow access 618 // control](https://cloud.google.com/dialogflow/cx/docs/concept/access-control#storage). 619 string flow_uri = 2 [(google.api.field_behavior) = OPTIONAL]; 620 621 // Optional. Whether to export flows referenced by the specified flow. 622 bool include_referenced_flows = 4 [(google.api.field_behavior) = OPTIONAL]; 623} 624 625// The response message for 626// [Flows.ExportFlow][google.cloud.dialogflow.cx.v3.Flows.ExportFlow]. 627message ExportFlowResponse { 628 // The exported flow. 629 oneof flow { 630 // The URI to a file containing the exported flow. This field is populated 631 // only if `flow_uri` is specified in 632 // [ExportFlowRequest][google.cloud.dialogflow.cx.v3.ExportFlowRequest]. 633 string flow_uri = 1; 634 635 // Uncompressed raw byte content for flow. 636 bytes flow_content = 2; 637 } 638} 639