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

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

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

Returns:
  An object of the form:

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

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

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

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

{ # The request to detect user&#x27;s intent.
    &quot;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>