顾名思义就是找不到匹配的意图时,就使用它。
从2.6版本支持全局和上下文相关的fallback
全局的:
[FallBack]
public void GlobalFallback(Context context, Result result)
{
result.SendResponse("I am sorry. Could you please rephrase that for me?");
}
上下文相关的:
public class LogoutDialog : Dialog
{
[Expression("{log out}")]
[Expression("{logout}")]
[Expression("please {log out}")]
[Entity("logout")]
public void Logout(Context context, Result result)
{
context.Add("in-logout", 1);
result.SendResponse("Are you sure?");
}
[Expression("@sys.positive")]
[Context("in-logout")]
public void LogoutYes(Context context, Result result)
{
context.Remove("in-logout");
//Do something here.
}
[Expression("@sys.negative")]
[Context("in-logout")]
public void LogoutNo(Context context, Result result)
{
context.Remove("in-logout");
//Do something here.
}
[FallBack(Context = "in-logout")]
public void LogoutFallback(Context context, Result result)
{
context.Remove("in-logout");
result.SendResponse("Logout canceled.");
}
}
如果使用情况与预期不一致,请注意以下配置
Context handling by fallbacks
By default on every contextual fallback OSCOVA removes the specified context name from context container. To let the context specified in Fallback
stay active for the specified lifespan instead of getting automatically removed you can manually set the value to false
in Bot configuration for the RemoveContextOnFallback
property.
OscovaBot.Configuration.RemoveContextOnFallback = false;