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

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

<p class="toc_element">
  <code><a href="dialogflow_v2.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;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;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;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;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;parent&quot;: &quot;A String&quot;, # Required. The project of this agent.
        # Format: `projects/&lt;Project ID&gt;`.
    &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
    &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;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
    &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;,
    ],
    &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;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
  }</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;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;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;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;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;parent&quot;: &quot;A String&quot;, # Required. The project of this agent.
      # Format: `projects/&lt;Project ID&gt;`.
  &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
  &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;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
  &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;,
  ],
  &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;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
}

  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;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;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;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;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;parent&quot;: &quot;A String&quot;, # Required. The project of this agent.
        # Format: `projects/&lt;Project ID&gt;`.
    &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
    &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;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
    &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;,
    ],
    &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;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
  }</pre>
</div>

</body></html>