#node.js #botframework
#node.js #botframework
Вопрос:
Я экспериментирую с Microsoft Bot Framework. В своем эксперименте я пытаюсь интегрировать «Hello World» в существующее веб-приложение. Мое веб-приложение — это экспресс Node.js приложение.
В моем Node.js приложение, я хочу иметь веб-страницу с текстовым полем, позволяющим мне отправить сообщение боту. По сути, я пытаюсь имитировать эмулятор канала framework на веб-странице. В попытке сделать это у меня есть веб-страница со следующим:
bot.html
<form>
<div class="input-group">
<input id="message" type="text" class="form-control" placeholder="">
<span class="input-group-btn">
<button id="sendButton" class="btn btn-secondary" type="button">send</button>
</span>
</div>
</form>
…
$('#sendButton').click(onSendButtonClick);
function onSendButtonClick() {
var message = $('#message').val();
if (message) {
$.post('/my-bot', function(data, status) {
console.log(data);
console.log(status);
});
}
return false;
}
Затем, на стороне сервера, в моем Node.js приложение, которое использует Express, у меня есть следующее:
// This route is intended to listen for messages POSTed from the text box on my web site.
app.post('/my-bot', function(req, res) {
try {
// Not sure about this...
let connector = new BotBuilder.ConsoleConnector().listen();
let bot = new BotBuilder.UniversalBot(connector );
bot.dialog('/', function (session) {
session.send('Hello World');
});
} catch (ex) {
res.status(500);
res.end();
}
});
// The following serves up my web page
app.use('/my-bot', function(req, res) {
let view = './bot.html';
res.render(view, {});
});
Я не уверен, как вернуть «Привет, мир» на мою веб-страницу. Я вижу вызов session.send
, но я не вижу способа подключиться session
к res
объекту. Или я вообще неправильно понимаю архитектуру?
Ответ №1:
Обратный вызов в вашем app.post
должен быть connector.listen()
, и вы должны определять / вызывать только connector
один раз. Вызов connector.listen()
вернет функцию, подходящую для обратных вызовов в стиле express, и, поскольку ваш соединитель подключен bot
, маршруты диалога вашего бота будут активированы при отправке.
Вот пример приложения:
var express = require('express')
, http = process.env.HTTPS == 'on' ? require('https') : require('http')
, builder = require('botbuilder');
var app = express()
, server = http.createServer(app)
, port = process.env.port || 3000
, config = { appId: process.env.MICROSOFT_APP_ID, appPassword: process.env.MICROSOFT_APP_PASSWORD }
, connector = new builder.ChatConnector(config)
, bot = new builder.UniversalBot(connector);
// define bot dialog routes
bot.dialog('/', function(session) {
session.send('Hello World');
});
// define app HTTP routes
app
// respond to basic HTTP GET
.get('/', function(req, res) {
res.send('hello world');
})
// respond to bot messages
.post('/api/messages', connector.listen());
// start the server
server.listen(port, function() {
console.log('Listening on %s', port);
});
И я вижу, что вы пытаетесь обработать потенциальные ошибки. Если вам нужно сообщить клиенту о сбое, вы должны вызвать session.error()
вместо session.send()
:
bot.dialog('/', function (session) {
// do some processing
var gotError = true;
// respond with error
if (gotError) {
session.error(new Error('oops'))
// respond normally
} else {
session.send('Hello World');
}
});
Ответ №2:
Попробуйте использовать API Direct Line.
Direct Line API — это простой REST API для прямого подключения к одному боту. Этот API предназначен для разработчиков, пишущих свои собственные клиентские приложения, элементы управления веб-чатом, мобильные приложения или приложения «сервис-сервис», которые будут взаимодействовать с их ботом
Комментарии:
1. Теперь ссылка не работает