Watson Assistant V2 API:更改 session 超时

Watson Assistant V2 API: change session timeout

使用 Watson Assistant V2 API 需要先创建一个 session 句柄 (create_session(assistantid)) returns session在对 message(assistantid,sessionid,request) 的单独调用中使用的 ID。 session 维护会话状态,因此相当于 V1 API.

的上下文 ID 参数

不幸的是,默认情况下似乎有 5 分钟 session 超时。响应包含以下 header 属性:

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

任何尝试使用助手 object 的 set_default_headers() 方法或将可选的 header 参数添加到 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"})

没有任何效果。响应的header中参数的值仍然是300.

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

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

Retaining information across dialog turns

只要用户与助手交互,当前会话就会持续,然后对于 Plus 或 Premium 计划最多 60 分钟不活动(对于 Lite 或 Standard 计划为 5 分钟)。

您可以调用 watson 助手进行其他会话并重新发送您的消息。保持你的背景...

或者在 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));
        }