Watson Assistant V2 API:更改会话超时

时间:2019-01-25 10:48:06

标签: ibm-watson watson-conversation

使用Watson Assistant V2 API,必须首先创建一个会话句柄(create_session(assistantid)),该句柄将返回会话ID,以用于对消息的单独调用(assistantid,sessionid,request)。会话保持会话状态,因此等效于V1 API的context id参数。

不幸的是,默认情况下似乎有5分钟的会话超时。响应包括以下标头属性:

{...,"x-watson-session-timeout": [
"x-watson-session-timeout",
                "session_timeout=300"
            ],...}

任何尝试通过使用辅助对象的set_default_headers()方法或将可选的标头参数添加到create_session()调用来更改此参数似乎都无效。由于我没有找到有关如何正确更新此参数的任何文档,因此我尝试了几种替代方法:

1)self.assistant.set_default_headers({'x-watson-session-timeout':"['x-watson-session-timeout','session_timeout=3600']"})

2)self.assistant.set_default_headers({'x-watson-session-timeout':"'x-watson-session-timeout','session_timeout=3600'"})

3)self.assistant.set_default_headers({'x-watson-session-timeout':"session_timeout=3600"})

4)self.assistant.set_default_headers({'x-watson-session-timeout':"3600"})

5)self.assistant.set_default_headers({'session_timeout':"3600"})

没有什么有效的。响应标题中的参数值仍为300。

我是否使用不正确的字典对来更新参数?使用V2 API是否还有另一种方法可以将对话状态维持超过5分钟?根本无法更改吗?

2 个答案:

答案 0 :(得分:2)

会话超时的值不受调用方的控制,实际上与您使用的助手计划有关。对于免费和标准而言,超时的确是5分钟。对于其他计划,超时时间更大。

请参见Retaining information across dialog turns

当前会话的持续时间与用户与助手互动的时间一样长,然后Plus或Premium计划最多不活动60分钟(Lite或Standard计划不超过5分钟)。

答案 1 :(得分:0)

您可以致电Watson Assistant进行其他会话,然后重新发送消息。保持上下文...

或者只是通过正确的计划在IBM Cloud的助手设置中增加超时限制。

    function  createSession(end) {
            assistant.createSession({
            assistantId: watsonID }).then(res => {
              sessionId=res.result.session_id;

              if(end){
               console.log("\x1b[32m%s\x1b[0m","new session "+sessionId);
              }else{
                console.log("session id :"+ sessionId);
                console.log("http://"+host+":"+port);
              }  
            });
            }
            createSession();

     function callWatsonClient(payload,res) {
            assistant.message(payload,function(err, data) {
                   if(data == null){         
                        createSession(true);
//this not keep the context
                        var data ={result:{context:"",output:{generic:[{text:"session expirée, renvoyez le message"}]}}};       
          res.send(data);

         }else{
            //normal job      
              console.log("\x1b[33m%s\x1b[0m" ,JSON.stringify(data.result.output));
        }