中級向け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 (タクシー)」)
chatwork-notes-to-sheets.json をダウンロード
n8n 公式のテンプレートにも提出して(2026年10月10日)、承認されました。 n8n の画面での公開の日付は、2026年10月12日です。承認されたのは英語版で、この記事で配っている日本語版は、審査を受けていません。n8n が内容を保証するものではありません。
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 スプレッドシートの認可は、途中で、再接続が必要になりました(原因は、確かめていません)。長く動かすときは、認証が切れていないか、見てください
次に読む
- 同じ「AI + コードの検算」を、LINE と Slack で使った例なら LINE×Slack 学習する窓口
- 外国語の LINE を日本語で受ける、検算つきの例なら LINE 多言語の窓口
- Data Table の使い方なら n8n Data Tableの使い方
- n8n の実行回数の数え方と、実際の費用なら n8nの料金と実際の費用