<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> . <a href="dialogflow_v2beta1.projects.conversations.participants.html">participants</a> . <a href="dialogflow_v2beta1.projects.conversations.participants.suggestions.html">suggestions</a></h1>
<h2>Instance Methods</h2>
<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="#compile">compile(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deprecated. use SuggestArticles and SuggestFaqAnswers instead. Gets suggestions for a participant based on specific historical messages. Note that ListSuggestions will only list the auto-generated suggestions, while CompileSuggestion will try to compile suggestion based on the provided conversation context in the real time.</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">Deprecated: Use inline suggestion, event based suggestion or Suggestion* API instead. See HumanAgentAssistantConfig.name for more details. Removal Date: 2020-09-01. Retrieves suggestions for live agents. This method should be used by human agent client software to fetch auto generated suggestions in real-time, while the conversation with an end user is in progress. The functionality is implemented in terms of the [list pagination](/apis/design/design_patterns#list_pagination) design pattern. The client app should use the `next_page_token` field to fetch the next batch of suggestions. `suggestions` are sorted by `create_time` in descending order. To fetch latest suggestion, just set `page_size` to 1. To fetch new suggestions without duplication, send request with filter `create_time_epoch_microseconds > [first item's create_time of previous request]` and empty page_token.</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>
<p class="toc_element">
  <code><a href="#suggestArticles">suggestArticles(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets suggested articles for a participant based on specific historical messages. Note that ListSuggestions will only list the auto-generated suggestions, while CompileSuggestion will try to compile suggestion based on the provided conversation context in the real time.</p>
<p class="toc_element">
  <code><a href="#suggestFaqAnswers">suggestFaqAnswers(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets suggested faq answers for a participant based on specific historical messages.</p>
<p class="toc_element">
  <code><a href="#suggestSmartReplies">suggestSmartReplies(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets smart replies for a participant based on specific historical messages.</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="compile">compile(parent, body=None, x__xgafv=None)</code>
  <pre>Deprecated. use SuggestArticles and SuggestFaqAnswers instead. Gets suggestions for a participant based on specific historical messages. Note that ListSuggestions will only list the auto-generated suggestions, while CompileSuggestion will try to compile suggestion based on the provided conversation context in the real time.

Args:
  parent: string, Required. The name of the participant to fetch suggestion for. Format: `projects//locations//conversations//participants/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Participants.CompileSuggestion.
  &quot;contextSize&quot;: 42, # Optional. Max number of messages prior to and including [latest_message] to use as context when compiling the suggestion. If zero or less than zero, 20 is used.
  &quot;latestMessage&quot;: &quot;A String&quot;, # Optional. The name of the latest conversation message to compile suggestion for. If empty, it will be the latest message of the conversation. Format: `projects//locations//conversations//messages/`.
}

  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 Participants.CompileSuggestion.
  &quot;contextSize&quot;: 42, # Number of messages prior to and including latest_message to compile the suggestion. It may be smaller than the CompileSuggestionRequest.context_size field in the request if there aren&#x27;t that many messages in the conversation.
  &quot;latestMessage&quot;: &quot;A String&quot;, # The name of the latest conversation message used to compile suggestion for. Format: `projects//locations//conversations//messages/`.
  &quot;suggestion&quot;: { # Represents a suggestion for a human agent. # The compiled suggestion.
    &quot;articles&quot;: [ # Output only. Articles ordered by score in descending order.
      { # Represents suggested article.
        &quot;answerRecord&quot;: &quot;A String&quot;, # Output only. The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
        &quot;metadata&quot;: { # Output only. A map that contains metadata about the answer and the document from which it originates.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;snippets&quot;: [ # Output only. Article snippets.
          &quot;A String&quot;,
        ],
        &quot;title&quot;: &quot;A String&quot;, # Output only. The article title.
        &quot;uri&quot;: &quot;A String&quot;, # Output only. The article URI.
      },
    ],
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time the suggestion was created.
    &quot;faqAnswers&quot;: [ # Output only. Answers extracted from FAQ documents.
      { # Represents suggested answer from &quot;frequently asked questions&quot;.
        &quot;answer&quot;: &quot;A String&quot;, # Output only. The piece of text from the `source` knowledge base document.
        &quot;answerRecord&quot;: &quot;A String&quot;, # Output only. The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
        &quot;confidence&quot;: 3.14, # The system&#x27;s confidence score that this Knowledge answer is a good match for this conversational query, range from 0.0 (completely uncertain) to 1.0 (completely certain).
        &quot;metadata&quot;: { # Output only. A map that contains metadata about the answer and the document from which it originates.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;question&quot;: &quot;A String&quot;, # Output only. The corresponding FAQ question.
        &quot;source&quot;: &quot;A String&quot;, # Output only. Indicates which Knowledge Document this answer was extracted from. Format: `projects//locations//agent/knowledgeBases//documents/`.
      },
    ],
    &quot;latestMessage&quot;: &quot;A String&quot;, # Output only. Latest message used as context to compile this suggestion. Format: `projects//locations//conversations//messages/`.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The name of this suggestion. Format: `projects//locations//conversations//participants/*/suggestions/`.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Deprecated: Use inline suggestion, event based suggestion or Suggestion* API instead. See HumanAgentAssistantConfig.name for more details. Removal Date: 2020-09-01. Retrieves suggestions for live agents. This method should be used by human agent client software to fetch auto generated suggestions in real-time, while the conversation with an end user is in progress. The functionality is implemented in terms of the [list pagination](/apis/design/design_patterns#list_pagination) design pattern. The client app should use the `next_page_token` field to fetch the next batch of suggestions. `suggestions` are sorted by `create_time` in descending order. To fetch latest suggestion, just set `page_size` to 1. To fetch new suggestions without duplication, send request with filter `create_time_epoch_microseconds &gt; [first item&#x27;s create_time of previous request]` and empty page_token.

Args:
  parent: string, Required. The name of the participant to fetch suggestions for. Format: `projects//locations//conversations//participants/`. (required)
  filter: string, Optional. Filter on suggestions fields. Currently predicates on `create_time` and `create_time_epoch_microseconds` are supported. `create_time` only support milliseconds accuracy. E.g., `create_time_epoch_microseconds &gt; 1551790877964485` or `create_time &gt; &quot;2017-01-15T01:30:15.01Z&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. The default value is 100; the maximum value is 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 Participants.ListSuggestions.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Optional. Token to retrieve the next page of results or empty if there are no more results in the list.
  &quot;suggestions&quot;: [ # Required. The list of suggestions. There will be a maximum number of items returned based on the page_size field in the request. `suggestions` is sorted by `create_time` in descending order.
    { # Represents a suggestion for a human agent.
      &quot;articles&quot;: [ # Output only. Articles ordered by score in descending order.
        { # Represents suggested article.
          &quot;answerRecord&quot;: &quot;A String&quot;, # Output only. The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
          &quot;metadata&quot;: { # Output only. A map that contains metadata about the answer and the document from which it originates.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;snippets&quot;: [ # Output only. Article snippets.
            &quot;A String&quot;,
          ],
          &quot;title&quot;: &quot;A String&quot;, # Output only. The article title.
          &quot;uri&quot;: &quot;A String&quot;, # Output only. The article URI.
        },
      ],
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time the suggestion was created.
      &quot;faqAnswers&quot;: [ # Output only. Answers extracted from FAQ documents.
        { # Represents suggested answer from &quot;frequently asked questions&quot;.
          &quot;answer&quot;: &quot;A String&quot;, # Output only. The piece of text from the `source` knowledge base document.
          &quot;answerRecord&quot;: &quot;A String&quot;, # Output only. The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
          &quot;confidence&quot;: 3.14, # The system&#x27;s confidence score that this Knowledge answer is a good match for this conversational query, range from 0.0 (completely uncertain) to 1.0 (completely certain).
          &quot;metadata&quot;: { # Output only. A map that contains metadata about the answer and the document from which it originates.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;question&quot;: &quot;A String&quot;, # Output only. The corresponding FAQ question.
          &quot;source&quot;: &quot;A String&quot;, # Output only. Indicates which Knowledge Document this answer was extracted from. Format: `projects//locations//agent/knowledgeBases//documents/`.
        },
      ],
      &quot;latestMessage&quot;: &quot;A String&quot;, # Output only. Latest message used as context to compile this suggestion. Format: `projects//locations//conversations//messages/`.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The name of this suggestion. Format: `projects//locations//conversations//participants/*/suggestions/`.
    },
  ],
}</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>

