Issue Escalation
Alur eskalasi masalah ke tim Engineering, Project, atau HC.
/escalate
Workflow ini terdiri dari tiga bagian utama: pelaporan eskalasi instan, pelacakan progres penanganan isu secara real-time, dan sistem rekapitulasi otomatis (reminder) mingguan.
1. Escalation Request Flow
Workflow ini dipicu ketika user menjalankan perintah /escalate di Mattermost untuk melaporkan masalah secara cepat ke pimpinan terkait.
Workflow Diagram
Detail Workflow
Open Dialog
- Tipe Node:
n8n-nodes-base.httpRequest(v4.2) - Endpoint:
POST https://workspace.dot.co.id/api/v4/actions/dialogs/open - Autentikasi:
Mattermost API(Predefined Credential) - Fungsi Teknis: Mengirimkan
trigger_idyang didapat dari slash command untuk membuka modal interaktif di client Mattermost. - Payload Struktur:
{ "trigger_id": "{{ $json.body.trigger_id }}", "url": "{{ $node[\"Wait Submission\"].resumUrl }}", "dialog": { "title": "Escalation Form", "elements": [...] } } - Konfigurasi UI (Dialog Fields):
| Field Name | Type | Description |
|---|---|---|
project | text | Nama project/produk yang terkait dengan eskalasi. |
escalated_to | select | Kategori eskalasi: Engineer, Project, atau HC. |
capt_users | select (users) | Pimpinan penanggung jawab utama (multi-select). |
issue | textarea | Penjelasan mendalam mengenai masalah dan urgensinya. |
need_discuss_with | select (users) | Stakeholder tambahan yang perlu dilibatkan. |
cc | select (users) | Pihak lain yang perlu monitor (optional). |
Wait Submission
- Tipe Node:
n8n-nodes-base.wait(v1.1) - Limit Waktu: 5 Menit (Resume unit: minutes).
- Mekanisme: Workflow masuk ke state waiting dan menghasilkan
resumeUrl. State ini hanya akan berlanjut jika n8n menerima callback POST dari Mattermost dialog ke URL tersebut. Jika timeout, workflow otomatis berhenti.
Checks Cancelled
- Tipe Node:
n8n-nodes-base.if(v2.2) - Logika Evaluasi: Memeriksa nilai boolean pada expression
{{ $json.body.cancelled }}. - Branching:
TRUE: User menekan tombol "Cancel" -> Alur diarahkan ke Stop and Error.FALSE: User mensubmit data -> Alur lanjut ke pencarian profil.
Stop and Error
- Tipe Node:
n8n-nodes-base.stopAndError(v1) - Pesan Error:
Failed to send massage | Timeout - No payload recorded - Tujuan: Mengakhiri eksekusi yang tidak valid untuk menjaga kebersihan log n8n.
Find PIC
- Tipe Node:
n8n-nodes-base.mattermost(v1 - Operation:getById) - Query: Menggunakan ID dari
{{ $json.body.user_id }}(pelapor). - Output: Mengambil data
first_name,last_name, danusernamepelapor untuk keperluan tagging.
Get Bulk Users & Get Bulk Need Discuss Users
- Tipe Node:
n8n-nodes-base.httpRequest - Method:
POST - Endpoint:
https://workspace.dot.co.id/api/v4/users/ids - Payload:
{{ $json.body.submission.capt_users }}dan{{ $json.body.submission.need_discuss_with }}. - Tujuan: Mengonversi kumpulan ID User menjadi objek user lengkap agar profil mereka (terutama username) bisa digunakan dalam format mention.
Merge
- Tipe Node:
n8n-nodes-base.merge(v3.2) - Mode:
Combine - Fungsi: Menyatukan dataset dari dua pemanggilan API profil user agar bisa diproses sebagai satu array di tahap format data.
Code: Format Data
- Tipe Node:
n8n-nodes-base.code(v2 - JavaScript) - Logika Internal:
- Mention Mapping: Transformasi array user menjadi string mention (e.g.,
@budi, @andi). - Full Name Joining: Menggabungkan nama depan dan belakang untuk logging Sheets.
- Validation: Melakukan filter untuk membuang ID yang null atau tidak ditemukan.
- CC Sanitization: Memastikan format CC sesuai standar meskipun bersifat opsional.
- Mention Mapping: Transformasi array user menjadi string mention (e.g.,
- Result Output: Objek JSON berisi
capt_mentions,discuss_mentions, dan data terformat lainnya.
Send Message to Mattermost
- Tipe Node:
n8n-nodes-base.httpRequest - Endpoint:
/api/v4/posts - Payload Struktur:
{ "channel_id": "1br1hnu9opduj8ebwb39hkr9gw", "message": "🚨 **NEW ESCALATION**\n**Project:** {{ project }}\n**Issue:** {{ issue }}\n**Capt:** {{ capt_mentions }}" } - Deskripsi: Mengirimkan rangkuman eskalasi ke channel pusat koordinasi.
Send Button to Thread
- Tipe Node:
n8n-nodes-base.httpRequest - Fungsi: Menambahkan interaktivitas.
- Props Attachments:
"actions": [{ "name": "I Take this mission", "integration": { "url": "https://n8n.dot.co.id/webhook/mattermost-workflow", "context": { "task": "escalate-button", "next_progress": "take-mission" } } }] - Tujuan: Memungkinkan pimpinan mengklaim isu langsung dari Mattermost.
Append Row to Sheet
- Tipe Node:
n8n-nodes-base.googleSheets(v4.6 - Operation:append) - Mapping Teknis:
Status:To DoLog_id:{{ root_id }}(Penting untuk sinkronisasi update status nantinya).Submitted By:{{ pic_fullname }}Issue Summary:{{ issue }}
2. Escalation Progress Tracking
Workflow berbasis Webhook ini menangani siklus hidup isu dari status pengklaiman hingga penyelesaian selesai (resolved).
Workflow Diagram
Detail Workflow
Webhook
- Tipe Node:
n8n-nodes-base.webhook(v2) - HTTP Method:
POST - Fungsi: Mendengarkan event interaktif dari tombol Mattermost.
- Data Masuk: Membawa context dari
root_id,project_name, danuser_idyang mengklik tombol.
Respond ACK
- Tipe Node:
n8n-nodes-base.respondToWebhook(v1.4) - Konfigurasi:
Respond with: JSON ({"status": 200}). - Mekanisme: Segera menjawab request Mattermost untuk menghindari penanda "Loading" merah di sisi user.
Switch Progress
- Tipe Node:
n8n-nodes-base.switch(v3.2) - Expression:
{{ $json.raw.context.next_progress }}. - Logika Output:
take-mission: Isu sedang diambil.mission-completed: Isu telah beres.
Update Thread: Start
- Tipe Node:
n8n-nodes-base.httpRequest(v4.2) - Method:
PUT - URL:
https://workspace.dot.co.id/api/v4/posts/{{ $json.body.post_id }} - Payload: Mengirimkan
messagebaru ("Request started at...") dan menghapus tombol dengan mengirimkan objekpropskosong, sehingga tombol tidak bisa diklik ulang.
Notify Handling Status
- Tipe Node:
n8n-nodes-base.httpRequest - Endpoint:
POST /api/v4/posts - Fungsi: Mengirim komentar baru ke thread asli (
root_id). - Tombol Baru: Menambahkan tombol baru "Mission Completed" dengan context
next_progress: mission-completed.
Get Capt Profile
- Tipe Node:
n8n-nodes-base.mattermost - Operasi:
getByIdmenggunakan ID dari user yang mengklik tombol. - Tujuan: Validasi identitas pimpinan yang mengambil tugas.
Sheet: Set Handling
- Tipe Node:
n8n-nodes-base.googleSheets(v4.6) - Operasi:
appendOrUpdate. - Matching Column:
Log_id(berbasisroot_id). - Data Mapping:
Status:HandlingHandled By:{{ first_name + ' ' + last_name }}Handled Date:{{ $now.setZone('Asia/Jakarta').toFormat('MMM d, yyyy') }}
Update Thread: Resolved
- Tipe Node:
n8n-nodes-base.httpRequest - Method:
PUT - Mekanisme: Sama seperti node Start, namun mengubah isi teks menjadi "Request resolved at..." dan membersihkan semua tombol interaktif.
Notify Success Message
- Tipe Node:
n8n-nodes-base.httpRequest - Isi Pesan:
**🎉 Mission Accomplished!** Issue sudah berhasil dibereskan oleh Capt @{{ user_name }}. - Tujuan: Konfirmasi penyelesaian isu secara publik di thread diskusi.
Sheet: Set Resolved
- Tipe Node:
n8n-nodes-base.googleSheets - Operasi:
appendOrUpdate(Match byLog_id). - Data Mapping:
Status:ResolvedResolved Date: Timstamp saat tombol diklik.
Final Respond
- Tipe Node:
n8n-nodes-base.respondToWebhook - Fungsi: Terminasi workflow setelah seluruh proses update backend selesai.
3. Weekly Escalation Summary (Reminder)
Rekapitulasi otomatis terjadwal yang memastikan tidak ada isu "Handling" atau "To Do" yang terlupakan oleh tim.
Workflow Diagram
Detail Workflow
Schedule Trigger
- Tipe Node:
n8n-nodes-base.scheduleTrigger(v1.2) - Aturan Waktu:
0 0 9 * * 1(Setiap jam 09:00 AM di hari Senin). - Timezone:
Asia/Jakarta.
Get Row Summary
- Tipe Node:
n8n-nodes-base.googleSheets(v4.6 - Operation:getRows) - Filter Logika:
- Query:
(Status = 'To Do' OR Status = 'Handling')
- Query:
- Target Sheet:
esc_logpada dokumen ID yang tersimpan di n8n credentials. - Tujuan: Mengambil subset data eskalasi yang masih membutuhkan perhatian segera.
Generating Report Message
- Tipe Node:
n8n-nodes-base.code(v2 - Async JavaScript) - Logika Internal (Deep Technical):
- Categorization: Data di-looping dan dipisahkan ke array
engineerData,projectData, danhcData. - Mention Resolution: Menggunakan
await fetchkePOST /api/v4/users/searchuntuk mencari username Mattermost real berdasarkan nama yang tertulis di Google Sheets. - Thread Linking: Mengonstruksi URL Mattermost dinamis menggunakan
site_urldanpost_id(Log_id) agar ringkasan bisa diklik dan mengarah langsung ke percakapan. - Attachment Formatting: Menyusun JSON untuk
attachmentsMattermost dengan kode warna hex yang relevan (e.g., Engineer: Hijau).
- Categorization: Data di-looping dan dipisahkan ke array
Send Summary to Mattermost
- Tipe Node:
n8n-nodes-base.httpRequest(v4.2) - Method:
POST /api/v4/posts - Payload Struktur:
{ "channel_id": "1br1hnu9opduj8ebwb39hkr9gw", "message": "### 📊 Weekly Escalation Report", "props": { "attachments": "{{ $node[\"Code\"].json.attachments }}" } } - Target: Channel koordinasi tim pimpinan.