<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_v2beta1.html">Dialogflow API</a> . <a href="dialogflow_v2beta1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.agent.html">agent()</a></code>
</p>
<p class="firstline">Returns the agent Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.knowledgeBases.html">knowledgeBases()</a></code>
</p>
<p class="firstline">Returns the knowledgeBases Resource.</p>

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

<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations Resource.</p>

<p class="toc_element">
  <code><a href="#deleteAgent">deleteAgent(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified agent.</p>
<p class="toc_element">
  <code><a href="#getAgent">getAgent(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified agent.</p>
<p class="toc_element">
  <code><a href="#setAgent">setAgent(parent, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates/updates the specified agent.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="deleteAgent">deleteAgent(parent, x__xgafv=None)</code>
  <pre>Deletes the specified agent.

Args:
  parent: string, Required. The project that the agent to delete is associated with.
Format: `projects/&lt;Project ID&gt;`. (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="getAgent">getAgent(parent, x__xgafv=None)</code>
  <pre>Retrieves the specified agent.

Args:
  parent: string, Required. The project that the agent to fetch is associated with.
Format: `projects/&lt;Project ID&gt;`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Dialogflow agent is a virtual agent that handles conversations with your
        # end-users. It is a natural language understanding module that understands the
        # nuances of human language. Dialogflow translates end-user text or audio
        # during a conversation to structured data that your apps and services can
        # understand. You design and build a Dialogflow agent to handle the types of
        # conversations required for your system.
        #
        # For more information about agents, see the
        # [Agent guide](https://cloud.google.com/dialogflow/docs/agents-overview).
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
      &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of this agent from the
          # [time zone database](https://www.iana.org/time-zones), e.g.,
          # America/New_York, Europe/Paris.
      &quot;parent&quot;: &quot;A String&quot;, # Required. The project of this agent.
          # Format: `projects/&lt;Project ID&gt;`.
      &quot;classificationThreshold&quot;: 3.14, # Optional. To filter out false positive results and still get variety in
          # matched natural language inputs for your agent, you can tune the machine
          # learning classification threshold. If the returned score value is less than
          # the threshold value, then a fallback intent will be triggered or, if there
          # are no fallback intents defined, no intent will be triggered. The score
          # values range from 0.0 (completely uncertain) to 1.0 (completely certain).
          # If set to 0.0, the default of 0.3 is used.
      &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. The default language of the agent as a language tag. See
          # [Language
          # Support](https://cloud.google.com/dialogflow/docs/reference/language)
          # for a list of the currently supported language codes. This field cannot be
          # set by the `Update` method.
      &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
      &quot;description&quot;: &quot;A String&quot;, # Optional. The description of this agent.
          # The maximum length is 500 characters. If exceeded, the request is rejected.
      &quot;apiVersion&quot;: &quot;A String&quot;, # Optional. API version displayed in Dialogflow console. If not specified,
          # V2 API is assumed. Clients are free to query different service endpoints
          # for different API versions. However, bots connectors and webhook calls will
          # follow the specified API version.
      &quot;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
      &quot;avatarUri&quot;: &quot;A String&quot;, # Optional. 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;matchMode&quot;: &quot;A String&quot;, # Optional. Determines how intents are detected from user queries.
      &quot;supportedLanguageCodes&quot;: [ # Optional. The list of all languages supported by this agent (except for the
          # `default_language_code`).
        &quot;A String&quot;,
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="setAgent">setAgent(parent, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Creates/updates the specified agent.

Args:
  parent: string, Required. The project of this agent.
Format: `projects/&lt;Project ID&gt;`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Dialogflow agent is a virtual agent that handles conversations with your
      # end-users. It is a natural language understanding module that understands the
      # nuances of human language. Dialogflow translates end-user text or audio
      # during a conversation to structured data that your apps and services can
      # understand. You design and build a Dialogflow agent to handle the types of
      # conversations required for your system.
      # 
      # For more information about agents, see the
      # [Agent guide](https://cloud.google.com/dialogflow/docs/agents-overview).
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
    &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of this agent from the
        # [time zone database](https://www.iana.org/time-zones), e.g.,
        # America/New_York, Europe/Paris.
    &quot;parent&quot;: &quot;A String&quot;, # Required. The project of this agent.
        # Format: `projects/&lt;Project ID&gt;`.
    &quot;classificationThreshold&quot;: 3.14, # Optional. To filter out false positive results and still get variety in
        # matched natural language inputs for your agent, you can tune the machine
        # learning classification threshold. If the returned score value is less than
        # the threshold value, then a fallback intent will be triggered or, if there
        # are no fallback intents defined, no intent will be triggered. The score
        # values range from 0.0 (completely uncertain) to 1.0 (completely certain).
        # If set to 0.0, the default of 0.3 is used.
    &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. The default language of the agent as a language tag. See
        # [Language
        # Support](https://cloud.google.com/dialogflow/docs/reference/language)
        # for a list of the currently supported language codes. This field cannot be
        # set by the `Update` method.
    &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
    &quot;description&quot;: &quot;A String&quot;, # Optional. The description of this agent.
        # The maximum length is 500 characters. If exceeded, the request is rejected.
    &quot;apiVersion&quot;: &quot;A String&quot;, # Optional. API version displayed in Dialogflow console. If not specified,
        # V2 API is assumed. Clients are free to query different service endpoints
        # for different API versions. However, bots connectors and webhook calls will
        # follow the specified API version.
    &quot;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
    &quot;avatarUri&quot;: &quot;A String&quot;, # Optional. 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;matchMode&quot;: &quot;A String&quot;, # Optional. Determines how intents are detected from user queries.
    &quot;supportedLanguageCodes&quot;: [ # Optional. The list of all languages supported by this agent (except for the
        # `default_language_code`).
      &quot;A String&quot;,
    ],
  }

  updateMask: string, Optional. The mask to control which fields get updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Dialogflow agent is a virtual agent that handles conversations with your
        # end-users. It is a natural language understanding module that understands the
        # nuances of human language. Dialogflow translates end-user text or audio
        # during a conversation to structured data that your apps and services can
        # understand. You design and build a Dialogflow agent to handle the types of
        # conversations required for your system.
        #
        # For more information about agents, see the
        # [Agent guide](https://cloud.google.com/dialogflow/docs/agents-overview).
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
      &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of this agent from the
          # [time zone database](https://www.iana.org/time-zones), e.g.,
          # America/New_York, Europe/Paris.
      &quot;parent&quot;: &quot;A String&quot;, # Required. The project of this agent.
          # Format: `projects/&lt;Project ID&gt;`.
      &quot;classificationThreshold&quot;: 3.14, # Optional. To filter out false positive results and still get variety in
          # matched natural language inputs for your agent, you can tune the machine
          # learning classification threshold. If the returned score value is less than
          # the threshold value, then a fallback intent will be triggered or, if there
          # are no fallback intents defined, no intent will be triggered. The score
          # values range from 0.0 (completely uncertain) to 1.0 (completely certain).
          # If set to 0.0, the default of 0.3 is used.
      &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Required. The default language of the agent as a language tag. See
          # [Language
          # Support](https://cloud.google.com/dialogflow/docs/reference/language)
          # for a list of the currently supported language codes. This field cannot be
          # set by the `Update` method.
      &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
      &quot;description&quot;: &quot;A String&quot;, # Optional. The description of this agent.
          # The maximum length is 500 characters. If exceeded, the request is rejected.
      &quot;apiVersion&quot;: &quot;A String&quot;, # Optional. API version displayed in Dialogflow console. If not specified,
          # V2 API is assumed. Clients are free to query different service endpoints
          # for different API versions. However, bots connectors and webhook calls will
          # follow the specified API version.
      &quot;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
      &quot;avatarUri&quot;: &quot;A String&quot;, # Optional. 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;matchMode&quot;: &quot;A String&quot;, # Optional. Determines how intents are detected from user queries.
      &quot;supportedLanguageCodes&quot;: [ # Optional. The list of all languages supported by this agent (except for the
          # `default_language_code`).
        &quot;A String&quot;,
      ],
    }</pre>
</div>

</body></html>