# Translate Slack announcements into every regional channel

> Mirror every English announcement into your Spanish, Japanese, French, and German Slack channels, automatically and in the local language.

- Workflow type: code
- Services: Slack, JigsawStack
- Categories: Operations, HR & People
- Published: 2026-05-25

## What it does

- When someone posts in your English announcements channel, every regional channel gets the same post in the local language within seconds.
- Threaded replies follow into the matching thread in each regional channel, so conversations stay grouped where the original happened.
- Bot posts and messages that start with your chosen do-not-translate prefix are skipped, so internal pings or memes don't get mirrored.
- Each translated post credits the original author and links back to the source message, so nothing loses context.

## What you'll need

- A Slack workspace where you can install apps and post into the channels you want to mirror into
- A JigsawStack account for the translation step
- The list of target channels and which language each one speaks (for example Spanish, Japanese, French, German)

## Prompt

Build a code workflow that mirrors every announcement posted in our English source Slack channel into multiple regional Slack channels, with each regional post translated into that channel's local language.

Trigger: a Slack webhook event for a new message posted in the configured source channel (for example the #announcements channel). The workflow should run on every new top-level message and every threaded reply in that channel.

Configuration the workflow should expose:

- source_channel_id: the Slack channel id to watch.

- target_channels: an ordered list of objects, each with channel_id, language_code, and language_label. For example: #announcements-es / es / Spanish, #announcements-ja / ja / Japanese, #announcements-fr / fr / French, #announcements-de / de / German.

- skip_prefix: a string that, when a message text starts with it, causes the workflow to skip translation entirely. Default to "DNT:".

Steps:

1. From the Slack event payload, extract the message text, the author's Slack user id, the channel id, the message ts, the thread_ts (present when it is a threaded reply), and a flag indicating whether the sender is a bot (bot_id present or subtype is bot_message).

2. Skip the message if the sender is a bot, or if the message text starts with the configured skip_prefix. Also skip message_changed and message_deleted subtypes.

3. Fetch a permalink to the source message so the translated posts can link back to it.

4. For each entry in target_channels, run the following fan-out (in parallel where possible, with isolated error handling per entry):

  a. Call the JigsawStack "Translate Text" operation with the original message text and the entry's language_code as the target language.

  b. Compose the post body as the translated text followed by a small footer line in Slack mrkdwn that credits the original author and links back to the source message. Example footer: "_Posted by <@U123ABC> in <permalink|#announcements>_".

  c. Call the Slack "Send a Message" operation to post into the entry's channel_id. If the source message has a thread_ts (it's a reply), the post must land in the matching thread in the target channel, not at the channel root. To do that, the workflow needs to remember a mapping from source thread_ts (the root message's ts in the source channel) to each target channel's root-message ts; when the source message is itself a top-level post, store the mapping so future replies can look it up; when it is a reply, look up the target thread root and post with thread_ts set to that value.

5. A failure to translate or post into one regional channel must not stop the other regional channels from receiving the announcement. Log per-channel failures with the channel id and a short reason.

Use the JigsawStack "Translate Text" operation and the Slack "Send a Message" operation. Treat the workflow as a deterministic fan-out: one inbound message in, N translations and N posts out, where N is the length of target_channels.

## How to customize

- Add, remove, or relabel target channels and their languages without rewriting the workflow
- Change the do-not-translate prefix, or add more skip rules like ignoring messages tagged [internal]
- Tweak the footer line that credits the original author and links back to the source message

## FAQ

### Will it translate threaded replies, or only top-level posts?

Both. A reply in the source thread is mirrored into the matching thread in each regional channel, so the conversation stays grouped the same way it does in English.

### Can I exclude certain announcements from being translated?

Yes. Posts from bots are skipped automatically, and any message that starts with your chosen prefix (for example DNT:) is skipped too. You can change the prefix at any time.

### How many languages and regional channels can I add?

As many as you need. The list of channels and their languages is configuration, so adding French or Japanese later is a small edit, not a rebuild.

### Will the translated post show who wrote the original?

Yes. A small footer line credits the original author and links back to the source message, so anyone reading the translation can jump to the full context in one click.

### What if one of the regional channels is down or misconfigured?

The workflow keeps going. A failure to post into one regional channel does not block the others, so the rest of your global team still gets the announcement.

Use this prompt in General Input: https://www.generalinput.com/prompts/translate-slack-announcements-into-every-regional-channel