中級向けn8n 公式テンプレート承認済み

Chatwork の記録をシートへ

Chatwork に「#記録 昨日 タクシー 3,200円」のように書くと、Claude が日付の言葉・金額・科目・メモに分け、コードが検算してから Google スプレッドシートに記録し、Chatwork に返信します。

30件の書き込みで測ると、科目に例を付けて25/26が正しく、残る1件は取りこぼしの検算が止めました。

Chatwork には n8n の標準ノードが無いので、API で作りました。履歴の落とし穴と、Bearer を付けて 401 になった件も書いています。JSON を配布します。

人の手間は、どう変わるか

Before(人が手でやっていたこと)

  • 経費や売上をメモやチャットに書き、あとで表に1行ずつ打ち直す
  • 「昨日」「先週金曜」が何日かを数えて、日付の欄に入れる
  • 科目を選び、金額を書き写す

After(このワークフローを入れると)

  • Chatwork に「#記録」から書くだけで、日付・金額・科目・メモに分かれて、表に1行入る
  • 金額は書き込みにある数字だけを認め、日付は書き込んだ日から、コードが計算する
  • 記録した内容が、Chatwork に返信で届く

それでも人に残ること

  • 「要確認」と理由の付いた行を見て、直す
  • 返信を見て、違っていれば直す

動作確認: — n8n 2.36.8 / Claude Haiku 4.5 / Chatwork API v2 / Google スプレッドシート

n8n 公式テンプレート: 英語版が n8n の審査を通過しました()。注記を読む

この記事で配っている日本語版は、審査を受けていません。n8n が内容を保証するものではありません。 n8n 公式のページ(英語版)を見る

経費や売上の記録を、あとで表に打ち直している人は多いと思います。Chatwork に書いたものが、そのまま表になれば、打ち直す手間が消えます。

このワークフローは、次のことをします。

  • Chatwork の部屋に、「#記録 昨日 タクシー 3,200円」 のように書く
  • Claude が、日付の言葉、金額、科目、メモに分けて、Google スプレッドシートの1行にする
  • コードが、分けた結果を、元の書き込みと突き合わせて検算する(金額は書いてあるか、日付はコードで計算できるか、科目は一覧にあるか)
  • 怪しいものは、捨てずに「要確認」と理由を付けて記録する
  • Chatwork に、記録した内容を、返信する(「✅ 経費 3,200円 交通費 2026-10-09 (タクシー)」)
約35秒で、仕組みの全体(音声あり。音声:VOICEVOX:雨晴はう)

chatwork-notes-to-sheets.json をダウンロード

n8n 公式のテンプレートにも提出して(2026年10月10日)、承認されました。 n8n の画面での公開の日付は、2026年10月12日です。承認されたのは英語版で、この記事で配っている日本語版は、審査を受けていません。n8n が内容を保証するものではありません。

Chatwork「#記録 昨日タクシー 3,200円」n8n① 5分おきに読む② 記法を整える③ Claude が項目に分ける日付の言葉・金額・科目④ コードが検算する金額は書いてあるか日付はコードで計算科目は一覧にあるかlog タブ全部の書き込みrecords タブOK/要確認(理由つき)⑤ 記録した内容を返信
Claude が返したものを、そのまま信じない。金額は書き込みに書いてあるものだけを認め、日付はコードで計算する。怪しいものは捨てずに、「要確認」と理由を付けて記録する。

Chatwork には、n8n の標準ノードがありません。 そのため、API を呼ぶ形(HTTP Request ノード)で作っています。

このワークフローが守っている3つの決まり

決まり どうしているか
AI が返したものを、そのまま信じない 金額は、元の書き込みに書いてある数字だけを認める。引用(金額の部分)が、元の書き込みに含まれているかも見る
日付は、AI に計算させない AI には、日付の言葉(「昨日」「10/3」「先週金曜」)を書き写させるだけ。日付への変換は、コードが、書き込みを送った日を基準に行う
怪しいものは、捨てない 検算に引っかかったものは、記録して、「要確認」と日本語の理由を付ける。取りこぼし(金額が書いてあるのに、記録が0件)も、要確認にする

