Cómo crear el archivo actions.xml (obsoleto)

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Una vez que identifiques las funciones de la app y el intent integrado (BII) que quieras implementar, crea en tu app para Android un archivo actions.xml que asigne el BII a las funciones de tu app. Las Acciones en apps definidas en actions.xml describen el modo en que cada BII resuelve su entrega, así como los parámetros que se extraen y se proporcionan a tu app.

Descripción general

A fin de integrar tu app para Android con Acciones en apps, debes tener un archivo actions.xml en el directorio res/xml del proyecto de la app.

Agrega una referencia al archivo actions.xml en el archivo AndroidManifest.xml con una etiqueta <meta-data>. Por ejemplo:

<application>
    <!-- ... -->
    <meta-data android:name="com.google.android.actions" android:resource="@xml/actions" />
</application>

De esta manera, se declara un recurso XML para el archivo xml/actions.xml en el APK. Si deseas obtener más información para especificar recursos en Android, consulta la Descripción general de recursos de la app en la documentación para desarrolladores de Android.

Esquema

En la siguiente tabla, se describe el esquema de actions.xml. Cuando incluyes una etiqueta, todos sus atributos son obligatorios, a menos que estén marcados como "opcional".

Etiqueta Dónde se incluye Atributos
<actions> principal
<action> <actions>

intentName

queryPatterns (solo se aplica a intents personalizados)

<parameter> <action> name
<entity-set-reference> <parameter>

entitySetId O

urlFilter

<fulfillment> <action>

urlTemplate

fulfillmentMode (opcional)

requiredForegroundActivity (opcional)

<parameter-mapping> <fulfillment>

urlParameter

intentParameter

required (opcional)

entityMatchRequired (opcional)

<entity-set> <actions> entitySetId
<entity> <entity-set>

name (y opcionalmente alternateName) O

sameAs

identifier O url

Descripciones de etiquetas

En esta sección, se describen las diferentes etiquetas de esquema para actions.xml.

<action>

Es una Acción en la app compatible con esta última. Para cada etiqueta <action> de tu archivo actions.xml, debes proporcionar al menos una etiqueta <fulfillment>.

Atributos:

  • intentName: Es el intent integrado para la Acción en la app (por ejemplo, actions.intent.CREATE_TAXI_RESERVATION). Si deseas obtener una lista de los intents integrados compatibles, consulta la referencia de intents integrados.

  • queryPatterns: Es un conjunto de consultas que se esperan del usuario para este intent. Este atributo solo se aplica a intents personalizados, ya que los BII ya incluyen modelos de las formas comunes en que los usuarios expresan las tareas que intentan realizar o la información que buscan.

<parameter>

Es un parámetro de una Acción en la app que tiene un nombre y una lista de entidades asociadas.

Atributos:

  • name: Es el nombre que se asociará con este parámetro (por ejemplo, "destino"). El nombre debe ser un campo de nivel de hoja del parámetro (por ejemplo, tradeOrder.assetOrdered.assetIssuedBy.name). Si el parámetro es un tipo primitivo, como una string, el nombre es solo el nombre del parámetro.

<entity-set-reference>

Es la referencia a un feed de schema.org que proporciona el desarrollador. Los feeds se deben brindar directamente en el archivo actions.xml con etiquetas <entity-set>.

Atributos:

  • entitySetId: Es una referencia a una colección específica de entidades. Este atributo debe corresponder a un entitySetId en una etiqueta <entity-set>.

  • urlFilter: Es la ruta de URL que se usa cuando se proporciona el inventario web para la entrega. Este atributo admite dos comodines:

    • *: Un asterisco coincide con una secuencia compuesta por cero a muchas repeticiones del carácter inmediatamente anterior.

    • .*: Un punto seguido de un asterisco coincide con cualquier secuencia compuesta por cero a muchos caracteres.

    • Los caracteres de escape solo son necesarios para los caracteres * y \ literales, que puedes escapar usando \\* y \\\\, respectivamente.

<fulfillment>

Es la información acerca de la entrega del intent del usuario con la app para Android. Los desarrolladores pueden proporcionar varias etiquetas <fulfillment> en actions.xml, con un conjunto diferente de parámetros obligatorios para cada intent.

Google usa la primera etiqueta <fulfillment> a fin de que todos los parámetros obligatorios estén disponibles a los efectos de entregar la consulta del usuario. Debes proporcionar una etiqueta <fulfillment> sin ningún parámetro obligatorio como entrega de resguardo.

