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

<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.conversations.participants.html">participants()</a></code>
</p>
<p class="firstline">Returns the participants 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="#complete">complete(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Completes the specified conversation. Finished conversations are purged from the database after 30 days.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, conversationId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new conversation. Conversations are auto-completed after 24 hours. Conversation Lifecycle: There are two stages during a conversation: Automated Agent Stage and Assist Stage. For Automated Agent Stage, there will be a dialogflow agent responding to user queries. For Assist Stage, there's no dialogflow agent responding to user queries. But we will provide suggestions which are generated from conversation. If Conversation.conversation_profile is configured for a dialogflow agent, conversation will start from `Automated Agent Stage`, otherwise, it will start from `Assist Stage`. And during `Automated Agent Stage`, once an Intent with Intent.live_agent_handoff is triggered, conversation will transfer to Assist Stage.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specific conversation.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of all conversations in the specified project.</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>
<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="complete">complete(name, body=None, x__xgafv=None)</code>
  <pre>Completes the specified conversation. Finished conversations are purged from the database after 30 days.

Args:
  name: string, Required. Resource identifier of the conversation to close. Format: `projects//locations//conversations/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Conversations.CompleteConversation.
}

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

Returns:
  An object of the form:

    { # Represents a conversation. A conversation is an interaction between an agent, including live agents and Dialogflow agents, and a support customer. Conversations can include phone calls and text-based chat sessions.
  &quot;conversationProfile&quot;: &quot;A String&quot;, # Required. The Conversation Profile to be used to configure this Conversation. This field cannot be updated. Format: `projects//locations//conversationProfiles/`.
  &quot;conversationStage&quot;: &quot;A String&quot;, # The stage of a conversation. It indicates whether the virtual agent or a human agent is handling the conversation. If the conversation is created with the conversation profile that has Dialogflow config set, defaults to ConversationStage.VIRTUAL_AGENT_STAGE; Otherwise, defaults to ConversationStage.HUMAN_ASSIST_STAGE. If the conversation is created with the conversation profile that has Dialogflow config set but explicitly sets conversation_stage to ConversationStage.HUMAN_ASSIST_STAGE, it skips ConversationStage.VIRTUAL_AGENT_STAGE stage and directly goes to ConversationStage.HUMAN_ASSIST_STAGE.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was finished.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The current state of the Conversation.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this conversation. Format: `projects//locations//conversations/`.
  &quot;phoneNumber&quot;: { # Represents a phone number for telephony integration. It allows for connecting a particular conversation over telephony. # Output only. Required if the conversation is to be connected over telephony.
    &quot;phoneNumber&quot;: &quot;A String&quot;, # Output only. The phone number to connect to this conversation.
  },
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was started.
}</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, conversationId=None, x__xgafv=None)</code>
  <pre>Creates a new conversation. Conversations are auto-completed after 24 hours. Conversation Lifecycle: There are two stages during a conversation: Automated Agent Stage and Assist Stage. For Automated Agent Stage, there will be a dialogflow agent responding to user queries. For Assist Stage, there&#x27;s no dialogflow agent responding to user queries. But we will provide suggestions which are generated from conversation. If Conversation.conversation_profile is configured for a dialogflow agent, conversation will start from `Automated Agent Stage`, otherwise, it will start from `Assist Stage`. And during `Automated Agent Stage`, once an Intent with Intent.live_agent_handoff is triggered, conversation will transfer to Assist Stage.

Args:
  parent: string, Required. Resource identifier of the project creating the conversation. Format: `projects//locations/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a conversation. A conversation is an interaction between an agent, including live agents and Dialogflow agents, and a support customer. Conversations can include phone calls and text-based chat sessions.
  &quot;conversationProfile&quot;: &quot;A String&quot;, # Required. The Conversation Profile to be used to configure this Conversation. This field cannot be updated. Format: `projects//locations//conversationProfiles/`.
  &quot;conversationStage&quot;: &quot;A String&quot;, # The stage of a conversation. It indicates whether the virtual agent or a human agent is handling the conversation. If the conversation is created with the conversation profile that has Dialogflow config set, defaults to ConversationStage.VIRTUAL_AGENT_STAGE; Otherwise, defaults to ConversationStage.HUMAN_ASSIST_STAGE. If the conversation is created with the conversation profile that has Dialogflow config set but explicitly sets conversation_stage to ConversationStage.HUMAN_ASSIST_STAGE, it skips ConversationStage.VIRTUAL_AGENT_STAGE stage and directly goes to ConversationStage.HUMAN_ASSIST_STAGE.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was finished.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The current state of the Conversation.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this conversation. Format: `projects//locations//conversations/`.
  &quot;phoneNumber&quot;: { # Represents a phone number for telephony integration. It allows for connecting a particular conversation over telephony. # Output only. Required if the conversation is to be connected over telephony.
    &quot;phoneNumber&quot;: &quot;A String&quot;, # Output only. The phone number to connect to this conversation.
  },
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was started.
}

  conversationId: string, Optional. Identifier of the conversation. Generally it&#x27;s auto generated by Google. Only set it if you cannot wait for the response to return a auto-generated one to you. The conversation ID must be compliant with the regression fomula &quot;a-zA-Z*&quot; with the characters length in range of [3,64]. If the field is provided, the caller is resposible for 1. the uniqueness of the ID, otherwise the request will be rejected. 2. the consistency for whether to use custom ID or not under a project to better ensure uniqueness.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a conversation. A conversation is an interaction between an agent, including live agents and Dialogflow agents, and a support customer. Conversations can include phone calls and text-based chat sessions.
  &quot;conversationProfile&quot;: &quot;A String&quot;, # Required. The Conversation Profile to be used to configure this Conversation. This field cannot be updated. Format: `projects//locations//conversationProfiles/`.
  &quot;conversationStage&quot;: &quot;A String&quot;, # The stage of a conversation. It indicates whether the virtual agent or a human agent is handling the conversation. If the conversation is created with the conversation profile that has Dialogflow config set, defaults to ConversationStage.VIRTUAL_AGENT_STAGE; Otherwise, defaults to ConversationStage.HUMAN_ASSIST_STAGE. If the conversation is created with the conversation profile that has Dialogflow config set but explicitly sets conversation_stage to ConversationStage.HUMAN_ASSIST_STAGE, it skips ConversationStage.VIRTUAL_AGENT_STAGE stage and directly goes to ConversationStage.HUMAN_ASSIST_STAGE.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was finished.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The current state of the Conversation.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this conversation. Format: `projects//locations//conversations/`.
  &quot;phoneNumber&quot;: { # Represents a phone number for telephony integration. It allows for connecting a particular conversation over telephony. # Output only. Required if the conversation is to be connected over telephony.
    &quot;phoneNumber&quot;: &quot;A String&quot;, # Output only. The phone number to connect to this conversation.
  },
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was started.
}</pre>
</div>

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

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

