MS Bot Framework отправляет EventActivity на сервер - PullRequest
0 голосов
/ 19 мая 2018

Мне было интересно, что я не нашел ничего об отправке IEventActivity клиенту.Мне не удалось заставить его работать.

Чего я пытаюсь добиться, так это включить и отключить кнопку загрузки файла в веб-чате, отправив событие болтовне.

Кто-нибудь может указать мне правильное направление?Как я могу отправить событие клиенту?

1 Ответ

0 голосов
/ 21 мая 2018

То, чего я пытаюсь добиться, - это включить и отключить кнопку загрузки файла в веб-чате, отправив событие в чат.

Вы можете обратиться к следующему примерукод для достижения вашего требования динамически отключить / включить кнопку загрузки для веб-чата.

В диалоговом окне:

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
    var activity = await result as Activity;

    // calculate something for us to return
    int length = (activity.Text ?? string.Empty).Length;

    if (activity.Text.ToLower().Contains("disable upload"))
    {
        var reply = context.MakeMessage() as IEventActivity;
        reply.Type = "event";
        reply.Name = "disablebutton";
        reply.Value = "DisableUploadButton";
        await context.PostAsync((IMessageActivity)reply);
    }
    else if(activity.Text.ToLower().Contains("enable upload"))
    {
        var reply = context.MakeMessage() as IEventActivity;
        reply.Type = "event";
        reply.Name = "enablebutton";
        reply.Value = "EnableUploadButton";
        await context.PostAsync((IMessageActivity)reply);
    }
    else
    {
        // return our reply to the user
        await context.PostAsync($"You sent {activity.Text} which was {length} characters");
    }

    context.Wait(MessageReceivedAsync);
}

На клиенте JavaScript:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
    <style>
        .wc-chatview-panel {
            width: 350px;
            height: 500px;
            position: relative;
        }
    </style>
</head>
<body>
    <div id="bot" />
</body>
</html>
<script>
    var botConnection = new BotChat.DirectLine({ secret: "{directline_secret}" }); 

    var d = new Date();
    var tzoffset = d.getTimezoneOffset();

    BotChat.App({
        botConnection: botConnection,
        user: { id: 'userid' },
        bot: { id: '{bot_id}' },
        resize: 'detect'
    }, document.getElementById("bot"));


    botConnection.postActivity({
        type: 'event',
        from: { id: 'userid'},
        name: 'ClientTimezoneOffsetEvent',
        value: tzoffset.toString()
    }).subscribe(function (id) { console.log('ClientTimezoneOffset: "' + tzoffset + '" sent'); });

    //listens for a specific event from the bot
    botConnection.activity$
        .filter(activity => activity.type === "event" && activity.name === "disablebutton")
        .subscribe(activity => disableuploadbutton(activity.value));

    botConnection.activity$
        .filter(activity => activity.type === "event" && activity.name === "enablebutton")
        .subscribe(activity => enableuploadbutton(activity.value));

    function disableuploadbutton(val) {
        //hide wc-upload
        $(".wc-upload").hide();
        console.log(val);
    }

    function enableuploadbutton(val) {
        $(".wc-upload").show();
        console.log(val);
    }
</script>

Результат теста:

1) кнопка отключения

enter image description here

2) кнопка включения

enter image description here

Кроме того, вы также можете попробовать механизм обратного канала для достижения ваших требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...