My App

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_id yang 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 NameTypeDescription
projecttextNama project/produk yang terkait dengan eskalasi.
escalated_toselectKategori eskalasi: Engineer, Project, atau HC.
capt_usersselect (users)Pimpinan penanggung jawab utama (multi-select).
issuetextareaPenjelasan mendalam mengenai masalah dan urgensinya.
need_discuss_withselect (users)Stakeholder tambahan yang perlu dilibatkan.
ccselect (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, dan username pelapor 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.
  • 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 Do
    • Log_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, dan user_id yang 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 message baru ("Request started at...") dan menghapus tombol dengan mengirimkan objek props kosong, 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: getById menggunakan 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 (berbasis root_id).
  • Data Mapping:
    • Status: Handling
    • Handled 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 by Log_id).
  • Data Mapping:
    • Status: Resolved
    • Resolved 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')
  • Target Sheet: esc_log pada 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, dan hcData.
    • Mention Resolution: Menggunakan await fetch ke POST /api/v4/users/search untuk mencari username Mattermost real berdasarkan nama yang tertulis di Google Sheets.
    • Thread Linking: Mengonstruksi URL Mattermost dinamis menggunakan site_url dan post_id (Log_id) agar ringkasan bisa diklik dan mengarah langsung ke percakapan.
    • Attachment Formatting: Menyusun JSON untuk attachments Mattermost dengan kode warna hex yang relevan (e.g., Engineer: Hijau).

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.

On this page