ISS mulai menjajal n8n bulan ini — alat workflow automation yang akan menjadi tulang punggung beberapa proyek AI untuk klien UMKM, termasuk bot WhatsApp katering yang sedang direncanakan. Sebelum membangun sesuatu yang rumit, fondasinya perlu dipastikan jalan lebih dulu: bisakah n8n menerima request, meneruskannya ke Claude API, dan membalas dengan jawaban yang masuk akal? 今月からn8n(ワークフロー自動化ツール)を試し始めました。複数の中小企業向けAIプロジェクトの基盤になる予定で、現在計画しているケータリング向けWhatsAppボットもそのひとつです。複雑なシステムを組む前に、まず基本構成が機能することを確認したいと考えました:n8nがリクエストを受け取り、Claude APIに転送し、適切な応答を返せるか、という最小構成のテストです。 ISS started tweaking n8n this month — a workflow automation tool that's going to be the backbone of several AI projects for SME clients, including a catering WhatsApp bot currently in planning. Before building anything complex, the foundation needed to be confirmed first: can n8n receive a request, forward it to the Claude API, and reply with a sensible answer?
Apa yang Dibangun 構築したもの What Was Built
Workflow 3-node paling sederhana yang bisa membungkus Claude API jadi endpoint: Claude APIをエンドポイントとして包む、最小構成の3ノードワークフローです。 The simplest 3-node workflow that can wrap the Claude API into an endpoint:
- Webhook — node trigger yang menerima POST requestWebhook — POSTリクエストを受け取るトリガーノードWebhook — trigger node that receives a POST request
- HTTP Request — memanggil Claude API, dengan system prompt persona katering (membalas dalam Bahasa Indonesia)HTTP Request — Claude APIを呼び出す(システムプロンプトには業種別ペルソナを設定可能)HTTP Request — calls the Claude API, with a system prompt set to a catering persona (replying in Indonesian)
- Respond to Webhook — mengirim balik jawaban Claude ke pengirimRespond to Webhook — Claudeの応答を呼び出し元に返すRespond to Webhook — sends Claude's answer back to the sender
Cara Kerja 処理の流れ How It Works
POST request (pesan pelanggan) | v Webhook (n8n) | v HTTP Request --> Claude API (system prompt: persona katering, Bahasa Indonesia) | v Respond to Webhook --> balas ke pengirimPOSTリクエスト(問い合わせ内容) | v Webhook(n8n) | v HTTP Request --> Claude API (システムプロンプトで業種別ペルソナを設定) | v Respond to Webhook --> 呼び出し元へ応答POST request (customer message) | v Webhook (n8n) | v HTTP Request --> Claude API (system prompt: catering persona, Indonesian) | v Respond to Webhook --> reply to sender
Detail Teknis 技術詳細 Technical Details
- Dijalankan lokal lewat Docker Desktop di laptop Windows — bukan disewa di serverWindows PC上のDocker Desktopでローカル実行 — サーバーは未契約Run locally via Docker Desktop on a Windows laptop — not yet on a rented server
- Workflow tidak tersimpan sebagai file di disk yang dikelola secara manual; ia persist di dalam volume Docker
n8n_data, diakses lewat antarmuka n8n dilocalhost:5678ワークフロー自体は自分で管理するファイルとしてディスクに保存されているわけではなく、n8nのDocker volume(n8n_data)内に保持され、localhost:5678のn8n管理画面からアクセスしますThe workflow isn't saved as a file managed manually on disk; it persists inside then8n_dataDocker volume, accessed via the n8n interface atlocalhost:5678 - Diuji dulu lewat test webhook URL milik n8n sebelum toggle Active dinyalakan (mode produksi, bukan test)本番用のActiveトグルを入れる前に、n8n標準のテスト用Webhook URLで動作確認を実施Tested first via n8n's own test webhook URL before the Active toggle was flipped on (production mode, not test)
Isi node HTTP Request — body JSON yang dikirim ke Claude API: HTTP RequestノードがClaude APIに送るJSONボディ: The HTTP Request node's content — the JSON body sent to the Claude API:
{
"model": "claude-haiku-4-5-20251001",
"max_tokens": 1024,
"system": "You are a helpful assistant for a catering business. Answer questions about menu, pricing, and availability politely in Bahasa Indonesia.",
"messages": [
{ "role": "user", "content": "{{ $json.body.message }}" }
]
}
Detail kecil yang menarik: instruksi system prompt ditulis dalam Bahasa Inggris, namun salah satu kalimatnya secara eksplisit memerintahkan Claude membalas dalam Bahasa Indonesia — bahasa instruksi dan bahasa output tidak harus sama. {{ $json.body.message }} adalah ekspresi n8n yang mengambil field message dari body request webhook secara langsung, sehingga tidak diperlukan parsing manual.
細かい点ですが興味深いのは、システムプロンプト自体は英語で書きつつ、「インドネシア語で丁寧に答える」という指示を一文に含めている点です — 指示言語と出力言語は一致させる必要がありません。{{ $json.body.message }}はn8nの式で、Webhookリクエストのボディからそのままmessageフィールドを取り出すため、手動のパース処理は不要です。
A small but interesting detail: the system prompt instructions were written in English, but one sentence explicitly tells Claude to reply in Indonesian — the instruction language and the output language don't have to match. {{ $json.body.message }} is an n8n expression that pulls the message field straight from the webhook request body, so no manual parsing is needed.
Hasil 結果 Results
Uji coba nyata lewat PowerShell: PowerShellからの実際のテスト: A real test via PowerShell:
POST http://localhost:5678/webhook-test/test-claude
Body: {"message": "Berapa harga nasi box untuk 50 orang?"}
Respons (200 OK): レスポンス(200 OK、内容を和訳): Response (200 OK):
"Terima kasih telah menghubungi kami! Saya senang membantu, namun saya perlu informasi lebih lengkap untuk memberikan harga yang akurat: 1. Jenis nasi box — Apakah Anda menginginkan: — Nasi b..." 「お問い合わせいただきありがとうございます。正確な価格をお伝えするために、もう少し詳細を教えていただけますか。1. 弁当の種類 — ご希望は…」 "Thank you for reaching out! I'd be happy to help, but I need a bit more information to give you an accurate price: 1. Type of boxed rice meal — Would you like: — Rice b..."
Hasil ini sesuai target, bukan kebetulan: bot tidak langsung melempar angka harga. Untuk bisnis katering, menyebut harga tanpa mengetahui jenis menu yang diminta lebih berisiko daripada tidak menjawab sama sekali — bot ini justru bertanya detail lebih dulu sebelum memberi estimasi. Perilaku ini muncul dari satu kalimat instruksi singkat di system prompt ("answer questions about menu, pricing, and availability politely") — bukan default Claude API, dan bukan instruksi yang secara eksplisit menyuruh "tanya dulu kalau info kurang." Claude menyimpulkan sendiri bahwa menjawab dengan sopan untuk pertanyaan harga berarti mengonfirmasi detail terlebih dahulu. これは偶然ではなく意図した結果です。ケータリング業のような業種では、メニュー詳細を確認せずに価格を即答する方が、即答しないことよりもリスクが高い場合があります。このボットは即答せず、必要な情報を聞き返しました。この振る舞いは、システムプロンプト内の短い一文(「メニュー・価格・在庫について丁寧に答える」)から生まれたものです — Claude APIの既定動作ではなく、「情報が不足している場合は先に確認する」と明示的に指示したわけでもありません。Claudeは、価格の質問に丁寧に答えるとは詳細を先に確認することだと自ら判断しました。 This result matches the intent, not a coincidence: the bot doesn't blurt out a price blindly. For a catering business, quoting a price without knowing the requested menu type is riskier than not answering at all — instead, this bot asks for details before giving an estimate. This behavior came from one short instruction sentence in the system prompt ("answer questions about menu, pricing, and availability politely") — not a Claude API default, and not an instruction that explicitly said "ask first if info is missing." Claude inferred on its own that answering a price question politely means confirming details first.
Yang Saya Pelajari 現時点での学び What I Learned
- Pola 3-node (Webhook → HTTP Request → Respond to Webhook) sudah cukup untuk membungkus Claude API jadi endpoint yang bisa dipanggil dari mana saja — termasuk nanti dari gateway WhatsApp (Fonnte/Twilio).Webhook → HTTP Request → Respond to Webhookという3ノード構成だけで、Claude APIを「どこからでも呼び出せるエンドポイント」として包めることが確認できました。WhatsAppゲートウェイなど、後段のチャネルに接続する際の基盤になります。The 3-node pattern (Webhook → HTTP Request → Respond to Webhook) is already enough to wrap the Claude API into an endpoint callable from anywhere — including, later, a WhatsApp gateway (Fonnte/Twilio).
- System prompt yang digunakan hanya satu kalimat umum ("jawab pertanyaan menu, harga, dan ketersediaan dengan sopan") — tidak ada instruksi eksplisit "tanya dulu kalau info kurang." Namun Claude tetap memilih bertanya detail lebih dulu sebelum memberi estimasi. Ini kabar baik (perilaku amannya sudah muncul tanpa prompt yang rumit), tapi juga tanda bahwa konsistensi perilaku ini di skenario lain belum diketahui — satu kali pengujian belum cukup untuk diandalkan di produksi.システムプロンプトは「メニュー・価格・在庫について丁寧に答える」という一文だけで、「情報が不足している場合は先に確認する」という明示的な指示は入れていません。それでもClaudeは自発的に詳細を確認してから回答しました。これは良い兆候ですが、1回のテストだけでは本番投入の根拠にはならず、より多くのシナリオでの再現性確認が必要です。The system prompt used is just one general sentence ("answer menu, pricing, and availability questions politely") — no explicit "ask first if info is missing" instruction. Yet Claude still chose to ask for details before giving an estimate. That's good news (the safe behavior emerged without an elaborate prompt), but also a sign that its consistency across other scenarios isn't yet known — one test isn't enough evidence to rely on in production.
- Workflow ini langsung jadi modal awal untuk bot WhatsApp katering yang sedang direncanakan — swap persona ke katering sudah selesai; sisa kerjanya adalah menguji lebih banyak skenario percakapan (negosiasi tanggal, lokasi, konfirmasi pesanan).このワークフローは、業種別ペルソナへの切り替えとプロンプト設計の検証という意味で、特定業種向け自動化案件(報連相の一次受付、問い合わせ振り分けなど)に転用できる基盤パターンです。This workflow is a direct head start for the catering WhatsApp bot currently in planning — swapping in the catering persona is done; what's left is testing more conversation scenarios (date negotiation, location, order confirmation).
Keterbatasan Saat Ini 現在の限界 Current Limitations
- Toggle Active sudah dinyalakan, tapi workflow ini hanya berjalan selama laptop menyala dan Docker Desktop aktif — belum 24/7.本番用のActiveトグルは有効ですが、このワークフローはノートPCの電源が入っており、Docker Desktopが稼働している間のみ動作します — 24時間稼働ではありません。The Active toggle is on, but this workflow only runs while the laptop is on and Docker Desktop is running — not yet 24/7.
- Deploy ke Railway untuk uptime produksi sungguhan masih jadi tugas mendatang, belum dikerjakan.本番運用に向けたRailwayへのデプロイはまだ未着手で、今後の作業として残っています。Deploying to Railway for real production uptime is still a future task, not yet done.
- Belum terhubung ke WhatsApp asli — pengujian sejauh ini lewat HTTP request manual, belum lewat gateway WA.実際のメッセージングチャネル(WhatsApp等)への接続はまだ行っておらず、現時点では手動のHTTPリクエストでの検証のみです。Not yet connected to real WhatsApp — testing so far is via manual HTTP requests, not through a WA gateway.
Dibuat oleh developer AI independen berbasis di Bandung, Indonesia, yang membangun sistem AI custom untuk kebutuhan UMKM — termasuk semantic search, chatbot WhatsApp, dan otomasi workflow. Untuk kebutuhan serupa, hubungi Inti Sakura Solutions. バンドン(インドネシア)を拠点とする独立系AI開発者が、中小企業向けにセマンティック検索、チャットボット、ワークフロー自動化などのカスタムAIシステムを構築しています。同様の自動化ニーズをお持ちの企業様は、Inti Sakura Solutionsまでご連絡ください。 Built by an independent AI developer based in Bandung, Indonesia, who builds custom AI systems for SMEs — including semantic search, WhatsApp chatbots, and workflow automation. If your business has a similar need, get in touch with Inti Sakura Solutions.