【问题标题】:How to share a context between bots?如何在机器人之间共享上下文?
【发布时间】:2021-07-11 05:13:40
【问题描述】:

我正在使用 Microsoft 机器人框架来实现简单的机器人到机器人通信场景。就我而言,我有一个大师机器人和一个技能机器人。我已经完成了他们的整合,这样master dot就可以将对话传递给技能并且技能可以继续。 我需要在机器人之间共享一些状态。所以,我创建了一个状态属性访问器:

    public static readonly string UserContextPropertyName = $"{typeof(RootBot<T>).FullName}.UserContextProperty";

    private readonly IStatePropertyAccessor<PatientResponce> _userContext;

并在OnTurnAsync 方法中使用它

    await _userContext.SetAsync(turnContext, patientResponce);

一切都好,除了这个新属性在技能的OnMessageActivityAsync(ITurnContext&lt;IMessageActivity&gt; turnContext, CancellationToken cancellationToken) turnContext 中不可用

为什么它不持久/传递?

附:在通过调用将对话传递给技能之前,我确实会保存状态:

  await _conversationState.SaveChangesAsync(turnContext, force: true, cancellationToken: cancellationToken);

P.S.S 我也用过

  var userState = new UserState(new BlobsStorage("..."))
  services.AddSingleton(userState);

Startup.cs作为存储模型

【问题讨论】:

    标签: botframework state-management


    【解决方案1】:

    好的,有一个解决方法,但对我来说没问题 - 也许有人觉得它有用:有一个属性

    turnContext.Activity.Value
    

    似乎是为附件设计的;它没有定义类型 - 它只是一个对象。

    所以我所做的只是将我的上下文作为序列化的 json 字符串存储在那里,然后在另一端进行处理。我认为这是一个次优的解决方案 - 所以如果你这样做,请注意装箱-取消还原开销

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 2022-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多