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

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

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


参考

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2024-02-12 22:08:06 RSSフィード2024-02-12 22:00分まとめ(7件)