Google Apps Scriptでチャットワーク上に翻訳チャットを作る

robots

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

以前、Google Apps Scriptを使って「おみくじチャット」を作りました。

Google Apps Scriptでチャットワーク上におみくじチャットを作る
Google Apps ScriptとチャットワークAPIを使ってチャットワークで「おみくじ」と送信すると、大吉から凶までのおみくじの結果を生成してチャットワークに返す「おみくじチャット」を作成します。

「わーい、今日は大吉だ!」

…なんて、まあまあ楽しいのですが、残念ながら仕事にはあんまり役に立たないです。

ですが、Google Apps ScriptチャットワークAPIを使って

  • チャットワークからメッセージを受け取り
  • 何かしらの処理をして
  • チャットワークにメッセージを返す

というベースの仕組みは非常に応用性の高いものです。

そこで、この仕組みを応用して「翻訳チャット」を作っていきたいと思います。

ちょっと調べものをしているとき、チャットで翻訳ができたら…けっこう便利そうですよね!?

では、いってみましょう!

スポンサーリンク

おみくじチャットのおさらい

最初にベースとなるおみくじチャットプログラムをおさらいしておきたいと思います。

function getOmikuji(){

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXXXX; //ルームID

  var json = fetchMessage(token,room_id);

  /* json内に「おみくじ」メッセージがあればチャットワークに送信 */
  for each(var obj in json){
    if(obj.body === "おみくじ"){

      var body = "[rp aid=" + obj.account.account_id
        + " to=" + room_id
        + "-" + obj.message_id
        + "] " + obj.account.name
        + "さん[info]おみくじの結果:" + generateOmikuji() + "[/info]"; //チャットワークに送るテキスト

      sendMessage(token,room_id,body);
    }
  }
}

いくつか独自の関数がありますが

fetchMessageはチャットワークの特定のルームから未取得のメッセージをjson形式で取得してくる関数

fetchMessage(APIトークン, ルームID)
– 引数 token:APIトークン, room_id:ルームID
– 返り値 json:レスポンスをJSON解析した配列

sendMessageはチャットワークの特定のルームにメッセージを送る関数

sendMessage(APIトークン, ルームID, メッセージ本文)
– 引数 token:APIトークン, room_id:ルームID, body:メッセージ本文
– 返り値 なし

generateOmikujiは”大吉”,”中吉”,”小吉”,”吉”,”半吉”,”末吉”,”凶”の中からランダムにいずれかを返す関数です(この関数については今回は関係ないですね)。

9行目から始まるfor each文で取得した全てのメッセージについての繰り返しとしています。

取得したメッセージが「おみくじ」とイコールであれば、12~16行でメッセージを成形しつつ、チャットワークにメッセージを送ります。

詳しくはこちらの記事をご覧くださいね。

【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数
Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。今回はチャットワークからメッセージを取り出す、メッセージを送る処理を関数化して全体のコードをスッキリさせます。

翻訳をするtranslateメソッド

さて、翻訳チャットシステムのキモとなる翻訳処理をいかにするか考えます。

Google翻訳のサービスは今や世界中のたくさんの方が利用してるかと思いますが、Google Apps ScriptからGoogle翻訳の機能を利用するためにLanguageApp.translateメソッドが用意されています。

LanguageApp.translate(元のテキスト,元の言語,翻訳する言語)

と書きます。

言語のところは日本語なら「ja」、英語なら「en」など、2文字であらわされる言語ごとのコードを入力します。

これはISO 639-1に登録されているもので、ウィキペディアにコード一覧がありますので、どうぞご活用下さい。

ウィキペディア:ISO 639-1コード一覧

例えば、resultという変数に日本語から英語への翻訳結果を格納したい場合は

var result = LanguageApp.translate("日本語から英語へ翻訳します", "ja", "en");

とします。簡単でしょ?

さらに、ここがすごいのですが、第二引数の「元の言語」に空の文字列を設定した場合は元のテキストから言語が自動検出されます。

