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.

Deterministic Code
SlackJigsawStackOperationsHR & PeopleNotifications & AlertsContent GenerationData Sync

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.

Additional information

What does this prompt do?
  • 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 do I need to use this?
  • 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)
How can I customize it?
  • 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

Frequently asked questions

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.

Make every region read the announcement on day one.

Connect Slack and JigsawStack once, and Geni translates and mirrors every announcement into your regional channels the moment it is posted.