

How to translate Slack messages with Power Automate
Auto-translate Slack messages to any language by reacting with flag emojis using OpenAI and Power Automate.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
Microsoft 365 teams who need instant message translation without switching to third-party Slack bots
Not ideal for
Teams wanting sub-second translation responses or handling 500+ translations daily
Sync type
real-timeUse case type
notificationReal-World Example
A 25-person engineering team with developers in Spain, Germany, and Japan uses this to translate technical discussions instantly. Someone posts a debug solution in Spanish, teammates react with π©πͺ and π―π΅ flags, and the bot replies with German and Japanese translations within 10 seconds. Before automation, language barriers slowed problem-solving by hours.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently β Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into Power Automate
Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. All modules, filters, and field mappings are already configured β you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Reaction Emoji | ||
| Original Message Text | ||
| Target Language | ||
| Channel ID | ||
| Message Timestamp | ||
| User Who Reacted | ||
| OpenAI Model | ||
| Translation Result | ||
Step-by-Step Setup
My flows > + New flow > Automated cloud flow
Create new automated flow
Go to make.powerautomate.com and sign in with your work account. Click 'My flows' in the left sidebar, then the blue '+ New flow' button. Select 'Automated cloud flow' from the dropdown menu. Name it 'Slack Message Translator' and search for 'When a reaction is added to a message' in the trigger list.
- 1Click '+ New flow' in the top navigation
- 2Select 'Automated cloud flow'
- 3Type 'Slack Message Translator' as the flow name
- 4Search for 'reaction' in the trigger search box
- 5Select 'When a reaction is added to a message (Slack)'
Slack trigger > Sign in
Connect your Slack workspace
Click 'Sign in' on the Slack trigger card. You'll be redirected to Slack's OAuth screen asking for permissions. Make sure you're signed into the correct Slack workspace before approving. Grant permissions for reading messages, reactions, and posting replies. Power Automate needs these scopes to detect flag reactions and post translations back to channels.
- 1Click the 'Sign in' button on the Slack connector
- 2Select your Slack workspace from the list
- 3Review the requested permissions carefully
- 4Click 'Allow' to authorize Power Automate
- 5Wait for the green 'Connected' status
Slack trigger > Configure parameters
Configure reaction trigger settings
Leave the 'Team' field as your connected workspace. For 'Channel', click the dropdown and select 'Any channel' to monitor all channels, or pick specific channels if you only want translation in certain places. The 'User' field should remain empty to catch reactions from anyone. This setup makes the flow trigger whenever someone adds any emoji reaction to any message.
- 1Set Team to your connected workspace
- 2Click the Channel dropdown
- 3Select 'Any channel' for workspace-wide coverage
- 4Leave User field blank
- 5Leave Reaction field empty to catch all emoji types
New step > Control > Condition
Add condition to filter flag emojis
Click '+ New step' below the trigger and search for 'Condition' in the control actions. This filters reactions to only flag emojis that represent countries. In the condition builder, set the left side to 'Reaction' from the dynamic content menu. Set the operator to 'contains' and the right side to 'flag-' since Slack flag emojis follow the pattern ':flag-us:', ':flag-es:', etc.
- 1Click '+ New step' under the Slack trigger
- 2Search for 'Condition' and select it
- 3Click in the left condition box
- 4Select 'Reaction' from dynamic content
- 5Set operator to 'contains'
- 6Type 'flag-' in the right value box
Condition Yes branch > Data Operation > Compose
Map flag emoji to language code
In the 'Yes' branch of the condition, add a 'Compose' action to convert flag emojis to language codes OpenAI understands. Use a switch statement or nested conditions to map common flags: flag-us and flag-gb to 'English', flag-es to 'Spanish', flag-fr to 'French', flag-de to 'German', flag-it to 'Italian', flag-jp to 'Japanese', flag-kr to 'Korean', flag-cn to 'Chinese'. This ensures OpenAI gets proper language names instead of emoji codes.
- 1Click 'Add an action' in the Yes branch
- 2Search for 'Compose' and select it
- 3Click in the Inputs box
- 4Build a switch expression using if() functions
- 5Map each flag- pattern to its language name
Add this expression in the Compose action to handle more flag emoji variations and provide fallback language detection when users react with non-standard country emojis.
JavaScript β Code Stepif(βΈ Show code
if( contains(triggerOutputs()?['body/reaction'], 'flag-us'), 'English',
... expand to see full code
if(
contains(triggerOutputs()?['body/reaction'], 'flag-us'),
'English',
if(
contains(triggerOutputs()?['body/reaction'], 'flag-gb'),
'English',
if(
contains(triggerOutputs()?['body/reaction'], 'flag-es'),
'Spanish',
if(
contains(triggerOutputs()?['body/reaction'], 'flag-fr'),
'French',
if(
contains(triggerOutputs()?['body/reaction'], 'flag-de'),
'German',
if(
contains(triggerOutputs()?['body/reaction'], 'flag-it'),
'Italian',
if(
contains(triggerOutputs()?['body/reaction'], 'flag-jp'),
'Japanese',
'English'
)
)
)
)
)
)
)Condition Yes branch > Slack > Get message
Get the original message content
Add another action and search for 'Get message' from the Slack connector. This retrieves the full text of the message that received the flag reaction. Set the Team to your workspace and Channel to the 'Channel' value from the trigger dynamic content. For Message Timestamp, use the 'Message timestamp' field from the trigger - this uniquely identifies which message to translate.
- 1Click 'Add an action' after the Compose step
- 2Search for 'Get message' in Slack actions
- 3Set Team to your workspace
- 4Set Channel to dynamic 'Channel' from trigger
- 5Set Message Timestamp to 'Message timestamp' from trigger
Condition Yes branch > OpenAI > Complete chat completion
Connect to OpenAI
Add a new action and search for 'OpenAI' or 'HTTP' if OpenAI connector isn't available. If using the OpenAI connector, select 'Complete chat completion'. If using HTTP, you'll make a POST request to api.openai.com/v1/chat/completions. For direct OpenAI connector, you'll need your API key from platform.openai.com - go to API Keys section and create a new secret key specifically for this automation.
- 1Click 'Add an action' after Get message
- 2Search for 'OpenAI' in the connector list
- 3Select 'Complete chat completion'
- 4Click 'Sign in' or 'Add connection'
- 5Paste your OpenAI API key from platform.openai.com
OpenAI action > Configure parameters
Configure translation prompt
Set the Model to 'gpt-3.5-turbo' for cost efficiency or 'gpt-4' for better accuracy. In the Messages array, create a system message with the role 'system' and content like 'You are a translator. Translate the following message to [Language] and return only the translation, no additional text.' For the user message, set role to 'user' and content to the 'Text' field from the Get message action. Replace [Language] with the output from your Compose action.
- 1Set Model to 'gpt-3.5-turbo'
- 2Click 'Add new item' in Messages array
- 3Set Role to 'system' for first message
- 4Add translation instruction in Content field
- 5Add second message with Role 'user'
- 6Set Content to 'Text' from Get message dynamic content
Condition Yes branch > Slack > Post message to a channel
Post translation back to Slack
Add a final Slack action called 'Post message to a channel'. Set the Team to your workspace and Channel to the same 'Channel' from the trigger. For the message text, combine the flag emoji, original user mention, and translation. Use dynamic content to build something like 'πͺπΈ Translation for @[User]: [OpenAI response]'. Set 'Post as' to 'Flow bot' so translations appear from your automation.
- 1Add final action and search for 'Post message'
- 2Select 'Post message to a channel' from Slack
- 3Set Team to your workspace
- 4Set Channel to 'Channel' from trigger
- 5Build message text with flag, user mention, and translation
- 6Set 'Post as' to 'Flow bot'
Flow designer > Save
Save and test the flow
Click 'Save' in the top right corner and wait for validation to complete. Go to a Slack channel and post a test message, then react to it with a flag emoji like πͺπΈ. Watch the flow run history in Power Automate - successful runs show green checkmarks for each step. The translation should appear in Slack within 10-15 seconds if everything is configured correctly.
- 1Click 'Save' button in top navigation
- 2Wait for 'Your flow is ready to go' confirmation
- 3Go to your Slack workspace
- 4Post a test message in any channel
- 5React with a flag emoji
- 6Check Power Automate run history for results
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use Microsoft Power Automate for this if your team already lives in Microsoft 365 and wants translation without installing third-party Slack bots. The integration feels native since it uses your existing M365 security policies and doesn't require separate bot approvals. Power Automate's webhook-based triggers respond faster than polling solutions, getting translations posted within 10 seconds. Skip this approach if you need sub-second response times - Zapier's direct Slack integration is snappier for immediate translations.
Costs run about $15-30/month for a typical team doing 200-300 translations. OpenAI API calls cost $0.01-0.05 per translation depending on message length, while Power Automate Premium runs $15/month per user. At moderate usage, this costs more than dedicated translation bots like Translate Bot Pro at $8/month flat rate. The math only works if you're already paying for Power Automate licenses.
Make handles conditional logic better with its visual scenario builder - easier to map complex flag-to-language rules without nested if statements. Zapier's Slack integration triggers instantly while Power Automate sometimes has 30-second delays during peak hours. n8n gives you more control over the translation prompt and can handle batch requests efficiently. But Power Automate wins on enterprise security and compliance - it inherits your M365 data governance policies automatically.
You'll hit OpenAI's token limits on long technical posts or thread messages - anything over 2000 characters fails with cryptic errors. Slack's emoji naming isn't consistent across workspaces, so your flag detection breaks when teams use custom country emojis. Power Automate's flow editor becomes sluggish with complex conditional logic, making the flag-to-language mapping painful to build and debug.
Ideas for what to build next
- βAdd language detection β Use OpenAI to detect the source language automatically instead of assuming English. Helps with multilingual teams.
- βCreate translation threads β Post translations as thread replies instead of new messages to keep channels cleaner during busy conversations.
- βBuild usage analytics β Log translation requests to Excel or SharePoint to track which languages your team needs most and optimize API costs.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup