I was not really enthusiastic about Microsoft Teams before I got deep into it, tested it and try to handle all its features, but I have become convinced now that it is an excellent product. Firstly, it is a Microsoft application, without judgement; I am a Mac user, so when it comes to using and installing applications from the competition, my first reaction is to not use them but to research alternatives. Next, I don’t know how you feel about the application’s colors, but I am not a big fan of the two faded purples.

Anyhow, eleven days after the article on integrating our timeNough prototype with Slack, we were left with no choice but to integrate Teams, a direct competitor to Slack, into our line of business. My previous post even included a mention of our next logical integration, Microsoft Teams being one of them. As a guideline for selecting a new chat app for integration, I have listed the same 6 criteria:

  1. The chat app is available through web browser, mobile app and desktop app,
  2. The chat app is able to send API events in JSON format about anything happening,
  3. The chat app allows internal apps development that can be each of our bots,
  4. All of our bots can be contacted seamlessly through the chat app (Direct messages),
  5. Our bots can be tagged and mentioned in any message by using the @ sign,
  6. A API reaction to an API event happens in an instant, like with Slack.

Microsoft teams logo on a table and smartphone, representing Microsoft Teams

As a technical founder of timeNough, I was deeply involved in our most recent endeavour: the integration of TMNGH.com into Microsoft Teams, and I can confirm that Teams meets these six requirements perfectly. The platform was an excellent choice, resulting in two testable and effective integrations for our enterprise software prototype made of 8 internal bots. Our goal is still to solve time-related problems in the workplace and for any type of organization.

What we wanted to keep and what we wanted to have:

timeNough is an enterprise software that aims to address the following problem: there is an apparent lack of sense, morality and decency in the corporate world when it comes to dealing with timesheets, time monitoring, business intelligence, and efficiency improvements. Too often, the end justifies the means. Employees must be tracked and not trusted by default. There are tons of existing solutions that offer unique interfaces where everything must be logged, followed, spied, and sometimes even invasive surveillance must take place. Toxic workplaces compel workers to feed machines.

Employees have obvious pain points when using these tools; focus is often compromised as well as promises of productivity gains. With a minimalist philosophy, timeNough propose employee monitoring with less micromanagement, more comfort, by not adding a new interface to handle but by being plugged into existing ones. Corporate chat apps and mailboxes are the most frequently used ones, knowing that communication is key to any organization. As a result, timeNough has logically focused on such applications.

Our bots system plugged into a prominent corporate chat app

In the event that this is not the case after reading the paragraph, I suggest that you read my previous post that discussed the Slack integration of TMNGH, so that you would have a better understanding of what an integration is, what Slack is and what we have already achieved. It is recommended because Microsoft Teams integration has been initiated in a second step after a successful prior integration on a competitor’s software: Slack, the main product offered by Slack Technologies, an American unicorn.

This is a corner of a smartphone with Slack and Teams apps.

In corporate environments, Slack and Teams are simply the two most widely used chat applications. Thus, if you choose to make one day a software available in one application of that kind, I think it makes sense to be present in the other app at the same time, regardless of how difficult the task of being present is. If you provide a SaaS service like we do, the larger your app’s scope, the larger your potential audience, B2B customers and B2B end-users.

Five key points that should be included in both applications

The article on Slack integration discusses five notions and components we really enjoyed about Slack as a chat application, five characteristics that clearly made integration possible and made it even easier to develop:

  • One. Everything is contained within a workspace belonging to a client company, so we could have imagined a fake client company of timeNough called CoreNough LLC.
  • Two. Any curious tester can easily gain access to this workspace and act like an employee of this fake client company, and will be able to see what these employees can do in this workspace as well as test our prototype integration. Our bot system must be able to interact with employees and testers inside the workspace only, which is something we must maintain from one integration to another. A workspace is similar to a secured box where only staff can access it.
  • Three. In Slack, there were three ways to communicate with the bots: through direct messages, by using the @ symbol, and by using something called commands and the slash / symbol. This means that the bots within the Teams app or Slack app should be mentionable. When you type @, a suggestion window should display the names of the other users as well as the names of the bots.
  • There is a cool smiling man using smartphone on grey wall, happy about the requirements of the integration

  • Four. We also wanted to preserve the way the bot responds to solicitations. All three methods of activating a bot in Slack result in the bot initiating a new conversation with the user, with everything being kept between the user and the bot as if it were a one-to-one conversation. For example, if you mention the bot in a public channel, the bot will respond in a direct message conversation only, not in the channel. The same applies to commands. For us, this is especially important because the bots can answer with private time data, such as the Time Clock-out bot, which provides you with the total number of working hours for the day.
  • Five. As discussed also in the article on Slack integration: regression is not an option, which implies that everything that worked on the initial email system should still work with the SMS system, the Slack integration, and the Teams integration. As bots are all interconnected, a signal sent via one medium to one bot can be seen and detected by another bot via another medium, triggering the appropriate response.

