<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="dialogflow_v2beta1.html">Dialogflow API</a> . <a href="dialogflow_v2beta1.projects.html">projects</a> . <a href="dialogflow_v2beta1.projects.agent.html">agent</a> . <a href="dialogflow_v2beta1.projects.agent.environments.html">environments</a> . <a href="dialogflow_v2beta1.projects.agent.environments.users.html">users</a> . <a href="dialogflow_v2beta1.projects.agent.environments.users.sessions.html">sessions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.agent.environments.users.sessions.contexts.html">contexts()</a></code>
</p>
<p class="firstline">Returns the contexts Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v2beta1.projects.agent.environments.users.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;outputAudioConfig&quot;: { # Instructs the speech synthesizer 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;synthesizeSpeechConfig&quot;: { # Configuration of how speech should be synthesized. # Configuration of how speech should be synthesized.
        &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;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;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &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;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;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;audioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
      &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;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;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;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;audioConfig&quot;: { # Instructs the speech recognizer on how to process the audio content. # Instructs the speech recognizer how to process the speech audio.
        &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;,
        ],
        &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;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;audioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the audio content to process.
        &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;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;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;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;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;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;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;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;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;queryParams&quot;: { # Represents the parameters of the conversational query. # The parameters of this query.
      &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;entityOverrideMode&quot;: &quot;A String&quot;, # Required. Indicates whether the additional data should override or
              # supplement the custom entity type definition.
          &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;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.
          # Note: Sentiment Analysis is only currently available for Enterprise Edition
          # agents.
        &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;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;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;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;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;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
      },
      &quot;knowledgeBaseNames&quot;: [ # KnowledgeBases to get alternative results from. If not set, the
          # KnowledgeBases enabled in the agent (through UI) will be used.
          # Format:  `projects/&lt;Project ID&gt;/knowledgeBases/&lt;Knowledge Base ID&gt;`.
        &quot;A String&quot;,
      ],
      &quot;subAgents&quot;: [ # For mega agent query, directly specify which sub agents to query.
          # If any specified sub agent is not linked to the mega agent, an error will
          # be returned. If empty, Dialogflow will decide which sub agents to query.
          # If specified for a non-mega-agent query, will be silently ignored.
        { # Contains basic configuration for a sub-agent.
          &quot;environment&quot;: &quot;A String&quot;, # Optional. The unique identifier (`environment name` in dialogflow console)
              # of this sub-agent environment. Assumes draft environment if `environment`
              # is not set.
          &quot;project&quot;: &quot;A String&quot;, # Required. The project of this agent.
              # Format: `projects/&lt;Project ID&gt;`.
        },
      ],
      &quot;resetContexts&quot;: True or False, # Specifies whether to delete all contexts in the current session
          # before the new ones are activated.
      &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;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;webhookHeaders&quot;: { # This field can be used to pass HTTP headers for a webhook
          # call. These headers will be sent to webhook alone with the headers that
          # have been configured through Dialogflow web console. The headers defined
          # within this field will overwrite the headers configured through Dialogflow
          # console if there is a conflict. Header names are case-insensitive.
          # Google&#x27;s specified headers are not allowed. Including: &quot;Host&quot;,
          # &quot;Content-Length&quot;, &quot;Connection&quot;, &quot;From&quot;, &quot;User-Agent&quot;, &quot;Accept-Encoding&quot;,
          # &quot;If-Modified-Since&quot;, &quot;If-None-Match&quot;, &quot;X-Forwarded-For&quot;, etc.
        &quot;a_key&quot;: &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;alternativeQueryResults&quot;: [ # If Knowledge Connectors are enabled, there could be more than one result
        # returned for a given query or event, and this field will contain all
        # results except for the top one, which is captured in query_result. The
        # alternative results are ordered by decreasing
        # `QueryResult.intent_detection_confidence`. If Knowledge Connectors are
        # disabled, this field will be empty until multiple responses for regular
        # intents are supported, at which point those additional results will be
        # surfaced here.
      { # Represents the result of conversational query or event processing.
        &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;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;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;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;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;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;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;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;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;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;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;action&quot;: &quot;A String&quot;, # The action name from the matched intent.
        &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;fulfillmentMessages&quot;: [ # The collection of rich messages to present to the user.
          { # Corresponds to the `Response` field in the Dialogflow console.
            &quot;suggestions&quot;: { # The collection of suggestions. # Displays 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;mediaContent&quot;: { # The media content card for Actions on Google. # The media content card for Actions on Google.
              &quot;mediaType&quot;: &quot;A String&quot;, # Optional. What type of media is the content (ie &quot;audio&quot;).
              &quot;mediaObjects&quot;: [ # Required. List of media objects.
                { # Response media object for media content card.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of media card.
                  &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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                  &quot;contentUrl&quot;: &quot;A String&quot;, # Required. Url where the media is stored.
                  &quot;name&quot;: &quot;A String&quot;, # Required. Name of media 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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                },
              ],
            },
            &quot;telephonyTransferCall&quot;: { # Transfers the call in Telephony Gateway. # Transfers the call in Telephony Gateway.
              &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to transfer the call to
                  # in [E.164 format](https://en.wikipedia.org/wiki/E.164).
                  #
                  # We currently only allow transferring to US numbers (+1xxxyyyzzzz).
            },
            &quot;platform&quot;: &quot;A String&quot;, # Optional. The platform that this message is intended for.
            &quot;telephonySynthesizeSpeech&quot;: { # Synthesizes speech and plays back the synthesized audio to the caller in # Synthesizes speech in Telephony Gateway.
                # Telephony Gateway.
                #
                # Telephony Gateway takes the synthesizer settings from
                # `DetectIntentResponse.output_audio_config` which can either be set
                # at request-level or can come from the agent-level synthesizer config.
              &quot;text&quot;: &quot;A String&quot;, # The raw text to be synthesized.
              &quot;ssml&quot;: &quot;A String&quot;, # The SSML to be synthesized. For more information, see
                  # [SSML](https://developers.google.com/actions/reference/ssml).
            },
            &quot;linkOutSuggestion&quot;: { # The suggestion chip message that allows the user to jump out to the app # Displays a 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;quickReplies&quot;: { # The quick replies response message. # Displays quick replies.
              &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;card&quot;: { # The card response message. # Displays a card.
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
              &quot;buttons&quot;: [ # Optional. The collection of card buttons.
                { # Optional. 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;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
            },
            &quot;listSelect&quot;: { # The card for presenting a list of options to select from. # Displays a list card for Actions on Google.
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle of the list.
              &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;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;description&quot;: &quot;A String&quot;, # Optional. The main text describing the item.
                  &quot;title&quot;: &quot;A String&quot;, # Required. The title of the list 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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                },
              ],
            },
            &quot;basicCard&quot;: { # The basic card message. Useful for displaying information. # Displays a basic card 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;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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                },
              ],
              &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;, # A text description of the image to be used for accessibility,
                    # e.g., screen readers. Required if image_uri is set for CarouselSelect.
              },
              &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;image&quot;: { # The image response message. # Displays an image.
              &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
              &quot;accessibilityText&quot;: &quot;A String&quot;, # A text description of the image to be used for accessibility,
                  # e.g., screen readers. Required if image_uri is set for CarouselSelect.
            },
            &quot;rbmCarouselRichCard&quot;: { # Carousel Rich Business Messaging (RBM) rich card. # Rich Business Messaging (RBM) carousel rich card response.
                #
                # Rich cards allow you to respond to users with more vivid content, e.g.
                # with media and suggestions.
                #
                # If you want to show a single card with more control over the layout,
                # please use RbmStandaloneCard instead.
              &quot;cardWidth&quot;: &quot;A String&quot;, # Required. The width of the cards in the carousel.
              &quot;cardContents&quot;: [ # Required. The cards in the carousel. A carousel must have at least
                  # 2 cards and at most 10.
                { # Rich Business Messaging (RBM) Card content
                  &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                      # be set. Media (image, GIF or a video) to include in the card.
                      # The following media-types are currently supported:
                      #
                      # Image Types
                      #
                      # * image/jpeg
                      # * image/jpg&#x27;
                      # * image/gif
                      # * image/png
                      #
                      # Video Types
                      #
                      # * video/h263
                      # * video/m4v
                      # * video/mp4
                      # * video/mpeg
                      # * video/mpeg4
                      # * video/webm
                    &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                        # within a rich card with a vertical layout.
                        # For a standalone card with horizontal layout, height is not
                        # customizable, and this field is ignored.
                    &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                        # determines the MIME type of the file from the content-type field in
                        # the HTTP headers when the platform fetches the file. The content-type
                        # field must be present and accurate in the HTTP response from the URL.
                    &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                        # provide a thumbnail URI, the RBM platform displays a blank
                        # placeholder thumbnail until the user&#x27;s device downloads the file.
                        # Depending on the user&#x27;s setting, the file may not download
                        # automatically and may require the user to tap a download button.
                  },
                  &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                      #
                      # At least one of the title, description or media must be set.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                      #
                      # At least one of the title, description or media must be set.
                  &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                    { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                        # easily select/click a predefined response or perform an action (like
                        # opening a web uri).
                      &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                          # can choose from the card.
                        &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                            # If the user has an app installed that is
                            # registered as the default handler for the URL, then this app will be
                            # opened instead, and its icon will be used in the suggested action UI.
                          &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                        },
                        &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                            # to send back to the agent.
                        },
                        &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                        &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                            # but does not dial automatically.
                          &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                              # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                              # format. An example of a correctly formatted phone number:
                              # +15556767888.
                        },
                        &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                            # when the user taps the suggested action. This data will be also
                            # forwarded to webhook to allow performing custom business logic.
                      },
                      &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                          # instead of typing in their own response.
                        &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                            # when the user taps the suggested reply. This data will be also
                            # forwarded to webhook to allow performing custom business logic.
                        &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                      },
                    },
                  ],
                },
              ],
            },
            &quot;tableCard&quot;: { # Table card for Actions on Google. # Table card for Actions on Google.
              &quot;buttons&quot;: [ # Optional. List of buttons for the card.
                { # The button object that appears at the bottom of a card.
                  &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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                },
              ],
              &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;, # A text description of the image to be used for accessibility,
                    # e.g., screen readers. Required if image_uri is set for CarouselSelect.
              },
              &quot;rows&quot;: [ # Optional. Rows in this table of data.
                { # Row of TableCard.
                  &quot;dividerAfter&quot;: True or False, # Optional. Whether to add a visual divider after this row.
                  &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;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;rbmText&quot;: { # Rich Business Messaging (RBM) text response with suggestions. # Rich Business Messaging (RBM) text response.
                #
                # RBM allows businesses to send enriched and branded versions of SMS. See
                # https://jibe.google.com/business-messaging.
              &quot;text&quot;: &quot;A String&quot;, # Required. Text sent and displayed to the user.
              &quot;rbmSuggestion&quot;: [ # Optional. One or more suggestions to show to the user.
                { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                    # easily select/click a predefined response or perform an action (like
                    # opening a web uri).
                  &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                      # can choose from the card.
                    &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                        # If the user has an app installed that is
                        # registered as the default handler for the URL, then this app will be
                        # opened instead, and its icon will be used in the suggested action UI.
                      &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                    },
                    &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                        # to send back to the agent.
                    },
                    &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                    &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                        # but does not dial automatically.
                      &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                          # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                          # format. An example of a correctly formatted phone number:
                          # +15556767888.
                    },
                    &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                        # when the user taps the suggested action. This data will be also
                        # forwarded to webhook to allow performing custom business logic.
                  },
                  &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                      # instead of typing in their own response.
                    &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                        # when the user taps the suggested reply. This data will be also
                        # forwarded to webhook to allow performing custom business logic.
                    &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                  },
                },
              ],
            },
            &quot;payload&quot;: { # A custom platform-specific response.
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
            },
            &quot;text&quot;: { # The text response message. # Returns a text response.
              &quot;text&quot;: [ # Optional. The collection of the agent&#x27;s responses.
                &quot;A String&quot;,
              ],
            },
            &quot;rbmStandaloneRichCard&quot;: { # Standalone Rich Business Messaging (RBM) rich card. # Standalone Rich Business Messaging (RBM) rich card response.
                #
                # Rich cards allow you to respond to users with more vivid content, e.g.
                # with media and suggestions.
                #
                # You can group multiple rich cards into one using RbmCarouselCard but
                # carousel cards will give you less control over the card layout.
              &quot;cardContent&quot;: { # Rich Business Messaging (RBM) Card content # Required. Card content.
                &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                    # be set. Media (image, GIF or a video) to include in the card.
                    # The following media-types are currently supported:
                    #
                    # Image Types
                    #
                    # * image/jpeg
                    # * image/jpg&#x27;
                    # * image/gif
                    # * image/png
                    #
                    # Video Types
                    #
                    # * video/h263
                    # * video/m4v
                    # * video/mp4
                    # * video/mpeg
                    # * video/mpeg4
                    # * video/webm
                  &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                      # within a rich card with a vertical layout.
                      # For a standalone card with horizontal layout, height is not
                      # customizable, and this field is ignored.
                  &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                      # determines the MIME type of the file from the content-type field in
                      # the HTTP headers when the platform fetches the file. The content-type
                      # field must be present and accurate in the HTTP response from the URL.
                  &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                      # provide a thumbnail URI, the RBM platform displays a blank
                      # placeholder thumbnail until the user&#x27;s device downloads the file.
                      # Depending on the user&#x27;s setting, the file may not download
                      # automatically and may require the user to tap a download button.
                },
                &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                    #
                    # At least one of the title, description or media must be set.
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                    #
                    # At least one of the title, description or media must be set.
                &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                  { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                      # easily select/click a predefined response or perform an action (like
                      # opening a web uri).
                    &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                        # can choose from the card.
                      &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                          # If the user has an app installed that is
                          # registered as the default handler for the URL, then this app will be
                          # opened instead, and its icon will be used in the suggested action UI.
                        &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                      },
                      &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                          # to send back to the agent.
                      },
                      &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                      &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                          # but does not dial automatically.
                        &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                            # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                            # format. An example of a correctly formatted phone number:
                            # +15556767888.
                      },
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested action. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                    },
                    &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                        # instead of typing in their own response.
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested reply. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                      &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                    },
                  },
                ],
              },
              &quot;cardOrientation&quot;: &quot;A String&quot;, # Required. Orientation of the card.
              &quot;thumbnailImageAlignment&quot;: &quot;A String&quot;, # Required if orientation is horizontal.
                  # Image preview alignment for standalone cards with horizontal layout.
            },
            &quot;telephonyPlayAudio&quot;: { # Plays audio from a file in Telephony Gateway. # Plays audio from a file in Telephony Gateway.
              &quot;audioUri&quot;: &quot;A String&quot;, # Required. URI to a Google Cloud Storage object containing the audio to
                  # play, e.g., &quot;gs://bucket/object&quot;. The object must contain a single
                  # channel (mono) of linear PCM audio (2 bytes / sample) at 8kHz.
                  #
                  # This object must be readable by the `service-&lt;Project
                  # Number&gt;@gcp-sa-dialogflow.iam.gserviceaccount.com` service account
                  # where &lt;Project Number&gt; is the number of the Telephony Gateway project
                  # (usually the same as the Dialogflow agent project). If the Google Cloud
                  # Storage bucket is in the Telephony Gateway project, this permission is
                  # added by default when enabling the Dialogflow V2 API.
                  #
                  # For audio from other sources, consider using the
                  # `TelephonySynthesizeSpeech` message with SSML.
            },
            &quot;carouselSelect&quot;: { # The card for presenting a carousel of options to select from. # Displays a carousel card for Actions on Google.
              &quot;items&quot;: [ # Required. Carousel items.
                { # An item in the carousel.
                  &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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                  &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. The body text of the card.
                },
              ],
            },
            &quot;simpleResponses&quot;: { # The collection of simple response candidates. # Returns a voice or text-only response 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;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;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;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;imageDisplayOptions&quot;: &quot;A String&quot;, # Optional. Settings for displaying the image. Applies to every image in
                  # items.
              &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item. Maximum of two lines of text.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the carousel item. Maximum of four lines 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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                  &quot;openUriAction&quot;: { # Actions on Google action to open a given url. # Required. Action to present to the user.
                    &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;url&quot;: &quot;A String&quot;, # Required. URL
                  },
                },
              ],
            },
          },
        ],
        &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;endInteraction&quot;: True or False, # Optional. Indicates that this intent ends an interaction. Some integrations
              # (e.g., Actions on Google or Dialogflow phone gateway) use this information
              # to close interaction with an end user. Default is false.
          &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;isFallback&quot;: True or False, # Optional. Indicates whether this is a fallback intent.
          &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;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;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;displayName&quot;: &quot;A String&quot;, # Required. The name of this intent.
          &quot;resetContexts&quot;: True or False, # Optional. Indicates whether to delete all contexts in the current
              # session when this intent is matched.
          &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;rootFollowupIntentName&quot;: &quot;A String&quot;, # Output only. The unique identifier of the root intent in the chain of
              # followup intents. It identifies the correct followup intents chain for
              # this 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;type&quot;: &quot;A String&quot;, # Required. The type of the training phrase.
              &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this training phrase.
              &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;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;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;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;text&quot;: &quot;A String&quot;, # Required. The text for this part.
                },
              ],
              &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;messages&quot;: [ # Optional. The collection of rich messages corresponding to the
              # `Response` field in the Dialogflow console.
            { # Corresponds to the `Response` field in the Dialogflow console.
              &quot;suggestions&quot;: { # The collection of suggestions. # Displays 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;mediaContent&quot;: { # The media content card for Actions on Google. # The media content card for Actions on Google.
                &quot;mediaType&quot;: &quot;A String&quot;, # Optional. What type of media is the content (ie &quot;audio&quot;).
                &quot;mediaObjects&quot;: [ # Required. List of media objects.
                  { # Response media object for media content card.
                    &quot;description&quot;: &quot;A String&quot;, # Optional. Description of media card.
                    &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;, # A text description of the image to be used for accessibility,
                          # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                    },
                    &quot;contentUrl&quot;: &quot;A String&quot;, # Required. Url where the media is stored.
                    &quot;name&quot;: &quot;A String&quot;, # Required. Name of media 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;, # A text description of the image to be used for accessibility,
                          # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                    },
                  },
                ],
              },
              &quot;telephonyTransferCall&quot;: { # Transfers the call in Telephony Gateway. # Transfers the call in Telephony Gateway.
                &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to transfer the call to
                    # in [E.164 format](https://en.wikipedia.org/wiki/E.164).
                    #
                    # We currently only allow transferring to US numbers (+1xxxyyyzzzz).
              },
              &quot;platform&quot;: &quot;A String&quot;, # Optional. The platform that this message is intended for.
              &quot;telephonySynthesizeSpeech&quot;: { # Synthesizes speech and plays back the synthesized audio to the caller in # Synthesizes speech in Telephony Gateway.
                  # Telephony Gateway.
                  #
                  # Telephony Gateway takes the synthesizer settings from
                  # `DetectIntentResponse.output_audio_config` which can either be set
                  # at request-level or can come from the agent-level synthesizer config.
                &quot;text&quot;: &quot;A String&quot;, # The raw text to be synthesized.
                &quot;ssml&quot;: &quot;A String&quot;, # The SSML to be synthesized. For more information, see
                    # [SSML](https://developers.google.com/actions/reference/ssml).
              },
              &quot;linkOutSuggestion&quot;: { # The suggestion chip message that allows the user to jump out to the app # Displays a 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;quickReplies&quot;: { # The quick replies response message. # Displays quick replies.
                &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;card&quot;: { # The card response message. # Displays a card.
                &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
                &quot;buttons&quot;: [ # Optional. The collection of card buttons.
                  { # Optional. 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;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
              },
              &quot;listSelect&quot;: { # The card for presenting a list of options to select from. # Displays a list card for Actions on Google.
                &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle of the list.
                &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;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;description&quot;: &quot;A String&quot;, # Optional. The main text describing the item.
                    &quot;title&quot;: &quot;A String&quot;, # Required. The title of the list 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;, # A text description of the image to be used for accessibility,
                          # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                    },
                  },
                ],
              },
              &quot;basicCard&quot;: { # The basic card message. Useful for displaying information. # Displays a basic card 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;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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                  },
                ],
                &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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
                &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;image&quot;: { # The image response message. # Displays an image.
                &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
                &quot;accessibilityText&quot;: &quot;A String&quot;, # A text description of the image to be used for accessibility,
                    # e.g., screen readers. Required if image_uri is set for CarouselSelect.
              },
              &quot;rbmCarouselRichCard&quot;: { # Carousel Rich Business Messaging (RBM) rich card. # Rich Business Messaging (RBM) carousel rich card response.
                  #
                  # Rich cards allow you to respond to users with more vivid content, e.g.
                  # with media and suggestions.
                  #
                  # If you want to show a single card with more control over the layout,
                  # please use RbmStandaloneCard instead.
                &quot;cardWidth&quot;: &quot;A String&quot;, # Required. The width of the cards in the carousel.
                &quot;cardContents&quot;: [ # Required. The cards in the carousel. A carousel must have at least
                    # 2 cards and at most 10.
                  { # Rich Business Messaging (RBM) Card content
                    &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                        # be set. Media (image, GIF or a video) to include in the card.
                        # The following media-types are currently supported:
                        #
                        # Image Types
                        #
                        # * image/jpeg
                        # * image/jpg&#x27;
                        # * image/gif
                        # * image/png
                        #
                        # Video Types
                        #
                        # * video/h263
                        # * video/m4v
                        # * video/mp4
                        # * video/mpeg
                        # * video/mpeg4
                        # * video/webm
                      &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                          # within a rich card with a vertical layout.
                          # For a standalone card with horizontal layout, height is not
                          # customizable, and this field is ignored.
                      &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                          # determines the MIME type of the file from the content-type field in
                          # the HTTP headers when the platform fetches the file. The content-type
                          # field must be present and accurate in the HTTP response from the URL.
                      &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                          # provide a thumbnail URI, the RBM platform displays a blank
                          # placeholder thumbnail until the user&#x27;s device downloads the file.
                          # Depending on the user&#x27;s setting, the file may not download
                          # automatically and may require the user to tap a download button.
                    },
                    &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                        #
                        # At least one of the title, description or media must be set.
                    &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                        #
                        # At least one of the title, description or media must be set.
                    &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                      { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                          # easily select/click a predefined response or perform an action (like
                          # opening a web uri).
                        &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                            # can choose from the card.
                          &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                              # If the user has an app installed that is
                              # registered as the default handler for the URL, then this app will be
                              # opened instead, and its icon will be used in the suggested action UI.
                            &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                          },
                          &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                              # to send back to the agent.
                          },
                          &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                          &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                              # but does not dial automatically.
                            &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                                # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                                # format. An example of a correctly formatted phone number:
                                # +15556767888.
                          },
                          &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                              # when the user taps the suggested action. This data will be also
                              # forwarded to webhook to allow performing custom business logic.
                        },
                        &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                            # instead of typing in their own response.
                          &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                              # when the user taps the suggested reply. This data will be also
                              # forwarded to webhook to allow performing custom business logic.
                          &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                        },
                      },
                    ],
                  },
                ],
              },
              &quot;tableCard&quot;: { # Table card for Actions on Google. # Table card for Actions on Google.
                &quot;buttons&quot;: [ # Optional. List of buttons for the card.
                  { # The button object that appears at the bottom of a card.
                    &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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                  },
                ],
                &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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
                &quot;rows&quot;: [ # Optional. Rows in this table of data.
                  { # Row of TableCard.
                    &quot;dividerAfter&quot;: True or False, # Optional. Whether to add a visual divider after this row.
                    &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;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;rbmText&quot;: { # Rich Business Messaging (RBM) text response with suggestions. # Rich Business Messaging (RBM) text response.
                  #
                  # RBM allows businesses to send enriched and branded versions of SMS. See
                  # https://jibe.google.com/business-messaging.
                &quot;text&quot;: &quot;A String&quot;, # Required. Text sent and displayed to the user.
                &quot;rbmSuggestion&quot;: [ # Optional. One or more suggestions to show to the user.
                  { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                      # easily select/click a predefined response or perform an action (like
                      # opening a web uri).
                    &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                        # can choose from the card.
                      &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                          # If the user has an app installed that is
                          # registered as the default handler for the URL, then this app will be
                          # opened instead, and its icon will be used in the suggested action UI.
                        &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                      },
                      &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                          # to send back to the agent.
                      },
                      &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                      &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                          # but does not dial automatically.
                        &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                            # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                            # format. An example of a correctly formatted phone number:
                            # +15556767888.
                      },
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested action. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                    },
                    &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                        # instead of typing in their own response.
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested reply. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                      &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                    },
                  },
                ],
              },
              &quot;payload&quot;: { # A custom platform-specific response.
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
              },
              &quot;text&quot;: { # The text response message. # Returns a text response.
                &quot;text&quot;: [ # Optional. The collection of the agent&#x27;s responses.
                  &quot;A String&quot;,
                ],
              },
              &quot;rbmStandaloneRichCard&quot;: { # Standalone Rich Business Messaging (RBM) rich card. # Standalone Rich Business Messaging (RBM) rich card response.
                  #
                  # Rich cards allow you to respond to users with more vivid content, e.g.
                  # with media and suggestions.
                  #
                  # You can group multiple rich cards into one using RbmCarouselCard but
                  # carousel cards will give you less control over the card layout.
                &quot;cardContent&quot;: { # Rich Business Messaging (RBM) Card content # Required. Card content.
                  &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                      # be set. Media (image, GIF or a video) to include in the card.
                      # The following media-types are currently supported:
                      #
                      # Image Types
                      #
                      # * image/jpeg
                      # * image/jpg&#x27;
                      # * image/gif
                      # * image/png
                      #
                      # Video Types
                      #
                      # * video/h263
                      # * video/m4v
                      # * video/mp4
                      # * video/mpeg
                      # * video/mpeg4
                      # * video/webm
                    &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                        # within a rich card with a vertical layout.
                        # For a standalone card with horizontal layout, height is not
                        # customizable, and this field is ignored.
                    &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                        # determines the MIME type of the file from the content-type field in
                        # the HTTP headers when the platform fetches the file. The content-type
                        # field must be present and accurate in the HTTP response from the URL.
                    &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                        # provide a thumbnail URI, the RBM platform displays a blank
                        # placeholder thumbnail until the user&#x27;s device downloads the file.
                        # Depending on the user&#x27;s setting, the file may not download
                        # automatically and may require the user to tap a download button.
                  },
                  &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                      #
                      # At least one of the title, description or media must be set.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                      #
                      # At least one of the title, description or media must be set.
                  &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                    { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                        # easily select/click a predefined response or perform an action (like
                        # opening a web uri).
                      &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                          # can choose from the card.
                        &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                            # If the user has an app installed that is
                            # registered as the default handler for the URL, then this app will be
                            # opened instead, and its icon will be used in the suggested action UI.
                          &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                        },
                        &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                            # to send back to the agent.
                        },
                        &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                        &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                            # but does not dial automatically.
                          &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                              # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                              # format. An example of a correctly formatted phone number:
                              # +15556767888.
                        },
                        &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                            # when the user taps the suggested action. This data will be also
                            # forwarded to webhook to allow performing custom business logic.
                      },
                      &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                          # instead of typing in their own response.
                        &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                            # when the user taps the suggested reply. This data will be also
                            # forwarded to webhook to allow performing custom business logic.
                        &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                      },
                    },
                  ],
                },
                &quot;cardOrientation&quot;: &quot;A String&quot;, # Required. Orientation of the card.
                &quot;thumbnailImageAlignment&quot;: &quot;A String&quot;, # Required if orientation is horizontal.
                    # Image preview alignment for standalone cards with horizontal layout.
              },
              &quot;telephonyPlayAudio&quot;: { # Plays audio from a file in Telephony Gateway. # Plays audio from a file in Telephony Gateway.
                &quot;audioUri&quot;: &quot;A String&quot;, # Required. URI to a Google Cloud Storage object containing the audio to
                    # play, e.g., &quot;gs://bucket/object&quot;. The object must contain a single
                    # channel (mono) of linear PCM audio (2 bytes / sample) at 8kHz.
                    #
                    # This object must be readable by the `service-&lt;Project
                    # Number&gt;@gcp-sa-dialogflow.iam.gserviceaccount.com` service account
                    # where &lt;Project Number&gt; is the number of the Telephony Gateway project
                    # (usually the same as the Dialogflow agent project). If the Google Cloud
                    # Storage bucket is in the Telephony Gateway project, this permission is
                    # added by default when enabling the Dialogflow V2 API.
                    #
                    # For audio from other sources, consider using the
                    # `TelephonySynthesizeSpeech` message with SSML.
              },
              &quot;carouselSelect&quot;: { # The card for presenting a carousel of options to select from. # Displays a carousel card for Actions on Google.
                &quot;items&quot;: [ # Required. Carousel items.
                  { # An item in the carousel.
                    &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;, # A text description of the image to be used for accessibility,
                          # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                    },
                    &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item.
                    &quot;description&quot;: &quot;A String&quot;, # Optional. The body text of the card.
                  },
                ],
              },
              &quot;simpleResponses&quot;: { # The collection of simple response candidates. # Returns a voice or text-only response 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;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;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;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;imageDisplayOptions&quot;: &quot;A String&quot;, # Optional. Settings for displaying the image. Applies to every image in
                    # items.
                &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item. Maximum of two lines of text.
                    &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the carousel item. Maximum of four lines 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;, # A text description of the image to be used for accessibility,
                          # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                    },
                    &quot;openUriAction&quot;: { # Actions on Google action to open a given url. # Required. Action to present to the user.
                      &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;url&quot;: &quot;A String&quot;, # Required. URL
                    },
                  },
                ],
              },
            },
          ],
          &quot;parentFollowupIntentName&quot;: &quot;A String&quot;, # Optional. 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;parameters&quot;: [ # Optional. The collection of parameters associated with the intent.
            { # Represents intent parameters.
              &quot;isList&quot;: True or False, # Optional. Indicates whether the parameter represents a list of values.
              &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;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;name&quot;: &quot;A String&quot;, # The unique identifier of this parameter.
              &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;displayName&quot;: &quot;A String&quot;, # Required. The name of the parameter.
              &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;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;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;webhookState&quot;: &quot;A String&quot;, # Optional. Indicates whether webhooks are enabled for the intent.
          &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;mlEnabled&quot;: True or False, # Optional. Indicates whether Machine Learning is enabled for the intent.
              # Note: If `ml_enabled` setting is set to false, then this intent is not
              # taken into account during inference in `ML ONLY` match mode. Also,
              # auto-markup in the UI is turned off.
              # DEPRECATED! Please use `ml_disabled` field instead.
              # NOTE: If both `ml_enabled` and `ml_disabled` are either not set or false,
              # then the default value is determined as follows:
              # - Before April 15th, 2018 the default is:
              #   ml_enabled = false / ml_disabled = true.
              # - After April 15th, 2018 the default is:
              #   ml_enabled = true / ml_disabled = false.
          &quot;followupIntentInfo&quot;: [ # Output 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;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;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;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;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;knowledgeAnswers&quot;: { # Represents the result of querying a Knowledge base. # The result from Knowledge Connector (if any), ordered by decreasing
            # `KnowledgeAnswers.match_confidence`.
          &quot;answers&quot;: [ # A list of answers from Knowledge Connector.
            { # An answer from Knowledge Connector.
              &quot;source&quot;: &quot;A String&quot;, # Indicates which Knowledge Document this answer was extracted from.
                  # Format: `projects/&lt;Project ID&gt;/knowledgeBases/&lt;Knowledge Base
                  # ID&gt;/documents/&lt;Document ID&gt;`.
              &quot;matchConfidence&quot;: 3.14, # The system&#x27;s confidence score that this Knowledge answer is a good match
                  # for this conversational query.
                  # The range is from 0.0 (completely uncertain) to 1.0 (completely certain).
                  # Note: The confidence score is likely to vary somewhat (possibly even for
                  # identical requests), as the underlying model is under constant
                  # improvement. It may be deprecated in the future. We recommend using
                  # `match_confidence_level` which should be generally more stable.
              &quot;answer&quot;: &quot;A String&quot;, # The piece of text from the `source` knowledge base document that answers
                  # this conversational query.
              &quot;faqQuestion&quot;: &quot;A String&quot;, # The corresponding FAQ question if the answer was extracted from a FAQ
                  # Document, empty otherwise.
              &quot;matchConfidenceLevel&quot;: &quot;A String&quot;, # The system&#x27;s confidence level that this knowledge answer is a good match
                  # for this conversational query.
                  # NOTE: The confidence level for a given `&lt;query, answer&gt;` pair may change
                  # without notice, as it depends on models that are constantly being
                  # improved. However, it will change less frequently than the confidence
                  # score below, and should be preferred for referencing the quality of an
                  # answer.
            },
          ],
        },
      },
    ],
    &quot;outputAudioConfig&quot;: { # Instructs the speech synthesizer 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;synthesizeSpeechConfig&quot;: { # Configuration of how speech should be synthesized. # Configuration of how speech should be synthesized.
        &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;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;voice&quot;: { # Description of which voice to use for speech synthesis. # Optional. The desired voice of the synthesized audio.
          &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;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;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;audioEncoding&quot;: &quot;A String&quot;, # Required. Audio encoding of the synthesized audio content.
      &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;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;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;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
    },
    &quot;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;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;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;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;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;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;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;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;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;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;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;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;action&quot;: &quot;A String&quot;, # The action name from the matched intent.
      &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;fulfillmentMessages&quot;: [ # The collection of rich messages to present to the user.
        { # Corresponds to the `Response` field in the Dialogflow console.
          &quot;suggestions&quot;: { # The collection of suggestions. # Displays 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;mediaContent&quot;: { # The media content card for Actions on Google. # The media content card for Actions on Google.
            &quot;mediaType&quot;: &quot;A String&quot;, # Optional. What type of media is the content (ie &quot;audio&quot;).
            &quot;mediaObjects&quot;: [ # Required. List of media objects.
              { # Response media object for media content card.
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of media card.
                &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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
                &quot;contentUrl&quot;: &quot;A String&quot;, # Required. Url where the media is stored.
                &quot;name&quot;: &quot;A String&quot;, # Required. Name of media 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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
              },
            ],
          },
          &quot;telephonyTransferCall&quot;: { # Transfers the call in Telephony Gateway. # Transfers the call in Telephony Gateway.
            &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to transfer the call to
                # in [E.164 format](https://en.wikipedia.org/wiki/E.164).
                #
                # We currently only allow transferring to US numbers (+1xxxyyyzzzz).
          },
          &quot;platform&quot;: &quot;A String&quot;, # Optional. The platform that this message is intended for.
          &quot;telephonySynthesizeSpeech&quot;: { # Synthesizes speech and plays back the synthesized audio to the caller in # Synthesizes speech in Telephony Gateway.
              # Telephony Gateway.
              #
              # Telephony Gateway takes the synthesizer settings from
              # `DetectIntentResponse.output_audio_config` which can either be set
              # at request-level or can come from the agent-level synthesizer config.
            &quot;text&quot;: &quot;A String&quot;, # The raw text to be synthesized.
            &quot;ssml&quot;: &quot;A String&quot;, # The SSML to be synthesized. For more information, see
                # [SSML](https://developers.google.com/actions/reference/ssml).
          },
          &quot;linkOutSuggestion&quot;: { # The suggestion chip message that allows the user to jump out to the app # Displays a 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;quickReplies&quot;: { # The quick replies response message. # Displays quick replies.
            &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;card&quot;: { # The card response message. # Displays a card.
            &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
            &quot;buttons&quot;: [ # Optional. The collection of card buttons.
              { # Optional. 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;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
          },
          &quot;listSelect&quot;: { # The card for presenting a list of options to select from. # Displays a list card for Actions on Google.
            &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle of the list.
            &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;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;description&quot;: &quot;A String&quot;, # Optional. The main text describing the item.
                &quot;title&quot;: &quot;A String&quot;, # Required. The title of the list 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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
              },
            ],
          },
          &quot;basicCard&quot;: { # The basic card message. Useful for displaying information. # Displays a basic card 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;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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
              },
            ],
            &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;, # A text description of the image to be used for accessibility,
                  # e.g., screen readers. Required if image_uri is set for CarouselSelect.
            },
            &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;image&quot;: { # The image response message. # Displays an image.
            &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
            &quot;accessibilityText&quot;: &quot;A String&quot;, # A text description of the image to be used for accessibility,
                # e.g., screen readers. Required if image_uri is set for CarouselSelect.
          },
          &quot;rbmCarouselRichCard&quot;: { # Carousel Rich Business Messaging (RBM) rich card. # Rich Business Messaging (RBM) carousel rich card response.
              #
              # Rich cards allow you to respond to users with more vivid content, e.g.
              # with media and suggestions.
              #
              # If you want to show a single card with more control over the layout,
              # please use RbmStandaloneCard instead.
            &quot;cardWidth&quot;: &quot;A String&quot;, # Required. The width of the cards in the carousel.
            &quot;cardContents&quot;: [ # Required. The cards in the carousel. A carousel must have at least
                # 2 cards and at most 10.
              { # Rich Business Messaging (RBM) Card content
                &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                    # be set. Media (image, GIF or a video) to include in the card.
                    # The following media-types are currently supported:
                    #
                    # Image Types
                    #
                    # * image/jpeg
                    # * image/jpg&#x27;
                    # * image/gif
                    # * image/png
                    #
                    # Video Types
                    #
                    # * video/h263
                    # * video/m4v
                    # * video/mp4
                    # * video/mpeg
                    # * video/mpeg4
                    # * video/webm
                  &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                      # within a rich card with a vertical layout.
                      # For a standalone card with horizontal layout, height is not
                      # customizable, and this field is ignored.
                  &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                      # determines the MIME type of the file from the content-type field in
                      # the HTTP headers when the platform fetches the file. The content-type
                      # field must be present and accurate in the HTTP response from the URL.
                  &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                      # provide a thumbnail URI, the RBM platform displays a blank
                      # placeholder thumbnail until the user&#x27;s device downloads the file.
                      # Depending on the user&#x27;s setting, the file may not download
                      # automatically and may require the user to tap a download button.
                },
                &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                    #
                    # At least one of the title, description or media must be set.
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                    #
                    # At least one of the title, description or media must be set.
                &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                  { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                      # easily select/click a predefined response or perform an action (like
                      # opening a web uri).
                    &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                        # can choose from the card.
                      &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                          # If the user has an app installed that is
                          # registered as the default handler for the URL, then this app will be
                          # opened instead, and its icon will be used in the suggested action UI.
                        &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                      },
                      &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                          # to send back to the agent.
                      },
                      &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                      &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                          # but does not dial automatically.
                        &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                            # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                            # format. An example of a correctly formatted phone number:
                            # +15556767888.
                      },
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested action. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                    },
                    &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                        # instead of typing in their own response.
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested reply. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                      &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                    },
                  },
                ],
              },
            ],
          },
          &quot;tableCard&quot;: { # Table card for Actions on Google. # Table card for Actions on Google.
            &quot;buttons&quot;: [ # Optional. List of buttons for the card.
              { # The button object that appears at the bottom of a card.
                &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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
              },
            ],
            &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;, # A text description of the image to be used for accessibility,
                  # e.g., screen readers. Required if image_uri is set for CarouselSelect.
            },
            &quot;rows&quot;: [ # Optional. Rows in this table of data.
              { # Row of TableCard.
                &quot;dividerAfter&quot;: True or False, # Optional. Whether to add a visual divider after this row.
                &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;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;rbmText&quot;: { # Rich Business Messaging (RBM) text response with suggestions. # Rich Business Messaging (RBM) text response.
              #
              # RBM allows businesses to send enriched and branded versions of SMS. See
              # https://jibe.google.com/business-messaging.
            &quot;text&quot;: &quot;A String&quot;, # Required. Text sent and displayed to the user.
            &quot;rbmSuggestion&quot;: [ # Optional. One or more suggestions to show to the user.
              { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                  # easily select/click a predefined response or perform an action (like
                  # opening a web uri).
                &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                    # can choose from the card.
                  &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                      # If the user has an app installed that is
                      # registered as the default handler for the URL, then this app will be
                      # opened instead, and its icon will be used in the suggested action UI.
                    &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                  },
                  &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                      # to send back to the agent.
                  },
                  &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                  &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                      # but does not dial automatically.
                    &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                        # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                        # format. An example of a correctly formatted phone number:
                        # +15556767888.
                  },
                  &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                      # when the user taps the suggested action. This data will be also
                      # forwarded to webhook to allow performing custom business logic.
                },
                &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                    # instead of typing in their own response.
                  &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                      # when the user taps the suggested reply. This data will be also
                      # forwarded to webhook to allow performing custom business logic.
                  &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                },
              },
            ],
          },
          &quot;payload&quot;: { # A custom platform-specific response.
            &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
          },
          &quot;text&quot;: { # The text response message. # Returns a text response.
            &quot;text&quot;: [ # Optional. The collection of the agent&#x27;s responses.
              &quot;A String&quot;,
            ],
          },
          &quot;rbmStandaloneRichCard&quot;: { # Standalone Rich Business Messaging (RBM) rich card. # Standalone Rich Business Messaging (RBM) rich card response.
              #
              # Rich cards allow you to respond to users with more vivid content, e.g.
              # with media and suggestions.
              #
              # You can group multiple rich cards into one using RbmCarouselCard but
              # carousel cards will give you less control over the card layout.
            &quot;cardContent&quot;: { # Rich Business Messaging (RBM) Card content # Required. Card content.
              &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                  # be set. Media (image, GIF or a video) to include in the card.
                  # The following media-types are currently supported:
                  #
                  # Image Types
                  #
                  # * image/jpeg
                  # * image/jpg&#x27;
                  # * image/gif
                  # * image/png
                  #
                  # Video Types
                  #
                  # * video/h263
                  # * video/m4v
                  # * video/mp4
                  # * video/mpeg
                  # * video/mpeg4
                  # * video/webm
                &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                    # within a rich card with a vertical layout.
                    # For a standalone card with horizontal layout, height is not
                    # customizable, and this field is ignored.
                &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                    # determines the MIME type of the file from the content-type field in
                    # the HTTP headers when the platform fetches the file. The content-type
                    # field must be present and accurate in the HTTP response from the URL.
                &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                    # provide a thumbnail URI, the RBM platform displays a blank
                    # placeholder thumbnail until the user&#x27;s device downloads the file.
                    # Depending on the user&#x27;s setting, the file may not download
                    # automatically and may require the user to tap a download button.
              },
              &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                  #
                  # At least one of the title, description or media must be set.
              &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                  #
                  # At least one of the title, description or media must be set.
              &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                    # easily select/click a predefined response or perform an action (like
                    # opening a web uri).
                  &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                      # can choose from the card.
                    &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                        # If the user has an app installed that is
                        # registered as the default handler for the URL, then this app will be
                        # opened instead, and its icon will be used in the suggested action UI.
                      &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                    },
                    &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                        # to send back to the agent.
                    },
                    &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                    &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                        # but does not dial automatically.
                      &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                          # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                          # format. An example of a correctly formatted phone number:
                          # +15556767888.
                    },
                    &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                        # when the user taps the suggested action. This data will be also
                        # forwarded to webhook to allow performing custom business logic.
                  },
                  &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                      # instead of typing in their own response.
                    &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                        # when the user taps the suggested reply. This data will be also
                        # forwarded to webhook to allow performing custom business logic.
                    &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                  },
                },
              ],
            },
            &quot;cardOrientation&quot;: &quot;A String&quot;, # Required. Orientation of the card.
            &quot;thumbnailImageAlignment&quot;: &quot;A String&quot;, # Required if orientation is horizontal.
                # Image preview alignment for standalone cards with horizontal layout.
          },
          &quot;telephonyPlayAudio&quot;: { # Plays audio from a file in Telephony Gateway. # Plays audio from a file in Telephony Gateway.
            &quot;audioUri&quot;: &quot;A String&quot;, # Required. URI to a Google Cloud Storage object containing the audio to
                # play, e.g., &quot;gs://bucket/object&quot;. The object must contain a single
                # channel (mono) of linear PCM audio (2 bytes / sample) at 8kHz.
                #
                # This object must be readable by the `service-&lt;Project
                # Number&gt;@gcp-sa-dialogflow.iam.gserviceaccount.com` service account
                # where &lt;Project Number&gt; is the number of the Telephony Gateway project
                # (usually the same as the Dialogflow agent project). If the Google Cloud
                # Storage bucket is in the Telephony Gateway project, this permission is
                # added by default when enabling the Dialogflow V2 API.
                #
                # For audio from other sources, consider using the
                # `TelephonySynthesizeSpeech` message with SSML.
          },
          &quot;carouselSelect&quot;: { # The card for presenting a carousel of options to select from. # Displays a carousel card for Actions on Google.
            &quot;items&quot;: [ # Required. Carousel items.
              { # An item in the carousel.
                &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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
                &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item.
                &quot;description&quot;: &quot;A String&quot;, # Optional. The body text of the card.
              },
            ],
          },
          &quot;simpleResponses&quot;: { # The collection of simple response candidates. # Returns a voice or text-only response 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;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;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;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;imageDisplayOptions&quot;: &quot;A String&quot;, # Optional. Settings for displaying the image. Applies to every image in
                # items.
            &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item. Maximum of two lines of text.
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the carousel item. Maximum of four lines 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;, # A text description of the image to be used for accessibility,
                      # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                },
                &quot;openUriAction&quot;: { # Actions on Google action to open a given url. # Required. Action to present to the user.
                  &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;url&quot;: &quot;A String&quot;, # Required. URL
                },
              },
            ],
          },
        },
      ],
      &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;endInteraction&quot;: True or False, # Optional. Indicates that this intent ends an interaction. Some integrations
            # (e.g., Actions on Google or Dialogflow phone gateway) use this information
            # to close interaction with an end user. Default is false.
        &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;isFallback&quot;: True or False, # Optional. Indicates whether this is a fallback intent.
        &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;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;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;displayName&quot;: &quot;A String&quot;, # Required. The name of this intent.
        &quot;resetContexts&quot;: True or False, # Optional. Indicates whether to delete all contexts in the current
            # session when this intent is matched.
        &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;rootFollowupIntentName&quot;: &quot;A String&quot;, # Output only. The unique identifier of the root intent in the chain of
            # followup intents. It identifies the correct followup intents chain for
            # this 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;type&quot;: &quot;A String&quot;, # Required. The type of the training phrase.
            &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier of this training phrase.
            &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;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;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;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;text&quot;: &quot;A String&quot;, # Required. The text for this part.
              },
            ],
            &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;messages&quot;: [ # Optional. The collection of rich messages corresponding to the
            # `Response` field in the Dialogflow console.
          { # Corresponds to the `Response` field in the Dialogflow console.
            &quot;suggestions&quot;: { # The collection of suggestions. # Displays 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;mediaContent&quot;: { # The media content card for Actions on Google. # The media content card for Actions on Google.
              &quot;mediaType&quot;: &quot;A String&quot;, # Optional. What type of media is the content (ie &quot;audio&quot;).
              &quot;mediaObjects&quot;: [ # Required. List of media objects.
                { # Response media object for media content card.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of media card.
                  &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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                  &quot;contentUrl&quot;: &quot;A String&quot;, # Required. Url where the media is stored.
                  &quot;name&quot;: &quot;A String&quot;, # Required. Name of media 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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                },
              ],
            },
            &quot;telephonyTransferCall&quot;: { # Transfers the call in Telephony Gateway. # Transfers the call in Telephony Gateway.
              &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to transfer the call to
                  # in [E.164 format](https://en.wikipedia.org/wiki/E.164).
                  #
                  # We currently only allow transferring to US numbers (+1xxxyyyzzzz).
            },
            &quot;platform&quot;: &quot;A String&quot;, # Optional. The platform that this message is intended for.
            &quot;telephonySynthesizeSpeech&quot;: { # Synthesizes speech and plays back the synthesized audio to the caller in # Synthesizes speech in Telephony Gateway.
                # Telephony Gateway.
                #
                # Telephony Gateway takes the synthesizer settings from
                # `DetectIntentResponse.output_audio_config` which can either be set
                # at request-level or can come from the agent-level synthesizer config.
              &quot;text&quot;: &quot;A String&quot;, # The raw text to be synthesized.
              &quot;ssml&quot;: &quot;A String&quot;, # The SSML to be synthesized. For more information, see
                  # [SSML](https://developers.google.com/actions/reference/ssml).
            },
            &quot;linkOutSuggestion&quot;: { # The suggestion chip message that allows the user to jump out to the app # Displays a 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;quickReplies&quot;: { # The quick replies response message. # Displays quick replies.
              &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;card&quot;: { # The card response message. # Displays a card.
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. The subtitle of the card.
              &quot;buttons&quot;: [ # Optional. The collection of card buttons.
                { # Optional. 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;title&quot;: &quot;A String&quot;, # Optional. The title of the card.
            },
            &quot;listSelect&quot;: { # The card for presenting a list of options to select from. # Displays a list card for Actions on Google.
              &quot;subtitle&quot;: &quot;A String&quot;, # Optional. Subtitle of the list.
              &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;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;description&quot;: &quot;A String&quot;, # Optional. The main text describing the item.
                  &quot;title&quot;: &quot;A String&quot;, # Required. The title of the list 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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                },
              ],
            },
            &quot;basicCard&quot;: { # The basic card message. Useful for displaying information. # Displays a basic card 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;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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                },
              ],
              &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;, # A text description of the image to be used for accessibility,
                    # e.g., screen readers. Required if image_uri is set for CarouselSelect.
              },
              &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;image&quot;: { # The image response message. # Displays an image.
              &quot;imageUri&quot;: &quot;A String&quot;, # Optional. The public URI to an image file.
              &quot;accessibilityText&quot;: &quot;A String&quot;, # A text description of the image to be used for accessibility,
                  # e.g., screen readers. Required if image_uri is set for CarouselSelect.
            },
            &quot;rbmCarouselRichCard&quot;: { # Carousel Rich Business Messaging (RBM) rich card. # Rich Business Messaging (RBM) carousel rich card response.
                #
                # Rich cards allow you to respond to users with more vivid content, e.g.
                # with media and suggestions.
                #
                # If you want to show a single card with more control over the layout,
                # please use RbmStandaloneCard instead.
              &quot;cardWidth&quot;: &quot;A String&quot;, # Required. The width of the cards in the carousel.
              &quot;cardContents&quot;: [ # Required. The cards in the carousel. A carousel must have at least
                  # 2 cards and at most 10.
                { # Rich Business Messaging (RBM) Card content
                  &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                      # be set. Media (image, GIF or a video) to include in the card.
                      # The following media-types are currently supported:
                      #
                      # Image Types
                      #
                      # * image/jpeg
                      # * image/jpg&#x27;
                      # * image/gif
                      # * image/png
                      #
                      # Video Types
                      #
                      # * video/h263
                      # * video/m4v
                      # * video/mp4
                      # * video/mpeg
                      # * video/mpeg4
                      # * video/webm
                    &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                        # within a rich card with a vertical layout.
                        # For a standalone card with horizontal layout, height is not
                        # customizable, and this field is ignored.
                    &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                        # determines the MIME type of the file from the content-type field in
                        # the HTTP headers when the platform fetches the file. The content-type
                        # field must be present and accurate in the HTTP response from the URL.
                    &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                        # provide a thumbnail URI, the RBM platform displays a blank
                        # placeholder thumbnail until the user&#x27;s device downloads the file.
                        # Depending on the user&#x27;s setting, the file may not download
                        # automatically and may require the user to tap a download button.
                  },
                  &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                      #
                      # At least one of the title, description or media must be set.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                      #
                      # At least one of the title, description or media must be set.
                  &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                    { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                        # easily select/click a predefined response or perform an action (like
                        # opening a web uri).
                      &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                          # can choose from the card.
                        &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                            # If the user has an app installed that is
                            # registered as the default handler for the URL, then this app will be
                            # opened instead, and its icon will be used in the suggested action UI.
                          &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                        },
                        &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                            # to send back to the agent.
                        },
                        &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                        &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                            # but does not dial automatically.
                          &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                              # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                              # format. An example of a correctly formatted phone number:
                              # +15556767888.
                        },
                        &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                            # when the user taps the suggested action. This data will be also
                            # forwarded to webhook to allow performing custom business logic.
                      },
                      &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                          # instead of typing in their own response.
                        &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                            # when the user taps the suggested reply. This data will be also
                            # forwarded to webhook to allow performing custom business logic.
                        &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                      },
                    },
                  ],
                },
              ],
            },
            &quot;tableCard&quot;: { # Table card for Actions on Google. # Table card for Actions on Google.
              &quot;buttons&quot;: [ # Optional. List of buttons for the card.
                { # The button object that appears at the bottom of a card.
                  &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;title&quot;: &quot;A String&quot;, # Required. The title of the button.
                },
              ],
              &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;, # A text description of the image to be used for accessibility,
                    # e.g., screen readers. Required if image_uri is set for CarouselSelect.
              },
              &quot;rows&quot;: [ # Optional. Rows in this table of data.
                { # Row of TableCard.
                  &quot;dividerAfter&quot;: True or False, # Optional. Whether to add a visual divider after this row.
                  &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;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;rbmText&quot;: { # Rich Business Messaging (RBM) text response with suggestions. # Rich Business Messaging (RBM) text response.
                #
                # RBM allows businesses to send enriched and branded versions of SMS. See
                # https://jibe.google.com/business-messaging.
              &quot;text&quot;: &quot;A String&quot;, # Required. Text sent and displayed to the user.
              &quot;rbmSuggestion&quot;: [ # Optional. One or more suggestions to show to the user.
                { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                    # easily select/click a predefined response or perform an action (like
                    # opening a web uri).
                  &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                      # can choose from the card.
                    &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                        # If the user has an app installed that is
                        # registered as the default handler for the URL, then this app will be
                        # opened instead, and its icon will be used in the suggested action UI.
                      &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                    },
                    &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                        # to send back to the agent.
                    },
                    &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                    &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                        # but does not dial automatically.
                      &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                          # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                          # format. An example of a correctly formatted phone number:
                          # +15556767888.
                    },
                    &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                        # when the user taps the suggested action. This data will be also
                        # forwarded to webhook to allow performing custom business logic.
                  },
                  &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                      # instead of typing in their own response.
                    &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                        # when the user taps the suggested reply. This data will be also
                        # forwarded to webhook to allow performing custom business logic.
                    &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                  },
                },
              ],
            },
            &quot;payload&quot;: { # A custom platform-specific response.
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
            },
            &quot;text&quot;: { # The text response message. # Returns a text response.
              &quot;text&quot;: [ # Optional. The collection of the agent&#x27;s responses.
                &quot;A String&quot;,
              ],
            },
            &quot;rbmStandaloneRichCard&quot;: { # Standalone Rich Business Messaging (RBM) rich card. # Standalone Rich Business Messaging (RBM) rich card response.
                #
                # Rich cards allow you to respond to users with more vivid content, e.g.
                # with media and suggestions.
                #
                # You can group multiple rich cards into one using RbmCarouselCard but
                # carousel cards will give you less control over the card layout.
              &quot;cardContent&quot;: { # Rich Business Messaging (RBM) Card content # Required. Card content.
                &quot;media&quot;: { # Rich Business Messaging (RBM) Media displayed in Cards # Optional. However at least one of the title, description or media must
                    # be set. Media (image, GIF or a video) to include in the card.
                    # The following media-types are currently supported:
                    #
                    # Image Types
                    #
                    # * image/jpeg
                    # * image/jpg&#x27;
                    # * image/gif
                    # * image/png
                    #
                    # Video Types
                    #
                    # * video/h263
                    # * video/m4v
                    # * video/mp4
                    # * video/mpeg
                    # * video/mpeg4
                    # * video/webm
                  &quot;height&quot;: &quot;A String&quot;, # Required for cards with vertical orientation. The height of the media
                      # within a rich card with a vertical layout.
                      # For a standalone card with horizontal layout, height is not
                      # customizable, and this field is ignored.
                  &quot;fileUri&quot;: &quot;A String&quot;, # Required. Publicly reachable URI of the file. The RBM platform
                      # determines the MIME type of the file from the content-type field in
                      # the HTTP headers when the platform fetches the file. The content-type
                      # field must be present and accurate in the HTTP response from the URL.
                  &quot;thumbnailUri&quot;: &quot;A String&quot;, # Optional. Publicly reachable URI of the thumbnail.If you don&#x27;t
                      # provide a thumbnail URI, the RBM platform displays a blank
                      # placeholder thumbnail until the user&#x27;s device downloads the file.
                      # Depending on the user&#x27;s setting, the file may not download
                      # automatically and may require the user to tap a download button.
                },
                &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the card (at most 200 bytes).
                    #
                    # At least one of the title, description or media must be set.
                &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the card (at most 2000 bytes).
                    #
                    # At least one of the title, description or media must be set.
                &quot;suggestions&quot;: [ # Optional. List of suggestions to include in the card.
                  { # Rich Business Messaging (RBM) suggestion. Suggestions allow user to
                      # easily select/click a predefined response or perform an action (like
                      # opening a web uri).
                    &quot;action&quot;: { # Rich Business Messaging (RBM) suggested client-side action that the user # Predefined client side actions that user can choose
                        # can choose from the card.
                      &quot;openUrl&quot;: { # Opens the user&#x27;s default web browser app to the specified uri # Suggested client side action: Open a URI on device
                          # If the user has an app installed that is
                          # registered as the default handler for the URL, then this app will be
                          # opened instead, and its icon will be used in the suggested action UI.
                        &quot;uri&quot;: &quot;A String&quot;, # Required. The uri to open on the user device
                      },
                      &quot;shareLocation&quot;: { # Opens the device&#x27;s location chooser so the user can pick a location # Suggested client side action: Share user location
                          # to send back to the agent.
                      },
                      &quot;text&quot;: &quot;A String&quot;, # Text to display alongside the action.
                      &quot;dial&quot;: { # Opens the user&#x27;s default dialer app with the specified phone number # Suggested client side action: Dial a phone number
                          # but does not dial automatically.
                        &quot;phoneNumber&quot;: &quot;A String&quot;, # Required. The phone number to fill in the default dialer app.
                            # This field should be in [E.164](https://en.wikipedia.org/wiki/E.164)
                            # format. An example of a correctly formatted phone number:
                            # +15556767888.
                      },
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested action. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                    },
                    &quot;reply&quot;: { # Rich Business Messaging (RBM) suggested reply that the user can click # Predefined replies for user to select instead of typing
                        # instead of typing in their own response.
                      &quot;postbackData&quot;: &quot;A String&quot;, # Opaque payload that the Dialogflow receives in a user event
                          # when the user taps the suggested reply. This data will be also
                          # forwarded to webhook to allow performing custom business logic.
                      &quot;text&quot;: &quot;A String&quot;, # Suggested reply text.
                    },
                  },
                ],
              },
              &quot;cardOrientation&quot;: &quot;A String&quot;, # Required. Orientation of the card.
              &quot;thumbnailImageAlignment&quot;: &quot;A String&quot;, # Required if orientation is horizontal.
                  # Image preview alignment for standalone cards with horizontal layout.
            },
            &quot;telephonyPlayAudio&quot;: { # Plays audio from a file in Telephony Gateway. # Plays audio from a file in Telephony Gateway.
              &quot;audioUri&quot;: &quot;A String&quot;, # Required. URI to a Google Cloud Storage object containing the audio to
                  # play, e.g., &quot;gs://bucket/object&quot;. The object must contain a single
                  # channel (mono) of linear PCM audio (2 bytes / sample) at 8kHz.
                  #
                  # This object must be readable by the `service-&lt;Project
                  # Number&gt;@gcp-sa-dialogflow.iam.gserviceaccount.com` service account
                  # where &lt;Project Number&gt; is the number of the Telephony Gateway project
                  # (usually the same as the Dialogflow agent project). If the Google Cloud
                  # Storage bucket is in the Telephony Gateway project, this permission is
                  # added by default when enabling the Dialogflow V2 API.
                  #
                  # For audio from other sources, consider using the
                  # `TelephonySynthesizeSpeech` message with SSML.
            },
            &quot;carouselSelect&quot;: { # The card for presenting a carousel of options to select from. # Displays a carousel card for Actions on Google.
              &quot;items&quot;: [ # Required. Carousel items.
                { # An item in the carousel.
                  &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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                  &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. The body text of the card.
                },
              ],
            },
            &quot;simpleResponses&quot;: { # The collection of simple response candidates. # Returns a voice or text-only response 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;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;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;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;imageDisplayOptions&quot;: &quot;A String&quot;, # Optional. Settings for displaying the image. Applies to every image in
                  # items.
              &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;title&quot;: &quot;A String&quot;, # Required. Title of the carousel item. Maximum of two lines of text.
                  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the carousel item. Maximum of four lines 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;, # A text description of the image to be used for accessibility,
                        # e.g., screen readers. Required if image_uri is set for CarouselSelect.
                  },
                  &quot;openUriAction&quot;: { # Actions on Google action to open a given url. # Required. Action to present to the user.
                    &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;url&quot;: &quot;A String&quot;, # Required. URL
                  },
                },
              ],
            },
          },
        ],
        &quot;parentFollowupIntentName&quot;: &quot;A String&quot;, # Optional. 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;parameters&quot;: [ # Optional. The collection of parameters associated with the intent.
          { # Represents intent parameters.
            &quot;isList&quot;: True or False, # Optional. Indicates whether the parameter represents a list of values.
            &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;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;name&quot;: &quot;A String&quot;, # The unique identifier of this parameter.
            &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;displayName&quot;: &quot;A String&quot;, # Required. The name of the parameter.
            &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;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;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;webhookState&quot;: &quot;A String&quot;, # Optional. Indicates whether webhooks are enabled for the intent.
        &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;mlEnabled&quot;: True or False, # Optional. Indicates whether Machine Learning is enabled for the intent.
            # Note: If `ml_enabled` setting is set to false, then this intent is not
            # taken into account during inference in `ML ONLY` match mode. Also,
            # auto-markup in the UI is turned off.
            # DEPRECATED! Please use `ml_disabled` field instead.
            # NOTE: If both `ml_enabled` and `ml_disabled` are either not set or false,
            # then the default value is determined as follows:
            # - Before April 15th, 2018 the default is:
            #   ml_enabled = false / ml_disabled = true.
            # - After April 15th, 2018 the default is:
            #   ml_enabled = true / ml_disabled = false.
        &quot;followupIntentInfo&quot;: [ # Output 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;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;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;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;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;knowledgeAnswers&quot;: { # Represents the result of querying a Knowledge base. # The result from Knowledge Connector (if any), ordered by decreasing
          # `KnowledgeAnswers.match_confidence`.
        &quot;answers&quot;: [ # A list of answers from Knowledge Connector.
          { # An answer from Knowledge Connector.
            &quot;source&quot;: &quot;A String&quot;, # Indicates which Knowledge Document this answer was extracted from.
                # Format: `projects/&lt;Project ID&gt;/knowledgeBases/&lt;Knowledge Base
                # ID&gt;/documents/&lt;Document ID&gt;`.
            &quot;matchConfidence&quot;: 3.14, # The system&#x27;s confidence score that this Knowledge answer is a good match
                # for this conversational query.
                # The range is from 0.0 (completely uncertain) to 1.0 (completely certain).
                # Note: The confidence score is likely to vary somewhat (possibly even for
                # identical requests), as the underlying model is under constant
                # improvement. It may be deprecated in the future. We recommend using
                # `match_confidence_level` which should be generally more stable.
            &quot;answer&quot;: &quot;A String&quot;, # The piece of text from the `source` knowledge base document that answers
                # this conversational query.
            &quot;faqQuestion&quot;: &quot;A String&quot;, # The corresponding FAQ question if the answer was extracted from a FAQ
                # Document, empty otherwise.
            &quot;matchConfidenceLevel&quot;: &quot;A String&quot;, # The system&#x27;s confidence level that this knowledge answer is a good match
                # for this conversational query.
                # NOTE: The confidence level for a given `&lt;query, answer&gt;` pair may change
                # without notice, as it depends on models that are constantly being
                # improved. However, it will change less frequently than the confidence
                # score below, and should be preferred for referencing the quality of an
                # answer.
          },
        ],
      },
    },
    &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.
  }</pre>
</div>

</body></html>