In general, the Bot Framework is a platform for building, connecting, testing, and deploying powerful and intelligent bots. You can think of a bot as an app that users interact with in a conversational way. Bots can communicate conversationally with text, cards, or speech. A bot may be as simple as basic pattern matching with a response or it may be a sophisticated weaving of artificial intelligence techniques with complex conversational state tracking and integration to existing business services.
The Bot Framework supports several popular channels for connecting your bots and people. Users can start conversations with your bot on any channel that you’ve configured your bot to work with (e.g. email, Facebook, Skype, Slack, SMS).

The Microsoft Bot Framework provides just what you need to build and connect intelligent bots that interact naturally wherever your users are talking, from text/SMS to Skype, Slack, Office 365 mail and other popular services.
Recently Microsoft added Cortana, Skype for business (Lync) and Bing as channels (according to Build 2017).

Why use the Bot Framework? Because it includes several helpers:

A Bot Builder (download from NuGet; see get started), which provides rich and full-featured SDKs for the .NET and Node.js platforms. The SDKs provide features that make interactions between bots and users much simpler. Bot Builder also includes an emulator for debugging your bots, as well as a large set of sample bots you can use as building blocks.

A Bot Framework portal that gives you one convenient place to register, connect, and manage your bot. It also provides diagnostic tools and a web chat control you can use to embed your bot on a web page.

The Bot Framework supports several popular channels for connecting your botsand people. Users can start conversations with your bot on any channel that you’ve configured your bot to work with, including email, Facebook, Skype, Slack, SMS: they are getting more and more (e.g. Cortana channel).

You can take advantage of Microsoft Cognitive Services to add smart features like natural language understanding, image recognition, speech and more. Learn more about adding intelligence to your bot.

======================================================

The best way to start can be to look to the quickstarts page where you can find a detailed walkthrough for creating your first boot with your preferred option:

Formflow and Appinsights (how you can use FormFlow, a special type of dialog within the Bot Framework, to automate the handling of guided conversation; how to easily add Application Insights to a bot to send telemetry to Azure for analysis later)

Enable speech recognition: The Bot Framework Emulator supports speech recognition via the Cognitive Services Speech API. This allows you to exercise your speech-enabled bot, or Cortana skill, via speech in the emulator during development. The Bot Framework Emulator provides speech recognition free of charge for up to three hours per bot per day.

If you already have a bot and would like to reach the Skype audience, your bot can easily be connected to Skype (or any supported channel) via the Bot Builder for REST API (provided it has an internet-accessible REST endpoint).

Direct Line is a REST API that allows you to add your bot into your service, mobile app, or webpage. You can write a client for the Direct Line API in any language. Simply code to the Direct Line protocol, generate a secret in the Direct Line configuration page, and talk to your bot from wherever your code lives. Direct Line is suitable for:

A good bot solves the problem that user needs to address and delivers a great user experience.

The process of designing a bot is like the process of designing an app or website:

Easily solve the user’s problem with the minimum number of steps and not requiring to type/talk too much, repeat information or explains things the bot should authomatically know,

Solve the user’s problem better/easier/faster than any of the alternative experiences,

Run on the devices and platforms the user cares about,

Easy discoverable and the users naturally know what to do when using it.

Less relevant are maters like how smart the bot is, how much natural language capability it has, whether it uses machine learning: obviously completely irrelevant is which programming language was used to create it for the end user prospective.

Well design especially the first interaction giving all the relevant information to the user in order he can intuitively understand how to proceed in using it: therefore starting the bot with an open-ended question such as “How can I help you?” is generally not recommended. It is much better to have buttons or lists of options to convey the capabilities of the bot to the user: using menu let the user avoid to type too much (just click on an item or write its id in the list) but you may anyway support a free form input so, if a user responds to the initial menu by typing rather than by selecting a menu option, your bot could attempt to parse the user’s text input.
If your bot collects personal data from the user, it’s important to convey as soon as possible the privacy issue and to describe what will be done with that data.

Bots have a UI, but it is made up of dialogs, rather than screens as it happens in sites and apps: dialogs enable the bot developer to logically separate various areas of bot functionality and guide conversational flow.
Dialogs may or may not have graphical interfaces. They may contain buttons, text and other elements or be entirely speech-based. Dialogs also contain actions to perform tasks such as invoking other dialogs or processing user input.