Atributos:

  • urlTemplate: Es la plantilla para construir el vínculo directo o un URI de Slice que se abrirá en el dispositivo. La plantilla se puede expandir con los parámetros del intent del usuario si todos los parámetros necesarios para ella están disponibles. Si deseas ver ejemplos de la plantilla de URL HTTP, consulta el artículo de Wikipedia sobre plantillas de URL. El formato de la plantilla sigue la especificación de plantillas de URI del RFC 6570.

  • fulfillmentMode: Es el modo de entrega que se usa para ejecutar dicha acción (opcional). Los valores válidos son los siguientes:

    • actions.fulfillment.DEEPLINK: Entrega la acción del usuario abriendo la app para Android con un vínculo directo. Es el valor predeterminado.

    • actions.fulfillment.SLICE: Entrega la acción del usuario incorporando un Slice proporcionado por la app para Android.

  • requiredForegroundActivity: Indica la actividad que debe estar en primer plano de modo que se active la Acción en la app con la invocación de la app en primer plano (opcional).

    • Especifica la actividad sin abreviaturas de clase con el nombre del paquete de tu app, seguido de una barra diagonal (/) y, luego, el nombre de la actividad: APP_PACKAGE_NAME/ACTIVITY_NAME.

Estos son algunos ejemplos de valores de plantilla de URL:

Plantilla Valores Valor expandido
https://example.com/test{?foo,bar} "foo": "123"

"bar": "456"

https://example.com/test?foo=123&bar=456
https://example.com/test?utm_campaign=appactions{&foo,bar} "foo": "123"

"bar": "456"

https://example.com/test?utm_campaign=appactions&foo=123&bar=456
https://example.com/test?utm_campaign=appactions{#foo} "foo": "123" https://example.com/test?utm_campaign=appactions#foo=123
myapp://example/{foo} "foo": "123" myapp://example/123
intent://foo#Intent;scheme=my-scheme{;S.extra1,S.extra2};end "S.extra1": "123"

"S.extra2": "456"

intent://foo#Intent;scheme=my-scheme;S.extra1=123;S.extra2=456;end

Si deseas obtener más información sobre la configuración de las plantillas de URL, consulta Plantillas de URL en la entrega.

<parameter-mapping>

Se trata de la asignación de los parámetros de intents a las variables en la plantilla de URL. Las claves en esta asignación representan parámetros de plantilla de URL, o "variables", como se describe en el RFC 6570.

Si no se incluye un parámetro en el intent, la variable correspondiente permanecerá indefinida en el momento de la expansión de la plantilla de URL. Consulta la sección 3.2.1 del RFC 6570 para obtener una descripción de la forma en que se tratan las variables no definidas.

Ten en cuenta que required="true" y entityMatchRequired="true" son distintos.

Atributos:

  • urlParameter: Cada variable mencionada en la plantilla de URL debe tener un urlParameter correspondiente en <parameter-mapping>. Por ejemplo, si uri_template es http://spysatellite.com/show{?lat,long}, debe haber claves en <parameter-mapping> para los parámetros lat y long.

  • intentParameter: Los valores hacen referencia a los parámetros de intents. Si el parámetro del intent es de un tipo estructurado, usa la notación de puntos para hacer referencia a un campo anidado. Por ejemplo, si hay un parámetro taxiReservation de tipo schema.org/TaxiReservation, puedes usar taxiReservation.pickupLocation.geo.latitude para hacer referencia al valor de latitud.

    Si proporcionas un conjunto de entidades para este parámetro, el intentParameter debe coincidir por completo con el nombre de la etiqueta <parameter> correspondiente (por ejemplo, taxiReservation.pickupLocation.geo.latitude). Si el parámetro del intent tiene un tipo complejo, el valor debe corresponder a la referencia del objeto del parámetro (por ejemplo, taxiReservation). Si el parámetro del intent tiene un tipo primitivo, el valor debe ser el propio nombre del parámetro.

  • required: Indica que se requiere un determinado intentParameter a fin de que la plantilla de URL sea válida (opcional). La plantilla de URL se descarta si la consulta del usuario no incluye un valor para la intentParameter especificada.

  • entityMatchRequired: Indica que debe haber una coincidencia de inventario para el intentParameter dado (opcional). El valor predeterminado es false.

    Cuando este atributo se establece en true, si hay una coincidencia de inventario, el identificador de esa coincidencia se pasa a la plantilla de URL. De lo contrario, si no hay coincidencia, Asistente omite la entrega.

    Cuando este atributo se establece en false, si hay una coincidencia de inventario, el identificador de esa coincidencia se pasa a la plantilla de URL. De lo contrario, Asistente proporciona el valor del parámetro BII como se extrajo de la consulta del usuario.