Returns:
  An object of the form:

    { # Represents a conversation. A conversation is an interaction between an agent, including live agents and Dialogflow agents, and a support customer. Conversations can include phone calls and text-based chat sessions.
  &quot;conversationProfile&quot;: &quot;A String&quot;, # Required. The Conversation Profile to be used to configure this Conversation. This field cannot be updated. Format: `projects//locations//conversationProfiles/`.
  &quot;conversationStage&quot;: &quot;A String&quot;, # The stage of a conversation. It indicates whether the virtual agent or a human agent is handling the conversation. If the conversation is created with the conversation profile that has Dialogflow config set, defaults to ConversationStage.VIRTUAL_AGENT_STAGE; Otherwise, defaults to ConversationStage.HUMAN_ASSIST_STAGE. If the conversation is created with the conversation profile that has Dialogflow config set but explicitly sets conversation_stage to ConversationStage.HUMAN_ASSIST_STAGE, it skips ConversationStage.VIRTUAL_AGENT_STAGE stage and directly goes to ConversationStage.HUMAN_ASSIST_STAGE.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was finished.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The current state of the Conversation.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this conversation. Format: `projects//locations//conversations/`.
  &quot;phoneNumber&quot;: { # Represents a phone number for telephony integration. It allows for connecting a particular conversation over telephony. # Output only. Required if the conversation is to be connected over telephony.
    &quot;phoneNumber&quot;: &quot;A String&quot;, # Output only. The phone number to connect to this conversation.
  },
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was started.
}</pre>
</div>

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

Args:
  parent: string, Required. The project from which to list all conversation. Format: `projects//locations/`. (required)
  filter: string, A filter expression that filters conversations listed in the response. In general, the expression must specify the field name, a comparison operator, and the value to use for filtering: - The value must be a string, a number, or a boolean. - The comparison operator must be either `=`,`!=`, `&gt;`, or `&lt;`. - To filter on multiple expressions, separate the expressions with `AND` or `OR` (omitting both implies `AND`). - For clarity, expressions can be enclosed in parentheses. Only `lifecycle_state` can be filtered on in this way. For example, the following expression only returns `COMPLETED` conversations: `lifecycle_state = &quot;COMPLETED&quot;` For more information about filtering, see [API Filtering](https://aip.dev/160).
  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 Conversations.ListConversations.
  &quot;conversations&quot;: [ # The list of conversations. There will be a maximum number of items returned based on the page_size field in the request.
    { # Represents a conversation. A conversation is an interaction between an agent, including live agents and Dialogflow agents, and a support customer. Conversations can include phone calls and text-based chat sessions.
      &quot;conversationProfile&quot;: &quot;A String&quot;, # Required. The Conversation Profile to be used to configure this Conversation. This field cannot be updated. Format: `projects//locations//conversationProfiles/`.
      &quot;conversationStage&quot;: &quot;A String&quot;, # The stage of a conversation. It indicates whether the virtual agent or a human agent is handling the conversation. If the conversation is created with the conversation profile that has Dialogflow config set, defaults to ConversationStage.VIRTUAL_AGENT_STAGE; Otherwise, defaults to ConversationStage.HUMAN_ASSIST_STAGE. If the conversation is created with the conversation profile that has Dialogflow config set but explicitly sets conversation_stage to ConversationStage.HUMAN_ASSIST_STAGE, it skips ConversationStage.VIRTUAL_AGENT_STAGE stage and directly goes to ConversationStage.HUMAN_ASSIST_STAGE.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was finished.
      &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The current state of the Conversation.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this conversation. Format: `projects//locations//conversations/`.
      &quot;phoneNumber&quot;: { # Represents a phone number for telephony integration. It allows for connecting a particular conversation over telephony. # Output only. Required if the conversation is to be connected over telephony.
        &quot;phoneNumber&quot;: &quot;A String&quot;, # Output only. The phone number to connect to this conversation.
      },
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time the conversation was started.
    },
  ],
  &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>

</body></html>