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

<p class="toc_element">
  <code><a href="dialogflow_v2.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. It will not be empty 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. It will not be empty 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. It will not be empty 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. It will not be empty 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. It will not be empty 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>