<entity-set>

Es un conjunto de entidades intercaladas en actions.xml.

Atributos:

  • entitySetId: Es un identificador único obligatorio para una etiqueta <entity-set> en actions.xml (por ejemplo, "myInlineEntitySet1") Este valor también debe corresponder al valor de <entitySetId> en la etiqueta <entity-set-reference>.

    Los valores de entitySetId deben contener, como máximo, 30 caracteres alfanuméricos (sin caracteres especiales, como - o _) y comenzar con una letra.

<entity>

Es un elemento que pertenece a un conjunto de entidades intercaladas en actions.xml. Contiene un subconjunto de campos schema.org/Thing.

Los valores de string para los campos url, identifier y sameAs pueden ser hard-coded o se puede hacer referencia a ellos mediante los recursos de strings del APK. Cuando proporciones sinónimos, usa valores de strings para el campo alternateName que hagan referencia a los recursos de arrays de strings del APK.

Atributos:

  • name: Es el nombre obligatorio para la entidad, a menos que especifiques un campo sameAs. Debe ser único en los campos de entidad name y alternateName para la etiqueta <entity-set> dada (por ejemplo, "dentífrico").

  • alternateName: Son nombres alternativos para la entidad (opcional). Debes especificar un campo name antes de especificar un campo alternateName. Debe ser único en los campos de entidad name y alternateName para la etiqueta <entity-set> dada. Se seleccionará la entidad si la consulta del usuario coincide con alguna de estas strings.

  • sameAs: Es la URL de una página web de referencia que identifica la entidad inequívocamente. Se usa para especificar un valor de tipo enum solo si el tipo de parámetro de intent es un subtipo de schema.org/Enumeration.

    Es obligatorio para los campos de parámetros cuyas clases son subtipos de schema.org/Enumeration (por ejemplo: MealTypeBreakfast).

  • identifier: Es el identificador de la entidad. Debe ser único en todas las entidades de la etiqueta <entity-set> dada (por ejemplo, CAPPUCCINO_ID).

  • url: Es la URL del RFC 3986 que se abrirá en un dispositivo Android. Un cliente HTTP puede resolver la URL o no hacerlo. Por ejemplo, en Android, la URL puede ser una "http://" vinculada a la app o una específica del dispositivo, como una URL "intent://" o una en un esquema de URL personalizada.

    Puedes usar el campo url junto con el atributo urlTemplate de <fulfillment> de las siguientes maneras:

    • Proporciona valores url en el inventario intercalado y omite urlTemplate en <fulfillment>.

    • Proporciona valores url en el inventario intercalado y úsalos en el valor urlTemplate (por ejemplo, {@url}?extra_param=ExampleValue).

Se debe proporcionar identifier o url. Todas las entidades dentro de un conjunto determinado deben usar el mismo atributo (identifier o url).

Inventario intercalado para Acciones en apps

En algunos intents integrados, tienes la opción de guiar la extracción de entidades a un conjunto de entidades admitidas que se especifique en actions.xml, lo que se conoce como inventario intercalado. Cuando un usuario invoca tu Acción en la app, Asistente hace coincidir los parámetros de consulta del usuario con entidades especificadas como inventario intercalado. De esta manera, Asistente de Google puede usar identificadores que corresponden a elementos de inventario cuando se genera un vínculo directo para la entrega.

Puedes definir el inventario intercalado principalmente con los elementos <entity-set> y <entity>. El inventario intercalado facilita el desarrollo, ya que permite que tu app maneje solo identificadores o URLs de invocaciones de Acciones en apps, en lugar de tener que reconocer strings o valores de enumeración de Google.

Por ejemplo, supongamos que tu app ofrece diferentes bebidas que los usuarios pueden pedir, y esperas que realicen las siguientes solicitudes para el mismo tipo de bebida:

  • Hey Google, pide un café helado con leche y arándanos en AppDeEjemplo.

  • Hey Google, pide un café helado con arándanos en AppDeEjemplo.

