Reputation: 760
If i'm building a bot with the Microsoft Bot Framework, do i need to deploy my bot to Azure in order to register my bot HERE in order to configure the channels for the bot? Or can i simply deploy my bot to a normal (for example) IIS Server?
I couldnt find any information on this toppic and i dont want to use Azure.
Upvotes: 59
Views: 29114
Reputation: 76
It is totally possible.
I ran it 2 ways. 1st - restify service in a docker container - run locally with and ngrok and on AWS
// Create HTTP server.
const server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, () => {
console.log(`\n${server.name} listening to ${server.url}`);
});
async function main(req: WebRequest, context: TurnContext) {
logger.json("Request ->", req.body);
try {
for (const bot of allBots) {
await bot.run(context);
}
} catch (error) {
logger.error("Error processing request[server.ts]");
logger.error(error);
}
}
// Listen for incoming requests.
server.post("/api/messages", (req: WebRequest, res: WebResponse) => {
adapter.processActivity(req, res, async (context: TurnContext) => {
await main(req, context);
});
});
2nd - run on AWS Lambda with Serverless framework. Here is the adapter.
export function lambda(bots: ActivityHandler[]) {
const handler: Handler = async (event: any, _: Context, callback: Callback) => {
logger.json("Event to bot framework: ", event);
const reqWrapper: WebRequest = {
body: event.body,
headers: event.headers,
method: event.method,
query: event.query,
on: (_1: string, ..._2: any[]): any => {
// it needs to be empty
},
};
let statusCode: number;
const resWrapper: WebResponse = {
status: (code: number) => {
statusCode = code;
},
send: (body) => {
callback(null, {statusCode, body});
},
end: () => {
callback(null, { statusCode });
},
};
const adapter = await getAdapter();
adapter.processActivity(reqWrapper, resWrapper, async (context: TurnContext) => {
await main(context, bots);
});
};
return handler;
}
Upvotes: 2
Reputation: 2525
You need an account at Azure, but you don't need to host your bot directly at Azure. There are three options when you login to Azure dashboard: Web App Bot, Functions Bot and the Bot Channels Registration. Choose the Bot Channels Registration and type your bot's https URL (where you deployed it) there in settings.
Or if you want to debug your bot directly from the messenger (not emulator) you can download ngrok, then type in command line
ngrok.exe http <your port> -host-header="localhost:<your port>
then enter the ngrok proxy URL (without port) to Bot Channels Registration settings. Within several hours that temporary address will forward to your localhost.
Upvotes: 6
Reputation: 1518
Yes the developing a bot is totally possible without using Azure Cloud portal.
Testing on the bot emulator provided by Microsoft
But for publishing the bot on channels or web apps you will have to register the Bot with Azure bot service. Check more here: https://thewebspark.com/2018/04/15/is-microsoft-bot-framework-without-azure-possible/
Upvotes: 3
Reputation: 728
Yes your bot is like an API that is consumed by a chat frontend like Facebook Messenger, Skype etc. Check out this medium blog explaining how to host on Heroku https://medium.com/@chinnatiptaemkaeo/create-fb-bot-with-heroku-nodejs-microsoft-bot-framework-687bd2893238
Upvotes: 2
Reputation: 14787
Yes, it should be possible to run your bot on IIS or in any other hosting service (including cloud hostings besides Azure) as explained here. You will have to make sure that your bot has an internet-accessible endpoint and a valid HTTPS cert.
Regarding the requirements for the HTTPS cert, I'm copying the info for this thread for your reference:
The Bot Framework requires that the x.509v3 certificate exposed by your endpoint be current and valid. Most of the checks for "current and valid" are standard checks for server certs: the CN must match the hostname, it must not be expired, it must not be listed in a CRL, it must have the correct set of EKUs, etc.
Most importantly, your cert must chain to a root certificate authority trusted by Microsoft. The latest list of these CAs is available here.
Also, you can register your bot and even enable the channels without deploying to Azure or any other hosting. You can temporarily use ngrok to create a secure tunnel to your localhost environment and test the bot in your email channel before exposing it to other users. BTW, you don't need to Publish your bot in the BotFramework portal, just register it. Publishing is just for those bots that would like to appear in the Bot Directory.
Upvotes: 60