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

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

<p class="toc_element">
  <code><a href="#deleteContexts">deleteContexts(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes all active contexts in the specified session.</p>
<p class="toc_element">
  <code><a href="#detectIntent">detectIntent(session, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Processes a natural language query and returns structured, actionable data</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="deleteContexts">deleteContexts(parent, x__xgafv=None)</code>
  <pre>Deletes all active contexts in the specified session.

Args:
  parent: string, Required. The name of the session to delete all contexts from. Format:
`projects/&lt;Project ID&gt;/agent/sessions/&lt;Session ID&gt;` or `projects/&lt;Project
ID&gt;/agent/environments/&lt;Environment ID&gt;/users/&lt;User ID&gt;/sessions/&lt;Session
ID&gt;`.
If `Environment ID` is not specified we assume default &#x27;draft&#x27; environment.
If `User ID` is not specified, we assume default &#x27;-&#x27; user. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="detectIntent">detectIntent(session, body=None, x__xgafv=None)</code>
  <pre>Processes a natural language query and returns structured, actionable data
as a result. This method is not idempotent, because it may cause contexts
and session entity types to be updated, which in turn might affect
results of future queries.

Args:
  session: string, Required. The name of the session this query is sent to. Format:
`projects/&lt;Project ID&gt;/agent/sessions/&lt;Session ID&gt;`, or
`projects/&lt;Project ID&gt;/agent/environments/&lt;Environment ID&gt;/users/&lt;User
ID&gt;/sessions/&lt;Session ID&gt;`. If `Environment ID` is not specified, we assume
default &#x27;draft&#x27; environment. If `User ID` is not specified, we are using
&quot;-&quot;. It&#x27;s up to the API caller to choose an appropriate `Session ID` and
`User Id`. They can be a random number or some type of user and session
identifiers (preferably hashed). The length of the `Session ID` and
`User ID` must not exceed 36 characters.

For more information, see the [API interactions
guide](https://cloud.google.com/dialogflow/docs/api-overview). (required)
  body: object, The request body.
    The object takes the form of:

{ # The request to detect user&#x27;s intent.
    &quot;outputAudioConfigMask&quot;: &quot;A String&quot;, # Mask for output_audio_config indicating which settings in this
        # request-level config should override speech synthesizer settings defined at
        # agent-level.
        # 
        # If unspecified or empty, output_audio_config replaces the agent-level
        # config in its entirety.
    &quot;queryParams&quot;: { # Represents the parameters of the conversational query. # The parameters of this query.
      &quot;resetContexts&quot;: True or False, # Specifies whether to delete all contexts in the current session
          # before the new ones are activated.
      &quot;sentimentAnalysisRequestConfig&quot;: { # Configures the types of sentiment analysis to perform. # Configures the type of sentiment analysis to perform. If not
          # provided, sentiment analysis is not performed.
        &quot;analyzeQueryTextSentiment&quot;: True or False, # Instructs the service to perform sentiment analysis on
            # `query_text`. If not provided, sentiment analysis is not performed on
            # `query_text`.
      },
      &quot;sessionEntityTypes&quot;: [ # Additional session entity types to replace or extend developer
          # entity types with. The entity synonyms apply to all languages and persist
          # for the session of this query.
        { # A session represents a conversation between a Dialogflow agent and an
            # end-user. You can create special entities, called session entities, during a
            # session. Session entities can extend or replace custom entity types and only
            # exist during the session that they were created for. All session data,
            # including session entities, is stored by Dialogflow for 20 minutes.
            #
            # For more information, see the [session entity
            # guide](https://cloud.google.com/dialogflow/docs/entities-session).
          &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of this session entity type. Format:
              # `projects/&lt;Project ID&gt;/agent/sessions/&lt;Session ID&gt;/entityTypes/&lt;Entity Type
              # Display Name&gt;`, or `projects/&lt;Project ID&gt;/agent/environments/&lt;Environment
              # ID&gt;/users/&lt;User ID&gt;/sessions/&lt;Session ID&gt;/entityTypes/&lt;Entity Type Display
              # Name&gt;`.
              # If `Environment ID` is not specified, we assume default &#x27;draft&#x27;
              # environment. If `User ID` is not specified, we assume default &#x27;-&#x27; user.
              #
              # `&lt;Entity Type Display Name&gt;` must be the display name of an existing entity
              # type in the same agent that will be overridden or supplemented.
          &quot;entities&quot;: [ # Required. The collection of entities associated with this session entity
              # type.
            { # An **entity entry** for an associated entity type.
              &quot;synonyms&quot;: [ # Required. A collection of value synonyms. For example, if the entity type
                  # is *vegetable*, and `value` is *scallions*, a synonym could be *green
                  # onions*.
                  #
                  # For `KIND_LIST` entity types:
                  #
                  # *   This collection must contain exactly one synonym equal to `value`.
                &quot;A String&quot;,
              ],
              &quot;value&quot;: &quot;A String&quot;, # Required. The primary value associated with this entity entry.
                  # For example, if the entity type is *vegetable*, the value could be
                  # *scallions*.
                  #
                  # For `KIND_MAP` entity types:
                  #
                  # *   A reference value to be used in place of synonyms.
                  #
                  # For `KIND_LIST` entity types:
                  #
                  # *   A string that can contain references to other entity types (with or
                  #     without aliases).
            },
          ],
          &quot;entityOverrideMode&quot;: &quot;A String&quot;, # Required. Indicates whether the additional data should override or
              # supplement the custom entity type definition.
        },
      ],
      &quot;payload&quot;: { # This field can be used to pass custom data to your webhook.
          # Arbitrary JSON objects are supported.
          # If supplied, the value is used to populate the
          # `WebhookRequest.original_detect_intent_request.payload`
          # field sent to your webhook.
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
      },
      &quot;geoLocation&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # The geo location of this conversational query.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
          # standard&lt;/a&gt;. Values must be within normalized ranges.
        &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
      &quot;contexts&quot;: [ # The collection of contexts to be activated before this query is
          # executed.
        { # Dialogflow contexts are similar to natural language context. If a person says
            # to you &quot;they are orange&quot;, you need context in order to understand what &quot;they&quot;
            # is referring to. Similarly, for Dialogflow to handle an end-user expression
            # like that, it needs to be provided with context in order to correctly match
            # an intent.
            #
            # Using contexts, you can control the flow of a conversation. You can configure
            # contexts for an intent by setting input and output contexts, which are
            # identified by string names. When an intent is matched, any configured output
            # contexts for that intent become active. While any contexts are active,
            # Dialogflow is more likely to match intents that are configured with input
            # contexts that correspond to the currently active contexts.
            #
            # For more information about context, see the
            # [Contexts guide](https://cloud.google.com/dialogflow/docs/contexts-overview).
          &quot;parameters&quot;: { # Optional. The collection of parameters associated with this context.
              #
              # Depending on your protocol or client library language, this is a
              # map, associative array, symbol table, dictionary, or JSON object
              # composed of a collection of (MapKey, MapValue) pairs:
              #
              # -   MapKey type: string
              # -   MapKey value: parameter name
              # -   MapValue type:
              #     -   If parameter&#x27;s entity type is a composite entity: map
              #     -   Else: string or number, depending on parameter value type
              # -   MapValue value:
              #     -   If parameter&#x27;s entity type is a composite entity:
              #         map from composite entity property names to property values
              #     -   Else: parameter value
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
          },
          &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the context. Format:
              # `projects/&lt;Project ID&gt;/agent/sessions/&lt;Session ID&gt;/contexts/&lt;Context ID&gt;`,
              # or `projects/&lt;Project ID&gt;/agent/environments/&lt;Environment ID&gt;/users/&lt;User
              # ID&gt;/sessions/&lt;Session ID&gt;/contexts/&lt;Context ID&gt;`.
              #
              # The `Context ID` is always converted to lowercase, may only contain
              # characters in a-zA-Z0-9_-% and may be at most 250 bytes long.
              #
              # If `Environment ID` is not specified, we assume default &#x27;draft&#x27;
              # environment. If `User ID` is not specified, we assume default &#x27;-&#x27; user.
              #
              # The following context names are reserved for internal use by Dialogflow.
              # You should not use these contexts or create contexts with these names:
              #
              # * `__system_counters__`
              # * `*_id_dialog_context`
              # * `*_dialog_params_size`
          &quot;lifespanCount&quot;: 42, # Optional. The number of conversational query requests after which the
              # context expires. The default is `0`. If set to `0`, the context expires
              # immediately. Contexts expire automatically after 20 minutes if there
              # are no matching queries.
        },
      ],
      &quot;timeZone&quot;: &quot;A String&quot;, # The time zone of this conversational query from the
          # [time zone database](https://www.iana.org/time-zones), e.g.,
          # America/New_York, Europe/Paris. If not provided, the time zone specified in
          # agent settings is used.
    },
    &quot;inputAudio&quot;: &quot;A String&quot;, # The natural language speech audio to be processed. This field
        # should be populated iff `query_input` is set to an input audio config.
        # A single request can contain up to 1 minute of speech audio data.
    &quot;outputAudioConfig&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # Instructs the speech synthesizer how to generate the output
        # audio. If this field is not set and agent-level speech synthesizer is not
        # configured, no output audio is generated.
        # If this audio config is supplied in a request, it overrides all existing
        # text-to-speech settings applied to the agent.
      &quot;sampleRateHertz&quot;: 42, # The synthesis sample rate (in hertz) for this audio. If not
          # provided, then the synthesizer will use the default sample rate based on
          # the audio encoding. If this is different from the voice&#x27;s natural sample
          # rate, then the synthesizer will honor this request by converting to the
          # desired sample rate (which might result in worse audio quality).
      &quot;audioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
      &quot;synthesizeSpeechConfig&quot;: { # Configuration of how speech should be synthesized. # Configuration of how speech should be synthesized.
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the
            # specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of
            # 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB)
            # will play at approximately half the amplitude of the normal native signal
            # amplitude. A value of +6.0 (dB) will play at approximately twice the
            # amplitude of the normal native signal amplitude. We strongly recommend not
            # to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for
            # any value greater than that.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal
            # native speed supported by the specific voice. 2.0 is twice as fast, and
            # 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any
            # other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20
            # semitones from the original pitch. -20 means decrease 20 semitones from the
            # original pitch.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a
              # voice based on the other parameters such as language_code and
              # ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will
              # choose a voice based on the other parameters such as language_code and
              # name. Note that this is only a preference, not requirement. If a
              # voice of the appropriate gender is not available, the synthesizer should
              # substitute a voice with a different gender rather than failing the request.
        },
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are
            # applied on (post synthesized) text to speech. Effects are applied on top of
            # each other in the order they are given.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;queryInput&quot;: { # Represents the query input. It can contain either: # Required. The input specification. It can be set to:
        # 
        # 1.  an audio config
        #     which instructs the speech recognizer how to process the speech audio,
        # 
        # 2.  a conversational query in the form of text, or
        # 
        # 3.  an event that specifies which intent to trigger.
        #
        # 1.  An audio config which
        #     instructs the speech recognizer how to process the speech audio.
        #
        # 2.  A conversational query in the form of text,.
        #
        # 3.  An event that specifies which intent to trigger.
      &quot;text&quot;: { # Represents the natural language text to be processed. # The natural language text to be processed.
        &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;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;event&quot;: { # Events allow for matching intents by event name instead of the natural # The event to be processed.
          # language input. For instance, input `&lt;event: { name: &quot;welcome_event&quot;,
          # parameters: { name: &quot;Sam&quot; } }&gt;` can trigger a personalized welcome response.
          # The parameter `name` may be used by the agent in the response:
          # `&quot;Hello #welcome_event.name! What can I do for you today?&quot;`.
        &quot;parameters&quot;: { # The collection of parameters associated with the event.
            #
            # Depending on your protocol or client library language, this is a
            # map, associative array, symbol table, dictionary, or JSON object
            # composed of a collection of (MapKey, MapValue) pairs:
            #
            # -   MapKey type: string
            # -   MapKey value: parameter name
            # -   MapValue type:
            #     -   If parameter&#x27;s entity type is a composite entity: map
            #     -   Else: string or number, depending on parameter value type
            # -   MapValue value:
            #     -   If parameter&#x27;s entity type is a composite entity:
            #         map from composite entity property names to property values
            #     -   Else: parameter value
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
        },
        &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the event.
        &quot;languageCode&quot;: &quot;A String&quot;, # Required. The language of this 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;audioConfig&quot;: { # Instructs the speech recognizer how to process the audio content. # Instructs the speech recognizer how to process the speech audio.
        &quot;model&quot;: &quot;A String&quot;, # Which Speech model to select for the given request. Select the
            # model best suited to your domain to get best results. If a model is not
            # explicitly specified, then we auto-select a model based on the parameters
            # in the InputAudioConfig.
            # If enhanced speech model is enabled for the agent and an enhanced
            # version of the specified model for the language does not exist, then the
            # speech is recognized using the standard version of the specified model.
            # Refer to
            # [Cloud Speech API
            # documentation](https://cloud.google.com/speech-to-text/docs/basics#select-model)
            # for more details.
        &quot;modelVariant&quot;: &quot;A String&quot;, # Which variant of the Speech model to use.
        &quot;speechContexts&quot;: [ # Context information to assist speech recognition.
            #
            # See [the Cloud Speech
            # documentation](https://cloud.google.com/speech-to-text/docs/basics#phrase-hints)
            # for more details.
          { # Hints for the speech recognizer to help with recognition in a specific
              # conversation state.
            &quot;phrases&quot;: [ # Optional. A list of strings containing words and phrases that the speech
                # recognizer should recognize with higher likelihood.
                #
                # This list can be used to:
                #
                # * improve accuracy for words and phrases you expect the user to say,
                #   e.g. typical commands for your Dialogflow agent
                # * add additional words to the speech recognizer vocabulary
                # * ...
                #
                # See the [Cloud Speech
                # documentation](https://cloud.google.com/speech-to-text/quotas) for usage
                # limits.
              &quot;A String&quot;,
            ],
            &quot;boost&quot;: 3.14, # Optional. Boost for this context compared to other contexts:
                #
                # * If the boost is positive, Dialogflow will increase the probability that
                #   the phrases in this context are recognized over similar sounding phrases.
                # * If the boost is unspecified or non-positive, Dialogflow will not apply
                #   any boost.
                #
                # Dialogflow recommends that you use boosts in the range (0, 20] and that you
                # find a value that fits your use case with binary search.
          },
        ],
        &quot;enableWordInfo&quot;: True or False, # If `true`, Dialogflow returns SpeechWordInfo in
            # StreamingRecognitionResult with information about the recognized speech
            # words, e.g. start and end time offsets. If false or unspecified, Speech
            # doesn&#x27;t return any word-level information.
        &quot;singleUtterance&quot;: True or False, # If `false` (default), recognition does not cease until the
            # client closes the stream.
            # If `true`, the recognizer will detect a single spoken utterance in input
            # audio. Recognition ceases when it detects the audio&#x27;s voice has
            # stopped or paused. In this case, once a detected intent is received, the
            # client should close the stream and start a new request with a new stream as
            # needed.
            # Note: This setting is relevant only for streaming methods.
            # Note: When specified, InputAudioConfig.single_utterance takes precedence
            # over StreamingDetectIntentRequest.single_utterance.
        &quot;audioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the audio content to process.
        &quot;sampleRateHertz&quot;: 42, # Required. Sample rate (in Hertz) of the audio content sent in the query.
            # Refer to
            # [Cloud Speech API
            # documentation](https://cloud.google.com/speech-to-text/docs/basics) for
            # more details.
        &quot;languageCode&quot;: &quot;A String&quot;, # Required. The language of the supplied audio. Dialogflow does not do
            # translations. 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;phraseHints&quot;: [ # A list of strings containing words and phrases that the speech
            # recognizer should recognize with higher likelihood.
            #
            # See [the Cloud Speech
            # documentation](https://cloud.google.com/speech-to-text/docs/basics#phrase-hints)
            # for more details.
            #
            # This field is deprecated. Please use [speech_contexts]() instead. If you
            # specify both [phrase_hints]() and [speech_contexts](), Dialogflow will
            # treat the [phrase_hints]() as a single additional [SpeechContext]().
          &quot;A String&quot;,
        ],
      },
    },
  }

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

Returns:
  An object of the form:

    { # The message returned from the DetectIntent method.
    &quot;outputAudio&quot;: &quot;A String&quot;, # The audio data bytes encoded as specified in the request.
        # Note: The output audio is generated based on the values of default platform
        # text responses found in the `query_result.fulfillment_messages` field. If
        # multiple default text responses exist, they will be concatenated when
        # generating audio. If no default platform text responses exist, the
        # generated audio content will be empty.
        #
        # In some scenarios, multiple output audio fields may be present in the
        # response structure. In these cases, only the top-most-level audio output
        # has content.
    &quot;responseId&quot;: &quot;A String&quot;, # The unique identifier of the response. It can be used to
        # locate a response in the training example set or for reporting issues.
    &quot;outputAudioConfig&quot;: { # Instructs the speech synthesizer on how to generate the output audio content. # The config used by the speech synthesizer to generate the output audio.
        # If this audio config is supplied in a request, it overrides all existing
        # text-to-speech settings applied to the agent.
      &quot;sampleRateHertz&quot;: 42, # The synthesis sample rate (in hertz) for this audio. If not
          # provided, then the synthesizer will use the default sample rate based on
          # the audio encoding. If this is different from the voice&#x27;s natural sample
          # rate, then the synthesizer will honor this request by converting to the
          # desired sample rate (which might result in worse audio quality).
      &quot;audioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
      &quot;synthesizeSpeechConfig&quot;: { # Configuration of how speech should be synthesized. # Configuration of how speech should be synthesized.
        &quot;volumeGainDb&quot;: 3.14, # Optional. Volume gain (in dB) of the normal native volume supported by the
            # specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of
            # 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB)
            # will play at approximately half the amplitude of the normal native signal
            # amplitude. A value of +6.0 (dB) will play at approximately twice the
            # amplitude of the normal native signal amplitude. We strongly recommend not
            # to exceed +10 (dB) as there&#x27;s usually no effective increase in loudness for
            # any value greater than that.
        &quot;speakingRate&quot;: 3.14, # Optional. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal
            # native speed supported by the specific voice. 2.0 is twice as fast, and
            # 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any
            # other values &lt; 0.25 or &gt; 4.0 will return an error.
        &quot;pitch&quot;: 3.14, # Optional. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20
            # semitones from the original pitch. -20 means decrease 20 semitones from the
            # original pitch.
        &quot;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The name of the voice. If not set, the service will choose a
              # voice based on the other parameters such as language_code and
              # ssml_gender.
          &quot;ssmlGender&quot;: &quot;A String&quot;, # Optional. The preferred gender of the voice. If not set, the service will
              # choose a voice based on the other parameters such as language_code and
              # name. Note that this is only a preference, not requirement. If a
              # voice of the appropriate gender is not available, the synthesizer should
              # substitute a voice with a different gender rather than failing the request.
        },
        &quot;effectsProfileId&quot;: [ # Optional. An identifier which selects &#x27;audio effects&#x27; profiles that are
            # applied on (post synthesized) text to speech. Effects are applied on top of
            # each other in the order they are given.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;queryResult&quot;: { # Represents the result of conversational query or event processing. # The selected results of the conversational query or event processing.
        # See `alternative_query_results` for additional potential results.
      &quot;intent&quot;: { # An intent categorizes an end-user&#x27;s intention for one conversation turn. For # The intent that matched the conversational query. Some, not
          # all fields are filled in this message, including but not limited to:
          # `name`, `display_name`, `end_interaction` and `is_fallback`.
          # each agent, you define many intents, where your combined intents can handle a
          # complete conversation. When an end-user writes or says something, referred to
          # as an end-user expression or end-user input, Dialogflow matches the end-user
          # input to the best intent in your agent. Matching an intent is also known as
          # intent classification.
          #
          # For more information, see the [intent
          # guide](https://cloud.google.com/dialogflow/docs/intents-overview).
        &quot;name&quot;: &quot;A String&quot;, # Optional. The unique identifier of this intent.
            # Required for Intents.UpdateIntent and Intents.BatchUpdateIntents
            # methods.
            # Format: `projects/&lt;Project ID&gt;/agent/intents/&lt;Intent ID&gt;`.
        &quot;webhookState&quot;: &quot;A String&quot;, # Optional. Indicates whether webhooks are enabled for the intent.
        &quot;isFallback&quot;: True or False, # Optional. Indicates whether this is a fallback intent.
        &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of this intent.
        &quot;messages&quot;: [ # Optional. The collection of rich messages corresponding to the
            # `Response` field in the Dialogflow console.
          { # A rich response message.
              # Corresponds to the intent `Response` field in the Dialogflow console.
              # For more information, see
              # [Rich response
              # messages](https://cloud.google.com/dialogflow/docs/intents-rich-messages).
            &quot;card&quot;: { # The card response message. # The card response.
              &quot;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
              &quot;buttons&quot;: [ # Optional. The collection of card buttons.
                { # Contains information about a button.
                  &quot;text&quot;: &quot;A String&quot;, # Optional. The text to show on the button.
                  &quot;postback&quot;: &quot;A String&quot;, # Optional. The text to send back to the Dialogflow API or a URI to
                      # open.
                },
              ],
              &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file for the card.
            },
            &quot;text&quot;: { # The text response message. # The text response.
              &quot;text&quot;: [ # Optional. The collection of the agent&#x27;s responses.
                &quot;A String&quot;,
              ],
            },
            &quot;carouselSelect&quot;: { # The card for presenting a carousel of options to select from. # The carousel card response for Actions on Google.
              &quot;items&quot;: [ # Required. Carousel items.
                { # An item in the carousel.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. The body text of the card.
                  &quot;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item.
                  &quot;image&quot;: { # The image response message. # Optional. The image to display.
                    &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                    &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                        # e.g., screen readers.
                  },
                  &quot;info&quot;: { # Additional info about the select item for when it is triggered in a # Required. Additional info about the option item.
                      # dialog.
                    &quot;synonyms&quot;: [ # Optional. A list of synonyms that can also be used to trigger this
                        # item in dialog.
                      &quot;A String&quot;,
                    ],
                    &quot;key&quot;: &quot;A String&quot;, # Required. A unique key that will be sent back to the agent if this
                        # response is given.
                  },
                },
              ],
            },
            &quot;simpleResponses&quot;: { # The collection of simple response candidates. # The voice and text-only responses for Actions on Google.
                # This message in `QueryResult.fulfillment_messages` and
                # `WebhookResponse.fulfillment_messages` should contain only one
                # `SimpleResponse`.
              &quot;simpleResponses&quot;: [ # Required. The list of simple responses.
                { # The simple response message containing speech or text.
                  &quot;textToSpeech&quot;: &quot;A String&quot;, # One of text_to_speech or ssml must be provided. The plain text of the
                      # speech output. Mutually exclusive with ssml.
                  &quot;ssml&quot;: &quot;A String&quot;, # One of text_to_speech or ssml must be provided. Structured spoken
                      # response to the user in the SSML format. Mutually exclusive with
                      # text_to_speech.
                  &quot;displayText&quot;: &quot;A String&quot;, # Optional. The text to display.
                },
              ],
            },
            &quot;platform&quot;: &quot;A String&quot;, # Optional. The platform that this message is intended for.
            &quot;browseCarouselCard&quot;: { # Browse Carousel Card for Actions on Google. # Browse carousel card for Actions on Google.
                # https://developers.google.com/actions/assistant/responses#browsing_carousel
              &quot;items&quot;: [ # Required. List of items in the Browse Carousel Card. Minimum of two
                  # items, maximum of ten.
                { # Browsing carousel tile
                  &quot;footer&quot;: &quot;A String&quot;, # Optional. Text that appears at the bottom of the Browse Carousel
                      # Card. Maximum of one line of text.
                  &quot;image&quot;: { # The image response message. # Optional. Hero image for the carousel item.
                    &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                    &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                        # e.g., screen readers.
                  },
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the carousel item. Maximum of four lines of
                      # text.
                  &quot;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item. Maximum of two lines of text.
                  &quot;openUriAction&quot;: { # Actions on Google action to open a given url. # Required. Action to present to the user.
                    &quot;url&quot;: &quot;A String&quot;, # Required. URL
                    &quot;urlTypeHint&quot;: &quot;A String&quot;, # Optional. Specifies the type of viewer that is used when opening
                        # the URL. Defaults to opening via web browser.
                  },
                },
              ],
              &quot;imageDisplayOptions&quot;: &quot;A String&quot;, # Optional. Settings for displaying the image. Applies to every image in
                  # items.
            },
            &quot;linkOutSuggestion&quot;: { # The suggestion chip message that allows the user to jump out to the app # The link out suggestion chip for Actions on Google.
                # or website associated with this agent.
              &quot;uri&quot;: &quot;A String&quot;, # Required. The URI of the app or site to open when the user taps the
                  # suggestion chip.
              &quot;destinationName&quot;: &quot;A String&quot;, # Required. The name of the app or site this chip is linking to.
            },
            &quot;basicCard&quot;: { # The basic card message. Useful for displaying information. # The basic card response for Actions on Google.
              &quot;buttons&quot;: [ # Optional. The collection of card buttons.
                { # The button object that appears at the bottom of a card.
                  &quot;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                  &quot;openUriAction&quot;: { # Opens the given URI. # Required. Action to take when a user taps on the button.
                    &quot;uri&quot;: &quot;A String&quot;, # Required. The HTTP or HTTPS scheme URI.
                  },
                },
              ],
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
              &quot;formattedText&quot;: &quot;A String&quot;, # Required, unless image is present. The body text of the card.
              &quot;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
              &quot;image&quot;: { # The image response message. # Optional. The image for the card.
                &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                    # e.g., screen readers.
              },
            },
            &quot;suggestions&quot;: { # The collection of suggestions. # The suggestion chips for Actions on Google.
              &quot;suggestions&quot;: [ # Required. The list of suggested replies.
                { # The suggestion chip message that the user can tap to quickly post a reply
                    # to the conversation.
                  &quot;title&quot;: &quot;A String&quot;, # Required. The text shown the in the suggestion chip.
                },
              ],
            },
            &quot;quickReplies&quot;: { # The quick replies response message. # The quick replies response.
              &quot;quickReplies&quot;: [ # Optional. The collection of quick replies.
                &quot;A String&quot;,
              ],
              &quot;title&quot;: &quot;A String&quot;, # Optional. The title of the collection of quick replies.
            },
            &quot;tableCard&quot;: { # Table card for Actions on Google. # Table card for Actions on Google.
              &quot;title&quot;: &quot;A String&quot;, # Required. Title of the card.
              &quot;columnProperties&quot;: [ # Optional. Display properties for the columns in this table.
                { # Column properties for TableCard.
                  &quot;header&quot;: &quot;A String&quot;, # Required. Column heading.
                  &quot;horizontalAlignment&quot;: &quot;A String&quot;, # Optional. Defines text alignment for all cells in this column.
                },
              ],
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle to the title.
              &quot;image&quot;: { # The image response message. # Optional. Image which should be displayed on the card.
                &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                    # e.g., screen readers.
              },
              &quot;rows&quot;: [ # Optional. Rows in this table of data.
                { # Row of TableCard.
                  &quot;cells&quot;: [ # Optional. List of cells that make up this row.
                    { # Cell of TableCardRow.
                      &quot;text&quot;: &quot;A String&quot;, # Required. Text in this cell.
                    },
                  ],
                  &quot;dividerAfter&quot;: True or False, # Optional. Whether to add a visual divider after this row.
                },
              ],
              &quot;buttons&quot;: [ # Optional. List of buttons for the card.
                { # The button object that appears at the bottom of a card.
                  &quot;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                  &quot;openUriAction&quot;: { # Opens the given URI. # Required. Action to take when a user taps on the button.
                    &quot;uri&quot;: &quot;A String&quot;, # Required. The HTTP or HTTPS scheme URI.
                  },
                },
              ],
            },
            &quot;image&quot;: { # The image response message. # The image response.
              &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
              &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                  # e.g., screen readers.
            },
            &quot;mediaContent&quot;: { # The media content card for Actions on Google. # The media content card for Actions on Google.
              &quot;mediaObjects&quot;: [ # Required. List of media objects.
                { # Response media object for media content card.
                  &quot;largeImage&quot;: { # The image response message. # Optional. Image to display above media content.
                    &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                    &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                        # e.g., screen readers.
                  },
                  &quot;contentUrl&quot;: &quot;A String&quot;, # Required. Url where the media is stored.
                  &quot;icon&quot;: { # The image response message. # Optional. Icon to display above media content.
                    &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                    &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                        # e.g., screen readers.
                  },
                  &quot;name&quot;: &quot;A String&quot;, # Required. Name of media card.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of media card.
                },
              ],
              &quot;mediaType&quot;: &quot;A String&quot;, # Optional. What type of media is the content (ie &quot;audio&quot;).
            },
            &quot;listSelect&quot;: { # The card for presenting a list of options to select from. # The list card response for Actions on Google.
              &quot;title&quot;: &quot;A String&quot;, # Optional. The overall title of the list.
              &quot;items&quot;: [ # Required. List items.
                { # An item in the list.
                  &quot;image&quot;: { # The image response message. # Optional. The image to display.
                    &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                    &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                        # e.g., screen readers.
                  },
                  &quot;info&quot;: { # Additional info about the select item for when it is triggered in a # Required. Additional information about this option.
                      # dialog.
                    &quot;synonyms&quot;: [ # Optional. A list of synonyms that can also be used to trigger this
                        # item in dialog.
                      &quot;A String&quot;,
                    ],
                    &quot;key&quot;: &quot;A String&quot;, # Required. A unique key that will be sent back to the agent if this
                        # response is given.
                  },
                  &quot;title&quot;: &quot;A String&quot;, # Required. The title of the list item.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. The main text describing the item.
                },
              ],
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle of the list.
            },
            &quot;payload&quot;: { # A custom platform-specific response.
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
            },
          },
        ],
        &quot;events&quot;: [ # Optional. The collection of event names that trigger the intent.
            # If the collection of input contexts is not empty, all of the contexts must
            # be present in the active user session for an event to trigger this intent.
            # Event names are limited to 150 characters.
          &quot;A String&quot;,
        ],
        &quot;outputContexts&quot;: [ # Optional. The collection of contexts that are activated when the intent
            # is matched. Context messages in this collection should not set the
            # parameters field. Setting the `lifespan_count` to 0 will reset the context
            # when the intent is matched.
            # Format: `projects/&lt;Project ID&gt;/agent/sessions/-/contexts/&lt;Context ID&gt;`.
          { # Dialogflow contexts are similar to natural language context. If a person says
              # to you &quot;they are orange&quot;, you need context in order to understand what &quot;they&quot;
              # is referring to. Similarly, for Dialogflow to handle an end-user expression
              # like that, it needs to be provided with context in order to correctly match
              # an intent.
              #
              # Using contexts, you can control the flow of a conversation. You can configure
              # contexts for an intent by setting input and output contexts, which are
              # identified by string names. When an intent is matched, any configured output
              # contexts for that intent become active. While any contexts are active,
              # Dialogflow is more likely to match intents that are configured with input
              # contexts that correspond to the currently active contexts.
              #
              # For more information about context, see the
              # [Contexts guide](https://cloud.google.com/dialogflow/docs/contexts-overview).
            &quot;parameters&quot;: { # Optional. The collection of parameters associated with this context.
                #
                # Depending on your protocol or client library language, this is a
                # map, associative array, symbol table, dictionary, or JSON object
                # composed of a collection of (MapKey, MapValue) pairs:
                #
                # -   MapKey type: string
                # -   MapKey value: parameter name
                # -   MapValue type:
                #     -   If parameter&#x27;s entity type is a composite entity: map
                #     -   Else: string or number, depending on parameter value type
                # -   MapValue value:
                #     -   If parameter&#x27;s entity type is a composite entity:
                #         map from composite entity property names to property values
                #     -   Else: parameter value
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
            },
            &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the context. Format:
                # `projects/&lt;Project ID&gt;/agent/sessions/&lt;Session ID&gt;/contexts/&lt;Context ID&gt;`,
                # or `projects/&lt;Project ID&gt;/agent/environments/&lt;Environment ID&gt;/users/&lt;User
                # ID&gt;/sessions/&lt;Session ID&gt;/contexts/&lt;Context ID&gt;`.
                #
                # The `Context ID` is always converted to lowercase, may only contain
                # characters in a-zA-Z0-9_-% and may be at most 250 bytes long.
                #
                # If `Environment ID` is not specified, we assume default &#x27;draft&#x27;
                # environment. If `User ID` is not specified, we assume default &#x27;-&#x27; user.
                #
                # The following context names are reserved for internal use by Dialogflow.
                # You should not use these contexts or create contexts with these names:
                #
                # * `__system_counters__`
                # * `*_id_dialog_context`
                # * `*_dialog_params_size`
            &quot;lifespanCount&quot;: 42, # Optional. The number of conversational query requests after which the
                # context expires. The default is `0`. If set to `0`, the context expires
                # immediately. Contexts expire automatically after 20 minutes if there
                # are no matching queries.
          },
        ],
        &quot;action&quot;: &quot;A String&quot;, # Optional. The name of the action associated with the intent.
            # Note: The action name must not contain whitespaces.
        &quot;priority&quot;: 42, # Optional. The priority of this intent. Higher numbers represent higher
            # priorities.
            #
            # - If the supplied value is unspecified or 0, the service
            #   translates the value to 500,000, which corresponds to the
            #   `Normal` priority in the console.
            # - If the supplied value is negative, the intent is ignored
            #   in runtime detect intent requests.
        &quot;rootFollowupIntentName&quot;: &quot;A String&quot;, # Read-only. The unique identifier of the root intent in the chain of
            # followup intents. It identifies the correct followup intents chain for
            # this intent. We populate this field only in the output.
            #
            # Format: `projects/&lt;Project ID&gt;/agent/intents/&lt;Intent ID&gt;`.
        &quot;followupIntentInfo&quot;: [ # Read-only. Information about all followup intents that have this intent as
            # a direct or indirect parent. We populate this field only in the output.
          { # Represents a single followup intent in the chain.
            &quot;parentFollowupIntentName&quot;: &quot;A String&quot;, # The unique identifier of the followup intent&#x27;s parent.
                # Format: `projects/&lt;Project ID&gt;/agent/intents/&lt;Intent ID&gt;`.
            &quot;followupIntentName&quot;: &quot;A String&quot;, # The unique identifier of the followup intent.
                # Format: `projects/&lt;Project ID&gt;/agent/intents/&lt;Intent ID&gt;`.
          },
        ],
        &quot;trainingPhrases&quot;: [ # Optional. The collection of examples that the agent is
            # trained on.
          { # Represents an example that the agent is trained on.
            &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this training phrase.
            &quot;timesAddedCount&quot;: 42, # Optional. Indicates how many times this example was added to
                # the intent. Each time a developer adds an existing sample by editing an
                # intent or training, this counter is increased.
            &quot;parts&quot;: [ # Required. The ordered list of training phrase parts.
                # The parts are concatenated in order to form the training phrase.
                #
                # Note: The API does not automatically annotate training phrases like the
                # Dialogflow Console does.
                #
                # Note: Do not forget to include whitespace at part boundaries,
                # so the training phrase is well formatted when the parts are concatenated.
                #
                # If the training phrase does not need to be annotated with parameters,
                # you just need a single part with only the Part.text field set.
                #
                # If you want to annotate the training phrase, you must create multiple
                # parts, where the fields of each part are populated in one of two ways:
                #
                # -   `Part.text` is set to a part of the phrase that has no parameters.
                # -   `Part.text` is set to a part of the phrase that you want to annotate,
                #     and the `entity_type`, `alias`, and `user_defined` fields are all
                #     set.
              { # Represents a part of a training phrase.
                &quot;alias&quot;: &quot;A String&quot;, # Optional. The parameter name for the value extracted from the
                    # annotated part of the example.
                    # This field is required for annotated parts of the training phrase.
                &quot;userDefined&quot;: True or False, # Optional. Indicates whether the text was manually annotated.
                    # This field is set to true when the Dialogflow Console is used to
                    # manually annotate the part. When creating an annotated part with the
                    # API, you must set this to true.
                &quot;text&quot;: &quot;A String&quot;, # Required. The text for this part.
                &quot;entityType&quot;: &quot;A String&quot;, # Optional. The entity type name prefixed with `@`.
                    # This field is required for annotated parts of the training phrase.
              },
            ],
            &quot;type&quot;: &quot;A String&quot;, # Required. The type of the training phrase.
          },
        ],
        &quot;inputContextNames&quot;: [ # Optional. The list of context names required for this intent to be
            # triggered.
            # Format: `projects/&lt;Project ID&gt;/agent/sessions/-/contexts/&lt;Context ID&gt;`.
          &quot;A String&quot;,
        ],
        &quot;mlDisabled&quot;: True or False, # Optional. Indicates whether Machine Learning is disabled for the intent.
            # Note: If `ml_disabled` setting is set to true, then this intent is not
            # taken into account during inference in `ML ONLY` match mode. Also,
            # auto-markup in the UI is turned off.
        &quot;resetContexts&quot;: True or False, # Optional. Indicates whether to delete all contexts in the current
            # session when this intent is matched.
        &quot;parentFollowupIntentName&quot;: &quot;A String&quot;, # Read-only after creation. The unique identifier of the parent intent in the
            # chain of followup intents. You can set this field when creating an intent,
            # for example with CreateIntent or
            # BatchUpdateIntents, in order to make this
            # intent a followup intent.
            #
            # It identifies the parent followup intent.
            # Format: `projects/&lt;Project ID&gt;/agent/intents/&lt;Intent ID&gt;`.
        &quot;defaultResponsePlatforms&quot;: [ # Optional. The list of platforms for which the first responses will be
            # copied from the messages in PLATFORM_UNSPECIFIED (i.e. default platform).
          &quot;A String&quot;,
        ],
        &quot;parameters&quot;: [ # Optional. The collection of parameters associated with the intent.
          { # Represents intent parameters.
            &quot;value&quot;: &quot;A String&quot;, # Optional. The definition of the parameter value. It can be:
                #
                # - a constant string,
                # - a parameter value defined as `$parameter_name`,
                # - an original parameter value defined as `$parameter_name.original`,
                # - a parameter value from some context defined as
                #   `#context_name.parameter_name`.
            &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the parameter.
            &quot;mandatory&quot;: True or False, # Optional. Indicates whether the parameter is required. That is,
                # whether the intent cannot be completed without collecting the parameter
                # value.
            &quot;isList&quot;: True or False, # Optional. Indicates whether the parameter represents a list of values.
            &quot;entityTypeDisplayName&quot;: &quot;A String&quot;, # Optional. The name of the entity type, prefixed with `@`, that
                # describes values of the parameter. If the parameter is
                # required, this must be provided.
            &quot;defaultValue&quot;: &quot;A String&quot;, # Optional. The default value to use when the `value` yields an empty
                # result.
                # Default values can be extracted from contexts by using the following
                # syntax: `#context_name.parameter_name`.
            &quot;name&quot;: &quot;A String&quot;, # The unique identifier of this parameter.
            &quot;prompts&quot;: [ # Optional. The collection of prompts that the agent can present to the
                # user in order to collect a value for the parameter.
              &quot;A String&quot;,
            ],
          },
        ],
      },
      &quot;languageCode&quot;: &quot;A String&quot;, # The language that was triggered during intent detection.
          # See [Language
          # Support](https://cloud.google.com/dialogflow/docs/reference/language)
          # for a list of the currently supported language codes.
      &quot;outputContexts&quot;: [ # The collection of output contexts. If applicable,
          # `output_contexts.parameters` contains entries with name
          # `&lt;parameter name&gt;.original` containing the original parameter values
          # before the query.
        { # Dialogflow contexts are similar to natural language context. If a person says
            # to you &quot;they are orange&quot;, you need context in order to understand what &quot;they&quot;
            # is referring to. Similarly, for Dialogflow to handle an end-user expression
            # like that, it needs to be provided with context in order to correctly match
            # an intent.
            #
            # Using contexts, you can control the flow of a conversation. You can configure
            # contexts for an intent by setting input and output contexts, which are
            # identified by string names. When an intent is matched, any configured output
            # contexts for that intent become active. While any contexts are active,
            # Dialogflow is more likely to match intents that are configured with input
            # contexts that correspond to the currently active contexts.
            #
            # For more information about context, see the
            # [Contexts guide](https://cloud.google.com/dialogflow/docs/contexts-overview).
          &quot;parameters&quot;: { # Optional. The collection of parameters associated with this context.
              #
              # Depending on your protocol or client library language, this is a
              # map, associative array, symbol table, dictionary, or JSON object
              # composed of a collection of (MapKey, MapValue) pairs:
              #
              # -   MapKey type: string
              # -   MapKey value: parameter name
              # -   MapValue type:
              #     -   If parameter&#x27;s entity type is a composite entity: map
              #     -   Else: string or number, depending on parameter value type
              # -   MapValue value:
              #     -   If parameter&#x27;s entity type is a composite entity:
              #         map from composite entity property names to property values
              #     -   Else: parameter value
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
          },
          &quot;name&quot;: &quot;A String&quot;, # Required. The unique identifier of the context. Format:
              # `projects/&lt;Project ID&gt;/agent/sessions/&lt;Session ID&gt;/contexts/&lt;Context ID&gt;`,
              # or `projects/&lt;Project ID&gt;/agent/environments/&lt;Environment ID&gt;/users/&lt;User
              # ID&gt;/sessions/&lt;Session ID&gt;/contexts/&lt;Context ID&gt;`.
              #
              # The `Context ID` is always converted to lowercase, may only contain
              # characters in a-zA-Z0-9_-% and may be at most 250 bytes long.
              #
              # If `Environment ID` is not specified, we assume default &#x27;draft&#x27;
              # environment. If `User ID` is not specified, we assume default &#x27;-&#x27; user.
              #
              # The following context names are reserved for internal use by Dialogflow.
              # You should not use these contexts or create contexts with these names:
              #
              # * `__system_counters__`
              # * `*_id_dialog_context`
              # * `*_dialog_params_size`
          &quot;lifespanCount&quot;: 42, # Optional. The number of conversational query requests after which the
              # context expires. The default is `0`. If set to `0`, the context expires
              # immediately. Contexts expire automatically after 20 minutes if there
              # are no matching queries.
        },
      ],
      &quot;webhookPayload&quot;: { # If the query was fulfilled by a webhook call, this field is set to the
          # value of the `payload` field returned in the webhook response.
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
      },
      &quot;action&quot;: &quot;A String&quot;, # The action name from the matched intent.
      &quot;fulfillmentMessages&quot;: [ # The collection of rich messages to present to the user.
        { # A rich response message.
            # Corresponds to the intent `Response` field in the Dialogflow console.
            # For more information, see
            # [Rich response
            # messages](https://cloud.google.com/dialogflow/docs/intents-rich-messages).
          &quot;card&quot;: { # The card response message. # The card response.
            &quot;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
            &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
            &quot;buttons&quot;: [ # Optional. The collection of card buttons.
              { # Contains information about a button.
                &quot;text&quot;: &quot;A String&quot;, # Optional. The text to show on the button.
                &quot;postback&quot;: &quot;A String&quot;, # Optional. The text to send back to the Dialogflow API or a URI to
                    # open.
              },
            ],
            &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file for the card.
          },
          &quot;text&quot;: { # The text response message. # The text response.
            &quot;text&quot;: [ # Optional. The collection of the agent&#x27;s responses.
              &quot;A String&quot;,
            ],
          },
          &quot;carouselSelect&quot;: { # The card for presenting a carousel of options to select from. # The carousel card response for Actions on Google.
            &quot;items&quot;: [ # Required. Carousel items.
              { # An item in the carousel.
                &quot;description&quot;: &quot;A String&quot;, # Optional. The body text of the card.
                &quot;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item.
                &quot;image&quot;: { # The image response message. # Optional. The image to display.
                  &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                  &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                      # e.g., screen readers.
                },
                &quot;info&quot;: { # Additional info about the select item for when it is triggered in a # Required. Additional info about the option item.
                    # dialog.
                  &quot;synonyms&quot;: [ # Optional. A list of synonyms that can also be used to trigger this
                      # item in dialog.
                    &quot;A String&quot;,
                  ],
                  &quot;key&quot;: &quot;A String&quot;, # Required. A unique key that will be sent back to the agent if this
                      # response is given.
                },
              },
            ],
          },
          &quot;simpleResponses&quot;: { # The collection of simple response candidates. # The voice and text-only responses for Actions on Google.
              # This message in `QueryResult.fulfillment_messages` and
              # `WebhookResponse.fulfillment_messages` should contain only one
              # `SimpleResponse`.
            &quot;simpleResponses&quot;: [ # Required. The list of simple responses.
              { # The simple response message containing speech or text.
                &quot;textToSpeech&quot;: &quot;A String&quot;, # One of text_to_speech or ssml must be provided. The plain text of the
                    # speech output. Mutually exclusive with ssml.
                &quot;ssml&quot;: &quot;A String&quot;, # One of text_to_speech or ssml must be provided. Structured spoken
                    # response to the user in the SSML format. Mutually exclusive with
                    # text_to_speech.
                &quot;displayText&quot;: &quot;A String&quot;, # Optional. The text to display.
              },
            ],
          },
          &quot;platform&quot;: &quot;A String&quot;, # Optional. The platform that this message is intended for.
          &quot;browseCarouselCard&quot;: { # Browse Carousel Card for Actions on Google. # Browse carousel card for Actions on Google.
              # https://developers.google.com/actions/assistant/responses#browsing_carousel
            &quot;items&quot;: [ # Required. List of items in the Browse Carousel Card. Minimum of two
                # items, maximum of ten.
              { # Browsing carousel tile
                &quot;footer&quot;: &quot;A String&quot;, # Optional. Text that appears at the bottom of the Browse Carousel
                    # Card. Maximum of one line of text.
                &quot;image&quot;: { # The image response message. # Optional. Hero image for the carousel item.
                  &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                  &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                      # e.g., screen readers.
                },
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the carousel item. Maximum of four lines of
                    # text.
                &quot;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item. Maximum of two lines of text.
                &quot;openUriAction&quot;: { # Actions on Google action to open a given url. # Required. Action to present to the user.
                  &quot;url&quot;: &quot;A String&quot;, # Required. URL
                  &quot;urlTypeHint&quot;: &quot;A String&quot;, # Optional. Specifies the type of viewer that is used when opening
                      # the URL. Defaults to opening via web browser.
                },
              },
            ],
            &quot;imageDisplayOptions&quot;: &quot;A String&quot;, # Optional. Settings for displaying the image. Applies to every image in
                # items.
          },
          &quot;linkOutSuggestion&quot;: { # The suggestion chip message that allows the user to jump out to the app # The link out suggestion chip for Actions on Google.
              # or website associated with this agent.
            &quot;uri&quot;: &quot;A String&quot;, # Required. The URI of the app or site to open when the user taps the
                # suggestion chip.
            &quot;destinationName&quot;: &quot;A String&quot;, # Required. The name of the app or site this chip is linking to.
          },
          &quot;basicCard&quot;: { # The basic card message. Useful for displaying information. # The basic card response for Actions on Google.
            &quot;buttons&quot;: [ # Optional. The collection of card buttons.
              { # The button object that appears at the bottom of a card.
                &quot;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                &quot;openUriAction&quot;: { # Opens the given URI. # Required. Action to take when a user taps on the button.
                  &quot;uri&quot;: &quot;A String&quot;, # Required. The HTTP or HTTPS scheme URI.
                },
              },
            ],
            &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
            &quot;formattedText&quot;: &quot;A String&quot;, # Required, unless image is present. The body text of the card.
            &quot;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
            &quot;image&quot;: { # The image response message. # Optional. The image for the card.
              &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
              &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                  # e.g., screen readers.
            },
          },
          &quot;suggestions&quot;: { # The collection of suggestions. # The suggestion chips for Actions on Google.
            &quot;suggestions&quot;: [ # Required. The list of suggested replies.
              { # The suggestion chip message that the user can tap to quickly post a reply
                  # to the conversation.
                &quot;title&quot;: &quot;A String&quot;, # Required. The text shown the in the suggestion chip.
              },
            ],
          },
          &quot;quickReplies&quot;: { # The quick replies response message. # The quick replies response.
            &quot;quickReplies&quot;: [ # Optional. The collection of quick replies.
              &quot;A String&quot;,
            ],
            &quot;title&quot;: &quot;A String&quot;, # Optional. The title of the collection of quick replies.
          },
          &quot;tableCard&quot;: { # Table card for Actions on Google. # Table card for Actions on Google.
            &quot;title&quot;: &quot;A String&quot;, # Required. Title of the card.
            &quot;columnProperties&quot;: [ # Optional. Display properties for the columns in this table.
              { # Column properties for TableCard.
                &quot;header&quot;: &quot;A String&quot;, # Required. Column heading.
                &quot;horizontalAlignment&quot;: &quot;A String&quot;, # Optional. Defines text alignment for all cells in this column.
              },
            ],
            &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle to the title.
            &quot;image&quot;: { # The image response message. # Optional. Image which should be displayed on the card.
              &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
              &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                  # e.g., screen readers.
            },
            &quot;rows&quot;: [ # Optional. Rows in this table of data.
              { # Row of TableCard.
                &quot;cells&quot;: [ # Optional. List of cells that make up this row.
                  { # Cell of TableCardRow.
                    &quot;text&quot;: &quot;A String&quot;, # Required. Text in this cell.
                  },
                ],
                &quot;dividerAfter&quot;: True or False, # Optional. Whether to add a visual divider after this row.
              },
            ],
            &quot;buttons&quot;: [ # Optional. List of buttons for the card.
              { # The button object that appears at the bottom of a card.
                &quot;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                &quot;openUriAction&quot;: { # Opens the given URI. # Required. Action to take when a user taps on the button.
                  &quot;uri&quot;: &quot;A String&quot;, # Required. The HTTP or HTTPS scheme URI.
                },
              },
            ],
          },
          &quot;image&quot;: { # The image response message. # The image response.
            &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
            &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                # e.g., screen readers.
          },
          &quot;mediaContent&quot;: { # The media content card for Actions on Google. # The media content card for Actions on Google.
            &quot;mediaObjects&quot;: [ # Required. List of media objects.
              { # Response media object for media content card.
                &quot;largeImage&quot;: { # The image response message. # Optional. Image to display above media content.
                  &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                  &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                      # e.g., screen readers.
                },
                &quot;contentUrl&quot;: &quot;A String&quot;, # Required. Url where the media is stored.
                &quot;icon&quot;: { # The image response message. # Optional. Icon to display above media content.
                  &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                  &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                      # e.g., screen readers.
                },
                &quot;name&quot;: &quot;A String&quot;, # Required. Name of media card.
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of media card.
              },
            ],
            &quot;mediaType&quot;: &quot;A String&quot;, # Optional. What type of media is the content (ie &quot;audio&quot;).
          },
          &quot;listSelect&quot;: { # The card for presenting a list of options to select from. # The list card response for Actions on Google.
            &quot;title&quot;: &quot;A String&quot;, # Optional. The overall title of the list.
            &quot;items&quot;: [ # Required. List items.
              { # An item in the list.
                &quot;image&quot;: { # The image response message. # Optional. The image to display.
                  &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                  &quot;accessibilityText&quot;: &quot;A String&quot;, # Optional. A text description of the image to be used for accessibility,
                      # e.g., screen readers.
                },
                &quot;info&quot;: { # Additional info about the select item for when it is triggered in a # Required. Additional information about this option.
                    # dialog.
                  &quot;synonyms&quot;: [ # Optional. A list of synonyms that can also be used to trigger this
                      # item in dialog.
                    &quot;A String&quot;,
                  ],
                  &quot;key&quot;: &quot;A String&quot;, # Required. A unique key that will be sent back to the agent if this
                      # response is given.
                },
                &quot;title&quot;: &quot;A String&quot;, # Required. The title of the list item.
                &quot;description&quot;: &quot;A String&quot;, # Optional. The main text describing the item.
              },
            ],
            &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle of the list.
          },
          &quot;payload&quot;: { # A custom platform-specific response.
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
          },
        },
      ],
      &quot;webhookSource&quot;: &quot;A String&quot;, # If the query was fulfilled by a webhook call, this field is set to the
          # value of the `source` field returned in the webhook response.
      &quot;allRequiredParamsPresent&quot;: True or False, # This field is set to:
          #
          # - `false` if the matched intent has required parameters and not all of
          #    the required parameter values have been collected.
          # - `true` if all required parameter values have been collected, or if the
          #    matched intent doesn&#x27;t contain any required parameters.
      &quot;speechRecognitionConfidence&quot;: 3.14, # The Speech recognition confidence between 0.0 and 1.0. A higher number
          # indicates an estimated greater likelihood that the recognized words are
          # correct. The default of 0.0 is a sentinel value indicating that confidence
          # was not set.
          #
          # This field is not guaranteed to be accurate or set. In particular this
          # field isn&#x27;t set for StreamingDetectIntent since the streaming endpoint has
          # separate confidence estimates per portion of the audio in
          # StreamingRecognitionResult.
      &quot;fulfillmentText&quot;: &quot;A String&quot;, # The text to be pronounced to the user or shown on the screen.
          # Note: This is a legacy field, `fulfillment_messages` should be preferred.
      &quot;sentimentAnalysisResult&quot;: { # The result of sentiment analysis. Sentiment analysis inspects user input # The sentiment analysis result, which depends on the
          # `sentiment_analysis_request_config` specified in the request.
          # and identifies the prevailing subjective opinion, especially to determine a
          # user&#x27;s attitude as positive, negative, or neutral.
          # For Participants.AnalyzeContent, it needs to be configured in
          # DetectIntentRequest.query_params. For
          # Participants.StreamingAnalyzeContent, it needs to be configured in
          # StreamingDetectIntentRequest.query_params.
          # And for Participants.AnalyzeContent and
          # Participants.StreamingAnalyzeContent, it needs to be configured in
          # ConversationProfile.human_agent_assistant_config
        &quot;queryTextSentiment&quot;: { # The sentiment, such as positive/negative feeling or association, for a unit # The sentiment analysis result for `query_text`.
            # of analysis, such as the query text.
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents the absolute
              # magnitude of sentiment, regardless of score (positive or negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0 (positive
              # sentiment).
        },
      },
      &quot;intentDetectionConfidence&quot;: 3.14, # The intent detection confidence. Values range from 0.0
          # (completely uncertain) to 1.0 (completely certain).
          # This value is for informational purpose only and is only used to
          # help match the best intent within the classification threshold.
          # This value may change for the same end-user expression at any time due to a
          # model retraining or change in implementation.
          # If there are `multiple knowledge_answers` messages, this value is set to
          # the greatest `knowledgeAnswers.match_confidence` value in the list.
      &quot;parameters&quot;: { # The collection of extracted parameters.
          #
          # Depending on your protocol or client library language, this is a
          # map, associative array, symbol table, dictionary, or JSON object
          # composed of a collection of (MapKey, MapValue) pairs:
          #
          # -   MapKey type: string
          # -   MapKey value: parameter name
          # -   MapValue type:
          #     -   If parameter&#x27;s entity type is a composite entity: map
          #     -   Else: string or number, depending on parameter value type
          # -   MapValue value:
          #     -   If parameter&#x27;s entity type is a composite entity:
          #         map from composite entity property names to property values
          #     -   Else: parameter value
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
      },
      &quot;queryText&quot;: &quot;A String&quot;, # The original conversational query text:
          #
          # - If natural language text was provided as input, `query_text` contains
          #   a copy of the input.
          # - If natural language speech audio was provided as input, `query_text`
          #   contains the speech recognition result. If speech recognizer produced
          #   multiple alternatives, a particular one is picked.
          # - If automatic spell correction is enabled, `query_text` will contain the
          #   corrected user input.
      &quot;diagnosticInfo&quot;: { # Free-form diagnostic information for the associated detect intent request.
          # The fields of this data can change without notice, so you should not write
          # code that depends on its structure.
          # The data may contain:
          #
          # - webhook call latency
          # - webhook errors
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
      },
    },
    &quot;webhookStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # Specifies the status of the webhook request.
        # 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).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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;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.
        },
      ],
    },
  }</pre>
</div>

</body></html>