Это распространенный вопрос, размещенный здесь;да, событие conversationUpdate
не генерируется одинаково между эмулятором и веб-чатом, это довольно тревожно.
Отправить приветствие вашему пользователю в чате
Я хочу отправить приветственное сообщение(укажите имя пользователя, например hi, rainmaker welcome ...) для пользователя, когда придет второй ConversationUpdate.Приветственное сообщение будет отправлено после ввода пользователя в Azure Webchat.Как я могу решить эту проблему?
Если вам нужно отправить приветственное сообщение с некоторой информацией о пользователе до того, как этот пользователь начнет говорить, вы можете использовать backchannel
функция веб-чата, позволяющая передавать эту информацию, а затем перехватывать сообщение и отправлять приветственное сообщение.
Требуется несколько строк кода на лицевой стороне, чтобы их нельзя было использовать для тестера веб-чата Azure.,Но он хорошо работает в реализации веб-чата, см. Пример ниже.
Sidenote: если вам не нужна информация о пользователе, вы все равно можете использовать 1-й conversationUpdate
, который вы получаете.
Пример
Пример кода: я сделал демо об этом, вы можете получить его там: https://github.com/nrobert/Bot-Language-Demo
Основные моменты:
1,Сообщение обратного канала, отправленное с фронта здесь
В примере я передаю locale
информацию:
botConnectionSettings.postActivity({
type: 'event',
from: { id: 'userid' },
locale: chatLocale,
name: 'localeSelectionEvent',
value: chatLocale
}).subscribe(function (id) { console.log('event language "' + chatLocale + '" selection sent'); });
2.Сообщение, полученное на уровне бота , здесь
else if (activity.Type == ActivityTypes.Event && activity.ChannelId == "webchat")
{
var receivedEvent = activity.AsEventActivity();
if ("localeSelectionEvent".Equals(receivedEvent.Name, StringComparison.InvariantCultureIgnoreCase))
{
// Send your welcome message here, using the special information you would have put in the event message...
}
}