Intermediate~15 min setupAI & CommunicationVerified April 2026
OpenAI logo
Slack logo

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-time

Use case type

notification

Real-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.

/mo
505005K50K

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

Skip the setup

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.

Slack workspace admin permissions to install Power Automate connector
OpenAI API account with billing enabled and active API key
Microsoft 365 Business Premium or Power Automate license
Slack channels where translation bot can read messages and post replies

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Reaction Emoji
Original Message Text
Target Language
Channel ID
Message Timestamp
User Who Reacted
OpenAI Model
Translation Result

Step-by-Step Setup

1

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.

  1. 1Click '+ New flow' in the top navigation
  2. 2Select 'Automated cloud flow'
  3. 3Type 'Slack Message Translator' as the flow name
  4. 4Search for 'reaction' in the trigger search box
  5. 5Select 'When a reaction is added to a message (Slack)'
βœ“ What you should see: You should see the Slack trigger card with empty connection fields ready to configure.
⚠
Common mistake β€” The Slack connector requires admin approval in most corporate tenants - request access before building.
2

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.

  1. 1Click the 'Sign in' button on the Slack connector
  2. 2Select your Slack workspace from the list
  3. 3Review the requested permissions carefully
  4. 4Click 'Allow' to authorize Power Automate
  5. 5Wait for the green 'Connected' status
βœ“ What you should see: The trigger card shows 'Connected to [Your Workspace Name]' with a green checkmark.
⚠
Common mistake β€” If you see 'Workspace not found', you need Slack admin rights or must request the Power Automate app installation.
Power Automate settings
Connection
Choose a connection…Add
click Add
OpenAI
Log in to authorize
Authorize Power Automate
popup window
βœ“
Connected
green checkmark
3

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.

  1. 1Set Team to your connected workspace
  2. 2Click the Channel dropdown
  3. 3Select 'Any channel' for workspace-wide coverage
  4. 4Leave User field blank
  5. 5Leave Reaction field empty to catch all emoji types
βœ“ What you should see: The trigger shows 'Any channel' selected with all other fields properly configured or empty.
Power Automate
+
click +
search apps
OpenAI
OP
OpenAI
Configure reaction trigger s…
OpenAI
OP
module added
4

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.

  1. 1Click '+ New step' under the Slack trigger
  2. 2Search for 'Condition' and select it
  3. 3Click in the left condition box
  4. 4Select 'Reaction' from dynamic content
  5. 5Set operator to 'contains'
  6. 6Type 'flag-' in the right value box
βœ“ What you should see: The condition shows 'Reaction contains flag-' and splits into Yes/No branches.
⚠
Common mistake β€” Some custom flag emojis don't follow the 'flag-' pattern and won't trigger - test with your workspace's emoji list.
OpenAI
OP
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Slack
SL
notified
5

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.

  1. 1Click 'Add an action' in the Yes branch
  2. 2Search for 'Compose' and select it
  3. 3Click in the Inputs box
  4. 4Build a switch expression using if() functions
  5. 5Map each flag- pattern to its language name
βœ“ What you should see: The Compose action shows a complex if() expression that converts flag emojis to language names.
⚠
Common mistake β€” OpenAI is picky about language names - use 'Japanese' not 'Japan' or translations will fail with API errors.

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'
            )
          )
        )
      )
    )
  )
)
OpenAI fields
choices[0].message.content
model
usage.prompt_tokens
usage.completion_tokens
finish_reason
available as variables:
1.props.choices[0].message.content
1.props.model
1.props.usage.prompt_tokens
1.props.usage.completion_tokens
1.props.finish_reason
6

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.

  1. 1Click 'Add an action' after the Compose step
  2. 2Search for 'Get message' in Slack actions
  3. 3Set Team to your workspace
  4. 4Set Channel to dynamic 'Channel' from trigger
  5. 5Set Message Timestamp to 'Message timestamp' from trigger
βœ“ What you should see: The Get message card shows all fields populated with dynamic content from the reaction trigger.
⚠
Common mistake β€” Map fields using the variable picker β€” don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
7

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.

  1. 1Click 'Add an action' after Get message
  2. 2Search for 'OpenAI' in the connector list
  3. 3Select 'Complete chat completion'
  4. 4Click 'Sign in' or 'Add connection'
  5. 5Paste your OpenAI API key from platform.openai.com
βœ“ What you should see: The OpenAI action shows 'Connected' status with empty parameter fields ready to configure.
⚠
Common mistake β€” Store the API key in Power Automate's secure connection - never paste it directly in action fields where it's visible.
8

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.

  1. 1Set Model to 'gpt-3.5-turbo'
  2. 2Click 'Add new item' in Messages array
  3. 3Set Role to 'system' for first message
  4. 4Add translation instruction in Content field
  5. 5Add second message with Role 'user'
  6. 6Set Content to 'Text' from Get message dynamic content
βœ“ What you should see: The OpenAI action shows a properly formatted messages array with system and user roles configured.
⚠
Common mistake β€” Exceeding 4000 tokens (roughly 3000 words) will cause API failures - add a condition to check message length first.
9

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.

  1. 1Add final action and search for 'Post message'
  2. 2Select 'Post message to a channel' from Slack
  3. 3Set Team to your workspace
  4. 4Set Channel to 'Channel' from trigger
  5. 5Build message text with flag, user mention, and translation
  6. 6Set 'Post as' to 'Flow bot'
βœ“ What you should see: The Post message action shows a formatted message template using dynamic content from previous steps.
10

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.

  1. 1Click 'Save' button in top navigation
  2. 2Wait for 'Your flow is ready to go' confirmation
  3. 3Go to your Slack workspace
  4. 4Post a test message in any channel
  5. 5React with a flag emoji
  6. 6Check Power Automate run history for results
βœ“ What you should see: You see a translated message posted by Flow bot in the Slack channel within 15 seconds of adding the flag reaction.
⚠
Common mistake β€” First runs take longer due to cold start - subsequent translations are faster once the flow is warmed up.
Power Automate
β–Ά Test flow
executed
βœ“
OpenAI
βœ“
Slack
Slack
πŸ”” notification
received

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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

Was this guide helpful?
← OpenAI + Slack overviewPower Automate profile β†’