не может отправить данные канала в postactivity - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь опубликовать данные на боте, когда пользователь запускает чат.

Я пытался реализовать такие вещи, как в этой статье: 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);
			  }
			}
		  }
		);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...