Как отправить событие из botframework v3 c # и прослушать на стороне клиента javascript, используя Direct Line? - PullRequest
0 голосов
/ 07 мая 2019

Как отключить пользовательский ввод с помощью отключенного в wc-shellinput только тогда, когда какое-либо событие запускается из MessagesController или из любого диалога, и включить его, когда желаемое действие выполнено пользователем.Что если я хочу перемещаться по веб-приложению во время разговора с чатботом?Как этот тип обработки событий возможен?

1 Ответ

0 голосов
/ 07 мая 2019

Вот как вы можете запустить его, основываясь на этом примере веб-чата :

Добавление пользовательских ChannelData к исходящей активности (в коде бота)

См. этот образец для получения дополнительной информации.

var message = context.MakeMessage();

для отключения ввода

message.ChannelData = new { chatBox = "disable" }

для включения ввода

message.ChannelData = new { chatBox = "enable" }

Отправить сообщение

await context.PostAsync(message);

Создать событие для channelData.chatBox (в тегах сценария index.html)

const store = window.WebChat.createStore(
    {},
    ({ dispatch }) => next => action => {
    if (action && action.payload && action.payload.activity && action.payload.activity.channelData && action.payload.activity.channelData.chatBox) {
        const event = new Event(`chatBox`);
        event.data = action.payload.activity.channelData.chatBox;
        window.dispatchEvent(event);
    }

    return next(action);
    }
);

Прослушатьсобытие и включить / отключить окно чата (в тегах сценария index.html)

window.addEventListener('chatBox', ({ data }) => {
    const chatBox = document.querySelector(`[data-id="webchat-sendbox-input"]`);
    switch(data){
        case 'enable':
            chatBox.disabled = false;
            break;
        case 'disable':
            chatBox.disabled = true;
            break;
    }
});

Включено:

enter image description here

Отключено:

enter image description here

Просто убедитесь, что вы снова включили его после отключения по мере необходимости!

С BotChat

Это почти одно и то же.Вы сообщаете, что BotChat не обнаруживает все сообщения, поэтому я использовал события.

Создание / отправка событий

var disable = new Activity()
{
    Type = ActivityTypes.Event,
    Value = new { chatBox = "disable" }
};
var enable = new Activity()
{
    Type = ActivityTypes.Event,
    Value = new { chatBox = "enable" }
};
await turnContext.SendActivityAsync(disable);

Прослушивание событийв BotChat

botConnection.activity$
    .subscribe(function (activity) {
        if (activity.type === 'event' && activity.value.chatBox) {
            controlInput(activity.value.chatBox);
        }
    });

    function controlInput(action) {
    const chatBox = document.querySelector(`[class="wc-shellinput"]`);
    switch(action) {
        case 'enable':
            chatBox.disabled = false;
            break;
        case 'disable':
            chatBox.disabled = true;
            break;
    }
}

Примечание. Если вы используете стандартную версию BotChat css, цвет ввода не изменится.Вам нужно будет добавить CSS самостоятельно.Что-то вроде:

input:disabled {
          background-color: black !important;
      }
...