30件で測った結果

「#記録」付きの短い書き込みを、私が30件書いて(普通の書き込み26件と、わざと失敗させる書き込み4件)、Claude Haiku 4.5 に読ませました。基準の日は2026年10月10日です。正解は、私が先に決めました(科目が複数ありうるものは、許す範囲を決めた)。それぞれ、1回の実行です。

版 完全に正しい(普通の26件) 間違いのうち、検算が止めた
最初:科目は名前だけ 22件 0件(間違い4件のうち)
+取りこぼしの検算 24件 取りこぼし(傘)を止めた
+科目に例を付ける 25件 残る1件(傘)を止めた。すり抜け0件、誤警報0件
  • 最初の4件の間違いは、検算が見ている範囲の外でした。3件は、科目を「その他」にした(サーバー代、ガソリン、駐車場)。1件は、Claude が記録を1件も作らなかった(後述)。
  • 科目に、「交通費:電車・バス・タクシー・ガソリン・駐車場・高速代」のように例を付けたところ、科目の間違いが消えました。
  • わざと失敗させる4件のうち、止まったのは3件です(米ドルの金額、日付が「先週」だけ、日付が「来月」)。

実際に動かした結果

Chatwork の私のアカウントの「マイチャット」(自分だけの部屋)に書いて、実機で試しました(n8n 2.36.8、自分のパソコンで動かしました)。

  • 日付: 「昨日」が 2026-10-09、「10/3」が 2026-10-03、「先週金曜」が 2026-10-02 になった(基準は 2026-10-10 の土曜日)。「3日前」「一昨日」などは、30件の測定と、部品の単体テストで確かめた
  • 2件入りの書き込み: 「タクシー3,200円と電車480円」は、2行に分かれた
  • 要確認: 「来月払い 3,000円 サーバー」は、日付の言葉が分からず、送信日を使って、要確認(理由つき)。「今日はお疲れさまでした」(金額なし)も、要確認
  • 返信: 「【自動記録】✅ 経費 5,000円 交通費 2026-10-09 (ガソリン)」が、実際に、Chatwork の画面に付いた
  • スプレッドシート: API で直接読むと、records が13行、重複なし。19桁のメッセージ ID は、丸められず、文字列のままだった

つまずいた4つと、直し方

1. 認証に Bearer を付けて、401 になった

Chatwork の API は、X-ChatWorkToken というヘッダーに、トークンだけを入れます。LINE や Slack の癖で、Bearer を付けると、401 Invalid API Token が返ります。認証情報は、間違った値でも保存できてしまい、呼び出すまで分かりません。

直し方は、Value から Bearer を消して、トークンだけにすることです。私は、最初に、ここで、時間を使いました。

2. 「見たことがある」の履歴が、失敗した実行のあとで、書き込みを失わせる

同じ書き込みを2回記録しないために、最初は、n8n の「Remove Duplicates」(見たことがある書き込みを除くノード)を、記録の前に置いていました。ところが、このノードの履歴は、実行の途中で書かれます。 そのあとのノードで失敗すると、その書き込みは「見た」ことになって、次の実行では、除かれます。二度と、処理されません。

試験で、この作りの危うさに気づきました。新しい3件が、記録の手前の設定のミスで失敗した時点で、3件は、履歴の上では「見た」ことになっていました。そのまま次の実行をすれば、3件とも除かれる作りでした。

直し方は、記録の流れを、この履歴に頼らない作りにしたことです。直したあとの実行で、失敗した実行の3件が、無事に記録されました。

  • 記録する書き込みは、スプレッドシートの records タブに、すでにあるかで見分ける。失敗しても、記録されていなければ、次の実行でもう一度処理される
  • 履歴は、log タブ(全部の書き込みを残す)だけに使う。ここは「同じメッセージ ID なら更新」で書くので、履歴が消えても重複しない

