上下文的添加/更新参数

时间:2019-09-17 23:29:14

标签: dialogflow dialogflow-fulfillment

在Dialogflow实现中,我试图为上下文添加或更新参数。

let currentContext = agent.context.get('setupcall-followup');
console.log(agent.context.get('setupcall-followup').parameters); //1
currentContext.parameters.date = '2019-09-18T12:00:00-04:00';
currentContext.parameters.time = '2019-09-17T13:00:00-04:00';
currentContext.parameters['Test'] = 'Test';
console.log(agent.context.get('setupcall-followup').parameters); //2
agent.context.set(currentContext); //Seems to not be needed, since it is by reference
console.log(agent.context.get('setupcall-followup').parameters); //3, same as #2

通过#2和#3,日志显示该日志已更新。 但是在诊断信息>原始API响应中,outputContext信息仍然是修改之前的原始inputContext。

我能做什么:

  • 使用自己的参数添加上下文。

我不能做的事

  • 获取上下文并更改参数

2 个答案:

答案 0 :(得分:0)

我认为这可能会有所帮助。

const parameters = {'param1':value, 'param2': value};
agent.context.set(context, 5, parameters); //here "5" is lifespan.

告诉我它是否有效。

答案 1 :(得分:0)

这是我终于可以使用它的唯一方法。

每次使用自定义上下文并完全重新创建它。 以下FYI代码要求_.merge的破折号

function getSessionData() {
    if(agent.context.get('session_details')) {
        return agent.context.get('session_details').parameters.sessionDetails;
    } else {
        return;
    }
}

function setSessionData(data) {
    if(agent.context.get('session_details')) {
        let session = agent.context.get('session_details').parameters.sessionDetails;  //Extract the data from the existing "session_details" context
        _.merge(session, data);   //Update our data
        let sessionContext = {    //Define the complete context object again
            name: "session_details",
            lifespan: 5,
            parameters: {
                sessionDetails: session
            }
        }
        agent.context.set(sessionContext);
    } else {
        let sessionContext = {    //Define the complete context object again
            name: "session_details",
            lifespan: 5,
            parameters: {
                sessionDetails: data
            }
        }
        agent.context.set(sessionContext);
    }
}