LoginSignup
1
9

More than 5 years have passed since last update.

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

Posted at

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

経緯

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

概要

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

結果

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

作成環境

  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をメモしておく。
      tempsnip.png image.png test.png

ChatWork Webhookの設定

  • ChatWork Webhookの設定。
    • チャットページ右上のプロフィールアイコンをクリック後、表示される「API設定」をクリック。 tempsnip.png
    • API Token設定ページのサイドバーの「Webhook」をクリックして、Webhook作成ページを表示。
    • ページ内の「新規作成」ボタンをクリックして、作成ページで下記の項目を入力。
      • Webhook名 : 好きな名前
      • Webhook URL : Google App Scriptの公開URL(先程メモしたもの。)
      • イベント : 「ルームイベント」「メッセージを作成」にチェックを入れ、ルームIDを入れる。
        ※ルームIDは、チャンネルURLのrid123456の数字部分
        image.png image.png
    • 作成できたら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のネット記事が少なかったのは号泣。
  • まあ完成はしたので、今後さらに私の「英語力向上委員会」が高速稼働だなと、軽薄なうぬぼれに浸る。
  • これを見てくださるエンジニアの皆様、「このコード、もう少しすっきりかけるよ」とか「他にもこういう応用できるのに、知らないとは滑稽ですね」等の意見を何卒お待ちしております。

参考

1
9
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
1
9