Beginner~12 min setupAI & CommunicationVerified April 2026
OpenAI logo
Slack logo

How to Auto-Translate Slack Messages with OpenAI and Make

React to any Slack message with a flag emoji and automatically translate it to that language using OpenAI's GPT models.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

Teams that frequently communicate across languages and want instant Slack translations without switching apps.

Not ideal for

Workspaces that only need one target language or translate fewer than 50 messages per month.

Sync type

real-time

Use case type

notification

Real-World Example

πŸ’‘

A 25-person remote marketing agency with team members in Spain, France, and Germany uses this to translate strategy discussions instantly. Before automation, non-English speakers would skip participating in #general or ask for manual translations hours later. Now anyone can react with their flag emoji and get real-time translations, increasing participation by 40%.

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 Make

Copy the pre-built Make blueprint and paste it straight into Make. 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 access to install Make bot
OpenAI API key with GPT-3.5-turbo access
Make account on Free or paid plan
Knowledge of your workspace's flag emoji names

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Channel IDchannel
Message Timestampmessage_ts
Reaction Emojireaction
Message Texttext
Translation Contentchoices[0].message.content
1 optional fieldβ–Έ show
User IDuser

Step-by-Step Setup

1

Scenarios > + > Slack > Watch Reactions Added

Create New Scenario

Start a fresh Make scenario to handle the emoji reaction trigger. This will be the entry point for all translation requests.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Click the large '+' button in the center
  3. 3Search for 'Slack' in the app list
  4. 4Select 'Watch Reactions Added' trigger
βœ“ What you should see: You should see a Slack module labeled 'Watch Reactions Added' in your scenario canvas.
2

Slack Module > Connection > Create a connection

Connect Slack Account

Authenticate Make with your Slack workspace. You'll need admin permissions to install the Make bot.

  1. 1Click 'Create a connection' inside the Slack module
  2. 2Click 'Sign in with Slack' in the popup
  3. 3Select your workspace from the dropdown
  4. 4Click 'Allow' to grant Make the required permissions
βœ“ What you should see: The connection field shows your Slack workspace name with a green checkmark.
⚠
Common mistake β€” Don't use a personal Slack token β€” the bot needs workspace-level permissions to watch reactions across channels.
Make settings
Connection
Choose a connection…Add
click Add
OpenAI
Log in to authorize
Authorize Make
popup window
βœ“
Connected
green checkmark
3

Slack Module > Settings > Advanced settings

Configure Reaction Trigger

Set the trigger to watch for flag emoji reactions specifically. This filters out non-translation reactions upfront.

  1. 1Leave 'Channel' blank to monitor all channels
  2. 2Set 'Limit' to 100
  3. 3Click 'Show advanced settings'
  4. 4In 'Reaction' field, enter 'flag-' to catch all flag emojis
βœ“ What you should see: The module shows monitoring all channels with a 100-item limit and flag- reaction filter.
⚠
Common mistake β€” Setting a specific channel limits functionality β€” leave blank unless you only want translations in one channel.
Make
+
click +
search apps
OpenAI
OP
OpenAI
Configure Reaction Trigger
OpenAI
OP
module added
4

Flow Control > Router

Add Router Module

Insert a router to handle different flag emojis and route to appropriate language codes. This maps visual flags to OpenAI language parameters.

  1. 1Click the small '+' after the Slack module
  2. 2Select 'Flow Control' from the category list
  3. 3Choose 'Router' from the options
  4. 4Click 'OK' to add the router
βœ“ What you should see: A router module appears with one default route path ready for configuration.
5

Router > Add another route > Set up a filter

Create Language Routes

Add separate routes for each flag emoji you want to support. Start with 3-4 common languages to test the workflow.

  1. 1Click 'Add another route' on the router
  2. 2Set route 1 filter: 'reaction' equals 'flag-es' (Spanish)
  3. 3Set route 2 filter: 'reaction' equals 'flag-fr' (French)
  4. 4Add route 3 filter: 'reaction' equals 'flag-de' (German)
