Proactive notifications, such as sending updates or announcements to specific users or groups via Teams chat, are an important feature for many applications. However, sending messages to a large audience can be a bit more complex compared to sending an email. One solution is to use a Power Automate flow, or Azure Logic App, with the Teams connector "Post a message in chat of channel" to loop through a list of users. However, this approach may hit the connector's throttling limit of 300 calls per 3600 seconds if the audience is too large.
To overcome this, here are three options for sending proactive messages from Power Automate or Azure Logic App:
Option 1 - Power Automate + Power Virtual Agent
The first option for sending proactive notifications is to use a Power Virtual Agent (PVA) bot deployed in Teams as the sender. This approach allows users to receive notifications with your PVA app's dedicated name and logo, rather than from Power Automate. This option is easy to implement and runs solely on the Power Platform, but it still has the same throttling limit of 300 messages per hour.
Pros: SaaS | no-code | good when number of users is low
Option 2 - Power Automate (or Azure Logic App) + Azure Bot Service API
A second option for sending proactive notifications is to utilize the Azure Bot Service API. This method uses the HTTP connector and POST method in Power Automate, which allows for a much higher throttling limit. However, like the other options, users will only receive these notifications if they have your Teams application installed with the bot capability enabled. To implement this option, I recommend reading the article by Cristiano Almeida Gonçalves, which provides detailed configuration steps. According to performance tests, this method can send up to ~15,000 messages per hour.
Option 3 - Power Automate (or Azure Logic App) + Company Communicator
The third and last option for sending proactive notifications to large audiences is to use the open-source Company Communicator application. This application is designed for communication with audiences of up to several 100,000 users, and includes a UI for admins to compose messages and track success and failure events. Additionally, the application has been updated to expose an API that can be called from a Power Automate flow with a single HTTP async call. This allows the process to run for a long period of time, without the need for additional complexity in the Power Automate flow to manage loops, retries, timeouts and failures. For more information on the solution, check out Adonis Latham's GitHub repository. Based on performance tests, this method can send up to ~50,000 messages per hour.