Как я могу сохранить имя пользователя из события обратного канала в переменной? - PullRequest
0 голосов
/ 12 октября 2019

Я создал чат-бот SharePoint, используя v4 Bot Framework и NodeJS, и у меня возникла небольшая проблема, когда я пытаюсь сохранить имя пользователя для события, которое отправляется в бот изКлиент использует обратный канал.

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

Цель этого - сохранить имя пользователя в переменной, поэтому, когда пользователь заполняет форму вбот, имя было захвачено.

Вот клиентское приложение в SharePoint, которое я использую для отправки имени пользователя через обратный канал Directline.

private _showPanel = (): void => {
this.setState({ showPanel: true });

// Get the user name
var req = new XMLHttpRequest();
req.open("GET", "/_api/SP.UserProfiles.PeopleManager/GetMyProperties", false);
req.setRequestHeader("Accept", "application/json");
req.send();
var user = { id: "userid", name: "unknown" };
if (req.status == 200) {
  var result = JSON.parse(req.responseText);
  user.id = result.Email;
  user.name = result.DisplayName;
  var userName = user.name
  console.log("Bot loaded for "+userName)
}

directLine
.postActivity({ type: "event", name: "SendUserInfo", text: user.name, from: { id: "userid" } })
.subscribe(id => console.log("Backchannel event success"));
 };

Бот прослушиваетсобытие в файле DialogBot.js

// Listen for the event 'SendUserInfo' and store the user name in a variable
this.onEvent(async (context, next) => {
  if (context.activity.name === 'SendUserInfo') {
            var userName = await context.sendActivity(context.activity.text);
            console.log(userName);
        }
        await next();
    });

Я пытаюсь вызвать эту переменную в моем файле functionaDialogBase.js, чтобы ее можно было использовать, когда пользователь отправляет форму

const { userName } = require('../dialogbot');
{...}
 var authCtx = new AuthenticationContext(settings.siteurl);
 authCtx.acquireTokenForApp(settings.clientId, settings.clientSecret, function (err, data) {

var ctx = new SP.ClientContext("/sites/demosite");
authCtx.setAuthenticationCookie(ctx);
    var web = ctx.get_web();
    var list = web.get_lists().getByTitle('BotBookings');
    var creationInfo = new SP.ListItemCreationInformation();
    var listItem = list.addItem(creationInfo);
    listItem.set_item('UserName', userName);
    listItem.set_item('Title', title);
    listItem.set_item('SessDate', booksessjson2);
    listItem.set_item('SessTime', booksessjson3);
    listItem.update();
    ctx.load(listItem);
    ctx.executeQueryAsync();
    });

Когда я заполняю форму, поле userName остается пустым, и я ожидаю увидеть имя пользователя в этом столбце.

Спасибо за ваше время.

...