[GAS]Chatwork特定のルームでメッセージを受信したら、別のルームに内容を転送する
はじめに
Chatworkで、あるルームで取得したメッセージを、別のルームに通知する処理を、GASで実装します。
下記の図のようなイメージです。
ルームAにはAさんのみ招待されているが、ルームAでAさんに来たメッセージを、ルームBのメンバー全員で共有したい、みたいな時に使用することを想定しています。
手順
1.GAS実装
ChatworkからのHTTPリクエスト(POSTリクエスト)を受け取り、Chatworkライブラリ「ChatWorkClient for Google Apps Script」を使用してメッセージを送信する処理を実装します。
const ROOM_ID_A = XXXXXXXXX;
const ROOM_ID_B = YYYYYYYYY;
function doPost(e){
const json = JSON.parse(e.postData.contents);
const from = json.webhook_event.from_account_id;
const body = json.webhook_event.body;
const time = transTime_(json.webhook_event.send_time);
const roomid = json.webhook_event.room_id;
let send_room_id = 0;
let recipient = '[toall]';
if ( roomid === ROOM_ID_A ){
send_room_id = ROOM_ID_B;
}
if ( send_room_id ){
const msg = recipient +
"[qt][qtmeta aid=" + from + " time=" + time + "]" + body + "[/qt]";
const properties = PropertiesService.getScriptProperties();
const token = PropertiesService.getScriptProperties().getProperty('CW_TOKEN');
sendCWMessage_(token,send_room_id,msg);
}
}
/**
* Chatworkにメッセージ送信
*
* @param {string} Chatwork APIトークン
* @param {string} Room ID
* @param {string} 送信するメッセージ本文
*
* 〈ライブラリ〉
* Chatwork Client for Google Apps Script : M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT
* https://github.com/cw-shibuya/chatwork-client-gas
*/
function sendCWMessage_(token, roomId,msgbody){
const cw = ChatWorkClient.factory({token: token});
cw.sendMessage({
room_id: roomId,
body: msgbody
});
}
/**
* UnixTimeを日付の整形に変換
*
* @param {string} UnixTime
* @return {string} 日付の整形(yyyy/MM/dd HH:mm:ss)
*/
function transTime_(intTime){
const d = new Date( intTime * 1000 );
return Utilities.formatDate(d, 'JST', 'yyyy/MM/dd HH:mm:ss');
}
アカウントに対して通知されるメッセージのWebhookイベントで処理を行うようにしているため、通知元となっているルームIDを参照するコードとなっています。
(修正・追記)Chatwork Webhookで、フィールド名:room_idは、タイプが数値です。
そのため、コードの1,2行目
const ROOM_ID_A = XXXXXXXXX;
const ROOM_ID_B = YYYYYYYYY;
で通知元、通知先のルームIDを定義する定数は、数値で指定するようにしました。
なお、ChatworkのAPIトークンの取得方法は、下記を参考にしました。
今回使用しているライブラリ「ChatWorkClient for Google Apps Script」については、下記を参考にしました。
2. 1.を、ウェブアプリケーションとして導入
スクリプトエディタのメニューから、「公開」→「ウェブアプリケーションの導入」を選択します。
「ウェブアプリケーションの導入」ダイアログから、
①「新規作成」を選択
②次のユーザとして「自分」を選択
③「全員(匿名ユーザを含む)」を選択
し、「導入」を選択します。(2回め以降は、「更新」になります)
URLが取得できますので、コピっておきます。
3. Chatwork の設定
アカウントのアイコンの右にある▼を選択し、「サービス連携」を選択します。
左のメニューから、「Webhook」を選択し、「Webhook」画面にて、「新規作成」を選択します。
Webhook名は、わかりやすい「Webhookの新規作成」画面で、
・Webhook名:わかりやすい命名
・Webhook URL:2. でコピったURLを設定
・イベント:今回は、指定アカウントに来たメッセージで判定するので、「アカウントイベント」
を選択して、「作成」を選択します。
これで設定完了。
ルームAで、送信されたメッセージが、
ルームBへメッセージ送信されます。
まとめ
Chatworkのメッセージ転送をしたいとき、GASで簡単に対応できます。
また、GASをGoogleスプレッドシートにコンテナバインドで実装しておくと、転送したメッセージをシートに出力しておくと、そのメッセージを処理したかどうか?なんかも、管理することができそうです。
この記事が気に入ったらサポートをしてみませんか?