What was required on a technical level

Next, we will examine the more boring part of Microsoft Teams integration: the technical aspects. I am referring to boring in the sense that if you are not technical or do not wish to be confused or lost by technical explanations you may not comprehend, you can skip this section. Nevertheless, it is worthwhile to try and figure out what kind of work that implies in the end. Microsoft Teams is a software program, and if you wish to create your own software that will be plugged into or related to Teams in any possible way, you will require some technical reading.

There is a smart civil architect engineer inspecting and working outdoors building, representing the technical level required for the timeNough Microsoft Teams integration.

As well as being one of the most successful operating systems ever released and adopted worldwide, Microsoft also offers a vast array of software used in the workplace and in private. Some of them do not exist anymore, may have changed their name, and some of them are legends which probably will endure forever, such as Microsoft Word, PowerPoint, and Excel. In addition to Microsoft Edge for rebranding the famous Internet Explorer, Microsoft Teams is a more recent chat and meetings app, supposed to take the place of Skype Business one day.

Be familiar with Microsoft solutions and environments

Rather than going into the history and the eloge of them, one thing is for certain, when it comes to developing something related to a Microsoft product, it can be a significant undertaking. Why? In doing so, you are speaking to billions of end users, billions of computers and systems that can understand you and use your creation. And like Google, Microsoft has also introduced certification programs, where IT professionals proudly mention their certification on their resumes and on LinkedIn in order to be more valuable on the market.

To me, this indicates that Microsoft represents a complete subfield within the world of information technology as a whole. If you are familiar with Mac OS X and Apple products, it is very similar. However, at timeNough, we are just two founders, one with a Mac Book pro, one with a Windows, and both without sufficient funding to hire a Microsoft expert. In other words, if a Microsoft application falls within our development path, like Microsoft Teams, we will simply need to devote a consequent amount of energy and time to becoming familiar with the Microsoft environment around it, on our own.

Microsoft Office 365 new icons displayed.

You don’t have to worry, even if it’s a company that offers a lot of services for a monthly subscription fee, such as Microsoft Office 365, the point of entry is usually free, and the documentation and online resources are also free and remarkably accessible. Although I initially thought it was not the case prior to working on the Microsoft Teams integration, all Microsoft documentation I had to read was very well organized and easy to understand, so they did an excellent job, congratulations.

Publishing one in-app program with 13 Microsoft apps and services

Now let’s take a closer look at all of the Microsoft services and apps you will need to deal with if you want to integrate one of your app with one of them:

  • Microsoft 365 Business Basic: was the starting point here, as we intended to create a Microsoft Teams workspace for a fake company such as CoreNough LLC. To do this, we simply created a Microsoft , as if we were that company.
  • Microsoft Edge: though I use Google Chrome as my favorite browser in a Mac OS environment, I chose to do anything related to Microsoft and Microsoft Teams within a Microsoft browser. Thankfully, Microsoft Edge is available on Macs as well.
  • Microsoft Admin Portal: you have access to that specific interface once you have a Microsoft 365 Business Basic account, in which you are like the company’s IT manager, the Microsoft’s boss, and can control a number of things. By the way, Microsoft considers you to be a tenant and provides you with a tenant ID. It’s a hash string such as 1g89g1j5-u307-24p9-08w5-6q28l1357bn1.
  • There is a smartphone with Office 365 Admin dashboard open in it

  • Microsoft Azure: is another major dashboard and service name that stores quite a lot of information related to Active Directory, users within your organization, roles and rights, API keys, custom in-app programs, cloud features and so on. In the beginning, you may not realize it, but after a while, everything will pass through Microsoft Azure.
  • Microsoft Teams Admin center: is another dashboard used for managing and supervising everything related to Microsoft Teams, a second-level backoffice that is less important than Microsoft Azure, but necessary for activities associated with Microsoft Teams, such as channel policies or in-app programs, used by the company’s employees.
  • Microsoft Teams: is here the final application, which is the focus of this entire article.
  • Microsoft Teams Dev Portal: it is this time a third-level dashboard dedicated to managing all aspects of the publication of in-app programs developed for Microsoft Teams and bots, more for technical users. You may have noticed that there is now a lengthy list of dashboards and administrator interfaces to deal with.
  • Microsoft 365 Developer Center: up until now, if you wanted to develop a bot or a Teams feature, you were able to do it in a really local way, which meant that only your organization within Microsoft could take advantage of it. With this new dashboard and separated service, you will be able to make your work publicly accessible through something bigger, for a wider audience: the Microsoft Store, used by billions of users worldwide.
  • Microsoft Learn: in my opinion, this is the definitive source for all Microsoft product documentation and support. Any technical information, tutorial, guide, or code example can be found through this free online platform. A great deal of effort has been made by Microsoft to document everything, from APIs to specific software applications usage.
  • This is the homepage of VisualStudio website on the display of PC, reference of the Visual Studio IDE software

  • Microsoft Visual Studio Code: the time will come when you will have to write real code, in TypeScript for instance. With this excellent IDE or code editor, you have the option not to start from scratch but from a sample of a Microsoft Teams bot, or from an in-app program with code shared on Github, another Microsoft-owned service.
  • Microsoft Teams Toolkit: installing this extension in VS Code will help you through the entire process of publishing your code to Microsoft Azure, and making it available as an effective Microsoft Teams in-app feature. It covers the concepts of provisioning, deployment, publication, and app updates.
  • Microsoft Bot Framework REST API: if you wish to communicate with all Microsoft systems in your app, you should use one of the various APIs Microsoft provides behind the scenes. Your API requests will need to be authenticated using OAuth and something called a Bearer token, and you must know how to obtain one.
  • Microsoft Graph REST API: is another Microsoft API that is required if you wish, for example, to invite external users to join your Microsoft Teams workspace using HTTP requests.