<div class="method">
    <code class="details" id="suggestArticles">suggestArticles(parent, body=None, x__xgafv=None)</code>
  <pre>Gets suggested articles for a participant based on specific historical messages. Note that ListSuggestions will only list the auto-generated suggestions, while CompileSuggestion will try to compile suggestion based on the provided conversation context in the real time.

Args:
  parent: string, Required. The name of the participant to fetch suggestion for. Format: `projects//locations//conversations//participants/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Participants.SuggestArticles.
  &quot;contextSize&quot;: 42, # Optional. Max number of messages prior to and including latest_message to use as context when compiling the suggestion. By default 20 and at most 50.
  &quot;latestMessage&quot;: &quot;A String&quot;, # Optional. The name of the latest conversation message to compile suggestion for. If empty, it will be the latest message of the conversation. Format: `projects//locations//conversations//messages/`.
}

  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 Participants.SuggestArticles.
  &quot;articleAnswers&quot;: [ # Output only. Articles ordered by score in descending order.
    { # Represents article answer.
      &quot;answerRecord&quot;: &quot;A String&quot;, # The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
      &quot;metadata&quot;: { # A map that contains metadata about the answer and the document from which it originates.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;snippets&quot;: [ # Output only. Article snippets.
        &quot;A String&quot;,
      ],
      &quot;title&quot;: &quot;A String&quot;, # The article title.
      &quot;uri&quot;: &quot;A String&quot;, # The article URI.
    },
  ],
  &quot;contextSize&quot;: 42, # Number of messages prior to and including latest_message to compile the suggestion. It may be smaller than the SuggestArticlesResponse.context_size field in the request if there aren&#x27;t that many messages in the conversation.
  &quot;latestMessage&quot;: &quot;A String&quot;, # The name of the latest conversation message used to compile suggestion for. Format: `projects//locations//conversations//messages/`.
}</pre>
</div>

