Я создал чат-бот 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 остается пустым, и я ожидаю увидеть имя пользователя в этом столбце.
Спасибо за ваше время.