actions.xml应用程序操作URL模板中的{@url}有什么用途?

时间:2019-05-08 21:54:38

标签: android actions-on-google app-actions

在我的actions.xml文件中,我可以使用<entity-set>标签来提供意图参数的清单。对于每个<entity>,文档指示我可以为identifierurl指定一个值。 identifierurl有什么区别?如果我使用<parameter-mapping>,为什么需要一个identifier标签,但如果我使用url,为什么不需要标签?

1 个答案:

答案 0 :(得分:3)

关键区别在于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说“ hi”,则解析的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/path

此外,请注意,如果urlTemplate中包含{@url},则不应在其中包含<parameter-mapping>;假设您正好有一个<entity-set>url