Невозможно иметь MS Bot без подписки Azure, потому что вы должны зарегистрировать бота в Azure, что не стоит ни копейки. Если говорить о затратах, вопрос в том, можете ли вы использовать другого хостера.
У меня есть botbuilder@4.0.0-preview1.2, который без проблем работает на DigitalOcean. К сожалению, то же самое в настоящее время не относится к выпуску @ 4.1.2. Я склонен сказать, что нет решения для официального релиза, хотя он работает в эмуляторе.
Попытка внести нижележащие изменения с помощью botbuilder@4.1.7 приводит к: «При отправке этого сообщения вашему боту произошла ошибка: код состояния HTTP ServiceUnavailable»
Чтобы заставить "botbuilder@4.0.0-preview1.2" работать, я внес следующие изменения в index.ts и bot.ts из этого примера https://github.com/Microsoft/BotBuilder-Samples/blob/master/samples/javascript_typescript/13.basic-bot/src/index.ts.
1) Удалить этот импорт (index.ts)
// import { BotConfiguration, IEndpointService } from 'botframework-config';
2) Удалить эту конфигурацию (index.ts)
// const BOT_FILE = path.join(__dirname, '..', (process.env.botFilePath || ''));
// let botConfig: BotConfiguration;
// try {
// // Read bot configuration from .bot file.
// botConfig = BotConfiguration.loadSync(BOT_FILE, process.env.botFileSecret);
// } catch (err) {
// console.error(`\nError reading bot file. Please ensure you have valid botFilePath and botFileSecret set for your environment.`);
// console.error(`\n - The botFileSecret is available under appsettings for your Azure Bot Service bot.`);
// console.error(`\n - If you are running this bot locally, consider adding a .env file with botFilePath and botFileSecret.`);
// console.error(`\n - See https://aka.ms/about-bot-file to learn more about .bot file its use and bot configuration.\n\n`);
// process.exit();
// }
3) избавиться от этого (index.ts)
// const BOT_CONFIGURATION = (process.env.NODE_ENV || DEV_ENVIRONMENT);
// const endpointConfig = <IEndpointService>botConfig.findServiceByNameOrId(BOT_CONFIGURATION);
4) ЗАМЕНИТЬ (index.ts)
// const adapter : BotFrameworkAdapter = new BotFrameworkAdapter({
// appId: endpointConfig.appId || process.env.microsoftAppID,
// appPassword: endpointConfig.appPassword || process.env.microsoftAppPassword
// });
С
const adapter : BotFrameworkAdapter = new BotFrameworkAdapter({
appId: process.env.microsoftAppID,
appPassword: process.env.microsoftAppPassword
});
5) ЗАМЕНИТЬ (index.ts)
// let bot: BasicBot;
// try {
// bot = new BasicBot(conversationState, userState, botConfig);
// } catch (err) {
// console.error(`[botInitializationError]: ${ err }`);
// process.exit();
// }
С
let bot: BasicBot;
try {
bot = new BasicBot(conversationState, userState);
} catch (err) {
console.error(`[botInitializationError]: ${ err }`);
// process.exit();
}
6) Теперь в bot.ts измените сигнатуру Bot-конструктора, удалив 3-й параметр "botConfig" https://github.com/Microsoft/BotBuilder-Samples/blob/master/samples/javascript_typescript/13.basic-bot/src/bot.ts.
REPLACE
// constructor(conversationState: ConversationState, userState: UserState, botConfig: BotConfiguration) {...
С
constructor(conversationState: ConversationState, userState: UserState) {...
7) Удалите все ссылки на botConfig в bot.ts, поскольку, похоже, это будет использоваться только для дополнительных служб Azure
// if (!botConfig) throw ('Missing parameter. botConfig is required');
//
// add the LUIS recognizer
// let luisConfig: LuisService;
// luisConfig = <LuisService>botConfig.findServiceByNameOrId(LUIS_CONFIGURATION);
// if (!luisConfig || !luisConfig.appId) throw ('Missing LUIS configuration. Please follow README.MD to create required LUIS applications.\n\n');
// this.luisRecognizer = new LuisRecognizer({
// applicationId: luisConfig.appId,
//
// CAUTION: Its better to assign and use a subscription key instead of authoring key here.
// endpointKey: luisConfig.authoringKey,
// endpoint: luisConfig.getEndpoint()
// });
8) Не забудьте удалить всю логику на основе удаленных переменных из шага 7 в bot.ts.