Azure Bot Framework | Если какое-то время от пользователя нет ответа, то как отправить напоминание пользователям? - PullRequest
1 голос
/ 30 мая 2020

Под вышеупомянутым вопросом я имею в виду это-

Если в течение 10 секунд с ботом нет активности

Бот отправляет сообщение >> Похоже, вас сейчас нет.

Бот >> Пингуйте меня еще раз, когда вернетесь. А сейчас до свидания.

1 Ответ

0 голосов
/ 01 июня 2020

В nodejs вы можете сделать это, установив тайм-аут в обработчике хода (onTurn или onMessage). Вам нужно очищать тайм-аут и сбрасывать его каждый раз, если вы хотите, чтобы сообщение было через X раз после последнего сообщения пользователя. По таймауту сообщение будет отправлено один раз. Если вы хотите, чтобы это повторялось, например, каждые X раз после последнего сообщения пользователя, вы можете использовать интервал вместо тайм-аута. Я обнаружил, что самый простой способ отправить сообщение - это проактивное сообщение, поэтому вам нужно включить TurnContext и BotFrameworkAdapter из библиотеки botbuilder с помощью этого метода. Синтаксис C#, вероятно, отличается, но это должно указать вам правильное направление. Вот функция, которую я использую:

    async onTurn(context) {

        if (context.activity.type === ActivityTypes.Message) {

            // Save the conversationReference
            const conversationData = await this.dialogState.get(context, {});
            conversationData.conversationReference = TurnContext.getConversationReference(context.activity);
            await this.conversationState.saveChanges(context);
            console.log(conversationData.conversationReference);

            // Reset the inactivity timer
            clearTimeout(this.inactivityTimer);
            this.inactivityTimer = setTimeout(async function(conversationReference) {
                console.log('User is inactive');
                try {
                    const adapter = new BotFrameworkAdapter({
                        appId: process.env.microsoftAppID,
                        appPassword: process.env.microsoftAppPassword
                    });
                    await adapter.continueConversation(conversationReference, async turnContext => {
                        await turnContext.sendActivity('Are you still there?');
                    });
                } catch (error) {
                    //console.log('Bad Request. Please ensure your message contains the conversation reference and message text.');
                    console.log(error);
                }
            }, 300000, conversationData.conversationReference);

            //<<THE REST OF YOUR TURN HANDLER>>
        }
    }
...