我是Dialogflow的新手,所以我的问题可能太简单了。但是,我不明白在Dialogflow中命名actions
的目的是什么。我在youtube上观看了视频,其中的人在有网络链接时正在使用actions
。例如,他们的源代码中可能有if条件
(例如在python中
if action == 'action_name':
...
) 在这种情况下执行某些特定的事情。
然而,源代码检索的json输出具有以下形式:
{
"id": "123d9e8e-314f-451b-8b15-5e3b55baa980",
"timestamp": "2018-03-16T17:03:05.987Z",
"lang": "en",
"result": {
"source": "agent",
"resolvedQuery": "Hello",
"action": "input.welcome",
"actionIncomplete": false,
"parameters": {},
"contexts": [],
"metadata": {
"intentId": "effe6b2b-3372-4f89-882f-ff937b2b2abb",
"webhookUsed": "false",
"webhookForSlotFillingUsed": "false",
"intentName": "Welcome"
},
"fulfillment": {
"speech": "Hello, how can I help you?",
"messages": [
{
"type": 0,
"speech": "Hello, how can I help you?"
}
]
},
"score": 1
},
"status": {
"code": 200,
"errorType": "success",
"webhookTimedOut": false
},
"sessionId": "491d57cb-0af2-45ac-a658-9e47ec6658ce",
"alternativeResultsFromKnowledgeService": {}
}
由于json数据包含IntentName
,当你可以直接获得json中action
的名称时,为什么要为这个特定的intent
命名一个唯一的intent
? ?
答案 0 :(得分:4)
我倾向于以两种方式来考虑这个问题,具体取决于我正在构建的内容。 (或者有时是这两种方式的组合。)
Intent Name是一个人类可用的名称,而Action更适合webhook使用,更直接映射到一个函数。
由于您可以使用多个Intent使用相同的Action,因此可以方便地将用户可能会说出某些内容的几种不同方式(以及它们可能与它们一起发送的参数)映射到同一方法。虽然您可以通过在代码中列出所有不同的Intent名称来实现,但在Dialogflow端更容易实现。
事实上 - 使用最适合你的东西。我倾向于将我的Intents和我的动作命名为非常类似,但是根据对代码最有意义的内容进行分支(有时还包括可能发送的其他值)。