How does it differ from the Slack chat integration?

As a reminder, timeNough is still a bot system targeted to employees of companies and institutions where the bots remain silent in the background, waiting to be activated upon receiving signals. As of now, signals can be sent via three methods: email, SMS, or Slack message (Slack mention and Slack command). This means that the bots do not activate themselves without a clear and real signal being sent; they are waiting to be piloted, solicited. The principle remains the same with this new Microsoft Teams integration…

There is an angry and frustrated young woman arguing with person being rude for no reason, shrugging with hands spread sideways in dismay, representing the question: how does it differ from the Slack chat integration

Bots are bundled instead of being accessed individually

Both email and Slack integration have been designed in the same way: each bot has its own entry point for communication: an email address such as b+in@corenough.com and a mentionable name such as @Time Clock-in for the Time Clock-in bot. It is the same for the 7 other bots, so that each time an employee needs to deal with a time-related issue, a bot is available to help him. There are still 8 bots available for SMS and Teams integration, but they will be wrapped. It means that you will have access to them, but through a single door.

As an example, we have created a single phone number, +1 (862) 305-8560 (a US number), that when sending text messages to, you will be able to ask for a bot through a key phrase in the message. For example, if you send “late” in your SMS to that number, our program will interpret it as a request for the Time Late bot and will relay it to that bot who will respond through that same phone number. With one dedicated phone number, it is not possible to reach each bot individually. Since this is just a prototype, things may change and evolve, or even be customized depending on the client’s needs, but for now, this is what we have implemented.

A combination of mentions and commands for a better user experience

Microsoft Teams has already dedicated energy and effort to allowing their developers community to create bots within the platform, and has proposed a crucial feature called commands, similar to Slack. This means that when you begin to develop a bot or in-app program for Microsoft Teams, the commands mechanism is one of the first main features that should be considered. If you start with the Hello-bot sample available here, you will find that command system built into it. In terms of user experience, it is very powerful.

There is a customer using online service with chat bot to get support.

Commands are key words that trigger specific actions in the Microsoft Teams app when you type them. The app will display a suggestion box if a command is known, similar to Slack, so that the user will not have to type the full command letters. If you would like the command to look like Slack, you can begin it with the slash symbol “/”. Normally, the text following the command is considered a command parameter or user input; however, you may decide to ignore it in your bot or in-app program.

One upfront bot that relays instructions to 8 background bots

Later, I will explain how to join and test the Microsoft Teams app of the fake company CoreNough LLC and to test our timeNough integration there. However, I can inform you that all 8 bots discussed previously are available in a single in-app program that we developed, timeNough [prototype], within which all 8 bots can be accessed via 8 commands: /clock-in for the Time Clock-in bot, /clock-out for the Time Clock-out bot, /pause for the Time Pause bot, /back for the Time Back bot, /late for the Time Late bot, /away for the Time Away bot, /logger for the Time Logger bot and /quant for the Time Quant bot.

