VestaBot Revolution: Azure-Powered Innovation at Cloudforce

Earlier this year Cloudforce acquired the Vestaboard, a smart messaging display, and decided to include it as a permanent fixture in our office’s lobby. This new addition to our office ecosystem was the catalyst for Cloudforce’s first official Hackathon, the goal of which was to create an innovative, AI-driven solution using the power of Azure and the Vestaboard’s application programming interface (API). Since then, we have continued searching for innovative ways to enhance the functionality of the Vestaboard.

We wanted to make sending messages to the Vestaboard and interacting with images generated by the Vestaboard available to everyone in our organization. So, this summer we made it one of our quarterly objectives to enhance the functionality of the VestaBot. The VestaBot is a product of the Hackathon that allowed us to send messages to the Vestaboard. In addition to sending messages, we wanted to use this Teams bot to control several administrative functions for the entire solution developed for the board. We wanted to be able to save, display, and adjust the automated posting of custom images to the Vestaboard. Additionally, certain administrative functions of the app needed to be limited to a list of administrators based on attributes available in Teams.

The Solution

Our solution makes use of an Azure function app and a Teams outgoing webhook to facilitate communication between the Vestaboard, Azure, and the VestaBot in Teams. The solution relies on the function app acting as an intermediary between the Vestaboard and any Teams channel that has an outgoing webhook configured in it for the VestaBot.


The Teams component of this solution is very easy to configure and does not require any coding. To create an outgoing webhook, access the settings of any Teams channel and navigate to the “Apps” section. There you will be able to select the option to configure an outgoing webhook at the bottom of the page. Here is where you can assign the bot a name, description, and most importantly, a callback URL. The callback URL is where Teams will send the message and any associated information like the sender, timestamp, etc. After sending the message payload in the form of a JSON object, the outgoing webhook waits to receive a response. The destination, in our case an Azure function, has 5 seconds to respond with a JSON object of its own that contains the correct response for the bot. Within 5 seconds the Azure function must evaluate what the user sent to the bot, communicate with the Vestaboard API, form a response object, and send it back to Teams.


Azure Functions is a serverless, event-driven computing resource that allows developers to focus on implementing the business logic of a solution quickly and efficiently. Functions supports several languages for development in Azure, but for this project we used PowerShell to implement the bot command logic. Azure Functions executes code based on triggers that can originate from various Azure resource events, or on a timer. The Vestaboard function acts as an endpoint for, and is triggered by, http requests. Any valid request it receives has the content of the message evaluated by the logic of the function and is replied to by the bot.

Azure Functions can integrate Azure resources in the form of input and output bindings. This allows developers to send data to, and receive it from, Azure resources. We used this functionality to leverage Azure table storage as a repository for information that needed to persist across executions of the function. This allowed us to store a table of saved images, admin users, and user messages.


This project made it easier for our staff to make use of the Vestaboard. Users can now save images, pull a list of saved images, and display their favorites whenever they need to. Additionally, we were able to track admin status by message sender and expose the ability to delete images and alter the automatic image rotation timer for them. Throughout the process, other enhancements to the way messages are handled and the overall operation of the app were included to improve the performance of the solution. The Cloudforce office is an ongoing project. Every quarter the technologists on our team are looking for new ways to integrate new technologies and enhance the capabilities of our smart office.

Michael Bost

For Michael, a passion for learning and acquiring new skills drives a multitude of non-stop professional, technical, and academic pursuits. Michael’s drive and ambition took root in his days as an information technology major at North Carolina Agricultural and Technical State University, where his myriad experiences led to advancement in various areas of focus. Following graduation, Michael participated in the Cloudforce internship program, and has since gone on to receive his AZ-900 certification and become a Cloud Applications Associate. Moving forward, Michael is eager to tackle the diverse array of challenges and opportunities presented by the wide array of public and private sector clients served by Cloudforce.

Recommended for you.