Бот Node Bot FrameWork получает ошибку http 500 после развертывания Azure - PullRequest
0 голосов
/ 27 апреля 2018

Я создал бота во время использования MS Bot Framework и развернул его в Azure.

После развертывания бот возвращает ошибку HTTP 500, когда мы пытаемся использовать URL-адрес '/api/messages'.

Вот мой app.js:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const dialog_service_1 = require("./services/dialog-service");
const authentification_service_1 = require("./services/authentification-service");
const restify = require("restify");
const bot_service_1 = require("./services/bot-service");
const utilities_service_1 = require("./services/utilities-service");
require("dotenv").config();
let botService = new bot_service_1.BotService();
// let utilitiesService = new UtilitiesService(__dirname + '/assets/labels.json');
let dialogService = new dialog_service_1.DialogService(bot_service_1.BotService.bot);
let port = process.env.port || process.env.PORT || '3978';
const server = restify.createServer({
    formatters: {
        'text/html': function (req, res, body) {
            return body.toString();
        }
    }
});
console.log('server created');
// change done for restify 5.X+ (mapParams should be specified @ true)
server.use(restify.plugins.bodyParser({
    mapParams: true
}));
console.log('trying to listening..');
server.listen(port, () => {
    console.log('%s server listening to %s', server.name, server.url);
});
console.log('listening');
console.log('mounting styles folder...');
//add the build/styles folder to the restify server
server.get(/\/styles\/?.*/, restify.plugins.serveStatic({
    directory: __dirname + '/assets'
}));
console.log('mounted');
console.log('mounting api/messages endpoint...');
// entry point of your bot
server.post("/api/messages", bot_service_1.BotService.bot.connector("*").listen());
console.log('mounted...');
console.log('mounting api/oauthcallback endpoint...');
//callback handling
server.post("/api/oauthcallback", (req, res, next) => {
    let authorizationCode = req.params.code;
    if (authorizationCode !== undefined) {
        authentification_service_1.AuthentificationService.acquireTokenWithAuthorizationCode(authorizationCode).then((response) => {
            let state = req.params.state;
            if (state) {
                let address = JSON.parse(state);
                response.state = state;
                bot_service_1.BotService.bot.beginDialog(address, "/oauth-success", response);
            }
            utilities_service_1.UtilitiesService.readFile(__dirname + '/assets/html/callback.html').then(body => {
                res.send(200, body, { "Content-Length": Buffer.byteLength(body).toString(), "Content-Type": "text/html" });
                res.end();
            });
        }).catch((errorMessage) => {
            var body = "<html><body>" + errorMessage + "</body></html>";
            res.send(200, body, { "Content-Length": Buffer.byteLength(body).toString(), "Content-Type": "text/html" });
            res.end();
        });
    }
    else {
        var body = "<html><body>" + "unable to retrieve the authentication code" + "</body></html > ";
        res.send(200, body, { "Content-Length": Buffer.byteLength(body).toString(), "Content-Type": "text/html" });
        res.end();
    }
});
console.log('mounted');
//# sourceMappingURL=app.js.map

Я добавил несколько журналов, чтобы помочь мне, все console.log() достигнуто. так что кажется, что сервер хорошо запущен ...

Спасибо за вашу помощь.

1 Ответ

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

Я заметил, что вы не запускаете бота и не запускаете диалог. Когда я пробую ваш код как есть, я получаю ошибку 502. Когда я ввожу код для бота, ошибка исчезает, и бот отвечает, как и ожидалось.

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

Я использовал connect.listen () в server.post для «api / messages». Определение коннектора, как показано ниже, следует базовой настройке, описанной в документации для сборки бота с использованием Node.

Надеюсь, это поможет.

Стив.

'use string';

const builder = require('botbuilder');
const restify = require('restify');
require('dotenv').config();

let port = process.env.port || process.env.PORT || '3978';

let server = restify.createServer({
    formatters: {
        'text/html': function (req, res, body) {
            return body.toString();
        }
    }
});

// change done for restify 5.X+ (mapParams should be specified @ true)
server.use(restify.plugins.bodyParser({
    mapParams: true
}));

server.listen(port, () => {
    console.log('%s server listening to %s', server.name, server.url);
});

// entry point of your bot
let connector = new builder.ChatConnector({
    appId: process.env.MicrosoftAppId,
    appPassword: process.env.MicrosoftAppPassword,
    openIdMetadata: process.env.BotOpenIdMetadata
});

server.post('/api/messages', connector.listen());

//callback handling
server.post('/api/oauthcallback', (req, res, next) => {
    var authorizationCode = req.params.code;
    if (authorizationCode !== undefined) {
        console.log('authorization code provided');
    }
    else {
        console.log('authorization code not provided');
    }
});

// inMemoryStorage should only be used for testing. It is not stable for a production environment
let inMemoryStorage = new builder.MemoryBotStorage();
let bot = new builder.UniversalBot(connector).set('storage', inMemoryStorage);

bot.dialog('/', [
    function (session) {
        session.send('Hi');
    }
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...