如何在Wit.ai bot中的会话结束时删除context / session_id

时间:2017-04-11 18:07:50

标签: python bots wit.ai

我一直在与Wit.ai有问题,我的Python机器人会在结束对话后保留上下文。这种行为在Facebook客户端和pywit交互式客户端中是相同的。

对话从一个简单的'嗨'如果用户点击“谢谢”,“再见”,则可以在不同分支内的不同点结束。成功查询后快速回复。

如果会话开始于'嗨'再次,会话状态从之前保存,从而导致错误的响应。在用户说再见后删除上下文的最佳方法是什么?

我尝试创建一个再见函数,该函数在机器人发送了最终消息之后触发,但它没有工作,例如。

def goodbye(request):
    del request['context']    # or request.clear()
    return request

文档(https://wit.ai/docs/http/20160526#post--converse-link)建议您清除session_id并生成一个新的但不提供如何提示。

2 个答案:

答案 0 :(得分:0)

您可以使用uuid生成新的会话ID。会话ID必须是唯一的文本,甚至可以是系统日期。我建议你使用uuid

检查here如何生成它。

答案 1 :(得分:0)

我遇到了同样的问题,我通过以下方式解决了这个问题。

我首先创建了一个简单的def end_session(request): return {'end_session': True} 操作,在每个会话路径的末尾调用:

if 'end_session' in context:
    context = {}
    session_hash = uuid.uuid1().hex

然后我从run_actions返回后插入以下代码:

export class MyObject{
    date: Date;
}

let myDate= this.db.list('/my/path');//retrieving
this.db.list('/my/path').push(newItem)//inserting

如您所见,除了清除上下文之外,我还会重新创建新的会话ID(根据Swapnesh Khare的建议)。

我不确定这是最好的解决方案,但它对我有用。