βœ“ What you should see: Router shows 3 routes, each filtering for a specific flag emoji reaction.
⚠
Common mistake β€” Slack uses 'flag-es' format for flag emojis β€” not 'spain' or 'spanish'. Check your workspace's emoji picker for exact names.
6

Slack > Get a Message

Get Original Message

Add a Slack module to retrieve the full message text that was reacted to. The reaction trigger only gives you metadata, not content.

  1. 1Click '+' after the first router path
  2. 2Select 'Slack' from apps
  3. 3Choose 'Get a Message' action
  4. 4Map 'Channel' to the trigger's channel field
  5. 5Map 'Timestamp' to the trigger's message timestamp
βœ“ What you should see: A 'Get a Message' module connected to route 1, with channel and timestamp fields mapped.
⚠
Common mistake β€” Use message timestamp from the trigger, not reaction timestamp β€” they're different fields and mixing them breaks the lookup.
Message template
πŸ“¬ New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
7

OpenAI > Create a Chat Completion

Add OpenAI Translation

Connect OpenAI to translate the message text. Use GPT-3.5-turbo for speed and cost efficiency on simple translations.

  1. 1Click '+' after the Get Message module
  2. 2Search for and select 'OpenAI'
  3. 3Choose 'Create a Chat Completion'
  4. 4Select GPT-3.5-turbo as the model
  5. 5Set max tokens to 500
βœ“ What you should see: OpenAI module added with GPT-3.5-turbo selected and 500 token limit set.
8

OpenAI Module > Messages > Add item

Configure Translation Prompt

Set up the system prompt to handle translation consistently. A good prompt prevents hallucination and maintains formatting.

  1. 1In 'Messages' click 'Add item'
  2. 2Set 'Role' to 'system'
  3. 3Set 'Content' to: 'Translate the following text to Spanish. Only return the translation, no explanations.'
  4. 4Click 'Add item' again for user message
  5. 5Set second 'Role' to 'user'
  6. 6Map 'Content' to the message text from Get Message
βœ“ What you should see: Two messages configured: system prompt for Spanish translation and user message with the original text.
⚠
Common mistake β€” Don't ask OpenAI to detect the source language β€” it adds cost and can mistranslate. Assume English input for consistency.
9

Slack > Create a Message

Post Translation Reply

Send the translated text back to Slack as a thread reply. Threading keeps translations organized under the original message.

  1. 1Click '+' after the OpenAI module
  2. 2Select 'Slack' > 'Create a Message'
  3. 3Map 'Channel' to the original channel
  4. 4Map 'Thread TS' to the original message timestamp
  5. 5Map 'Text' to OpenAI's content output
  6. 6Add ':flag-es: Translation:' as a prefix
βœ“ What you should see: Slack message module configured to reply in thread with the translated text and Spanish flag emoji.
⚠
Common mistake β€” Use the original message timestamp for Thread TS, not the reaction timestamp β€” this ensures replies appear in the right thread.
10

Right-click modules > Copy > Paste

Duplicate Routes for Other Languages

Copy the translation chain for French and German routes. Change only the target language in each prompt.

  1. 1Select all modules after route 1 (Get Message through Create Message)
  2. 2Press Ctrl+C then Ctrl+V to copy
  3. 3Connect copied modules to route 2
  4. 4Change OpenAI system prompt to 'Translate to French'
  5. 5Change Slack prefix to ':flag-fr: Translation:'
βœ“ What you should see: Route 2 has identical modules but with French translation settings.
⚠
Common mistake β€” Update both the OpenAI prompt AND the Slack prefix emoji β€” forgetting the prefix confuses users about which language they received.
11

Right-click module > Error handling

Set Error Handling

Configure each module to handle failures gracefully. Translation APIs can timeout or hit rate limits during peak usage.

  1. 1Right-click each OpenAI module
  2. 2Select 'Error handling'
  3. 3Choose 'Break' to stop on errors
  4. 4Enable 'Retry' with 3 attempts
  5. 5Set retry interval to 30 seconds
