如何从参数中获取参数值?

How do I get parameter value from arguments?

我正在尝试将 google 操作的参数值传递给我的 fulfillment。 但是,我不能只获取参数值。我应该如何才能从参数中获得 newName 字段下的 "Asda"?我是否必须从 conv(如 conv.inputs.arguments[1].rawText)中提取它?如果是这样,那么给参数命名的目的是什么?

请求 JSON 来自 Google 操作:

{
  "user": {
    "userId": "ABwppHEAPgcgb2yFUFURYFEJGg4VdAVcL9UKO9cS7a7rVfAMr9ht67LzgrmMseTvb5mmJjbjj7UV",
    "locale": "en-US",
    "lastSeen": "2018-05-15T01:08:55Z",
    "userStorage": "{\"data\":{}}"
  },
  "conversation": {
    "conversationId": "1526346570079",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "com.example.test.RENAME",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "Talk to GoTestApp to rename Asda"
        }
      ],
      "arguments": [
        {
          "name": "trigger_query",
          "rawText": "rename Asda",
          "textValue": "rename Asda"
        },
        {
          "name": "newName",
          "rawText": "Asda",
          "textValue": "Asda"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "isInSandbox": true,
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        }
      ]
    }
  ]
}

我的履行方代码:

app.intent('com.example.test.RENAME', (conv, input, arg) => {
  console.log(input); //print Talk to GoTestApp to rename Asda
  console.log(arg); //only print "rename Asda"
  console.log(arg[1]) //only print "e"
}

行动包行动:

  "name": "RENAME",
  "intent": {
    "name": "com.example.test.RENAME",
    "parameters": [{
      "name": "newName",
      "type": "SchemaOrg_Text"
    }],
    "trigger": {
      "queryPatterns": [
        "rename $SchemaOrg_Text:newName"
      ]
    }
  },
  "fulfillment": {
    "conversationName": "example"
  }
}

如果您的 'newName' 是在 dialogflow 中定义的参数,那么您可以像这样使用 conv 轻松访问它:

let newN = conv.parameters['newName'];

您似乎想按名称获取 Actions SDK argument,然后您可以使用:

const newName = conv.arguments.get('newName')

这将 return 参数的 rawText

参数检索非常复杂,因此实际上有 4 种方法可以通过名称或列表检索参数。

conv.arguments.get(这是 conv.arguments.parsed.get 的快捷方式)将根据名称 return 推断 属性 排除 namestatus 和 returning textValue 具有最后的优先级。

conv.arguments.status.get 可用于按名称获取 status 参数。

最常见的用例是只有一个参数,因此有一种快捷方式可以通过您提到的意图处理程序检索 单个 参数。

app.intent('intent.name', (conv, input, arg, status) => {
  console.log(arg); // print the parsed single argument like `rawText` if exists
  console.log(status) // print the single argument status if exists
}

要在不进行任何推断解析的情况下按名称获取原始参数,您可以使用 conv.arguments.raw.get。然后您可以自己手动提取 rawTexttextValue 等属性。

对于这些 getter 中的每一个参数,都有相应的方法来按顺序检索数组:conv.arguments.parsed.listconv.arguments.status.listconv.arguments.raw.list.

conv.arguments 对于原始值也是可迭代的,所以如果你想遍历原始参数,只需执行:

for (const arg of conv.arguments) {
  const value = arg.rawText;
}