如何将用户上下文详细信息从机器人控制器传递到 FormDialog

用户7138342

信息机器人

  • SDK平台:.NET
  • 有源渠道:直线
  • 部署环境:Azure 机器人服务

问题

如何将用户上下文详细信息从机器人控制器传递到 FormDialog?

代码示例

public virtual async Task < HttpResponseMessage > Post([FromBody] Activity activity) {
 if (activity != null && activity.GetActivityType() == ActivityTypes.Message) {
  await Conversation.SendAsync(activity, () => {
   return Chain.From(() => FormDialog.FromForm(RequestOrder.BuildEnquiryForm));
  });
 } else {
  HandleSystemMessage(activity);
 }
 return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
}
public static IForm < RequestOrder > BuildEnquiryForm() {
 return new FormBuilder < RequestOrder > ()
  .Message("Hello {***Pass current user name?????****}Welcome to request bot!")
  .Field(nameof(IsTermsAgreed))
  .Field(nameof(ServiceRequired))
  .AddRemainingFields()
  .OnCompletion(ProcessParkingPermitRequest)
  .Message("Thank you, I have submitted your request.")
  .Build();
}
安妮塔·乔治

Fei Han 的回答是正确的,但使用静态变量可能会导致一些意外错误,因为所有实例都共享相同的值。更好的方法是使用表单的状态。

请求订单来自

在您的 RequestOrder 类中,您需要添加一个新的成员变量 username。

public class RequestOrder
{
     public string username;
     /* Rest of your member variables  */
}

.Message 方法允许您访问表单的状态。您可以从表单的状态中获取用户名,如下所示:

 public static IForm < RequestOrder > BuildForm() 
 {
     return new FormBuilder < RequestOrder > ()
      .Message(async (state) => {
          return new PromptAttribute($"Hi {state.username}, Welcome to request bot! ");
       })
      .Field(nameof(IsTermsAgreed))
      .Field(nameof(ServiceRequired))
      .AddRemainingFields()
      .OnCompletion(ProcessParkingPermitRequest)
      .Message("Thank you, I have submitted your request.")
      .Build();
 }

根对话框

在您的根对话框中,在调用 BuildForm 之前,您需要创建 RequestOrder 类的新实例并将 username 初始化为当前用户的名称。然后使用选项 FormOptions.PromptInStart 将您的表单传递给 BuildForm。

[Serializable]
public class RootDialog : IDialog<object>
{


    public Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);

        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    { 
       var form = new RequestOrder()
       {
           username = context.Activity.From.Id
       };

       var requestOrderform = new FormDialog<RequestOrder>(form, RequestOrder.BuildForm, FormOptions.PromptInStart);
       context.Call<RequestOrder>(requestOrderform,  SampleFormSubmitted);
    }

    private async Task SampleFormSubmitted(IDialogContext context, IAwaitable<SampleForm> result)
    {
        try
        {
                var query = await result;
                context.Done(true);
        } 
        catch (FormCanceledException<SampleForm> e)
        {
                string reply;
                if (e.InnerException == null)
                {
                    reply = $"You quit. Maybe you can fill some other time.";
                }
                else
                {
                    reply = $"Something went wrong. Please try again.";
                }
                context.Done(true);
                await context.PostAsync(reply);
        }
    }
}

这是你得到的:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调用FormDialog定义次数

来自分类Dev

如何将详细信息模型从控制器传递到视图

来自分类Dev

如何将详细信息模型从控制器传递到视图

来自分类Dev

如何将Mapkit坐标从视图控制器(mapView)传递到详细信息控制器(mapView)

来自分类Dev

在 Microsoft Bot Framework 的 sdk v4 中使用 FormDialog

来自分类Dev

如何将用户对象从一个控制器传递到不同的 JavaFX 控制器?

来自分类Dev

如何将用户和机器人活动发布到对话中

来自分类Dev

如何将Owin上下文传递给正在注入Api控制器的Repo

来自分类Dev

用户信息如何从UnitTest传递到控制器?

来自分类Dev

OpenCart如何将存储详细信息获取到控制器

来自分类Dev

