13
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GASを利用して、Slackで多言語翻訳やってみた

Last updated at Posted at 2018-08-27

概要

Google Apps Script(通称GAS)に最近興味を持ち始めました。
Gmailと組み合わせたり、いろいろと出来るのですが、今回はGoogle Translateを利用して、Slackからの日本語投稿を英語などに翻訳して返すBotを作ります
GASは、JavaScriptの文法で書かれているため、JavaScriptをまだ触ってない方は、一旦JavaScriptの文法を一通りやってみてもいいかもしれませんが、簡単なチュートリアルなら、コード内容からどんなことをやってるかわかるかと思います。

今回の記事は、大きく2つのプロセスとなっています

  • GASの作成
  • SlackBotの作成
    順番に説明していきます

GASの作成

ここらへんの記事を参考にプロジェクトを作っていきます。

プロジェクト作成後、SlackがPOSTリクエストなので、doPost関数を使います。
GASの場合、getリクエストとpostリクエストには、それぞれすでに関数が用意されていて、それでリクエスト内容を処理することができます。

function doPost(e) {
  
}

doPostの中身はこのまま空で、次に翻訳テキストを返す関数を作ります。
関数名は何でもいいですが、ここではgetTranslateTextとします。
引数にはtextとtriggerの2つを設定します。
ここのtextとは、slackで入力したtext内容で、triggerは、slackで設定したときのtriggerとなるキーワードとなります。

function getTranslateText(text, trigger) {
    var targetText = text.replace(trigger, '');
    return LanguageApp.translate(targetText, "ja", "en");
}

ここで何をやっているかというと、ここのAPI名を見てみるとわかるように、LanguageApp.translateという形で、翻訳テキストを返却しています。また、入力したtextに、トリガーのキーワードを除外し、それをja->enというように、日本語を英語に翻訳したテキストを返却します。

次に先程のdoPost関数を次のように更新します。

function doPost(e) {
    var message = getTranslateText(e.parameter.text, e.parameter.trigger_word);
}

SlackのPOSTリクエストは次のような形となります

token=AHznGq65tpUulOR9iZwAoPkJ
team_id=T0001
team_domain=
channel_id=C2147483705
channel_name=テスト
timestamp=1355517523.000005
user_id=U2147483697
user_name=スティーブ
text=googlebot: 身軽なツバメの対気速度はどのくらい
trigger_word=googlebot:

こうしたパラメータは、e.parameter.hogeという形で取得でき、ここでは、textとtrigger_wordを取得しています。

最後に、Slackにレスポンスする関数を作成します。
urlにはSlackの着信用Botで設定したWeb hook URLをいれてください

function postSlack(text){
  var url = "https://hooks.slack.com/services/~~~~";
  var options = {
    "method" : "POST",
    "headers": {"Content-type": "application/json"},
    "payload" : '{"text":"' + text + '"}'
  };
  UrlFetchApp.fetch(url, options);
}

そして、doPost関数を更新します。

function doPost(e) {
    var message = getTranslateText(e.parameter.text, e.parameter.trigger_word);
    postSlack(message);
}

ここまで終わったら、GASを公開してください
公開->ウェブアプリケーションとして公開->プロジェクトバージョンを新規作成とし、全員に公開をして更新ボタンを押してください。
なお、コードを変更して、外部に公開する場合は、毎回新規作成とする必要があります。

公開したら、URLをあとで使うので、どっかにメモってください。

Slack Botの作成

トークンを作成する方法とかあったりするのですが、一番カンタンな方法でやってみたいと思います。
ここでは、発信用と着信用の2つのBotを作成していきます。

image.png

image.png

発信用Botの作成


下記画像のように、設定したいSlackのチャンネル開いたところで、Appの管理画面をブラウザで開いてください。

検索窓に「outgoing」と打ってみてください。
最近Slackが日本語対応したため、「発信Webフック」というアプリが出てくると思うので、それを選択してください。

次に設定を追加ボタンを押して、設定画面に移動します。

ここでは、導入したいチャンネルの設定、トリガーとなる言葉、POSTするURLを入力します。
URLには、先程公開したGASのURLを入力します。

image.png

これで発信用BotはOKです

着信用Botの作成

発信用Botと同じように、検索窓に「incoming」と打ってみてください。着信Webフックが出てくるので、これでアプリを設定しましょう。

image.png

ここで、Web hook URLが出てくるので、GASのところで作成したpostSlack関数の中身に、これを設定します。

着信用Botはこれでオッケーです。

以上で設定はこれで完了です!それでは実際に試してみましょう!

私の場合、トリガーをgasとしています。

image.png

若干変なところがありますがだいたい翻訳できてます!!

おまけ

一度に複数言語にも翻訳できるので、次のような多言語翻訳も5秒位で返ってきます。

image.png

GAS面白い!!

13
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?