为什么要使用我的自定义意图混合参数?

时间:2020-10-25 20:55:39

标签: android app-actions

我对应用程序操作有一个自定义的意图,以便说出这些句子:

  1. 嘿,Google,打开MyCookingApp将蛋糕烤10分钟
  2. 嘿,谷歌,打开MyCookingApp烤15分钟的披萨
  3. 嘿,Google,打开MyCookingApp烤披萨(此处用户未指定任何时间)

为此,我使用以下自定义意图:

<action intentName="custom.actions.intent.BAKE_SOMETHING" queryPatterns="@array/ExampleQueries">
    <!-- Define parameters -->
    <parameter name="text1" type="https://schema.org/Text" />
    <parameter name="number1" type="https://schema.org/Number" />

    <!-- Define fulfillment -->
    <fulfillment urlTemplate="https://my.app.com/{?item_name,number_of_minutes}">
        <parameter-mapping intentParameter="text1" urlParameter="item_name" />
        <parameter-mapping intentParameter="number1" urlParameter="number_of_minutes" />
    </fulfillment>
</action>

这是ExampleQueries:

<string-array name="ExampleQueries">
    <item>bake a $text1</item>
    <item>bake a $text1 for $number1 minutes</item>
</string-array>

如果我只是说“打开MyCookingApp烤披萨”,那么我会得到item_name =“ Pizza”和number_of_minutes = null,这是正确

但是,如果我说“打开MyCookingApp烘烤比萨饼15分钟”,那么我会得到item_name =“比萨饼15分钟”,并且number_of_minutes = 15,这是错误!为什么我将“ Pizza for 15 minutes”作为第一个参数?

我尝试了2种不同的自定义意图。一个仅用于项目“ bake a $ text1”,另一个用于项目“ bake a $ text1 for $ number1分钟”,但我得到的结果相同。助手似乎采取了“最简单”的方式。我的意思是,如果提供了“ bake a $ text1”,那么“ bake a”之后的所有内容都将被视为字符串。但是在这种情况下,为什么我要获得number_of_minutes的真实值?应该为空,对吧?

任何身体都可以在这里显示一些光线。基本上,我需要问用户第一个字符串值,然后是一个可选数字。

0 个答案:

没有答案