Dialogflow:在 webhook 中设置上下文不会将对话重定向到另一个意图
Dialogflow: set context in webhook doesnt redirect conversation to another intent
$update_response = file_get_contents("php://input");
$update = json_decode($update_response, true);
$reply = 'Message';
$context = array();
$context[0]['lifespanCount'] = 1;
$context[0]['name'] = $update['session'].'/contexts/newUser';
echo json_encode((array(
'fulfillmentText' => $reply,
'outputContexts' => $context,
'source' => 'Agent')));
我在我的 php webhook 中使用上面显示的代码来设置初始对话后的上下文。
这就是我的 fullfillment 响应在 Dialogflow 控制台中解析后的样子
{
"fulfillmentText": "Message",
"outputContexts": [
{
"lifespanCount": 1,
"name": "projects/agent-duvwmd/agent/sessions/8b044ab6-cc42-f663-18a3-409e2983c3f1/contexts/newUser"
}
],
"source": "Agent"
}
我的代理成功发送了回复,我可以看到上下文 newUser 的名称在 dialogflow 控制台上正确显示,但是它不会被接受为我唯一的其他意图的上下文输入。
即使我将其 输入上下文设置为 newUser 并且参数实体设置为 sys.any,它也不会将对话引导至我的其他意图,所以它基本上应该接受任何输入。我只有两个意图,没有更多的上下文,所以我的上下文根本不起作用。我将 lifevisioncount 设置为 1,大约 5,但它似乎根本不起作用。
这是一个很小的项目,使用 Google Dialogflow 库会比较麻烦,所以我不会使用它。
是什么导致了这个问题?
编辑:
这是原始 API 响应在下一个意图中的样子(在设置 newUser 上下文之后)
{
"responseId": "e6a89789-bc1d-4f15-94e4-86404060c4b9-83ffff32",
"queryResult": {
"queryText": "Something",
"parameters": {},
"languageCode": "es"
}
}
没有上下文或任何东西。这是我的上下文在 intent2
中的样子
我在第二个意图上禁用了 webhook
我的第二个意图设置了两个输入上下文,但我试图只设置一个输出上下文。我认为我可以仅使用一个输入上下文重定向到另一个意图,但显然事实并非如此。
我不确定我是否正确理解了你的问题,但通过在 webhook 中设置上下文不一定能保证它会重定向到另一个意图,除非你的代码中另有说明。我在 .net 核心中编写了我的 webhooks,但也许这个概念会对你有所帮助。试试这个:
转到您的目标意图并在事件文本框中创建和事件(示例:intent_event)。如果需要,创建输入上下文和输出上下文。然后在设置上下文后的代码中使用事件名称 (intent_event) 执行 FollowupEventInput。这会将流重定向到基于 eventnae 的新意图,并且它将验证上下文以确定它是否是正确的意图。
我就是这样做的。
希望能给大家一些指导
$update_response = file_get_contents("php://input");
$update = json_decode($update_response, true);
$reply = 'Message';
$context = array();
$context[0]['lifespanCount'] = 1;
$context[0]['name'] = $update['session'].'/contexts/newUser';
echo json_encode((array(
'fulfillmentText' => $reply,
'outputContexts' => $context,
'source' => 'Agent')));
我在我的 php webhook 中使用上面显示的代码来设置初始对话后的上下文。
这就是我的 fullfillment 响应在 Dialogflow 控制台中解析后的样子
{
"fulfillmentText": "Message",
"outputContexts": [
{
"lifespanCount": 1,
"name": "projects/agent-duvwmd/agent/sessions/8b044ab6-cc42-f663-18a3-409e2983c3f1/contexts/newUser"
}
],
"source": "Agent"
}
我的代理成功发送了回复,我可以看到上下文 newUser 的名称在 dialogflow 控制台上正确显示,但是它不会被接受为我唯一的其他意图的上下文输入。
即使我将其 输入上下文设置为 newUser 并且参数实体设置为 sys.any,它也不会将对话引导至我的其他意图,所以它基本上应该接受任何输入。我只有两个意图,没有更多的上下文,所以我的上下文根本不起作用。我将 lifevisioncount 设置为 1,大约 5,但它似乎根本不起作用。
这是一个很小的项目,使用 Google Dialogflow 库会比较麻烦,所以我不会使用它。
是什么导致了这个问题?
编辑: 这是原始 API 响应在下一个意图中的样子(在设置 newUser 上下文之后)
{
"responseId": "e6a89789-bc1d-4f15-94e4-86404060c4b9-83ffff32",
"queryResult": {
"queryText": "Something",
"parameters": {},
"languageCode": "es"
}
}
没有上下文或任何东西。这是我的上下文在 intent2
中的样子我在第二个意图上禁用了 webhook
我的第二个意图设置了两个输入上下文,但我试图只设置一个输出上下文。我认为我可以仅使用一个输入上下文重定向到另一个意图,但显然事实并非如此。
我不确定我是否正确理解了你的问题,但通过在 webhook 中设置上下文不一定能保证它会重定向到另一个意图,除非你的代码中另有说明。我在 .net 核心中编写了我的 webhooks,但也许这个概念会对你有所帮助。试试这个:
转到您的目标意图并在事件文本框中创建和事件(示例:intent_event)。如果需要,创建输入上下文和输出上下文。然后在设置上下文后的代码中使用事件名称 (intent_event) 执行 FollowupEventInput。这会将流重定向到基于 eventnae 的新意图,并且它将验证上下文以确定它是否是正确的意图。
我就是这样做的。
希望能给大家一些指导