var result = LanguageApp.translate("日本語から英語へ翻訳します", "", "en");

でも良いということです。

便利ですね~。

ですから翻訳システムとしては、翻訳する本文と翻訳後の言語だけユーザーに指定をさせれば動かすことができる、ということですね。

翻訳チャットシステムの概要

さて、今回作る翻訳チャットのシステムですが、翻訳に必要な情報は

  • テキスト本文
  • 翻訳する言語

となりますので、動作としては

  1. チャットワークに「言語コード;本文」とメッセージを送信
  2. その返信の形で翻訳結果を返す

という動作にしたいと思います。セミコロンの前に翻訳をする言語コードを指定して、セミコロンの後に本文を書くという形です。

システムの流れとしては、おみくじチャットを応用して

  1. チャットワークから未取得のメッセージをjson形式で取得
  2. 取得したすべてのメッセージについて
    1. セミコロンで言語コードと本文を分ける
    2. 翻訳
    3. チャットワークに送るテキストを成形
    4. チャットワークにメッセージを送信

という流れです。

2-1,2-2を作って、2-3をちょっと変更すればOKです。

翻訳チャットの最も簡単なスクリプト

実際のスクリプトはこちらです。

function translateChat() {

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXX; //翻訳さんのルームID

  var json = fetchMessage(token,room_id); //翻訳さんグループチャットのメッセージを取得

  /* 各メッセージについて 繰り返す */
  for each(var obj in json){

      var arr = obj.body.split(';'); //セミコロンでsplitして配列に格納
      var result = LanguageApp.translate(arr[1], "", arr[0]); //翻訳

      var body = "[rp aid=" + obj.account.account_id
        + " to=" + room_id
        + "-" + obj.message_id
        + "] " + obj.account.name
        + "さん[info]翻訳結果:" + result + "[/info]"; //チャットワークに送るテキスト

      sendMessage(token,room_id,body); //チャットワークにメッセージを送る
    }
}

splitメソッドで特定の文字で文字列を分割して配列に格納する

11行目で取得したメッセージをセミコロンで分割をしています。

文字列を特定の文字で分割する場合はsplitメソッドを使い

文字列.split(特定の文字)

とします。結果は配列として格納されます。

今回はarrという配列を指定していますので、メッセージがルールに則ったものであれば

  • arr[0]:言語コード
  • arr[1]:本文

と格納されるはずです。

実行結果

チャットワークにルール通りにメッセージを送った上でスクリプトを実行しますと

チャットワークの翻訳チャット結果

このような形で翻訳結果が返ってきます。

シンハラ語のほうは…合ってるかわかりませんが…汗

まとめ

Google Apps Scriptとチャットワークで翻訳チャットを作成しました。

…すごいですね。便利ですね。

さて、今回のプログラムではルールに則っていないメッセージをチャットワークから送るとGoogle Apps Scriptではエラーとなり、正しく動作しません。

ということで、次回はGoogle Apps Scriptでエラーが発生したときに処理を分ける方法についてお伝えします。

Google Apps Scriptでエラーが発生したときに処理を分ける方法
Google Apps Scriptでtry~catch文でエラー処理をしていきます。チャットワークの翻訳チャットを例にエラーが発生したかどうかを判定して、エラーによって処理を分ける方法をお伝えします。

どうぞお楽しみに!

連載目次:GASとチャットワークAPIで翻訳チャットを作る

おみくじチャットの仕組みを利用して翻訳チャットを作ります。Google Apps ScirptでGoogle翻訳を操作する方法、チャットからの入力がルール外だった場合のエラー処理など少し発展的な内容を学ぶことができますよ。
  1. Google Apps Scriptでチャットワーク上に翻訳チャットを作る
  2. Google Apps Scriptでエラーが発生したときに処理を分ける方法
  3. 【GAS】チャットワークで作る翻訳チャットに例外コマンドでエラーが出たときの処理を追加
タイトルとURLをコピーしました