Как добавить кнопку для закрытия страницы чата?

Я использую веб-чат V3 и бот-фреймворк V3. Можно ли отправить пользователям кнопку, которая могла бы закрыть страницу веб-чата?


person Jeff_hu    schedule 09.08.2019    source источник
comment
Отметка решения как принятого служит большему сообществу Stack Overflow и всем, у кого есть подобный вопрос. Если вы считаете, что моего ответа или ответа @Steven Kanberg было достаточно, примите его. Если нет, дайте нам знать, чем еще мы можем помочь!   -  person tdurnford    schedule 16.08.2019


Ответы (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>

Надеюсь на помощь!

person Steven Kanberg    schedule 09.08.2019

Я не верю, что это возможно в веб-чате 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. Ознакомьтесь с миграцией документация для более подробной информации.

Надеюсь это поможет!

person tdurnford    schedule 09.08.2019
comment
Это можно сделать в веб-чате v3 (и, если потребуется, я могу поделиться) ... однако это спорный вопрос, поскольку попытка вызвать close.window () из сценария заблокирована почти всеми браузерами из-за рисков безопасности . Для справки: в docs Mozilla говорится, что сценарий может только закройте окно, если тот же сценарий также открыл это окно. И в v3, и в v4 эта попытка закрытия завершится неудачно. - person Steven Kanberg; 10.08.2019
comment
@StevenKanberg добавить ответ с решением v3 - person tdurnford; 10.08.2019