En tu inventario intercalado, especifica "café helado con leche y arándanos" como una entidad que corresponde al identificador 12345a. También especifica "café helado con arándanos" como una entidad que corresponde al mismo identificador. Ahora, cuando un usuario active la Acción en la app con las consultas anteriores, Asistente podrá usar el identificador "12345a" cuando genere un vínculo directo para la entrega.

Puedes especificar hasta 1,000 entidades por app en todos los conjuntos de entidades. Se pueden definir hasta 20 valores sinónimos en alternateName por cada <entity>.

Inventario web para Acciones en apps

En algunos intents integrados, puedes usar el inventario web como método de generación de URLs para la entrega. Ese inventario usa tu sitio web a fin de descubrir URLs destinadas a la entrega de Acciones en apps. Esta función resulta muy útil cuando tienes una presencia web sólida y los vínculos directos integrados en la app están organizados en torno al contenido web disponible públicamente.

Para usar el inventario web, actualiza tu archivo actions.xml:

  1. En la etiqueta <action> (en la que deseas usar el inventario web), agrega una etiqueta <fulfillment> y establece su atributo urlTemplate en {@url}.

  2. En la misma etiqueta <action>, agrega una etiqueta <parameter> y establece su atributo name en el parámetro de intent integrado que más se corresponda con la entidad descrita por tus páginas web. Por ejemplo, cuando se proporciona un inventario web para ORDER_MENU_ITEM, debes vincular las páginas del menú a menuItem.name y las páginas de ubicaciones del restaurante a menuItem.inMenuSection.inMenu.forRestaurant.name.

  3. En la nueva etiqueta <parameter>, agrega una etiqueta <entity-set-reference> y establece su atributo urlFilter en la ruta de URL que deseas usar para el inventario web.

Si realizas los pasos anteriores, Asistente podrá realizar una búsqueda web en la ruta de URL que proporciones en el atributo urlFilter. Luego, Asistente de Google le brindará un valor de {@url} a la entrega usando los resultados. Por último, tu controlador de vínculos directos podrá dirigir a un usuario en función del vínculo directo que muestra Asistente para esa entrega.

Por ejemplo, supongamos que tu sitio web contiene fichas de productos que usan una ruta de acceso que comienza con https://www.example.com/items/. Usarás el valor https://www.example.com/items/.* de urlFilter y, más tarde, Asistente mostrará una URL de entrega como https://www.example.com/items/item123. Consulta <entity-set-reference> a fin de obtener información sobre el atributo urlFilter.

Plantillas de URL en entregas

En una etiqueta <fulfillment>, puedes declarar una plantilla de URL con marcadores de posición para parámetros dinámicos. Esta plantilla se asigna a una de tus actividades de Android mediante una URL de App Links, un esquema personalizado o una URL basada en intents.

Cómo configurar la plantilla de URL

Ejemplo de una URL de App Links:

<action intentName="actions.intent.CREATE_TAXI_RESERVATION">
    <fulfillment urlTemplate="http://my-taxi.com/order{?dropoffLocation}">
        <parameter-mapping
                intentParameter="taxiReservation.dropoffLocation.name"
                urlParameter="dropoffLocation"/>
    </fulfillment>
</action>

Ejemplo de un esquema personalizado:

<action intentName="actions.intent.CREATE_TAXI_RESERVATION">
    <fulfillment urlTemplate="mytaxi://reserve{?dropoffLocation}">
        <parameter-mapping
                intentParameter="taxiReservation.dropoffLocation.name"
                urlParameter="dropoffLocation"/>
    </fulfillment>
</action>

Ejemplo de una URL basada en intents:

<action intentName="actions.intent.CREATE_TAXI_RESERVATION">
    <fulfillment
            urlTemplate="intent:#Intent;package=com.example.myapp;action=com.example.myapp.MY_ACTION{;S.dropoff};end">
        <parameter-mapping
                intentParameter="taxiReservation.dropoffLocation.name"
                urlParameter="S.dropoff"/>
    </fulfillment>
</action>

Cuando se especifica una etiqueta <parameter-mapping> para una entrega, el atributo intentParameter denota el parámetro del intent integrado que proporciona el usuario. En los ejemplos anteriores, ese parámetro es el nombre de la ubicación de destino (taxiReservation.dropoffLocation.name). Puedes encontrar los parámetros disponibles para cualquier intent integrado en la referencia de intents integrados.

Para asignar el parámetro de intent integrado a una posición en la URL, usa el atributo urlParameter de la etiqueta <parameter-mapping>. Este atributo corresponde al valor de marcador de posición en la plantilla de URL que quieres sustituir por la información del usuario. El valor de marcador de posición debe estar presente en tu urlTemplate y estar escrito entre llaves ({}).

