Syn Bot /OSCOVA 上下文(8)
下文用来表示用户Session的会话状态。用Context
特性标记的Intent将仅在指定的上下文名称与其匹配时才被调用,对从会话上面消除歧义很有用的。
上下文由名称和生存周期组成。生存周期表示上下文存活的请求数量。默认是5个请求。
另外,上下文也有自身的生存时间,默认一个上下文将保持活动10分钟,当生存周期或生存时间任一到期,其将被从用户session中移除。
用法举例,你的应用程序需要让用户确认shutdown指令:
[Expression("shutdown")]
public void Shutdown(Context context, Result result)
{
//Add a new "shutdown_confirmation" context.
context.Add("shutdown_confirmation", 2);
result.SendResponse("Are you sure?");
//Do something.
}
[Expression("{yes}")]
[Entity(Sys.Positive)]
[Context("shutdown_confirmation")]
public void ShutdownConfirmed(Context context, Result result)
{
//Do something.
}
[Expression("{no}")]
[Entity(Sys.Negative)]
[Context("shutdown_confirmation")]
public void ShutdownCanceled(Context context, Result result)
{
//Do something.
}
这里指定了2个用户请求作为傻姑娘下文的生存周期,周期到时会自动被删除,你也可以手动删除。
context.Remove("shutdown_confirmation");
添加的上下文在存续期间可以在过程中携带多个唯一参数以携带额外信息。
[Expression("turn on the air conditioner")]
public void TurnOnAC(Context context, Result result)
{
context.Add("air-con");
var acContext = context["air-con"];
acContext.Parameters.Add("temp", "medium");
}
或者
[Expression("{turn on} the air conditioner")]
[Entity("on")]
public void TurnOnAC(Context context, Result result)
{
var newConItem = context.Create("air-con");
newConItem.Parameters.Add("temp", "medium");
}
有条件的存在,添加上下文时可以使用条件。
[Expression("Play @movie-name")]
public void PlayMovie(Context context, Result result)
{
//Keep context active until movie is playing.
context.Add("movie-playback", () =>
{
return MoviePlayer.IsPlaying;
});
//Do something.
}