CODE:LIFE

GAS

Chatworkの投稿内容をGoogleスプレッドシートに自動で反映させる

avatar

https://qiita.com/rf_p/items/897d93f7beca83cd5902

思いの外簡単そうだったのでこれをやってみる。

用意するもの

  • Google スプレッドシート
  • Chatwork

手順概要

  1. スプレッドシート作成
  2. スクリプトエディタでdoPostとJSONパーサを記述
  3. スクリプトAPI公開
  4. ChatworkでWebhookを作成してスクリプトのURLを指定

 

まずはスプレッドシートを用意

空っぽでOK。スクリプトエディタを開いて ツール → スクリプトエディタを開く。

An image from Notion

Chatworkからデータを受け取るスクリプト

以下をコード.gsに貼り付け

function doPost(e) {
  try {
    var json = JSON.parse(e.postData.contents);
    var body = json.webhook_event.body;
    SpreadsheetApp.getActiveSheet().appendRow([body]);
  } catch (e) {
    return false;
  }
  return true;
}

 

保存

An image from Notion

 

公開→ウェブアプリケーションとして導入

An image from Notion

 

全員(匿名ユーザーを含む)を選択して「導入」

An image from Notion

 

Googleアカウントを選択して進む

こんなのが出たら「詳細」をクリック

An image from Notion

 

安全ではないページに移動

An image from Notion

 

許可をクリック

An image from Notion

 

表示されたURLをコピーしておく

An image from Notion

 

chatworkの設定

画面右上の「API設定」を開く

An image from Notion

 

Webhookの新規作成でさっきのURLをコピペ、その他設定して保存。

An image from Notion

  

動作テスト

対象のルームに投稿

An image from Notion

 

約1秒後にはスプレッドシートに表示された!

An image from Notion

 

もうちょっと色々データ取りたいよね

chatworkのWebhookで送信されるリクエスト内容は以下

Chatwork APIドキュメント

{
    "webhook_setting_id": "12345",
    "webhook_event_type": "mention_to_me",
    "webhook_event_time": 1498028130,
    "webhook_event":{
        "from_account_id": 123456,
        "to_account_id": 1484814,
        "room_id": 567890123,
        "message_id": "789012345",
        "body": "[To:1484814]おかずはなんですか?",
        "send_time": 1498028125,
        "update_time": 0
    }
}

ユーザはIDのみ、投稿日時はUNIXタイムスタンプ。

それぞれ変換が必要そうですね。

以下の記事がとても参考になりそう。そのうちやりたい。

tonari-it.com