В моем файле action.xml я могу указать параметры моего намерения, используя теги <entity-set>
. Для каждого <entity>
в документах указано, что я могу указать значение либо для identifier
, либо для url
. В чем разница между identifier
и url
? Зачем мне нужен тег <parameter-mapping>
, если я использую identifier
, но нет, если я использую url
?
Ключевое отличие состоит в том, что значения identifier
экранированы URL. Например:
<intent name = "actions.intent.SOME_INTENT">
<parameter name = "param.name">
<entity-set-reference entitySetId = "identifier_entity_set">
</parameter>
<fulfillment urlTemplate = "https://app.com/{param_value}">
<parameter-mapping intentParameter = "param.name" urlParameter = "param_value" />
</fulfillment>
</intent>
<entity-set entitySetId = "identifier_entity_set">
<entity identifier = "escaped/url/path" name = "hi">
</entity-set>
Если пользователь говорит «привет» для param.name, разрешенный urlTemplate будет: https://app.com/escaped%2Furl%2Fpath.
<intent name = "actions.intent.SOME_INTENT">
<parameter name = "param.name">
<entity-set-reference entitySetId = "url_entity_set">
</parameter>
</intent>
<fulfillment urlTemplate = "{@url}" />
<entity-set entitySetId = "url_entity_set">
<entity url = "https://app.com/not/esacaped/url/path" name = "bye">
</entity-set>
Если пользователь говорит «пока» для param.name, разрешенный urlTemplate будет: https://app.com/not/esacaped/url/путь.
Также обратите внимание, что если у вас есть {@url}
в вашем шаблоне urlTemplate, вы не должны включать для него <parameter-mapping>
; предполагается, что у вас ровно один <entity-set>
со значениями url
.