Как загрузить данные пользователя из БД в память, чтобы персонализировать моего бота - PullRequest
0 голосов
/ 27 сентября 2018

Мой бот находится в веб-приложении, которое требует аутентификации пользователя с использованием OAuth.Когда пользователь начинает сеанс чата, я хотел бы загрузить данные пользователя в память для персонализации диалогов.Ниже приведен текущий способ, которым я делаю это, но хотел бы получить совет от любого, кто имеет лучший метод.

private async Task OnMessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
    var name = GetUserDetails(result);

    var message = await result;

    string id = context.Activity.Id;


    string promptText = $"Hi {name}, before we start which product do you want to chat about today?";

    PromptDialog.Choice(
        context: context,
          resume: ChoiceReceivedAsync,
          options: (IEnumerable<SoftwareOptions>)Enum.GetValues(typeof(SoftwareOptions)),
          prompt: promptText,
          retry: "Sorry please select one of the options I listed thanks.",
          promptStyle: PromptStyle.Auto
          );
}

Идея заключается в том, что метод GetUserDetails загружает такие детали, как имя пользователя, имя, companyId и т. Д. Язатем может вызвать детали пользователя из любого диалога по мере необходимости, когда мой бот ответит, чтобы персонализировать разговор.

private object GetUserDetails(IAwaitable<IMessageActivity> result)
{
    var db = new LicensingDbContext();

    string id = "John.Smith";
    var user = (from u in db.AspNetUsers
            where (u.UserName == id)
            select new UserDetails
            {
                FirstName = u.FirstName
            }).ToList();

    return user.First();
}

1 Ответ

0 голосов
/ 04 октября 2018
private async Task OnMessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> activity)
{ 
    var userProfile = await LoadUserData(context);

    string promptText = $"Hi {userProfile.FirstName}, before we start what product do you want to chat about today?";

    PromptDialog.Choice(
        context: context,
        resume: ChoiceReceivedAsync,
        options: (IEnumerable<SoftwareOptions>) Enum.GetValues(typeof(SoftwareOptions)),
        prompt: promptText,
        retry: "Sorry please select one of the options I listed thanks.",
        promptStyle: PromptStyle.Auto
    );
}

public async Task<UserProfile> LoadUserData(IDialogContext context)
{
    LicenseDbContext db = new LicenseDbContext();

    var userProfile = (from u in db.AspNetUsers
        join c in db.Companies on u.CompanyID equals c.CompanyID
        where u.UserName == "john.smith"
        select new UserProfile()
        {
            UserName = u.UserName,
            FirstName = u.FirstName,
            CompanyId = u.CompanyID,
            ParentCompany = c.ParentCompanyID,
            }).Single();
    return userProfile;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...