Я хочу послать сообщение от бота "Ты там через X минут", когда их больше не пользователь вводит в бот - PullRequest
1 голос
/ 27 февраля 2020

Я использую Bot Framework v4 с c# и развертывание на канале Slack. Я хочу создать таймер в боте или снаружи, используя функции Azure. В случае отсутствия пользовательского ввода в течение x минут, бот должен отправить сообщение типа «Ты здесь?»

Прочитав много статей о Inte rnet, я не смог найти нужное решение

Я устал следить за этим Автоматически отображать оценочную карточку бота через несколько секунд, чтобы получить отзывы пользователей

, но не до конца понимаю, что этот человек говорит там. Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 28 февраля 2020

Мой метод работает для Directline Webchat, но вы можете использовать эту концепцию и использовать ее в решении, которое будет работать для Slack.

При использовании botframework-webchat вы могут настроить пользовательский магазин для отслеживания бездействия. В моем примере ниже я использую комбинацию заголовка страницы «уведомление» с отправкой сообщения. Но вы можете просто установить интервал и отправить сообщение без каких-либо изменений заголовка страницы.

           let interval;

            var PageTitleNotification = {
                Vars:{
                    OriginalTitle: document.title,
                    Interval: null
                },    
                On: function(notification, intervalSpeed){
                    var _this = this;
                    _this.Vars.Interval = setInterval(function(){
                        document.title = (_this.Vars.OriginalTitle == document.title)
                                 ? notification
                                 : _this.Vars.OriginalTitle;
                    }, (intervalSpeed) ? intervalSpeed : 1000);
                },
                Off: function(){
                    clearInterval(this.Vars.Interval);
                    document.title = this.Vars.OriginalTitle;   
                }
            }

            // We are using a customized store to add hooks to connect event
            const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {

                if (action.type === 'WEB_CHAT/SEND_MESSAGE') {
                    // Message sent by the user
                    PageTitleNotification.Off();
                    clearTimeout(interval);
                } else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY' && action.payload.activity.name !== "inactive") {
                    // Message sent by the bot
                    clearInterval(interval);
                    interval = setTimeout(() => {
                        // Change title to flash the page
                        PageTitleNotification.On('Are you still there?');

                        // Notify bot the user has been inactive
                        dispatch({
                            type: 'WEB_CHAT/SEND_EVENT',
                            payload: {
                                name: 'inactive',
                                value: ''
                            }
                        });
                    }, 300000)
                }

                return next(action);
            });

Сложность при использовании канала Slack заключается в том, что вы не можете внедрить что-то подобное на стороне клиента Slack. , так что вам нужно будет сделать это внешне. Лучшее руководство, которое я могу вам дать, - это начать с образца предварительного уведомления . Вам нужно будет получить ссылку на разговор из turnContext через что-то вроде turnContext.getConversationReference() и сохранить ее. Затем вы можете отправить его в функцию и запустить таймер. Если функция не получает другое сообщение по этой ссылке в течение указанного вами периода времени, вы можете отправить упреждающее сообщение.

Я думаю, вы захотите сделать это как локальную функцию в вашем боте, а не как Azure Функция, потому что вы хотите сбросить таймер каждый раз, когда пользователь отправляет новое сообщение. Я не уверен, как вы будете отслеживать это, используя внешнюю функцию Azure. Надеюсь, этого будет достаточно, чтобы дать вам некоторые идеи по реализации этой функциональности в канале Slack.

...