Как создать боковое окно или iframe, в котором отображаются данные, собранные веб-чатом, на одной веб-странице?

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

Может ли кто-нибудь помочь мне создать это? Прямо сейчас я не знаю, как создать это окно/окно/iframe.

Мой чат-бот ведет переговоры с пользователем. Я хочу показать пользовательские данные, такие как элементы, которые доступны для переговоров, в своего рода информационном окне. Он должен иметь возможность обновить его после события, которое происходит во время чата. До сих пор я реализовал веб-чат внутри html-кода веб-страницы, как это описано в документах Microsoft для веб-чата.

Не могли бы вы добавить несколько фрагментов кода или добавить некоторые сведения о различных подходах, которые вы пробовали? Вы пытаетесь построить один из примеров WebChat или используете фреймворк, такой как React или Angular?

tdurnford 09.04.2019 20:18

Спасибо за ваш комментарий. На самом деле, я не знаю, как к этому подступиться. Я не знаком с React или Angular. Должно ли это помочь в моей проблеме? Я проверил образцы веб-чата на github, но не смог найти подходящий образец. Чтобы уточнить: у меня есть html-страница. В левой части страницы должен быть запущен веб-чат, а в правой — контейнер/бокс, в котором отображаются данные от чат-бота. Бот написан на js node. Поскольку ему нужны данные от чат-бота, ему необходимо в любом случае общаться с ботом. не знаю как построить..

but28 10.04.2019 13:46
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
2
475
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самый простой способ отобразить информацию, собранную из чата, — отправить события обратного канала от бота с данными, а затем перехватить сообщение с помощью специального промежуточного программного обеспечения активности в WebChat. Затем вы можете обрабатывать данные на веб-странице по своему усмотрению.

Бот — NodeJs SDK v4

В боте мы собираемся отправлять события обратного канала в WebChat с данными, которые мы собрали в чате. По сути, вам просто нужно отправить действие со свойством типа, установленным на «событие», и атрибутом имени, установленным на какое-то строковое значение — в этом случае мы собираемся использовать данные. Данные разговора будут инкапсулированы в данные канала активности.

await step.context.sendActivity({name: 'data', type: 'event', channelData: data});

WebChat — Пользовательское ПО промежуточного слоя

В WebChat мы собираемся реализовать специальное промежуточное ПО, которое будет проверять входящие действия на предмет значений типа и имени, которые мы указали ранее. Когда мы сталкиваемся с событием обратного канала, мы можем обрабатывать входящие данные и обновлять веб-страницу.

const store = createStore(
  {},
  ({ dispatch }) => next => action => {
    if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
      let { channelData, name, type } = action.payload.activity;
      channelData || (channelData = {});

      if (type === 'event' && name === 'data') {
        this.props.handleData(channelData);
      }
    }
    return next(action);
  });

Снимок экрана

Поскольку WebChat построен с помощью React, я настоятельно рекомендую создать эту веб-страницу также с помощью React. Уже есть пример — настройка-выбираемая-активность — который разбивает страницу на два столбца с веб-чатом в одном столбце и инспектором активности в другом. Вы можете легко изменить этот образец в соответствии со своими требованиями, добавив в него пользовательское ПО промежуточного слоя в WebChat и изменив представление инспектора на таблицу данных.

Запрос токена веб-чата

Обратите внимание: для простоты начала работы вы можете получить токен DirectLine со стороны клиента; однако рекомендуется создать серверный REST API для создания токенов и управления ими.

const res = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', 
{ 
  method: 'POST',
  headers: {
    'Authorization': `Bearer <SECRET>`,
    'Content-Type': 'application/json'
  },
});

const { token } = await res.json();

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

Спасибо за комментарий. Да, это помогает, но я все еще пытаюсь отобразить данные, когда я получил событие от бота. Я попытался перестроить предложенный образец, но веб-страница не позволила мне увидеть какой-либо контент (я полагаю, потому что файл index.html находится в «общедоступной» папке). Надеюсь, если бы я смог запустить образец с моим ботом, мне было бы легче понять, что я могу изменить для своей задачи. Однако для этого образца нет документации, и это сложно понять.

but28 18.04.2019 01:36

чтобы быть более конкретным: у вас есть простая идея для функции handleData сверху для отображения данных в таблице данных?

but28 18.04.2019 01:45

Чтобы подключить образец к вашему боту, вам нужно передать токен для бота в файле WebChat.js — в настоящее время он получает токен от MockBot. Функция handleData должна быть передана в качестве реквизита от родителя WebChat и вызываться в промежуточном программном обеспечении. По сути, он должен просто добавить данные в родительское состояние, а затем реагировать, чтобы обновить представление данных, если вы передали элементы состояния в качестве реквизита для представления данных.

tdurnford 18.04.2019 19:56

большое спасибо @tdurnford. До сих пор я помещал секрет прямо в код, потому что я не знаю, как сгенерировать токен для своего бота. Мне непонятно, где я должен поместить код для http-запроса. Может быть, вы также можете помочь мне с этим? Я попробовал это в Webchat.js вместо MockBot-Line (ln 21): const res = await fetch('directline.botframework.com/v3/directline/tokens/gene‌​рейт', {method: 'POST', header: 'Bearer' + 'SECRET'}); но это не работает .. в качестве альтернативы: есть ли другое решение, в котором я просто помещаю секрет в код вместо использования токенов?

but28 20.04.2019 13:34

Я только что обновил свой ответ, указав, как создать токен WebChat. Обратите внимание, вы можете сделать это со стороны клиента; однако рекомендуется создать серверную службу для создания токенов и управления ими.

tdurnford 20.04.2019 18:58

Другие вопросы по теме