GASとチャットワークWebhookを使って翻訳チャットを作る

translate

photo credit: jonrussell Google Translate via photopin (license)

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

チャットワークAPIがバージョンアップしまして、Webhookがβ版として公開されました。

喜び勇んで、過去のいろいろな事例をWebhookバージョンに書き換えておりまして、前回は「おみくじ」を作りました。

GASとチャットワークWebhookで即レスポンスのおみくじチャットを作る方法
GASとチャットワークWebhookを連携させて、いろいろな便利ツールを作っています。今回は、GASとチャットワークWebhookを使って、すぐに返事が返ってくるおみくじチャットを作る方法をお伝えします。

今回はもうちょっと実用的なもの…「翻訳チャット」です。

ということで、今回はGASとチャットワークWebhookを使って翻訳チャットを作っていきます。

なお、本記事はApps Script Advent Calendar 2017の参加しております。

スポンサーリンク

翻訳チャットの全体の仕組み

まず、翻訳チャットの全体の仕組みについて整理をしておきます。

動作としては以下のような流れとなります。

  1. チャットワークWebhookで特定のルームでのメッセージをフックに指定したURLへPOSTリクエストを投げる
  2. POSTリクエストをGASで作ったdoPost関数で受け取る
  3. doPost関数で、POSTリクエストからメッセージなど必要な情報を取り出す
  4. 取り出したメッセージをLanguageApp.translateメソッドで翻訳する
  5. 翻訳結果を含めて、チャットワークへ返送する文字列を整形する
  6. チャットワークAPIへPOSTリクエストをしてメッセ―ジを返送する

GASとチャットワークWebhookで翻訳チャットを作る

では、実装していきましょう。

APIトークンとルームIDの取得

まず、チャットワークAPIに返送をするときにAPIトークンが必要になります。

また、チャットワークで特定のグループを翻訳専用として用意して、そのルームIDを取得しておきます。

取得の仕方は以下記事をご覧ください。

GASとチャットワークWebhookで即レスポンスのおみくじチャットを作る方法
GASとチャットワークWebhookを連携させて、いろいろな便利ツールを作っています。今回は、GASとチャットワークWebhookを使って、すぐに返事が返ってくるおみくじチャットを作る方法をお伝えします。

doPost関数を作る

続いて、doPost関数を作ります。

doPostという名前で関数を作れば、Webアプリケーションを公開したときにPOSTリクエストを受けると動作してくれます。

スクリプトはコチラ。

var API_TOKEN = '-----APIトークン-----'; //チャットワークAPIトークン

function doPost(e) {
  var json = JSON.parse(e.postData.contents);
  /* リクエスト用パラメータ・URLの準備 */
  var params = {
    headers : {"X-ChatWorkToken" : API_TOKEN},
    method : "post"
  };
  
  var roomId = json.webhook_event.room_id;
  url = "https://api.chatwork.com/v2/rooms/"; + roomId + "/messages";
  
  var jsonBody = json.webhook_event.body;
  if(jsonBody.slice(0, 1) !== "["){
    
    var accountId = json.webhook_event.account_id;
    var messageId = json.webhook_event.message_id;
    
    var body = ''
    body += '[rp aid=' + accountId;
    body += ' to=' + roomId + '-' + messageId + '] '
    body += '[info]翻訳結果:' + LanguageApp.translate(jsonBody, 'ja', 'en') + '[/info]'
    params.payload = {body :body};
    
    UrlFetchApp.fetch(url, params);
  }
}

こちらが完成したらWebアプリケーションとして公開してURLを取得しておきます。

Webアプリケーションの公開は以下をご参考ください。

チャットワークWebhookを使ってメッセージ送信をトリガーにGASを起動させる方法
チャットワークWebhookとGASの連携方法についてお伝えしております。今回はいよいよチャットワークWebhookを使ってメッセージをトリガーにGASを起動するスクリプトとその手順をお伝えしていきます。

ポイントは以下の通りです。

EventオブジェクトからPOSTリクエストのボディを取り出す

doPost関数の引数eはEventオブジェクトで、

Eventオブジェクト.postData.contents

とすることで、POSTリクエストのボディを取り出すことができます。

取り出したのはJSON形式の文字列データですので、取り出しやすいようにJSON.parseメソッドでオブジェクト形式にパースします。

Webhookイベントのデータを取り出す

その中の「webhook_event」というフィールドの中に以下のデータが格納されていますので、掘って取り出します。

  • ルームID:room_id
  • メッセージID:message_id
  • メッセージの送信元のアカウントID:account_id
  • メッセージ本文:body

メッセージを翻訳する

GASのお得意分野、翻訳です。

以下の構文でサクっと翻訳できます。

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

今回は、ソースは日本語の’ja’、翻訳先は英語の’en’を指定しています。

チャットワークWebhookを作成する

最後にチャットワークWebhookの作成です。

チャットワークWebhookは、プロフィールアイコンの「API設定」→「Webhook」から作成できます。

今回は、翻訳専用チャットでのメッセージ作成をトリガーとしますので、各項目は以下のように設定します。

  • Webhook名:通訳さん
  • Webhook URL:Webアプリケーション公開時に生成したURL
  • イベント
    • ルームイベント
    • メッセージ作成
    • ルームID:取得したルームID

チャットワークの翻訳用Webhookを作成

これですべての準備が完了です。

翻訳チャットでメッセージを翻訳してみる

では、実際に実行してみましょう。

翻訳チャットで何かを入力してみると…

GASとチャットワークWebhookで作成した翻訳チャット

ばっちり翻訳されて返事がきます。

そして、さすがWebhook。レスポンスが速くて素敵です…!

まとめ

以上、GASとチャットワークWebhookで翻訳チャットを作る方法をお伝えしました。

たぶん、この応用でいろんなチャットbot的なツールが作れるものと思います。

ぜひ、トライしてみてくださいね!

あと、今月12/22に拙著「詳解!GoogleAppsScript完全入門」が発売になりますので、よろしければ覗いてみてくださいませ~

書籍「詳解!Google Apps Script完全入門」発売についてのお知らせ
「詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~」という本を書きました!本ページでは、本書のお知らせ、書評などの情報を発信していく特集ページです。

連載目次:GASとチャットワークWebhookを連携させた便利ツール

チャットワークAPIのバージョンアップでメッセージ送信や自分へのメンションをトリガーにしたWebhookを使用することができるようになりました。GASとの連携により色々な便利ツールを作っていきます。
  1. チャットワークのメッセージの送信をトリガーにGASを作動させられるWebhookが使えるようになった
  2. チャットワークWebhookを使ってメッセージ送信をトリガーにGASを起動させる方法
  3. GASとチャットワークWebhookで即レスポンスのおみくじチャットを作る方法
  4. GASとチャットワークWebhookを使って翻訳チャットを作る
タイトルとURLをコピーしました