如何将SFSafariViewController设置为UISplitViewController的详细信息控制器?

来自分类Dev

如何将字幕从uitableview推送到详细信息视图控制器

来自分类Dev

将数据从视图控制器传递到第一个详细信息控制器,然后传递到第二个详细信息控制器

来自分类Dev

在ApplicationTelemetry上下文中的Application Insights设置用户未显示在事件详细信息中

来自分类Dev

LDAP 成功登录后,如何将用户详细信息存储到数据库中?

来自分类Dev

如何将用户控件的属性绑定到MainViewModel并将其数据上下文绑定到其自己的ViewModel?

来自分类Dev

如何从上下文菜单中右键单击获取项目的ID或详细信息?

来自分类Dev

如何查看上下文的完整详细信息(如令牌)

来自分类Dev

如何从表视图控制器转到详细信息控制器然后返回

来自分类Dev

如何从表视图控制器转到详细信息控制器然后返回

来自分类Dev

如何将用户输入的详细信息发送到iOS中的电子邮件?

来自分类Dev

如何创建可在应用程序范围内访问的上下文对象以在数据访问中存储当前用户详细信息?

来自分类Dev

如何从控制器外部访问Rails控制器视图上下文?

来自分类Dev

将用户控件绑定到数据上下文的实例?

来自分类Dev

如何跨动作过滤器和控制器传递工作单元/实体上下文

来自分类Dev

如何将用户名设置为安全上下文

来自分类Dev

如何将PHP用户详细信息(会话)解析到Node.js服务器?

来自分类Dev

如何附加Sitecore上下文以使控制器动作mapple到路由robots.txt?

来自分类Dev

库卡机器人的速度控制器

Related 相关文章

  1. 1

    调用FormDialog定义次数

  2. 2

    如何将详细信息模型从控制器传递到视图

  3. 3

    如何将详细信息模型从控制器传递到视图

  4. 4

    如何将Mapkit坐标从视图控制器(mapView)传递到详细信息控制器(mapView)

  5. 5

    在 Microsoft Bot Framework 的 sdk v4 中使用 FormDialog

  6. 6

    如何将用户对象从一个控制器传递到不同的 JavaFX 控制器?

  7. 7

    如何将用户和机器人活动发布到对话中

  8. 8

    如何将Owin上下文传递给正在注入Api控制器的Repo

  9. 9

    用户信息如何从UnitTest传递到控制器?

  10. 10

    OpenCart如何将存储详细信息获取到控制器

  11. 11

    如何将SFSafariViewController设置为UISplitViewController的详细信息控制器?

  12. 12

    如何将字幕从uitableview推送到详细信息视图控制器

  13. 13

    将数据从视图控制器传递到第一个详细信息控制器,然后传递到第二个详细信息控制器

  14. 14

    在ApplicationTelemetry上下文中的Application Insights设置用户未显示在事件详细信息中

  15. 15

    LDAP 成功登录后,如何将用户详细信息存储到数据库中?

  16. 16

    如何将用户控件的属性绑定到MainViewModel并将其数据上下文绑定到其自己的ViewModel?

  17. 17

    如何从上下文菜单中右键单击获取项目的ID或详细信息?

  18. 18

    如何查看上下文的完整详细信息(如令牌)

  19. 19

    如何从表视图控制器转到详细信息控制器然后返回

  20. 20

    如何从表视图控制器转到详细信息控制器然后返回

  21. 21

    如何将用户输入的详细信息发送到iOS中的电子邮件?

  22. 22

    如何创建可在应用程序范围内访问的上下文对象以在数据访问中存储当前用户详细信息?

  23. 23

    如何从控制器外部访问Rails控制器视图上下文?

  24. 24

    将用户控件绑定到数据上下文的实例?

  25. 25

    如何跨动作过滤器和控制器传递工作单元/实体上下文

  26. 26

    如何将用户名设置为安全上下文

  27. 27

    如何将PHP用户详细信息(会话)解析到Node.js服务器?

  28. 28

    如何附加Sitecore上下文以使控制器动作mapple到路由robots.txt?

  29. 29

    库卡机器人的速度控制器

热门标签

归档