Can you build a Microsoft Teams bot without using Azure?

Yes. But also, no. Let me explain.

One important concept to understand right away is that Microsoft Teams apps never directly communicate with your web services. A Teams app as installed in the client is actually just a JSON manifest file and metadata (icons, permissions, etc.) - typically, it looks like this. And if you study that manifest (or the full schema), what you'll quickly notice is that nowhere in the definition for a bot (or messaging extension) do you provide your web service endpoints. So how does Teams ultimately route requests made in the client to your web service?

The Bot Framework Service

The key is the Microsoft Application ID, which you obtain by registering your bot with the Bot Framework Service. In the Teams app manifest you specify the Bot ID, which is equivalent to the Microsoft App ID. When you interact with an app in Teams, the Teams client contacts the Bot Framework Service (which lives in Azure), which in turn routes the request to your web service endpoint - this is why you have to provide your endpoint during the registration process.

Your web service, typically just a single endpoint like /api/messages on which you receive all the requests, can be hosted anywhere you want! You can host this on AWS, GCP, Heroku, etc. You can even host this as a function - using AWS Lambda functions or Azure functions. In most of the Microsoft samples, this is hosted on the Azure PaaS platform, called App Service. So the core functionality of your Teams app can be hosted outside of Azure - just set the endpoint appropriately when registering with the Bot Framework Service.

However, there is no escaping that your bot must be registered with the Bot Framework Service, and this is why the answer to the original question is a bit muddy. Technically, you can register your bot with the service without an Azure subscription. You can do that directly from App Studio or from the corresponding web portal https://dev.botframework.com/bots. And you can find more detail about that process here.

However, as I mentioned in a previous article, the Microsoft App ID you use is ultimately an Azure Activity Directory application ID. This is all Azure under the covers - and indeed if you later login to the Azure Portal with that Microsoft account you used to login to https://dev.botframework.com/bots you'll find your bot registration listed under http://aka.ms/AppRegistrations.

So yes. But also, no.