Мне только что дали проект, в котором мне нужно изучить и разобраться с Microsoft Bot Framework версии 3.2 (это старый проект, который я изменяю).
Я работаю черезпримеры и попытка понять, как работает диалоговый поток, и как мне лучше всего его модулировать.
Насколько я понимаю, когда вы создаете своего бота, как этот
// CODE SAMPLE 1
const bot = new builder.UniversalBot(connector, [
function (session) {
session.send("Welcome to the dinner reservation.");
session.beginDialog('askForDateTime');
},
/*
functions omitted for brevity
*/
]).set('storage', inMemoryStorage); // Register in-memory storage
, при создании бота должен быть задан массив функций, составляющих ваш "диалог по умолчанию", то естьВы не можете добавить диалоговое окно по умолчанию на более позднем этапе или изменить его. Это правильно?
Тогда, позже, если вы захотите модульную структуру диалогового окна, вы можете получить что-то вроде этого (ссылаясь на код выше)
// CODE SAMPLE 2 (in same file as code above)
bot.dialog('askForDateTime', [
function (session) {
builder.Prompts.time(session, "Please provide a reservation date and time (e.g.: June 6th at 5pm)");
},
function (session, results) {
session.endDialogWithResult(results);
}
]);
Итак, это bot.dialog
регистрация этого диалога с ботом для последующего использования? То есть есть какой-то поиск во время выполнения - во время разговора - на основе этой строки, которая связывает session.beginDialog('askForDateTime');
в первом примере кода с функциями, зарегистрированными с bot.dialog('askForDateTime')
во втором примере кода?
Когда я посмотрел ссылку на SDK, я увидел, что beginDialog
принимает IAddress
function beginDialog(address: IAddress, dialogId: string, dialogArgs?: any, done?: (err: Error) => void)
, где написано
Информация о маршрутизации адреса длямероприятие. Адреса являются двунаправленными, то есть могут использоваться как для входящих, так и для исходящих событий. Они также специфичны для коннекторов, что означает, что коннекторы могут свободно добавлять свои собственные поля к адресу.
Так что эта «регистрация» через строку в основном представляет собой систему регистрации событий, вроде addEventListener
но в этом случае это не регистрация действия как такового, а диалог?
Два последних вопроса:
Можно ли позвонить session.beginDialog
из bot.dialog
? То есть есть вложенное дерево диалогов? На самом деле, единственный пример - вложение из диалогового окна по умолчанию, но я не знал, можно ли углубиться в него.
Наконец, как можно модульно оформить ваши диалоги в отдельные модули узлов, то есть переместитьваши поддиалоги в отдельные файлы? Я думал о чем-то вроде этого:
// askForDateTime.js
module.exports = bot =>
bot.dialog('askForDateTime', [
function (session) {
builder.Prompts.time(session, "Please provide a reservation date and time (e.g.: June 6th at 5pm)");
},
function (session, results) {
session.endDialogWithResult(results);
}
]);
, но не вижу, как использовать его в моем основном приложении
// app.js
const askDateTimeDialog = require('./askForDateTime')(bot) // how to use this? I need to pass in a bot that's not yet created. Do I even need to import it?
const bot = new builder.UniversalBot(connector, [
function (session) {
session.send("Welcome to the dinner reservation.");
session.beginDialog('askForDateTime'); // <--- how to beginDialog with imported dialog? Or is the 'registration' behind the scenes sufficient since I'm just using the same string?
},
/*
functions omitted for brevity
*/
]).set('storage', inMemoryStorage); // Register in-memory storage
Спасибо за любую помощь! Я понимаю, что, возможно, с версией 4 все проще, но мне нужно использовать более раннюю версию.