もう一つ、私がワークフローを組み直すたびに、ノードの ID が変わり、履歴が消えました。 その結果、log に、同じ書き込みが、また追記されました(そのあと、「同じメッセージ ID なら更新」で書く形にしました)。

3. Claude が、記録を1件も作らず、誰にも知らされなかった

「忘れ物 傘 800円 おととい」を、Claude は、3回とも、記録を0件で返しました。エラーにはなりません。何も起きないだけです。

直し方は、検算に、「金額(円)が書いてあるのに、記録が0件なら、要確認にする」を足したことです。金額が書いていない書き込み(「電話 03-1234-5678」)は、金額とは見ないので、要確認になりません。

4. 科目が、「その他」に偏った

科目の一覧を、名前だけで渡すと、Claude は、サーバー代、ガソリン、駐車場を、「その他」にしました。検算の対象外なので、気づかれません。科目ごとに例を付けると、直りました(上の表)。

使うための設定

1. スプレッドシートを作る

白紙の Google スプレッドシートを、1つ作ります。次に、ワークフローの「Spreadsheet ID」ノードに、その ID を貼って、「Run once」の枝を、1回だけ実行します。log と records の2つのタブと、見出しの行が、できます。2回実行すると、タブが既にあるので、失敗するはずです(試していません)。

その後、3つの Google スプレッドシートのノードで、このスプレッドシートを選びます。

2. 認証情報

認証情報 入れるもの
Header Auth(Chatwork) Name は x-chatworktoken、Value は API トークンだけ(Bearer は付けない)
Google Sheets OAuth2 自分の Google アカウント
Anthropic Claude Haiku 4.5

3. 設定のノード

  • room_ids:読む部屋の ID(部屋の URL の #!rid のあとの数字)。カンマで並べる
  • keyword:記録の合言葉(初期値は #記録)
  • categories と category_hints:科目の名前と、例
  • reply_in_chatwork、reply_marker:返信するか、返信に付ける印

4. 公開する

公開したら、Chatwork の部屋に書いてみます。最大5分で、返信が付きます。

使う前に知っておくこと

  • 返信は、API のトークンの持ち主の名前で、投稿されます。 あなたが書いたように見えます。専用のアカウントを作って、そのトークンを使うのがおすすめです
  • 5分おきに動きます。 n8n クラウドでは、書き込みが無くても、月に約8,640回の実行になります(12回 × 24時間 × 30日の計算で、実測ではありません)。頻度を下げるか、必要なときだけ動かしてください。Claude を呼ぶのは、「#記録」付きの書き込みだけです
  • 書き込みは、Anthropic(Claude)に送られます。 送れない情報は、記録の書き込みに入れないでください
  • 取得するのは、各部屋の最新の書き込みです。Chatwork の API は、最新100件までを返す、と理解しています(公式の資料で、この試験では、上限まで書き込んでいません)。5分のあいだに、100件より多く書き込まれる部屋では、古い分を取りこぼします
  • sent_at は、スプレッドシートの日時の値として入ります

確認していないこと

  • Webhook(書いた瞬間に動く方式)。 Chatwork の無料プランで作れるかを、確かめていません。このテンプレートは、5分おきに取りに行く方式です
  • 複数の部屋の実機。 私のアカウントには、「マイチャット」の1つしかありません。部屋の対応づけは、同じ部屋を2回並べる試験で確かめました。実際に、2つ目の部屋では、試していません
  • Excel(.xlsx)への記録。 ノードはありますが、試していません
  • Claude Haiku 4.5 以外のモデル
  • 30件の外。 書き込みは私の言い回しで、30件、1回ずつです。ほかの言い回し(略語、口語、長い文)では、結果が変わります
  • 合計の計算が要る書き込み(「x 2泊」)、2つの金額から、どちらかを選ぶ書き込み(上の注意書き)
  • Google スプレッドシートの認可は、途中で、再接続が必要になりました(原因は、確かめていません)。長く動かすときは、認証が切れていないか、見てください

次に読む

次に読む