経緯
オフショアを活用した開発を行うときに、BrSEやコミュニケータを通した翻訳が煩わしくなってきた…しかし、私は英語が得意ではない(出来ない)。
Slackに翻訳BOTを設定することに。お金がないので無料が絶対条件!
hubotを検討したが、サーバが必要らしく断念。
手ごろなGASで設定することに。
イメージ
Slackからの呼出し方法(本当は/コマンドにしたい所)
- 翻訳命令
chlang **原文の言語** **翻訳先の言語** **翻訳対象の文書**
例)
chlang ja en 今日の調子はどうですか?
- ヘルプ機能
chlang help
Step1.GoogleAppsScriptを作成
-
GoogleAppsScriptにSlackAPIを導入
SlackApp Library KeyM3W5Ut3Q39AaIwLquryEPMwV62A3znfOO
ライブラリキーを設定。
コード.gs
function doPost(e) {
// Slack WEB トークンを設定 < https://api.slack.com/custom-integrations/legacy-tokens >
var token = "";
// 応答時のBOT名
var bot_name = "chlang";
// アイコンはかっこよくするために…適当に借用
var bot_icon = "https://hiyokoyarou.com/wp-content/uploads/2017/09/metoron-110x110.png";
// 発信webフックのTokenを設定
var verify_token = ""
// トークンのセキュリティチェック
if (verify_token != e.parameter.token) {
throw new Error("invalid token.");
};
// SlackAPPの作成
var slackApp = SlackApp.create(token);
var body = e.parameter.text.substr(7); // chlang 以降の抽出
var tmpSplit = body.split(" ",2);
var original_lan = tmpSplit[0] // 原文の言語
var convert_lan = tmpSplit[1] // 翻訳先の言語
var response;
if (original_lan == "help") {
// 結果の編集
response = " chlang *原文の言語* *翻訳先の言語* *翻訳対象の文書*\n "
+ "例) \n"
+ "chlang ja en 今日の調子はどうですか?\n\n"
+ "言語種類\n"
+ "```\n"
+ "'is' … アイスランド語 'cs' … チェコ語\n"
+ "'ga' … アイルランド語 'te' … テルグ語\n"
+ "'az' … アゼルバイジャン語 'da' … デンマーク語\n"
+ "'af' … アフリカーンス語 'de' … ドイツ語\n"
+ "'am' … アムハラ語 'tr' … トルコ語\n"
+ "'ar' … アラビア語 'ny' … ニャンジャ語\n"
+ "'sq' … アルバニア語 'ne' … ネパール語\n"
+ "'hy' … アルメニア語 'no' … ノルウェー語\n"
+ "'it' … イタリア語 'ht' … ハイチ語\n"
+ "'yi' … イディッシュ語 'ha' … ハウサ語\n"
+ "'ig' … イボ語 'ps' … パシュトゥー語\n"
+ "'id' … インドネシア語 'eu' … バスク語\n"
+ "'cy' … ウェールズ語 'haw' … ハワイ語\n"
+ "'uk' … ウクライナ語 'hu' … ハンガリー語\n"
+ "'uz' … ウズベク語 'pa' … パンジャブ語\n"
+ "'ur' … ウルドゥー語 'my' … ビルマ語\n"
+ "'et' … エストニア語 'hi' … ヒンディー語\n"
+ "'eo' … エスペラント語 'fi' … フィンランド語\n"
+ "'nl' … オランダ語 'fr' … フランス語\n"
+ "'kk' … カザフ語 'bg' … ブルガリア語\n"
+ "'ca' … カタロニア語 'vi' … ベトナム語\n"
+ "'gl' … ガリシア語 'iw' … ヘブライ語\n"
+ "'kn' … カンナダ語 'be' … ベラルーシ語\n"
+ "'el' … ギリシャ語 'fa' … ペルシア語\n"
+ "'ky' … キルギス語 'bn' … ベンガル語\n"
+ "'gu' … グジャラート語 'pl' … ポーランド語\n"
+ "'km' … クメール語 'bs' … ボスニア語\n"
+ "'ku' … クルド語 'pt' … ポルトガル語\n"
+ "'hr' … クロアチア語 'mi' … マオリ語\n"
+ "'xh' … コサ語 'mk' … マケドニア語\n"
+ "'co' … コルシカ語 'mg' … マダガスカル語\n"
+ "'sm' … サモア語 'mr' … マラーティー語\n"
+ "'jv' … ジャワ語 'ml' … マラヤーラム語\n"
+ "'ka' … ジョージア語 'mt' … マルタ語\n"
+ "'sn' … ショナ語 'ms' … マレー語\n"
+ "'sd' … シンド語 'mn' … モンゴル語\n"
+ "'si' … シンハラ語 'hmn' … モン語\n"
+ "'sv' … スウェーデン語 'yo' … ヨルバ語\n"
+ "'zu' … ズールー語 'lo' … ラオ語\n"
+ "'gd' … スコットランド・ゲール語 'la' … ラテン語\n"
+ "'es' … スペイン語 'lv' … ラトビア語\n"
+ "'sk' … スロバキア語 'lt' … リトアニア語\n"
+ "'sl' … スロベニア語 'ro' … ルーマニア語\n"
+ "'sw' … スワヒリ語 'lb' … ルクセンブルク語\n"
+ "'su' … スンダ語 'ru' … ロシア語\n"
+ "'ceb' … セブアノ語 'en' … 英語\n"
+ "'sr' … セルビア語 'ko' … 韓国語\n"
+ "'so' … ソマリ語 'fy' … 西フリジア語\n"
+ "'th' … タイ語 'zh-CN' … 中国語(簡体)\n"
+ "'tl' … タガログ語 'zh-TW' … 中国語(繁体)\n"
+ "'tg' … タジク語 'ja' … 日本語\n"
+ "'ta' … タミル語 'auto' … 言語を検出する\n"
+ "```\n"
} else {
var message = body.substr(original_lan.length + convert_lan.length + 2 ); // 翻訳対象の原文
// Google翻訳の実行
message = LanguageApp.translate(message, original_lan, convert_lan);
// 結果の編集
response = e.parameter.user_name + "さんの投稿を翻訳します。 [" + original_lan + "] -> [" + convert_lan + "]\n ``` \n" + message + "\n ``` ";
}
return slackApp.postMessage(e.parameter.channel_id, response, {
username: bot_name,
icon_url: bot_icon
});
}
Step2.Slack WEB Tokenを確認
2020.9.24 Legacy token generatorが利用できなくなっていたので、WebTokenの取得方法の説明を変更
-
[Create New App]をクリック
-
TokenKeyを作成します。
Step3.発信webフックを設定
Step4.SlackとGoogleAppsScriptを連携
動作確認
Slackのパブリックチャンネルで実行してみる。
help機能が使えた!アイコンもちゃんと生きている!
chlang ja en 今日の調子はどうですか?
複数行にも対応可能!
簡単なコミュニケーションはSlackで直接やり取りできるようになった。
次は、GITLABからの通知を自動翻訳できるように…出来たらやってみたい!