URL de App Links

Si usas una URL de App Links, la urlTemplate apunta a una URL HTTP normal que puede activar tu Actividad. Los parámetros se pasan como parámetros de URL a la URL de App Links. Los parámetros de la urlTemplate deben encerrarse entre llaves ({}) y tener antepuesto un signo de interrogación (?). Si no se establece un parámetro, el parámetro (llaves incluidas) se omitirá del resultado.

Por ejemplo, si un usuario activa la Acción en la app solicitando el envío de un taxi a San Francisco, el URI final que se activa (después de la sustitución del parámetro) sería el siguiente:

https://mydomain.com/order?action=com.example.myapp.MY_ACTION&dropoff=San+Francisco

URL basadas en intents

Si usas una URL basada en intents, el valor urlTemplate incluye el nombre del paquete, la acción de intent y un intent adicional, denominado el "destino". El intent adicional tiene el prefijo "S." para denotar un intent de string adicional (como se define en Intent.toUri()) y está encerrado por llaves a fin de denotar una sustitución mediante un parámetro. El punto y coma adicional que antecede es necesario a los efectos de separar la acción de intent del intent adicional (y solo se incluye si se configura el parámetro).

En nuestro ejemplo, el valor de urlParameter se establece en S.dropoff. Puedes ver dónde aparece esto en nuestra URL si buscas este valor en la urlTemplate.

Por ejemplo, si un usuario activara nuestra Acción para solicitar un viaje a "San Francisco", el URI final que se activa (después de la sustitución del parámetro) sería el siguiente:

intent:#Intent;package=com.example.myapp;action=com.example.myapp.MY_ACTION;S.dropoff=San+Francisco;end

Si deseas obtener más información sobre intents, consulta la documentación de intents de Android.

Cómo usar valores de URL de entidades en plantillas de URL

De forma predeterminada, si una etiqueta <entity> coincide con la consulta del usuario, el valor del atributo identifier se pasa a la plantilla de URL. Para hacer referencia al atributo url de una etiqueta <entity>, usa {@url} en la plantilla de URL y no uses una etiqueta <parameter-mapping>. Ten en cuenta que los valores de los identificadores tienen escape de URL, pero los valores del atributo url no se modifican.

Si una entrega usa {@url} en la plantilla de URL, esta intentará derivar {@url} de fuentes como el inventario web y el intercalado. Cuando estos dos inventarios son fuentes potenciales de derivación de {@url}, el inventario web tiene prioridad.

Por ejemplo:

<fulfillment urlTemplate="{@url}">
    <!-- No parameter-mapping is needed -->
</fulfillment>
<entity-set entitySetId="...">
    <entity name="..." url="https://my.url.fulfillment/1"/>
    <entity name="..." url="https://my.url.fulfillment/2"/>
</entity-set>

Los parámetros {@url} se pueden combinar con otros parámetros. Por ejemplo:

<fulfillment urlTemplate="{@url}?referrer=actions_on_google{&amp;other_param}">
    <parameter-mapping intentParameter="otherParam.name" urlParameter="other_param"/>
</fulfillment>
<entity-set entitySetId="...">
    <entity name="..." url="https://my.url.fulfillment/1"/>
    <entity name="..." url="https://my.url.fulfillment/2"/>
</entity-set>

Coincidencia de parámetros

La forma en la que Google hace coincidir los parámetros de las declaraciones del usuario con las entidades que especificaste depende del tipo del parámetro:

  • Enum: Google hace coincidir la consulta del usuario ("monday") con una URL de tipo enum asociada ("http://schema.org/Monday") y, luego, elige la entidad cuyo valor sameAs coincide con la URL de tipo enum.
  • String: Google elige la entidad cuyo valor name o alternateName coincide con la consulta del usuario.

Ejemplos

En la siguiente sección, se muestran ejemplos para usar intents integrados en actions.xml.

Finanzas: Cuentas y pagos

