您如何确认 bixby 中操作的默认输入?

How do you confirm a default input for an action in bixby?

我想收集用于操作的地址输入 "evaluate"。理想情况下,行为应该是这样的:

1) Evaluate is initiated
2) a default address is pulled from user profile,
user is asked if they would like to use this address
3) if no default address or user does not want to use it, 
prompt user for an address
4) Evaluate action runs with either default address or custom input address

我想做的是添加 2 个可能 return 一个 geo.Address 对象的构造函数操作,ReturnSelfAddress 和 GetCustomAddress。 ReturnSelfAddress 将从自库胶囊中收集地址,GetCustomAddress 将提示用户输入地址作为 geo.UnstructuredAddress 并将其转换为常规 geo.Address.

评估操作的输入是这样的:

input (address) {
      type (geo.Address)
      min (Required)
      max (One)
      default-init {
        intent {
          goal: ReturnSelfAddress
        }
      }
    }

然后我会有一个确认视图,确认 ReturnSelfAddress 让用户 select 如果需要的话。如果 ReturnSelfAddress 失败,则 Evaluate 仍会查找 geo.Address 输入。我会有一个匹配 geo.Address 概念的输入视图,并提示用户输入 geo.UnstructuredAddress。像这样(不确定这是否 100% 正确):

input-view {
  match: geo.Address(this)
  message ("What is your street address?")
  render{
    form {
      elements {
        text-input {
          id (address)
          label("Address")
          required (true)
          type (geo.UnstructuredAddress)
        }
      }
      on-submit {
        goal: GetCustomAddress
        value: viv.core.FormElement(address)
      }
    }
  }
}

或者,如果用户拒绝默认设置,那么我将有一个 GetCustomAddress 的中止目标,它会提示用户:

on-abort {
            intent {
            goal: GetCustomAddress
            }
        }

这似乎非常复杂,我想知道是否有我可能缺少的功能可以帮助我获得所需的行为。所以我想我有 2 个问题:

1) 在我深入这个兔子洞之前,这个想法行得通吗?

2) 是否有更好的方法来获得 "try for default and if none or user rejects, prompt for input" 所需的行为?

您可以尝试确认视图,但这里有一种更简单的方法,您可能会觉得有用。

  1. default-initprompt-behavior(AlwaysElicitation)[=31=定义动作模型中的输入]
    input (email) {
      type (TypeTextEmail)
      min (Required) max (One)
      default-init {
        intent {
          goal: FetchEmailFromName
          value: $expr(name)
        }
      }
      prompt-behavior (AlwaysElicitation)
    }
  1. 如果用户需要,定义输入视图以覆盖默认值
input-view {
  match: TypeTextEmail(this)
  render {
    form {
      elements {
        text-input {
          id (this)
          type (TypeTextEmail)
          label ("Email:")
          max-length (50)
          value ("#{value(this)}")
        }
      }
      on-submit {
        goal: TypeTextEmail
        value: viv.core.FormElement(this)
      }
    }
  }
}
  1. 您可以下载并试用example.inputview

  2. 中的训练示例
  3. 确认查看请参考Github

  4. 上的example.shirt