In Slack, each bot could be triggered by sending a direct message to it, mentioning it, or typing a command. In Microsoft Teams, there will be only one bot acting as the wrapper, and you can only communicate with him via direct message and mentions. The commands follow the mentioning, or if you are in a direct message conversation with the bot, should be indicated in your messages.

Microsoft Teams interface of CoreNough LLC, with John Doeson logged in and the list of users. He is about to send a new message in the General channel by tagging the timeNough bot, a list of commands is thus displayed.

For example, if you are in a Teams channel or in a private conversation with any Teams user, you must mention timeNough [prototype] with a @, and then Microsoft Teams will open a suggestion box with all possible commands, each of which will call a specific bot once you click send. The bots cannot be used if you type a command without specifying @timeNough [prototype], because they are all wrapped within, like with the SMS medium explained earlier.

What is the best way to test it yourself, concretely?

Slack proposes invitation features to workspace administrators. In less than three minutes, the external user can register and test the timeNough bot integration by providing his or her email address. With Microsoft Teams, it is not more complicated or different. The invitation mechanism is the same, but Microsoft requires the email address to be associated with a Microsoft account. A smart move considering that Microsoft offers a wide range of services as part of a Microsoft account, in addition to Teams, but also a wide range of applications and online tools.

An email address associated with a Microsoft account in any way

It is necessary for you to create a Microsoft account if you do not already have one, either personal, educational, or professional, and then, only after that, will you be able to access the CoreNough Microsoft Teams chat interface. By following this link, you can set one up. Afterward, the invitation process begins in this other link, which represents an email received by a specimen employee of CoreNough, John Doeson. We have designed everything with purpose. This is a working mailbox that can effectively receive and send emails on behalf of John, but some emails are permanent and should be considered wikis, special pages where we describe and explain the prototype idea.

There is a screen on sign in to Microsoft account representing the need of an account of that nature for testing the timeNough Microsoft Teams integration

The purpose of this page is to provide a starting point for what we call whitelisting. It was initially possible to test the prototype through email signals, and one of the key components of the project was the security of the client organization. In order to ensure that the prototype is secure, we implemented a pretty basic security policy: if CoreNough LLC is the client, CoreNough employees will have email addresses ending in @corenough.com, and if the 8 bots will be hidden in internal email addresses also ending in @corenough.com, we will have a system that is completely isolated from the outside world, hermetic, and protected by default at the end.

Accordingly, if a tester such as you or anyone else wishes to test all that and gain a better understanding of it, he must be authorized, trusted, and the system must create a special rule for him, simply because you are or he is not an employee of CoreNough LLC. That is why we have implemented this whitelisting process, which basically requires you to enter any email address in the displayed field and submit. In addition, we decided to include a second validation button below the blue one, in the color of Microsoft Teams, which will trigger the invitation process for CoreNough‘s Microsoft Teams interface. There is a strong connection between these two processes, which is why we included it there.

An email address whitelisted and trusted by our timeNough system

Slack users have an email address, and Microsoft Teams users also have an email address, so our bots can obtain that information and begin their inquiries with the following question: Is the user with this specific email address authorized and trusted by CoreNough and present in the system? Is it true or false? If the answer is false, they will all stop and respond with an error, as it is a breach of the security measures in place. That is why I can only recommend you go to that whitelisting page, fill in your email address, no matter if it is a professional or personal one, or if you have already used it with Google, Apple, or Microsoft, then click on the first blue button titled “Whitelist this address“.

This is the corporate mailbox of the specimen John Doeson and a permanent dedicated to the whitelisting process and getting an invitation to the Microsoft Teams of CoreNough LLC

After receiving the confirmation email, follow the instructions in the email, and then return to the same page, fill in the same email address, and then click the second button titled “Invite to Microsoft Teams“. As soon as an invitation email is sent, you will be directed to a Microsoft sign in page, where you will then be able to access CoreNough’s Microsoft Teams interface. There, you will finally be able to test the integration of timeNough with Microsoft Teams, to observe the bots in action, to test concretely how the mention and commands mechanisms work, and how the bots are actually integrated into a single entry point, which makes the things seamless and quite straightforward.

If you are really interested in testing that Microsoft Teams integration but have encountered difficulties in the process or for being able to connect to the Teams interface of CoreNough, please contact us at mvp@timenough.com. We had to put in place a whole assignation API process in the background, which was quite challenging, even for us when it was being developed. Thanks for visiting this blog and for taking the time to read it.