En el siguiente ejemplo de actions.xml, se usa el intent integrado actions.intent.CREATE_MONEY_TRANSFER:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.CREATE_MONEY_TRANSFER">
        <fulfillment urlTemplate="mybankapp://transfer{?amount,currency,recipientBankAccountType,senderBankAccountType,mode}">
            <parameter-mapping intentParameter="moneyTransfer.amount.value" urlParameter="amount" />
            <parameter-mapping intentParameter="moneyTransfer.amount.currency" urlParameter="currency" />
            <parameter-mapping intentParameter="moneyTransfer.moneyTransferDestination.name" urlParameter="recipientBankAccountType" />
            <parameter-mapping intentParameter="moneyTransfer.moneyTransferOrigin.name" urlParameter="senderBankAccountType" />
            <parameter-mapping intentParameter="moneyTransfer.transferMode" urlParameter="mode" />
        </fulfillment>
    </action>
</actions>

Bienestar: Nutrición

En el siguiente ejemplo de actions.xml, se usa el intent integrado actions.intent.RECORD_FOOD_OBSERVATION:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.RECORD_FOOD_OBSERVATION">
        <parameter name="foodObservation.forMeal">
            <entity-set-reference entitySetId="MealEntitySet"/>
        </parameter>
        <fulfillment urlTemplate="myfoodapp://record{?food,meal}">
            <parameter-mapping intentParameter="foodObservation.forMeal" urlParameter="meal" entityMatchRequired="true" />
            <parameter-mapping intentParameter="foodObservation.aboutFood.name" urlParameter="food" />
        </fulfillment>
    </action>
    <entity-set entitySetId="MealEntitySet">
        <entity sameAs="http://schema.googleapis.com/MealTypeBreakfast" identifier="1" />
        <entity sameAs="http://schema.googleapis.com/MealTypeLunch" identifier="2" />
        <entity sameAs="http://schema.googleapis.com/MealTypeDinner" identifier="3" />

    </entity-set>
</actions>

Pedidos de comida

En el siguiente ejemplo de actions.xml, se usa el intent integrado actions.intent.ORDER_MENU_ITEM:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.ORDER_MENU_ITEM">
        <parameter name="menuItem.inMenuSection.inMenu.forRestaurant.servesCuisine">
            <entity-set-reference entitySetId="CuisineEntitySet"/>
        </parameter>
        <fulfillment urlTemplate="myfoodapp://order{?restaurant}">
            <parameter-mapping intentParameter="menuItem.inMenuSection.inMenu.forRestaurant.name" urlParameter="restaurant" required="true" />
        </fulfillment>
        <!-- URL values are derived from a matched entity from the CuisineEntity Set. This is not a fallback fulfillment because {@url} is a required parameter. -->
        <fulfillment urlTemplate="{@url}" />
        <!-- Fallback fulfillment with no required parameters -->
        <fulfillment urlTemplate="myfoodapp://browse{?food}">
            <parameter-mapping intentParameter="menuItem.name" urlParameter="food" />
        </fulfillment>
    </action>
    <entity-set entitySetId="CuisineEntitySet">
        <entity url="myfoodapp://browse/italian/pizza" name="@string/pizza" alternateName="@array/pizzaSynonyms" />
        <entity url="myfoodapp://browse/american/hamburger" name="@string/hamburger" alternateName="@array/hamburgerSynonyms" />
        <entity url="myfoodapp://browse/mediterranean" name="@string/mediterranean" alternateName="@array/mediterraneanSynonyms" />
    </entity-set>
</actions>

Transporte

En el siguiente archivo actions.xml, se usa el intent integrado actions.intent.CREATE_TAXI_RESERVATION:

<actions>
    <action intentName="actions.intent.CREATE_TAXI_RESERVATION">
        <fulfillment urlTemplate="https://taxi-actions.firebaseapp.com/order{?dropoffAddress}">
            <!-- Dropoff location as an address -->
            <parameter-mapping
                    intentParameter="taxiReservation.dropoffLocation.name"
                    urlParameter="dropoffAddress"/>
        </fulfillment>
    </action>
</actions>

Otros ejemplos

En el siguiente ejemplo de actions.xml, se usa el intent integrado actions.intent.OPEN_APP_FEATURE:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.OPEN_APP_FEATURE">
        <!-- Each parameter can reference an entity set using a custom ID. -->
        <parameter name="feature">
            <entity-set-reference entitySetId="FeatureEntitySet"/>
        </parameter>

        <fulfillment urlTemplate="myexampleapp://pathto{?appFeature}">
            <parameter-mapping intentParameter="feature" urlParameter="appFeature" />
        </fulfillment>
    </action>

    <entity-set entitySetId="FeatureEntitySet">
        <entity identifier="FEATUREONE" name="first feature" />
        <entity identifier="FEATURETWO" name="second feature" />
    </entity-set>
</actions>