Как добавить управление состоянием в веб-чат BOT, созданный с помощью диалоговых окон падения воды с использованием C# MS BOT framework SDK V4? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть Chat Bot, созданный с использованием C# SDK V4, и у него есть несколько диалоговых классов падения воды, каждый для выполнения определенного действия c, когда выбрана определенная опция. BOT имеет аутентификацию, также встроенную с помощью Oauth Prompt.

Канал: веб-канал

SDK: SDKV4

Язык: C#

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

Приходя к причине, по которой я хочу, чтобы управление состоянием было выполнено. После аутентификации пользователя с помощью Oauth Prompt я отображаю параметры, основанные на вошедшем в систему User Now. 2 или более пользователей входят одновременно или один за другим, другой вход происходит захват, и данные второго вошедшего в систему пользователя отображаются для первого пользователя, когда он переключается между вариантами, отображаемыми для выбора.

Когда я зарегистрировал запрос о том, как поддерживать зарегистрированного пользователя или переосмыслил sh зарегистрированного пользователя, мне предложили использовать метод управления состоянием, отсюда и этот вопрос о том, как сделать это в диалоговом окне «все воды».

Если управление состоянием не является правильным вариантом, то можете ли вы дать мне знать, как обновить sh или сохранить зарегистрированный идентификатор пользователя?

1 Ответ

1 голос
/ 11 марта 2020

Подозреваемый, что проблема связана с реквизитом, который вы передаете в Direct Line при запуске веб-чата. Ссылка в Интеграция с Javascript, состояние документов:

Назначение идентификатора пользователя в качестве значения c не рекомендуется, так как это приведет к тому, что все пользователи будут иметь общее состояние. Пожалуйста, обратитесь к записи API userID для получения дополнительной информации.

Когда вы делаете вызов для генерации токена, на этом этапе должен быть передан userID (который должен быть уникальным для пользователя), иначе вы столкнется с проблемами общего состояния.

Здесь приведен фрагмент кода, который я запускаю для доступа к локальному API, который получает и возвращает токен прямой линии. Как видите, идентификатор пользователя передается в запросе, который затем возвращается в токен при возврате.

// Listen for incoming requests.
server.post('/directline/token', (req, res) => {
    // userId must start with `dl_`
    const userId = (req.body && req.body.id) ? req.body.id : `dl_${ Date.now() + Math.random().toString(36) }`;
    const options = {
        method: 'POST',
        uri: 'https://directline.botframework.com/v3/directline/tokens/generate',
        headers: {
            Authorization: `Bearer ${ process.env.directLineSecret }`,
            'Access-Control-Allow-Origin': '*'
        },
        json: {
            user: {
                ID: userId
            }
        }
    };
    request.post(options, (error, response, body) => {
        if (!error && response.statusCode < 300) {
            res.send(body);
            console.log('Someone requested a token...');
        } else if (response.statusCode >= 400 && response.statusCode < 500) {
            res.send(response.statusCode);
        } else if (response.statusCode >= 500) {
            res.status(response.statusCode);
            res.send('Call to retrieve token from DirectLine failed');
        }
    });
});

Надежда на помощь!

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