みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
チャットワークAPIがバージョンアップしまして、Webhookがβ版として公開されました。
喜び勇んで、過去のいろいろな事例をWebhookバージョンに書き換えておりまして、前回は「おみくじ」を作りました。
今回はもうちょっと実用的なもの…「翻訳チャット」です。
ということで、今回はGASとチャットワークWebhookを使って翻訳チャットを作っていきます。
なお、本記事はApps Script Advent Calendar 2017の参加しております。
翻訳チャットの全体の仕組み
まず、翻訳チャットの全体の仕組みについて整理をしておきます。
動作としては以下のような流れとなります。
- チャットワークWebhookで特定のルームでのメッセージをフックに指定したURLへPOSTリクエストを投げる
- POSTリクエストをGASで作ったdoPost関数で受け取る
- doPost関数で、POSTリクエストからメッセージなど必要な情報を取り出す
- 取り出したメッセージをLanguageApp.translateメソッドで翻訳する
- 翻訳結果を含めて、チャットワークへ返送する文字列を整形する
- チャットワークAPIへPOSTリクエストをしてメッセ―ジを返送する
GASとチャットワークWebhookで翻訳チャットを作る
では、実装していきましょう。
APIトークンとルームIDの取得
まず、チャットワークAPIに返送をするときにAPIトークンが必要になります。
また、チャットワークで特定のグループを翻訳専用として用意して、そのルームIDを取得しておきます。
取得の仕方は以下記事をご覧ください。
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アプリケーションの公開は以下をご参考ください。
ポイントは以下の通りです。
EventオブジェクトからPOSTリクエストのボディを取り出す
doPost関数の引数eはEventオブジェクトで、
とすることで、POSTリクエストのボディを取り出すことができます。
取り出したのはJSON形式の文字列データですので、取り出しやすいようにJSON.parseメソッドでオブジェクト形式にパースします。
Webhookイベントのデータを取り出す
その中の「webhook_event」というフィールドの中に以下のデータが格納されていますので、掘って取り出します。
- ルームID:room_id
- メッセージID:message_id
- メッセージの送信元のアカウントID:account_id
- メッセージ本文:body
メッセージを翻訳する
GASのお得意分野、翻訳です。
以下の構文でサクっと翻訳できます。
今回は、ソースは日本語の’ja’、翻訳先は英語の’en’を指定しています。
チャットワークWebhookを作成する
最後にチャットワークWebhookの作成です。
チャットワークWebhookは、プロフィールアイコンの「API設定」→「Webhook」から作成できます。
今回は、翻訳専用チャットでのメッセージ作成をトリガーとしますので、各項目は以下のように設定します。
- Webhook名:通訳さん
- Webhook URL:Webアプリケーション公開時に生成したURL
- イベント
- ルームイベント
- メッセージ作成
- ルームID:取得したルームID
これですべての準備が完了です。
翻訳チャットでメッセージを翻訳してみる
では、実際に実行してみましょう。
翻訳チャットで何かを入力してみると…
ばっちり翻訳されて返事がきます。
そして、さすがWebhook。レスポンスが速くて素敵です…!
まとめ
以上、GASとチャットワークWebhookで翻訳チャットを作る方法をお伝えしました。
たぶん、この応用でいろんなチャットbot的なツールが作れるものと思います。
ぜひ、トライしてみてくださいね!
あと、今月12/22に拙著「詳解!GoogleAppsScript完全入門」が発売になりますので、よろしければ覗いてみてくださいませ~