【GAS修行⑨】文章翻訳BotをChatWorkでも作成。


・GAS熟練者への道。
・先人達のコードの「写経&コピー」の駆使の成果物のまとめ。
・第九弾
第一弾第二弾第三弾第四弾第五弾第六弾第七弾第八弾はこちら。

経緯

・「九回目。」
・「材料不足を補うべく、過去作の他連携という荒業をしていることに、何の罪悪感もなく、平坦な顔で進める私。」
・「今回は翻訳BOTを使いまわすか。Google翻訳に心酔している私の今回のテンションは爆発寸前。」
→そういうわけで、今回は第六弾をベースに作っていく。
→取り組み開始。

概要

  • 文章を言語を指定して投稿すると、翻訳して返してくれるChatWork BOT。
    →Slackに続き、ChatWorkともなれば、抜群の英語向上速度を誇るに違いない。

結果

・実際の画面はこちらです。

作成環境

  1. Google App Script
  2. ChatWork API
  3. ChatWork Webhook

手順

※Google Apps Scriptの設定は、第六弾と一緒

Google Apps Scriptの設定

  • Googleドライブからスクリプトエディタを起動。
    ※Googleアカウントを持っていない人は、作成する。
    • Googleドライブを起動
    • 「新規」→ 「その他」→「アプリを追加」の順にクリック。
    • アプリ検索欄に「script」と入力して検索。
    • 検索結果に「Google Apps Script」が表示されるので、そこの「接続」ボタンをクリック
    • 改めて「新規」→ 「その他」の順にクリックしていくと、「Google Apps Script」が表示されているので、クリック。
  • 起動したプロジェクトに名前をつける
    ※プロジェクト名が反映されるわけではないが、自分がわかる名前をつける。
    →保存。(最初の3行のままで良い。)
  • 保存後、タブメニューの「公開」から「ウェブアプリケーションとして導入」をクリック。下記の項目を設定。
    • プロジェクトバージョン:New(変更内容は任意)
    • 次のユーザーとしてアプリケーションを実行:自分(アドレス)
    • アプリケーションにアクセスできるユーザー:全員(匿名ユーザーを含む)
  • 設定後、「導入」ボタンをクリック。作成さるウェブアプリケーションURLをメモしておく。「OK」ボタンをクリック。
  • 一旦置いておく。

ChatWork APIの設定

第八弾と同様
※ChatWork未登録の人は、一人用を開設しよう。(何かと便利。)

  • ChatWork APIのトークンを発行。
    • チャットページ右上のプロフィールアイコンをクリック後、表示される「API設定」をクリック。
    • API Token設定ページで、「パスワード入力」欄に登録した時の、パスワード入力。
    • 表示されるAPI TOKENをメモしておく。

ChatWork Webhookの設定

  • ChatWork Webhookの設定。
    • チャットページ右上のプロフィールアイコンをクリック後、表示される「API設定」をクリック。
    • API Token設定ページのサイドバーの「Webhook」をクリックして、Webhook作成ページを表示。
    • ページ内の「新規作成」ボタンをクリックして、作成ページで下記の項目を入力。
      • Webhook名 : 好きな名前
      • Webhook URL : Google App Scriptの公開URL(先程メモしたもの。)
      • イベント : 「ルームイベント」「メッセージを作成」にチェックを入れ、ルームIDを入れる。
        ※ルームIDは、チャンネルURLのrid123456の数字部分
    • 作成できたらWebhook設定完了。ここでは特に何もメモしなくてよい。

コード

  • スクリプトエディタに戻り、下記のコードをコピーして、保存。
chatwork-translate.gs
var API_TOKEN = 'ChatWorkのトークンを書く。';

function doPost(e) {
  // 取得したPOSTデータをJSONへ変換。
  var json = JSON.parse(e.postData.contents);
  /* リクエスト用パラメータ・URLの準備 */
  var params = {
    headers : {"X-ChatWorkToken" : API_TOKEN},
    method : "post"
  };

  // ChatWorkの使用グループのルームIDを取得後、変数へ代入。
  var roomId = json.webhook_event.room_id;
  var url = "https://api.chatwork.com/v2/rooms/" + roomId + "/messages";

  var chatWorkMessage = json.webhook_event.body;
  var accountId = json.webhook_event.account_id;
  var messageId = json.webhook_event.message_id;
  var translationMessage = '';

  // 両方の言語対応。もっとすっきりかけると思う。
  if(chatWorkMessage.slice(0, 3) == "英語へ"){
    translationMessage += '[rp aid=' + accountId;
    translationMessage += ' to=' + roomId + '-' + messageId + '] ';
    translationMessage += '[info]翻訳完了。誤訳文句却下。\n【翻訳結果】\n' + LanguageApp.translate(chatWorkMessage.slice(3), 'ja', 'en') + '[/info]';
    params.payload = {body :translationMessage};

    UrlFetchApp.fetch(url, params);
  }else{
    if(chatWorkMessage.slice(0, 4) == "日本語へ"){
      translationMessage += '[rp aid=' + accountId;
      translationMessage += ' to=' + roomId + '-' + messageId + '] ';
      translationMessage += '[info]翻訳完了。誤訳文句却下。\n【翻訳結果】\n' + LanguageApp.translate(chatWorkMessage.slice(4), 'en', 'ja') + '[/info]';
      params.payload = {body :translationMessage};

      UrlFetchApp.fetch(url, params);
    }
  }
}

※以下の項目を自分のものに変えるのを忘れない。
   ・ChatWork APIのトークン(先程メモしたもの。)

  • 自分のコードに書き換えて保存。
  • 保存後、先程の要領で、「ウェブアプリケーションとして導入」をクリック。
  • プロジェクトバージョンを最新のものにして、更新をクリック。
    ※更新をしないと、反映されない。
  • 実際にChatWorkへ行き、動作確認。(例:「英語へ こんにちは」)
  • 正常に動けば、完了。

まとめ

  • ChatWorkのWebhookは、シンプルで使いやすいから、他への応用も楽。
  • 他人依存な私にとって、ChatWork BOTのネット記事が少なかったのは号泣。
  • まあ完成はしたので、今後さらに私の「英語力向上委員会」が高速稼働だなと、軽薄なうぬぼれに浸る。
  • これを見てくださるエンジニアの皆様、「このコード、もう少しすっきりかけるよ」とか「他にもこういう応用できるのに、知らないとは滑稽ですね」等の意見を何卒お待ちしております。

参考