<div class="method">
    <code class="details" id="suggestFaqAnswers">suggestFaqAnswers(parent, body=None, x__xgafv=None)</code>
  <pre>Gets suggested faq answers for a participant based on specific historical messages.

Args:
  parent: string, Required. The name of the participant to fetch suggestion for. Format: `projects//locations//conversations//participants/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Participants.SuggestFaqAnswers.
  &quot;contextSize&quot;: 42, # Optional. Max number of messages prior to and including [latest_message] to use as context when compiling the suggestion. By default 20 and at most 50.
  &quot;latestMessage&quot;: &quot;A String&quot;, # Optional. The name of the latest conversation message to compile suggestion for. If empty, it will be the latest message of the conversation. Format: `projects//locations//conversations//messages/`.
}

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

Returns:
  An object of the form:

    { # The request message for Participants.SuggestFaqAnswers.
  &quot;contextSize&quot;: 42, # Number of messages prior to and including latest_message to compile the suggestion. It may be smaller than the SuggestFaqAnswersRequest.context_size field in the request if there aren&#x27;t that many messages in the conversation.
  &quot;faqAnswers&quot;: [ # Output only. Answers extracted from FAQ documents.
    { # Represents answer from &quot;frequently asked questions&quot;.
      &quot;answer&quot;: &quot;A String&quot;, # The piece of text from the `source` knowledge base document.
      &quot;answerRecord&quot;: &quot;A String&quot;, # The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
      &quot;confidence&quot;: 3.14, # The system&#x27;s confidence score that this Knowledge answer is a good match for this conversational query, range from 0.0 (completely uncertain) to 1.0 (completely certain).
      &quot;metadata&quot;: { # A map that contains metadata about the answer and the document from which it originates.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;question&quot;: &quot;A String&quot;, # The corresponding FAQ question.
      &quot;source&quot;: &quot;A String&quot;, # Indicates which Knowledge Document this answer was extracted from. Format: `projects//locations//agent/knowledgeBases//documents/`.
    },
  ],
  &quot;latestMessage&quot;: &quot;A String&quot;, # The name of the latest conversation message used to compile suggestion for. Format: `projects//locations//conversations//messages/`.
}</pre>
</div>

<div class="method">
    <code class="details" id="suggestSmartReplies">suggestSmartReplies(parent, body=None, x__xgafv=None)</code>
  <pre>Gets smart replies for a participant based on specific historical messages.

Args:
  parent: string, Required. The name of the participant to fetch suggestion for. Format: `projects//locations//conversations//participants/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Participants.SuggestSmartReplies.
  &quot;contextSize&quot;: 42, # Optional. Max number of messages prior to and including [latest_message] to use as context when compiling the suggestion. By default 20 and at most 50.
  &quot;currentTextInput&quot;: { # Represents the natural language text to be processed. # The current natural language text segment to compile suggestion for. This provides a way for user to get follow up smart reply suggestion after a smart reply selection, without sending a text message.
    &quot;languageCode&quot;: &quot;A String&quot;, # Required. The language of this conversational query. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. Note that queries in the same session do not necessarily need to specify the same language.
    &quot;text&quot;: &quot;A String&quot;, # Required. The UTF-8 encoded natural language text to be processed. Text length must not exceed 256 characters.
  },
  &quot;latestMessage&quot;: &quot;A String&quot;, # The name of the latest conversation message to compile suggestion for. If empty, it will be the latest message of the conversation. Format: `projects//locations//conversations//messages/`.
}

  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 Participants.SuggestSmartReplies.
  &quot;contextSize&quot;: 42, # Number of messages prior to and including latest_message to compile the suggestion. It may be smaller than the SuggestSmartRepliesRequest.context_size field in the request if there aren&#x27;t that many messages in the conversation.
  &quot;latestMessage&quot;: &quot;A String&quot;, # The name of the latest conversation message used to compile suggestion for. Format: `projects//locations//conversations//messages/`.
  &quot;smartReplyAnswers&quot;: [ # Output only. Multiple reply options provided by smart reply service. The order is based on the rank of the model prediction. The maximum number of the returned replies is set in SmartReplyConfig.
    { # Represents a smart reply answer.
      &quot;answerRecord&quot;: &quot;A String&quot;, # The name of answer record, in the format of &quot;projects//locations//answerRecords/&quot;
      &quot;confidence&quot;: 3.14, # Smart reply confidence. The system&#x27;s confidence score that this reply is a good match for this conversation, as a value from 0.0 (completely uncertain) to 1.0 (completely certain).
      &quot;reply&quot;: &quot;A String&quot;, # The content of the reply.
    },
  ],
}</pre>
</div>

</body></html>