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

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

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

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

<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.agent.sessions.html">sessions()</a></code>
</p>
<p class="firstline">Returns the sessions 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="#export">export(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Exports the specified agent to a ZIP file. Operation </p>
<p class="toc_element">
  <code><a href="#getFulfillment">getFulfillment(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the fulfillment.</p>
<p class="toc_element">
  <code><a href="#getValidationResult">getValidationResult(parent, languageCode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets agent validation result. Agent validation is performed during training time and is updated automatically when training is completed.</p>
<p class="toc_element">
  <code><a href="#import_">import_(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Imports the specified agent from a ZIP file. Uploads new intents and entity types without deleting the existing ones. Intents and entity types with the same name are replaced with the new versions from ImportAgentRequest. After the import, the imported draft agent will be trained automatically (unless disabled in agent settings). However, once the import is done, training may not be completed yet. Please call TrainAgent and wait for the operation it returns in order to train explicitly. Operation An operation which tracks when importing is complete. It only tracks when the draft agent is updated not when it is done training.</p>
<p class="toc_element">
  <code><a href="#restore">restore(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Restores the specified agent from a ZIP file. Replaces the current agent version with a new one. All the intents and entity types in the older version are deleted. After the restore, the restored draft agent will be trained automatically (unless disabled in agent settings). However, once the restore is done, training may not be completed yet. Please call TrainAgent and wait for the operation it returns in order to train explicitly. Operation An operation which tracks when restoring is complete. It only tracks when the draft agent is updated not when it is done training.</p>
<p class="toc_element">
  <code><a href="#search">search(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of agents. Since there is at most one conversational agent per project, this method is useful primarily for listing all agents across projects the caller has access to. One can achieve that with a wildcard project collection id "-". Refer to [List Sub-Collections](https://cloud.google.com/apis/design/design_patterns#list_sub-collections).</p>
<p class="toc_element">
  <code><a href="#search_next">search_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="#train">train(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Trains the specified agent. Operation </p>
<p class="toc_element">
  <code><a href="#updateFulfillment">updateFulfillment(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the fulfillment.</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="export">export(parent, body=None, x__xgafv=None)</code>
  <pre>Exports the specified agent to a ZIP file. Operation 

Args:
  parent: string, Required. The project that the agent to export is associated with. Format: `projects/` or `projects//locations/`. (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.
}

  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="getFulfillment">getFulfillment(name, x__xgafv=None)</code>
  <pre>Retrieves the fulfillment.

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

Returns:
  An object of the form:

    { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview).
  &quot;displayName&quot;: &quot;A String&quot;, # The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
  &quot;enabled&quot;: True or False, # Whether fulfillment is enabled.
  &quot;features&quot;: [ # The field defines whether the fulfillment is enabled for certain features.
    { # Whether fulfillment is enabled for the specific feature.
      &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
    },
  ],
  &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
    &quot;isCloudFunction&quot;: True or False, # Indicates if generic web service is created through Cloud Functions integration. Defaults to false.
    &quot;password&quot;: &quot;A String&quot;, # The password for HTTP Basic authentication.
    &quot;requestHeaders&quot;: { # The HTTP request headers to send together with fulfillment requests.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
    &quot;username&quot;: &quot;A String&quot;, # The user name for HTTP Basic authentication.
  },
  &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
}</pre>
</div>

<div class="method">
    <code class="details" id="getValidationResult">getValidationResult(parent, languageCode=None, x__xgafv=None)</code>
  <pre>Gets agent validation result. Agent validation is performed during training time and is updated automatically when training is completed.

Args:
  parent: string, Required. The project that the agent is associated with. Format: `projects/` or `projects//locations/`. (required)
  languageCode: string, Optional. The language for which you want a validation result. If not specified, the agent&#x27;s default language is used. [Many languages](https://cloud.google.com/dialogflow/docs/reference/language) are supported. Note: languages must be enabled in the agent before they can be used.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents the output of agent validation.
  &quot;validationErrors&quot;: [ # Contains all validation errors.
    { # Represents a single validation error.
      &quot;entries&quot;: [ # The names of the entries that the error is associated with. Format: - &quot;projects//agent&quot;, if the error is associated with the entire agent. - &quot;projects//agent/intents/&quot;, if the error is associated with certain intents. - &quot;projects//agent/intents//trainingPhrases/&quot;, if the error is associated with certain intent training phrases. - &quot;projects//agent/intents//parameters/&quot;, if the error is associated with certain intent parameters. - &quot;projects//agent/entities/&quot;, if the error is associated with certain entities.
        &quot;A String&quot;,
      ],
      &quot;errorMessage&quot;: &quot;A String&quot;, # The detailed error messsage.
      &quot;severity&quot;: &quot;A String&quot;, # The severity of the error.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="import_">import_(parent, body=None, x__xgafv=None)</code>
  <pre>Imports the specified agent from a ZIP file. Uploads new intents and entity types without deleting the existing ones. Intents and entity types with the same name are replaced with the new versions from ImportAgentRequest. After the import, the imported draft agent will be trained automatically (unless disabled in agent settings). However, once the import is done, training may not be completed yet. Please call TrainAgent and wait for the operation it returns in order to train explicitly. Operation An operation which tracks when importing is complete. It only tracks when the draft agent is updated not when it is done training.

Args:
  parent: string, Required. The project that the agent to import is associated with. Format: `projects/` or `projects//locations/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.ImportAgent.
  &quot;agentContent&quot;: &quot;A String&quot;, # Zip compressed raw byte content for agent.
  &quot;agentUri&quot;: &quot;A String&quot;, # The URI to a Google Cloud Storage file containing the agent to import. Note: The URI must start with &quot;gs://&quot;.
}

  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="restore">restore(parent, body=None, x__xgafv=None)</code>
  <pre>Restores the specified agent from a ZIP file. Replaces the current agent version with a new one. All the intents and entity types in the older version are deleted. After the restore, the restored draft agent will be trained automatically (unless disabled in agent settings). However, once the restore is done, training may not be completed yet. Please call TrainAgent and wait for the operation it returns in order to train explicitly. Operation An operation which tracks when restoring is complete. It only tracks when the draft agent is updated not when it is done training.

Args:
  parent: string, Required. The project that the agent to restore is associated with. Format: `projects/` or `projects//locations/`. (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;, # Zip compressed raw byte content for agent.
  &quot;agentUri&quot;: &quot;A String&quot;, # The URI to a Google Cloud Storage file containing the agent to restore. Note: The URI must start with &quot;gs://&quot;.
}

  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="search">search(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of agents. Since there is at most one conversational agent per project, this method is useful primarily for listing all agents across projects the caller has access to. One can achieve that with a wildcard project collection id &quot;-&quot;. Refer to [List Sub-Collections](https://cloud.google.com/apis/design/design_patterns#list_sub-collections).

Args:
  parent: string, Required. The project to list agents from. Format: `projects/` or `projects//locations/`. (required)
  pageSize: integer, Optional. The maximum number of items to return in a single page. By default 100 and at most 1000.
  pageToken: string, Optional. 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.SearchAgents.
  &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.
    { # 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;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;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;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;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;displayName&quot;: &quot;A String&quot;, # Required. The name of this agent.
      &quot;enableLogging&quot;: True or False, # Optional. Determines whether this agent should log conversation queries.
      &quot;matchMode&quot;: &quot;A String&quot;, # Optional. Determines how intents are detected from user queries.
      &quot;parent&quot;: &quot;A String&quot;, # Required. The project of this agent. Format: `projects/` or `projects//locations/`
      &quot;supportedLanguageCodes&quot;: [ # Optional. The list of all languages supported by this agent (except for the `default_language_code`).
        &quot;A String&quot;,
      ],
      &quot;tier&quot;: &quot;A String&quot;, # Optional. The agent tier. If not specified, TIER_STANDARD is assumed.
      &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;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="search_next">search_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="train">train(parent, body=None, x__xgafv=None)</code>
  <pre>Trains the specified agent. Operation 

Args:
  parent: string, Required. The project that the agent to train is associated with. Format: `projects/` or `projects//locations/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.TrainAgent.
}

  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="updateFulfillment">updateFulfillment(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the fulfillment.

Args:
  name: string, Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment. (required)
  body: object, The request body.
    The object takes the form of:

{ # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview).
  &quot;displayName&quot;: &quot;A String&quot;, # The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
  &quot;enabled&quot;: True or False, # Whether fulfillment is enabled.
  &quot;features&quot;: [ # The field defines whether the fulfillment is enabled for certain features.
    { # Whether fulfillment is enabled for the specific feature.
      &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
    },
  ],
  &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
    &quot;isCloudFunction&quot;: True or False, # Indicates if generic web service is created through Cloud Functions integration. Defaults to false.
    &quot;password&quot;: &quot;A String&quot;, # The password for HTTP Basic authentication.
    &quot;requestHeaders&quot;: { # The HTTP request headers to send together with fulfillment requests.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
    &quot;username&quot;: &quot;A String&quot;, # The user name for HTTP Basic authentication.
  },
  &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
}

  updateMask: string, Required. 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:

    { # By default, your agent responds to a matched intent with a static response. As an alternative, you can provide a more dynamic response by using fulfillment. When you enable fulfillment for an intent, Dialogflow responds to that intent by calling a service that you define. For example, if an end-user wants to schedule a haircut on Friday, your service can check your database and respond to the end-user with availability information for Friday. For more information, see the [fulfillment guide](https://cloud.google.com/dialogflow/docs/fulfillment-overview).
  &quot;displayName&quot;: &quot;A String&quot;, # The human-readable name of the fulfillment, unique within the agent. This field is not used for Fulfillment in an Environment.
  &quot;enabled&quot;: True or False, # Whether fulfillment is enabled.
  &quot;features&quot;: [ # The field defines whether the fulfillment is enabled for certain features.
    { # Whether fulfillment is enabled for the specific feature.
      &quot;type&quot;: &quot;A String&quot;, # The type of the feature that enabled for fulfillment.
    },
  ],
  &quot;genericWebService&quot;: { # Represents configuration for a generic web service. Dialogflow supports two mechanisms for authentications: - Basic authentication with username and password. - Authentication with additional authentication headers. More information could be found at: https://cloud.google.com/dialogflow/docs/fulfillment-configure. # Configuration for a generic web service.
    &quot;isCloudFunction&quot;: True or False, # Indicates if generic web service is created through Cloud Functions integration. Defaults to false.
    &quot;password&quot;: &quot;A String&quot;, # The password for HTTP Basic authentication.
    &quot;requestHeaders&quot;: { # The HTTP request headers to send together with fulfillment requests.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;uri&quot;: &quot;A String&quot;, # Required. The fulfillment URI for receiving POST requests. It must use https protocol.
    &quot;username&quot;: &quot;A String&quot;, # The user name for HTTP Basic authentication.
  },
  &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the fulfillment. Supported formats: - `projects//agent/fulfillment` - `projects//locations//agent/fulfillment` This field is not used for Fulfillment in an Environment.
}</pre>
</div>

</body></html>