Я использую веб-чат V3 и бот-фреймворк V3. Можно ли отправить пользователям кнопку, которая могла бы закрыть страницу веб-чата?
Как добавить кнопку для закрытия страницы чата?
Ответы (2)
По запросу, вот решение v3. Ключевыми элементами являются .filter
и .subscribe
. Фильтр прослушивает входящие действия от бота на страницу. Subscribe прослушивает действия и события на странице, что позволяет вам действовать в соответствии с ними перед отправкой данных боту.
В этом примере "используется" карта героя TJ типа imBack. В качестве альтернативы, если вы не хотите, чтобы бот отправлял текст пользователю, показывающему выбор, вы можете отправить «postBack». В этом случае значение не отображается, и вам потребуется отфильтровать несколько отличающиеся свойства активности (channelData
и value
).
Обратите внимание, я создаю здесь прямую линию, включив секрет для простоты. В производственной среде вы захотите обменять свой секрет на токен, чтобы уменьшить любые проблемы с безопасностью.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Bot Chat</title>
<link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
<style>
#botchat {
border: 1px solid #333;
float: left;
height: 600px;
position: relative;
width: 460px;
}
</style>
</head>
<body>
<div id="botchat"></div>
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
<script>
const params = BotChat.queryParams(location.search);
const user = {
id: params['userid'] || 'userid',
name: params['username'] || 'username'
};
const bot = {
id: 'bot',
name: 'bot'
};
window['botchatDebug'] = params['debug'] && params['debug'] === 'true';
const botConnection = new BotChat.DirectLine({
secret: 'xxxxxxx'
});
BotChat.App({
bot: bot,
botConnection: botConnection,
user: user
}, document.getElementById('botchat'));
botConnection.activity$
.filter(function (activity) {
if (activity.type === 'message' && activity.text === 'close' ) {
window.close();
}
})
.subscribe(function (activity) {
// Make function calls and track activity/events from the page to the bot
});
</script>
</body>
</html>
Надеюсь на помощь!
Я не верю, что это возможно в веб-чате v3; однако в веб-чате v4 вы можете использовать промежуточное ПО для действий с карточками, чтобы изменить поведение действий по умолчанию. Затем из бота можно отправить карточку с кнопкой закрытия окна.
Веб-чат v4
const cardActionMiddleware = () => next => card => {
const { cardAction: { value }} = card;
if (value === 'close') {
window.close();
}
next(card);
}
window.WebChat.renderWebChat({
cardActionMiddleware,
directLine
}, document.getElementById('webchat'));
Пакет SDK Bot Framework версии 4 (узел)
const card = CardFactory.heroCard(
'Close Window',
null,
CardFactory.actions([
{
type: 'imBack',
title: 'close',
value: 'Close'
}])
);
await context.sendActivity({ attachments: [card] });
Обратите внимание, что веб-чат v3 в настоящее время закрыт и больше не поддерживается, но веб-чат v4 совместим с ботами v3. Ознакомьтесь с миграцией документация для более подробной информации.
Надеюсь это поможет!