Posted at

Slackに翻訳botを足す

運用しているSlack (競技プログラミングSlack) に海外の方が入ってきたので、翻訳botを足してみた。

国旗のリアクションで、スレッドに翻訳してくれる。

translate_bot.png

いくつかの記事を読んでみたところ、何点か変えたいところがあったので自作してみた。


  • botに聞く形ではなく、国旗のリアクションで翻訳してほしい

  • スレッドに返信してほしい

  • できれば無料で

ということで以下の流れで作成した。


  • Google Apps Script(GAS)を新規作成

  • GASのPublish -> Deploy as web appで、GASを外部から叩けるようにする

  • リアクションを取るためにSlack Appを作る

  • Event Subscriptionsに reaction_added を追加し、Request URLにGASのURLを入力して保存する

  • OAuth & Permissionsで reactions:read chat:write:bot channels:history を追加する

  • Slackアプリを自分のワークスペースにインストールする

無料で翻訳するために、GASの LanguageApp を使った。

ということで、できたGASはこれ

https://github.com/firewood/test/blob/master/compprog-translator.js

どうやらreaction_addedは複数回呼ばれることがあるようなので、 conversations.replies でスレッドの内容を取得して、同じ国旗の翻訳がすでにあるかどうかチェックして、なかったら投稿するようにしてみた。(ただし10件しか確認していないので、すでにスレッドに10件以上投稿されているとそのまま足されてしまう)

会社のSlackに同様のbotがあるのだが、たぶん普通に有料のGoogle Translate APIを使っていると思われるので、実装は見なかった。(会社のものはスレッドの文章が翻訳できるなど、もう少し機能が充実している)

GASを使うのが初めてだったので、バージョンを上げてdeployしないと更新されないことにはまった。

参考にした資料

- [Japanese] Developing a bot for your workspace 翻訳ボットを作る! (GitHub: https://github.com/slackapi/reacjilator)

- aws chaliceを使ってslackの翻訳botを作ってみた #aws #chalice #slack #bot - uchimanajet7のメモ

- https://qiita.com/zakiyamaaaaa/items/4873ba51646bda84d6ca