Я пытаюсь опубликовать данные на боте, когда пользователь запускает чат.
Я пытался реализовать такие вещи, как в этой статье: https://blog.botframework.com/2018/07/12/how-to-properly-send-a-greeting-message-and-common-issues-from-customers/
Вот код, который создает экземпляр чата: он правильно публикует событие, а не разговор. Обновление
window.WebChat.renderWebChat({ directLine: d1, styleOptions }, botContainer );
var userToken ="123";
var projectId = "234";
var user = {
id: 'default-user',
name: 'user name'
};
var activity = {
from: user,
name: 'startConversation',
type: 'event',
value: '',
channelData: { "usertoken": userToken,"projectId":projectId}
};
d1.postActivity(activity).subscribe(function(id) {
if (console) {
console.log('"trigger requestWelcomeDialog" sent');
}
});
В BotFramework я никогда не получаю ChannelData. Я добавил код в различные функции в MainDialog для извлечения ChannelData, и я никогда не получаю содержимое.
Я не могу проверить из эмулятора BotFramework, так как не могу передать начальные ChannelData. Чрезвычайно больно отлаживать. Я постоянно добавляю трассировку, развертывание, развертывание и развертывание ....
В DialogAndWelcomeBot OnMembersAddedAsyn c выглядит следующим образом:
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
foreach (var member in membersAdded)
{
// Greet anyone that was not the target (recipient) of this message.
// To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards for more details.
if (member.Id != turnContext.Activity.Recipient.Id)
{
if (member.Id == "default-user")
{
LogMessage(turnContext, cancellationToken, "Hello " + member.Id);
var welcomeCard = CreateAdaptiveCardAttachment();
var response = MessageFactory.Attachment(welcomeCard);
await turnContext.SendActivityAsync(response, cancellationToken);
}
await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken);
}
}
}
Обновление: это еще не совсем работает. Я добавил следующий код. Данные канала все еще не отправляются боту во время первого сеанса чата. Но когда сеанс заканчивается и начинается новый, он затем отправляется боту. Не до конца понимаю, почему он не работает в первом сеансе чата.
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': "ciw@test.com",
'projectId': projectId,
'userToken': userToken
})
)
}
return next(action);
}
}
}
);