Я не могу найти способ передать параметры в среду бота, когда начинается сессия. Я хочу передать projectId, когда пользователь запускает чат, и он должен быть пропущен автоматически (ie пользователю не нужно запрашивать эту информацию).
Я напрасно пробую десятки подходов, так как несколько дни и ничего не работает. У меня есть 2 подхода, которые закрыты для результата:
var projectId ="191";
var d1 = window.WebChat.createDirectLine({ token });
const store = window.WebChat.createStore(
{},
function() {
return function(next) {
return function(action) {
if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
action = window.simpleUpdateIn(
action,
['payload', 'activity', 'channelData'],
() => ({
'email': "testemail1@test.com",
'projectId': projectId
})
)
}
return next(action);
}
}
);
window.WebChat.renderWebChat({
directLine: d1,
store: store,
styleOptions:styleOptions
}, document.getElementById('webchat'));
var user = {
id: 'default-user',
name: 'user name'
};
var activity = {
from: user,
name: 'startConversation',
type: 'event',
value: '',
channelData: { "email": "test2@b.com","usertoken": userToken,"projectId":projectId}
};
d1.postActivity(activity).subscribe(function(id) {
if (console) {
console.log('"trigger requestWelcomeDialog" sent');
}
});
- Если я пытаюсь передать параметры через хранилище и DIRECT_LINE / POST_ACTIVITY, параметр передается после создания сеанса (слишком поздно для моей необходимости) 2.If Я перехожу через postActivity к событию типа, мне удается переопределить OnEventAsynx c и получить доступ к параметрам. Но тогда я не понимаю, как передать их в диалоги. В диалоговых окнах, когда я сбрасываю данные канала dataData и состояния разговора или пользователя, он пуст.
Пожалуйста, помогите, мне просто нужно автоматически передать идентификатор проекта при запуске чата. Выглядит тривиально, но это не так.
protected override async Task OnEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
IStatePropertyAccessor<OnboardingState> accessor = UserState.CreateProperty<OnboardingState>(nameof(OnboardingState));
OnboardingState state = await accessor.GetAsync(turnContext, () => new OnboardingState());
state.Ticket = new CIWTicket();
state.Ticket.SourceEmailAddress = email;
await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
}