βœ“ What you should see: All OpenAI modules show error handling icons and will retry failed requests 3 times.
⚠
Common mistake β€” Don't set error handling to 'Ignore' β€” failed translations will leave users hanging with no feedback.
12

Scenario controls > Run once

Test with Real Reactions

Run live tests using actual flag emoji reactions in your Slack. Verify translations work across different message types and lengths.

  1. 1Click 'Run once' in the scenario controls
  2. 2Go to any Slack channel and post a test message
  3. 3React with :flag-es: emoji
  4. 4Check Make's execution log for successful run
  5. 5Verify Spanish translation appears as a thread reply
βœ“ What you should see: Make shows successful execution and Slack displays the translation in a threaded reply with the Spanish flag emoji.
⚠
Common mistake β€” Test with messages containing emojis and line breaks β€” OpenAI sometimes strips formatting that users expect to preserve.

Drop this into a Make custom function.

Copy this template{{replace(replace(12.choices[0].message.content; "Here's the translation:"; ""); "Translation:"; "")}}
β–Έ Show code
{{replace(replace(12.choices[0].message.content; "Here's the translation:"; ""); "Translation:"; "")}}

... expand to see full code

{{replace(replace(12.choices[0].message.content; "Here's the translation:"; ""); "Translation:"; "")}}
Make
β–Ά Run once
executed
βœ“
OpenAI
βœ“
Slack
Slack
πŸ”” notification
received

Scaling Beyond 500+ translations/day+ Records

If your volume exceeds 500+ translations/day records, apply these adjustments.

1

Switch to GPT-4 Turbo

GPT-4 Turbo has higher rate limits than GPT-3.5-turbo and better handles bulk translation requests without timeouts.

2

Add Queue Module

Insert Make's queue module before OpenAI to prevent rate limit errors during reaction spikes. Set queue size to 10 concurrent requests max.

3

Cache Common Phrases

Use Make's data store to cache translations of frequently used phrases like 'Good morning' or 'Thanks'. This cuts API costs by 30-40% for active channels.

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 Make for this workflow

Use Make for this if your team reacts to messages in multiple channels and wants instant translations without leaving Slack. Make's router handles multiple languages in one scenario, and the visual builder makes adding new flag emojis simple. The Slack integration catches reactions in real-time, not polling delays. Skip Make if you only need one language β€” a simple Slack bot would be cheaper and faster to deploy.

Cost

This workflow burns 4 operations per translation: watch reaction, get message, OpenAI completion, post reply. At 200 translations/month, that's 800 operations total. Make's free tier covers 1,000 operations, so you're covered. The $9 Core plan handles 10,000 operations (2,500 translations). Zapier's free tier only allows 100 zaps/month, forcing you to the $20 Starter plan for the same volume. Make saves you $11/month here.

Tradeoffs

Zapier's Slack trigger includes message content directly, skipping the separate 'Get Message' step Make requires. N8N offers better OpenAI rate limiting with built-in backoff and retry logic. But Make's router system beats both for handling multiple languages β€” Zapier needs separate zaps for each flag emoji, and N8N requires manual JavaScript switches. Make's visual routing keeps everything in one scenario.

OpenAI sometimes refuses to translate if it detects offensive content, returning an error instead of translated text. Your Slack reply will show an empty message that confuses users. Add a filter to check if OpenAI's response contains actual text before posting. Also, GPT-3.5-turbo occasionally adds explanatory text like 'This translates to:' despite prompt instructions. Strip these prefixes with a text replace operation or users will see redundant explanations.

Ideas for what to build next

  • β†’
    Add translation confidence scores β€” Modify the OpenAI prompt to return confidence ratings and skip posting low-confidence translations to avoid embarrassing mistakes.
  • β†’
    Create translation logs β€” Send all translation requests to a Google Sheet for usage tracking and to identify your team's most commonly needed language pairs.
  • β†’
    Build reverse translation β€” Add a second reaction system where reacting to a translation with the original flag emoji translates it back for verification.

Related guides

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