<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="dialogflow_v3beta1.html">Dialogflow API</a> . <a href="dialogflow_v3beta1.projects.html">projects</a> . <a href="dialogflow_v3beta1.projects.locations.html">locations</a> . <a href="dialogflow_v3beta1.projects.locations.agents.html">agents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.changelogs.html">changelogs()</a></code>
</p>
<p class="firstline">Returns the changelogs Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.entityTypes.html">entityTypes()</a></code>
</p>
<p class="firstline">Returns the entityTypes Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.environments.html">environments()</a></code>
</p>
<p class="firstline">Returns the environments Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.flows.html">flows()</a></code>
</p>
<p class="firstline">Returns the flows Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.intents.html">intents()</a></code>
</p>
<p class="firstline">Returns the intents Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.sessions.html">sessions()</a></code>
</p>
<p class="firstline">Returns the sessions Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.testCases.html">testCases()</a></code>
</p>
<p class="firstline">Returns the testCases Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.webhooks.html">webhooks()</a></code>
</p>
<p class="firstline">Returns the webhooks Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an agent in the specified location. Note: You should always train a flow prior to sending it queries. See the [training documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training).</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified agent.</p>
<p class="toc_element">
  <code><a href="#export">export(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Exports the specified agent to a binary file. This method is a [long-running operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). The returned `Operation` type has the following method-specific fields: - `metadata`: An empty [Struct message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) - `response`: ExportAgentResponse</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified agent.</p>
<p class="toc_element">
  <code><a href="#getValidationResult">getValidationResult(name, languageCode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the latest agent validation result. Agent validation is performed when ValidateAgent is called.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of all agents in the specified location.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified agent. Note: You should always train a flow prior to sending it queries. See the [training documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training).</p>
<p class="toc_element">
  <code><a href="#restore">restore(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Restores the specified agent from a binary file. Replaces the current agent with a new one. Note that all existing resources in agent (e.g. intents, entity types, flows) will be removed. This method is a [long-running operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). The returned `Operation` type has the following method-specific fields: - `metadata`: An empty [Struct message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) - `response`: An [Empty message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#empty) Note: You should always train a flow prior to sending it queries. See the [training documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training).</p>
<p class="toc_element">
  <code><a href="#validate">validate(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">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.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates an agent in the specified location. Note: You should always train a flow prior to sending it queries. See the [training documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training).

Args:
  parent: string, Required. The location to create a agent for. Format: `projects//locations/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents 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, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;advancedSettings&quot;: { # Hierarchical advanced settings for agent/flow/page/fulfillment/parameter. Settings exposed at lower level overrides the settings exposed at higher level. Hierarchy: Agent-&gt;Flow-&gt;Page-&gt;Fulfillment/Parameter. # Hierarchical advanced settings for this agent. The settings exposed at the lower level overrides the settings exposed at the higher level.
    &quot;loggingSettings&quot;: { # Define behaviors on logging. # Settings for logging. Settings for Dialogflow History, Contact Center messages, StackDriver logs, and speech logging. Exposed at the following levels: - Agent level.
      &quot;enableInteractionLogging&quot;: True or False, # If true, DF Interaction logging is currently enabled.
      &quot;enableStackdriverLogging&quot;: True or False, # If true, StackDriver logging is currently enabled.
    },
  },
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/cx/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent. Please use agent.advanced_settings instead.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;securitySettings&quot;: &quot;A String&quot;, # Name of the SecuritySettings reference for the agent. Format: `projects//locations//securitySettings/`.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;startFlow&quot;: &quot;A String&quot;, # 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//locations//agents//flows/`.
  &quot;supportedLanguageCodes&quot;: [ # The list of all languages supported by the agent (except for the `default_language_code`).
    &quot;A String&quot;,
  ],
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents 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, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;advancedSettings&quot;: { # Hierarchical advanced settings for agent/flow/page/fulfillment/parameter. Settings exposed at lower level overrides the settings exposed at higher level. Hierarchy: Agent-&gt;Flow-&gt;Page-&gt;Fulfillment/Parameter. # Hierarchical advanced settings for this agent. The settings exposed at the lower level overrides the settings exposed at the higher level.
    &quot;loggingSettings&quot;: { # Define behaviors on logging. # Settings for logging. Settings for Dialogflow History, Contact Center messages, StackDriver logs, and speech logging. Exposed at the following levels: - Agent level.
      &quot;enableInteractionLogging&quot;: True or False, # If true, DF Interaction logging is currently enabled.
      &quot;enableStackdriverLogging&quot;: True or False, # If true, StackDriver logging is currently enabled.
    },
  },
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/cx/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent. Please use agent.advanced_settings instead.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;securitySettings&quot;: &quot;A String&quot;, # Name of the SecuritySettings reference for the agent. Format: `projects//locations//securitySettings/`.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;startFlow&quot;: &quot;A String&quot;, # 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//locations//agents//flows/`.
  &quot;supportedLanguageCodes&quot;: [ # The list of all languages supported by the agent (except for the `default_language_code`).
    &quot;A String&quot;,
  ],
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified agent.

Args:
  name: string, Required. The name of the agent to delete. Format: `projects//locations//agents/`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="export">export(name, body=None, x__xgafv=None)</code>
  <pre>Exports the specified agent to a binary file. This method is a [long-running operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). The returned `Operation` type has the following method-specific fields: - `metadata`: An empty [Struct message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) - `response`: ExportAgentResponse

Args:
  name: string, Required. The name of the agent to export. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.ExportAgent.
  &quot;agentUri&quot;: &quot;A String&quot;, # 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:///`. If left unspecified, the serialized agent is returned inline.
  &quot;environment&quot;: &quot;A String&quot;, # Optional. Environment name. If not set, draft environment is assumed. Format: `projects//locations//agents//environments/`.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieves the specified agent.

Args:
  name: string, Required. The name of the agent. Format: `projects//locations//agents/`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents 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, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;advancedSettings&quot;: { # Hierarchical advanced settings for agent/flow/page/fulfillment/parameter. Settings exposed at lower level overrides the settings exposed at higher level. Hierarchy: Agent-&gt;Flow-&gt;Page-&gt;Fulfillment/Parameter. # Hierarchical advanced settings for this agent. The settings exposed at the lower level overrides the settings exposed at the higher level.
    &quot;loggingSettings&quot;: { # Define behaviors on logging. # Settings for logging. Settings for Dialogflow History, Contact Center messages, StackDriver logs, and speech logging. Exposed at the following levels: - Agent level.
      &quot;enableInteractionLogging&quot;: True or False, # If true, DF Interaction logging is currently enabled.
      &quot;enableStackdriverLogging&quot;: True or False, # If true, StackDriver logging is currently enabled.
    },
  },
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/cx/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent. Please use agent.advanced_settings instead.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;securitySettings&quot;: &quot;A String&quot;, # Name of the SecuritySettings reference for the agent. Format: `projects//locations//securitySettings/`.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;startFlow&quot;: &quot;A String&quot;, # 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//locations//agents//flows/`.
  &quot;supportedLanguageCodes&quot;: [ # The list of all languages supported by the agent (except for the `default_language_code`).
    &quot;A String&quot;,
  ],
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
}</pre>
</div>

<div class="method">
    <code class="details" id="getValidationResult">getValidationResult(name, languageCode=None, x__xgafv=None)</code>
  <pre>Gets the latest agent validation result. Agent validation is performed when ValidateAgent is called.

Args:
  name: string, Required. The agent name. Format: `projects//locations//agents//validationResult`. (required)
  languageCode: string, If not specified, the agent&#x27;s default language is used.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Agents.GetAgentValidationResult.
  &quot;flowValidationResults&quot;: [ # Contains all flow validation results.
    { # The response message for Flows.GetFlowValidationResult.
      &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the flow validation result. Format: `projects//locations//agents//flows//validationResult`.
      &quot;updateTime&quot;: &quot;A String&quot;, # Last time the flow was validated.
      &quot;validationMessages&quot;: [ # Contains all validation messages.
        { # Agent/flow validation message.
          &quot;detail&quot;: &quot;A String&quot;, # The message detail.
          &quot;resourceNames&quot;: [ # The resource names of the resources where the message is found.
            { # Resource name and display name.
              &quot;displayName&quot;: &quot;A String&quot;, # Display name.
              &quot;name&quot;: &quot;A String&quot;, # Name.
            },
          ],
          &quot;resourceType&quot;: &quot;A String&quot;, # The type of the resources where the message is found.
          &quot;resources&quot;: [ # The names of the resources where the message is found.
            &quot;A String&quot;,
          ],
          &quot;severity&quot;: &quot;A String&quot;, # Indicates the severity of the message.
        },
      ],
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent validation result. Format: `projects//locations//agents//validationResult`.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of all agents in the specified location.

Args:
  parent: string, Required. The location to list all agents for. Format: `projects//locations/`. (required)
  pageSize: integer, The maximum number of items to return in a single page. By default 100 and at most 1000.
  pageToken: string, The next_page_token value returned from a previous list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Agents.ListAgents.
  &quot;agents&quot;: [ # The list of agents. There will be a maximum number of items returned based on the page_size field in the request.
    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents 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, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
      &quot;advancedSettings&quot;: { # Hierarchical advanced settings for agent/flow/page/fulfillment/parameter. Settings exposed at lower level overrides the settings exposed at higher level. Hierarchy: Agent-&gt;Flow-&gt;Page-&gt;Fulfillment/Parameter. # Hierarchical advanced settings for this agent. The settings exposed at the lower level overrides the settings exposed at the higher level.
        &quot;loggingSettings&quot;: { # Define behaviors on logging. # Settings for logging. Settings for Dialogflow History, Contact Center messages, StackDriver logs, and speech logging. Exposed at the following levels: - Agent level.
          &quot;enableInteractionLogging&quot;: True or False, # If true, DF Interaction logging is currently enabled.
          &quot;enableStackdriverLogging&quot;: True or False, # If true, StackDriver logging is currently enabled.
        },
      },
      &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
      &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/cx/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
      &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
      &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
      &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent. Please use agent.advanced_settings instead.
      &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
      &quot;securitySettings&quot;: &quot;A String&quot;, # Name of the SecuritySettings reference for the agent. Format: `projects//locations//securitySettings/`.
      &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
        &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
      },
      &quot;startFlow&quot;: &quot;A String&quot;, # 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//locations//agents//flows/`.
      &quot;supportedLanguageCodes&quot;: [ # The list of all languages supported by the agent (except for the `default_language_code`).
        &quot;A String&quot;,
      ],
      &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified agent. Note: You should always train a flow prior to sending it queries. See the [training documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training).

Args:
  name: string, The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents 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, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;advancedSettings&quot;: { # Hierarchical advanced settings for agent/flow/page/fulfillment/parameter. Settings exposed at lower level overrides the settings exposed at higher level. Hierarchy: Agent-&gt;Flow-&gt;Page-&gt;Fulfillment/Parameter. # Hierarchical advanced settings for this agent. The settings exposed at the lower level overrides the settings exposed at the higher level.
    &quot;loggingSettings&quot;: { # Define behaviors on logging. # Settings for logging. Settings for Dialogflow History, Contact Center messages, StackDriver logs, and speech logging. Exposed at the following levels: - Agent level.
      &quot;enableInteractionLogging&quot;: True or False, # If true, DF Interaction logging is currently enabled.
      &quot;enableStackdriverLogging&quot;: True or False, # If true, StackDriver logging is currently enabled.
    },
  },
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/cx/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent. Please use agent.advanced_settings instead.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;securitySettings&quot;: &quot;A String&quot;, # Name of the SecuritySettings reference for the agent. Format: `projects//locations//securitySettings/`.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;startFlow&quot;: &quot;A String&quot;, # 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//locations//agents//flows/`.
  &quot;supportedLanguageCodes&quot;: [ # The list of all languages supported by the agent (except for the `default_language_code`).
    &quot;A String&quot;,
  ],
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
}

  updateMask: string, The mask to control which fields get updated. If the mask is not present, all fields will be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents 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, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;advancedSettings&quot;: { # Hierarchical advanced settings for agent/flow/page/fulfillment/parameter. Settings exposed at lower level overrides the settings exposed at higher level. Hierarchy: Agent-&gt;Flow-&gt;Page-&gt;Fulfillment/Parameter. # Hierarchical advanced settings for this agent. The settings exposed at the lower level overrides the settings exposed at the higher level.
    &quot;loggingSettings&quot;: { # Define behaviors on logging. # Settings for logging. Settings for Dialogflow History, Contact Center messages, StackDriver logs, and speech logging. Exposed at the following levels: - Agent level.
      &quot;enableInteractionLogging&quot;: True or False, # If true, DF Interaction logging is currently enabled.
      &quot;enableStackdriverLogging&quot;: True or False, # If true, StackDriver logging is currently enabled.
    },
  },
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/cx/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent. Please use agent.advanced_settings instead.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;securitySettings&quot;: &quot;A String&quot;, # Name of the SecuritySettings reference for the agent. Format: `projects//locations//securitySettings/`.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;startFlow&quot;: &quot;A String&quot;, # 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//locations//agents//flows/`.
  &quot;supportedLanguageCodes&quot;: [ # The list of all languages supported by the agent (except for the `default_language_code`).
    &quot;A String&quot;,
  ],
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
}</pre>
</div>

<div class="method">
    <code class="details" id="restore">restore(name, body=None, x__xgafv=None)</code>
  <pre>Restores the specified agent from a binary file. Replaces the current agent with a new one. Note that all existing resources in agent (e.g. intents, entity types, flows) will be removed. This method is a [long-running operation](https://cloud.google.com/dialogflow/cx/docs/how/long-running-operation). The returned `Operation` type has the following method-specific fields: - `metadata`: An empty [Struct message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct) - `response`: An [Empty message](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#empty) Note: You should always train a flow prior to sending it queries. See the [training documentation](https://cloud.google.com/dialogflow/cx/docs/concept/training).

Args:
  name: string, Required. The name of the agent to restore into. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.RestoreAgent.
  &quot;agentContent&quot;: &quot;A String&quot;, # Uncompressed raw byte content for agent.
  &quot;agentUri&quot;: &quot;A String&quot;, # The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to restore agent from. The format of this URI must be `gs:///`.
  &quot;restoreOption&quot;: &quot;A String&quot;, # Agent restore mode. If not specified, `KEEP` is assumed.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="validate">validate(name, body=None, x__xgafv=None)</code>
  <pre>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.

Args:
  name: string, Required. The agent to validate. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.ValidateAgent.
  &quot;languageCode&quot;: &quot;A String&quot;, # If not specified, the agent&#x27;s default language is used.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Agents.GetAgentValidationResult.
  &quot;flowValidationResults&quot;: [ # Contains all flow validation results.
    { # The response message for Flows.GetFlowValidationResult.
      &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the flow validation result. Format: `projects//locations//agents//flows//validationResult`.
      &quot;updateTime&quot;: &quot;A String&quot;, # Last time the flow was validated.
      &quot;validationMessages&quot;: [ # Contains all validation messages.
        { # Agent/flow validation message.
          &quot;detail&quot;: &quot;A String&quot;, # The message detail.
          &quot;resourceNames&quot;: [ # The resource names of the resources where the message is found.
            { # Resource name and display name.
              &quot;displayName&quot;: &quot;A String&quot;, # Display name.
              &quot;name&quot;: &quot;A String&quot;, # Name.
            },
          ],
          &quot;resourceType&quot;: &quot;A String&quot;, # The type of the resources where the message is found.
          &quot;resources&quot;: [ # The names of the resources where the message is found.
            &quot;A String&quot;,
          ],
          &quot;severity&quot;: &quot;A String&quot;, # Indicates the severity of the message.
        },
      ],
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent validation result. Format: `projects//locations//agents//validationResult`.
}</pre>
</div>

</body></html>