В вашей реализации нет ничего плохого. Проблема в том, что версия веб-чата с iframe не может инициировать диалог одним щелчком мыши. Нет никаких хуков, с помощью которых страница хостинга могла бы подключиться, чтобы указать, что произошло действие, и что веб-чат должен затем действовать в соответствии с этим.
iframe Web Chat просто подключается к вашему боту и соответственно запускает любые приветственные сообщения. Когда страница загружается и бот подключается, создается один тип активности conversationUpdate
, который включает свойство membersAdded. Поскольку он исходит из веб-чата iframe, для ChannelId
будет установлено значение 'webchat'
.
Это можно сделать в обработчике активности вашего бота в OnConversationUpdateActivityAsync
или OnMembersAddedAsync
. Когда получено действие conversationUpdate
, вы фильтруете идентификатор канала на 'webchat'
и имя в имени вашего бота, чтобы отправить сообщение клиенту. Это сообщение уже будет загружено, когда пользователь щелкнет, чтобы развернуть встроенное окно.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
if (turnContext.Activity.ChannelId == 'webchat' && turnContext.Activity.From?.Name == '<<YOUR BOT'S NAME')
{
// Echo back what the user said
await turnContext.SendActivityAsync(MessageFactory.Text($"Welcome to my bot!"), cancellationToken);
}
}
Следует отметить, что веб-чат iframe предназначен как простое решение для размещения бота и не предназначен для глубокой настройки . Если вам нужно внести множество изменений, я настоятельно рекомендую вам рассмотреть BotFramework-WebChat , который разработан специально для этого. Он предлагает как версию React, так и версию без React.
Надеюсь на помощь!