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