Una vez que identifiques las funciones de la app y el intent integrado (BII) que quieras implementar, crea en tu app para Android un recurso 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> |
|
<parameter> |
<action> |
name |
<entity-set-reference> |
<parameter> |
|
<fulfillment> |
<action> |
|
<parameter-mapping> |
<fulfillment> |
|
<entity-set> |
<actions> |
entitySetId |
<entity> |
<entity-set> |
|
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 BIIs 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 cadena, 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 unentitySetId
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>
para que todos los parámetros obligatorios estén disponibles para 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
.
- Especifica la actividad sin abreviaturas de clase con el nombre del paquete de tu app, seguido de una barra diagonal (
Estos son algunos ejemplos de valores de plantilla de URL:
Plantilla | Valores | Valor expandido |
---|---|---|
https://example.com/test{?someValue,anotherValue} |
"someValue": "123"
|
https://example.com/test?someValue=123&anotherValue=456 |
https://example.com/test?utm_campaign=appactions{&someValue,anotherValue} |
"someValue": "123"
|
https://example.com/test?utm_campaign=appactions&someValue=123&anotherValue=456 |
https://example.com/test?utm_campaign=appactions{#someValue} |
"someValue": "123" |
https://example.com/test?utm_campaign=appactions#someValue=123 |
myapp://example/{someValue} |
"someValue": "123" |
myapp://example/123 |
intent://example#Intent;scheme=my-scheme{;S.extra1,S.extra2};end |
"S.extra1": "123"
|
intent://example#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 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 de 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 unurlParameter
correspondiente en<parameter-mapping>
. Por ejemplo, si uri_template eshttp://spysatellite.com/show{?lat,long}
, debe haber claves en<parameter-mapping>
para los parámetroslat
ylong
.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ámetrotaxiReservation
de tiposchema.org/TaxiReservation
, puedes usartaxiReservation.pickupLocation.geo.latitude
para hacer referencia al valor de latitud.Si proporcionas un conjunto de entidades para este parámetro,
intentParameter
debe coincidir exactamente 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 corresponde a la referencia del objeto del parámetro (por ejemplo,
taxiReservation
). Si el parámetro del intent tiene un tipo primitivo, el valor es el propio nombre del parámetro.required
: Indica que se requiere un determinadointentParameter
para 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 laintentParameter
especificada.entityMatchRequired
: Indica que debe haber una coincidencia de inventario para elintentParameter
dado (opcional). El valor predeterminado esfalse
.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>
enactions.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 cadena para los campos url
, identifier
y sameAs
se pueden codificar o se puede hacer referencia a ellos mediante los recursos de cadenas del APK. Cuando proporciones sinónimos, usa valores de cadenas para el campo alternateName
que hagan referencia a los recursos de arrays de cadenas del APK.
Atributos:
name
: Es el nombre obligatorio para la entidad, a menos que especifiques un camposameAs
. Debe ser único en los campos de entidadname
yalternateName
para la etiqueta<entity-set>
dada (por ejemplo, "dentífrico").alternateName
: Son nombres alternativos para la entidad (opcional). Debes especificar un camponame
antes de especificar un campoalternateName
. Debe ser único en los campos de entidadname
yalternateName
para la etiqueta<entity-set>
dada. Se seleccionará la entidad si la consulta del usuario coincide con alguna de estas cadenas.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 deschema.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 de 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 atributourlTemplate
de<fulfillment>
de las siguientes maneras:Proporciona valores
url
en el inventario intercalado y omiteurlTemplate
en<fulfillment>
.Proporciona valores
url
en el inventario intercalado y úsalos en el valorurlTemplate
(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 permite que tu app controle solo los identificadores o las URLs de las invocaciones de Acciones en apps, en lugar de reconocer cadenas o valores de enumeración de Google, lo que simplifica el desarrollo.
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
:
En la etiqueta
<action>
(en la que deseas usar el inventario web), agrega una etiqueta<fulfillment>
y establece su atributourlTemplate
en{@url}
.En la misma etiqueta
<action>
, agrega una etiqueta<parameter>
y establece su atributoname
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 paraORDER_MENU_ITEM
, debes vincular las páginas del menú amenuItem.name
y las páginas de ubicaciones del restaurante amenuItem.inMenuSection.inMenu.forRestaurant.name
.En la nueva etiqueta
<parameter>
, agrega una etiqueta<entity-set-reference>
y establece su atributourlFilter
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 ({}
).
URLs de App Links
Si usas una URL de App Links, la urlTemplate
apunta a una URL HTTP normal que puede activar tu Activity
. 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 activó la Acción en la app cuando pidió un taxi a San Francisco, el URI final activado (después de la sustitución del parámetro) es el siguiente:
https://mydomain.com/order?action=com.example.myapp.MY_ACTION&dropoff=San+Francisco
URLs 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 adicional String
(como se define en Intent.toUri()
) y está encerrado por llaves para denotar una sustitución mediante un parámetro.
El punto y coma adicional que antecede es necesario para separar la acción de intent del intent adicional (y solo se incluye si se configura el parámetro).
En el siguiente ejemplo, el valor urlParameter
se establece en S.dropoff
; puedes ver dónde aparece en la URL si buscas este valor en urlTemplate
.
Por ejemplo, si un usuario activa una Acción en la app cuando solicita un viaje a San Francisco, el URI final activado (después de la sustitución del parámetro) es 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 <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.
Esto se muestra en el siguiente 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:
<fulfillment urlTemplate="{@url}?referrer=actions_on_google{&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
oalternateName
coincide con la consulta del usuario.
Ejemplos
En esta sección, se muestran ejemplos de cómo 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>