---
title: "Notifikasi Telepon Sentry untuk Error Kritis Produksi"
description: "Sentry tidak punya aksi telepon. Arahkan issue alert lewat webhook agar hanya error yang merusak produksi membuat ponsel Anda berdering: setup dan filternya."
date: 2026-09-25
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Sentry
  - pemantauan error
  - notifikasi telepon
  - webhook
  - kelelahan alert
  - on-call
---

# Notifikasi telepon Sentry: berdering hanya saat produksi rusak

Sentry tidak bisa menelepon Anda. Ia bisa mengirim email, memposting ke Slack, atau menyerahkan alert ke PagerDuty — tetapi tidak ada aksi suara bawaan. Cara mendapatkannya tanpa membeli platform manajemen insiden adalah mengirim issue alert Sentry ke webhook yang berdering: buat integrasi internal, arahkan ke kanal panggilan Echobell, lalu pasang filter di depannya sehingga hanya error yang benar-benar merusak produksi yang lolos.

Panduan ini membahas seluruh jalurnya: integrasi, aturan alert, payload yang sebenarnya dikirim Sentry, template yang membacanya, dan dua jebakan yang membuat orang menyerah.

## Mengapa Sentry sendiri tidak bisa membuat ponsel berdering

Aksi issue alert Sentry mencakup notifikasi (email, Slack, Discord, Microsoft Teams), pembuatan tiket (Jira, GitHub, Azure DevOps), dan penyerahan ke produk paging (PagerDuty, Opsgenie). Semuanya berakhir di layar yang harus sedang Anda lihat, atau di kursi berbayar pada platform lain.

Pukul 14.00 itu tidak masalah. Pukul 03.00, pesan Slack tidak bisa dibedakan dari keheningan, dan notifikasi push kalah melawan Jangan Ganggu. Untuk sekumpulan kecil error di mana keterlambatan dua jam berarti uang sungguhan — checkout membalas 500, autentikasi menolak semua login, worker diam-diam membuang job — Anda butuh perangkat yang berdering.

Webhook adalah sambungannya. Sentry bisa memanggil endpoint HTTPS apa pun sebagai aksi aturan alert; [Echobell](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-sentry-phone-call-alerts-id&mt=8) mengubah permintaan HTTP itu menjadi alert bergaya panggilan yang menembus Mode Fokus iOS.

## Yang Anda butuhkan

- Organisasi Sentry yang memungkinkan Anda membuka **Settings → Developer Settings** (owner atau manager)
- Echobell terpasang ([App Store](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-sentry-phone-call-alerts-id&mt=8) / [Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid))
- Lima menit

Tidak ada apa pun di sisi Anda yang perlu bisa dijangkau dari internet. Sentry yang membuat permintaan keluar; Anda hanya menerimanya.

## Langkah 1 — Buat kanal yang berdering

Di Echobell, buat kanal dan setel tipe notifikasinya ke **Panggilan**. Inilah inti dari seluruh latihan ini: kanal panggilan berperilaku seperti telepon masuk, bukan push, sehingga menembus Mode Fokus dan Jangan Ganggu.

Beri template yang masuk akal pada pukul 3 pagi. Payload Sentry bersarang dalam, jadi jalur variabelnya lebih panjang dari biasanya:

```
Judul: {{data.event.level}}: {{data.event.metadata.type}}
Isi: {{data.event.title}} — {{data.event.culprit}}
```

Setel **template tautan** di pengaturan lanjutan agar mengetuk notifikasi membuka issue-nya:

```
{{data.event.web_url}}
```

Salin URL webhook dari tampilan detail kanal. Bentuknya seperti ini:

```
https://hook.echobell.one/t/<channel-token>
```

## Langkah 2 — Buat integrasi internal Sentry

Sentry hanya menawarkan webhook sebagai aksi aturan alert melalui sebuah *integrasi*, jadi Anda harus membuatnya. Ini formulir, bukan layanan — Anda tidak menulis kode apa pun.

1. Buka **Settings → Developer Settings → Custom Integrations**
2. **Create New Integration → Internal Integration**
3. **Name**: `Echobell` (nama inilah yang akan Anda pilih di aturan alert)
4. **Webhook URL**: URL kanal dari Langkah 1
5. **Aktifkan** sakelar **Alert Rule Action**
6. **Permissions**: `Issue & Event` → **Read** sudah cukup
7. Di bagian **Webhooks**, biarkan **semua** kotak **tidak tercentang** — lihat jebakannya di bawah
8. Simpan

Integrasi internal hanya berlaku untuk organisasi Anda dan memasang dirinya sendiri. Token yang dihasilkannya tidak pernah dibutuhkan untuk setup ini.

## Langkah 3 — Tambahkan integrasi sebagai aksi aturan

Buka **Alerts → Create Alert → Issue Alert**, atau edit aturan yang sudah ada.

Di bawah **Then perform these actions**, tambahkan **Send a notification via an integration** dan pilih **Echobell**.

Setel **Action interval** — pembatas "jika alert ini sudah terpicu lebih dari sekali" — minimal `30 minutes`. Nilai bawaannya mengirim pada setiap pemicu, dan error yang meletup 400 kali per menit akan menelepon Anda sampai Anda mematikannya.

Simpan, lalu jalankan tes aturan agar Anda melihat payload sungguhan tiba sebelum mempercayainya.

## Langkah 4 — Pahami apa yang benar-benar datang

Di sinilah sebagian besar setup rusak, karena bentuk payload-nya tidak seperti dugaan. Sentry membungkus semuanya:

```json
{
  "action": "triggered",
  "actor": { "id": "sentry", "name": "Sentry", "type": "application" },
  "data": {
    "event": {
      "event_id": "e4874d664c3540c1a32eab185f12c5ab",
      "level": "error",
      "title": "ReferenceError: heck is not defined",
      "culprit": "?(<anonymous>)",
      "platform": "javascript",
      "project": 1,
      "release": null,
      "metadata": { "type": "ReferenceError", "value": "heck is not defined" },
      "tags": [["level", "error"], ["browser", "Chrome 75.0.3770"]],
      "issue_id": "1117540176",
      "issue_url": "https://sentry.io/api/0/issues/1117540176/",
      "web_url": "https://sentry.io/organizations/test-org/issues/1117540176/events/e4874.../"
    },
    "triggered_rule": "Very Important Alert!"
  },
  "installation": { "uuid": "a8e5d2..." }
}
```

Empat hal yang perlu diketahui sebelum menulis satu template pun:

- **Semua yang berguna ada di bawah `data.event`.** `{{title}}` tidak menghasilkan apa-apa; `{{data.event.title}}` menghasilkan error-nya.
- **`data.event.project` adalah ID numerik, bukan slug.** Kalau ingin nama proyek yang terbaca di notifikasi, tulis sebagai teks biasa di template judul dan gunakan satu kanal per proyek.
- **Tidak ada field `environment`.** Environment datang di dalam `data.event.tags` sebagai pasangan `["environment", "production"]`, dan posisinya di array tidak stabil — jadi jangan diakses lewat indeks. Saring environment di aturan Sentry (Langkah 5).
- **`data.triggered_rule`** adalah nama aturan. Berguna di isi pesan ketika satu kanal melayani beberapa aturan.

Header `Sentry-Hook-Resource` bernilai `event_alert` untuk issue alert. Anda bisa mensyaratkannya di kondisi kanal supaya tidak ada hal lain yang bisa membuatnya berdering:

```
header["sentry-hook-resource"] == "event_alert"
```

## Langkah 5 — Persempit sampai yang pantas ditelepon

Kanal panggilan yang berdering untuk setiap issue baru lebih buruk daripada tidak punya kanal sama sekali: dalam sepekan Anda akan membisukannya, dan setelah itu ia tidak akan berdering untuk yang benar-benar penting. Saring di dua tempat.

**Di Sentry**, lewat conditions dan filters aturan:

| Tujuan | Konfigurasi aturan |
| --- | --- |
| Hanya produksi | Setel **Environment** aturan ke `production` |
| Hanya kerusakan nyata | Filter: `The event's level equals fatal` (atau `error`) |
| Bukan untuk lonjakan sesaat | Kondisi: `The issue is seen more than 25 times in 1 hour` |
| Hanya jalur kritis | Filter: `The event's tags match transaction contains /checkout` |
| Hanya regresi | Kondisi: `A resolved issue changes state from resolved to unresolved` |

**Di Echobell**, gunakan kondisi kanal sebagai jaring pengaman untuk hal yang tidak bisa diungkapkan Sentry, atau untuk perubahan yang tidak bisa Anda rilis hari ini:

```
data.event.level == "fatal" || data.event.level == "error"
```

Menyaring tingkat keparahan di aturan Sentry biasanya lebih baik, karena di sana pula pembatasan frekuensi berada. Menyaring di Echobell lebih baik ketika Anda ingin dua tingkat urgensi dari satu aturan.

## Langkah 6 — Beri peringatan pintu yang lebih sunyi

Gunanya membuat tingkatan adalah agar panggilan telepon tetap bermakna. Buat kanal Echobell kedua bertipe **Sensitif Waktu (Time Sensitive)**, tambahkan aturan Sentry kedua dengan ambang lebih rendah, dan arahkan ke integrasi internal kedua (satu integrasi menyimpan satu URL webhook, jadi kanal kedua butuh integrasi kedua).

Setup yang bertahan melewati satu pekan nyata kira-kira begini:

| Aturan Sentry | Level / ambang | Kanal Echobell | Perilaku |
| --- | --- | --- | --- |
| `prod-fatal` | `fatal`, produksi | Panggilan | Berdering menembus Mode Fokus |
| `prod-error-spike` | `error`, lebih dari 100 dalam 1 jam | Sensitif Waktu | Muncul di layar kunci, tanpa dering |
| `new-issue-digest` | issue baru apa pun | Normal | Push biasa, dibaca kapan sempat |

## Berdering hanya di luar jam kerja

Siang hari Anda toh sudah menatap Sentry. Echobell menyediakan variabel waktu sistem UTC untuk kondisi, sehingga satu kanal bisa berperilaku berbeda menurut jam tanpa aturan Sentry kedua:

```
data.event.level == "fatal" && (hour >= 17 || hour < 9)
```

Tambahkan pemeriksaan hari jika akhir pekan Anda memang benar-benar libur:

```
data.event.level == "fatal" && (hour >= 17 || hour < 9 || dayOfWeek == 0 || dayOfWeek == 6)
```

Semuanya UTC, jadi konversikan dari zona waktu Anda sebelum mengunci angkanya. [Referensi kondisi](/id/docs/conditions) memuat daftar variabel lengkapnya.

## Dua jebakan itu

**Jebakan 1: mencentang kotak Webhooks.** Integrasi internal punya dua jalur webhook yang saling bebas. Sakelar **Alert Rule Action** membuat integrasi bisa dipilih di aturan alert — itu yang Anda mau. Kotak **Webhooks** (`issue`, `error`, `comment`) membuat Anda berlangganan *setiap* peristiwa sumber daya tersebut: setiap issue yang dibuat, diselesaikan, ditugaskan, diarsipkan, atau diabaikan, di seluruh organisasi. Centang `issue` dan ponsel Anda akan berdering saat rekan menyelesaikan sesuatu. Biarkan semuanya kosong, dan hanya aturan alert Anda yang memicu webhook.

**Jebakan 2: memakai plugin Webhooks lama.** Plugin lama per proyek **Legacy Integrations → WebHooks** masih ada dan masih berfungsi, dan tampak seperti jalan pintas karena Anda bisa menempel URL tanpa membuat integrasi. Payload-nya berbentuk lain dan lebih datar, permintaannya tidak ditandatangani, dan Sentry sendiri mengarahkan setup baru menjauh darinya. Kalau Anda memakainya, template Anda butuh jalur variabel yang berbeda dari yang di atas. Gunakan integrasi internal.

## Ukuran payload, badai error, dan pemotongan

Tiga batas yang perlu diketahui sebelum sesuatu bermasalah di skala besar:

- **Body 1 MiB.** Echobell menolak body pemicu di atas 1 MiB dengan HTTP 413. Payload Sentry membawa stack trace lengkap dan konteks permintaan, biasanya berada di kisaran puluhan kilobyte — tetapi event dengan body permintaan besar bisa mendekati batas. Tidak ada tombol `max_alerts` di sisi Sentry, jadi mitigasinya adalah membersihkan body permintaan besar di `beforeSend` SDK Anda, yang memang sebaiknya dilakukan demi privasi.
- **120 permintaan per menit per token.** Di atas itu, pemicu menjawab `429` dengan `RATE_LIMIT_EXCEEDED` dan sebuah `Retry-After`. Yang menjaga Anda tetap di bawah batas adalah action interval Sentry; `30 minutes` sudah lebih dari cukup.
- **1500 byte isi notifikasi.** Hasil yang lebih panjang dipotong sebelum sampai ke perangkat. `data.event.title` plus `culprit` muat dengan longgar; menumpahkan `data.event.exception` tidak — dan lagi pula tak terbaca di layar kunci. Simpan detailnya di balik template tautan.

## Berbagi dengan tim

Satu kanal Echobell bisa dilanggan beberapa orang, dan tiap pelanggan memilih tipe notifikasinya sendiri. Aturan Sentry yang sama karenanya bisa membuat ponsel petugas on-call berdering sekaligus tiba sebagai push biasa untuk yang lain — tanpa harga per kursi, tanpa konfigurasi rotasi.

Yang bukan ia adalah kebijakan eskalasi. Tidak ada "jika tidak ada yang mengakui dalam lima menit, telepon orang berikutnya". Kalau butuh itu, Anda butuh platform on-call sungguhan; Echobell menutupi lapisan pengiriman di bawahnya.

## Yang tidak diberikan setup ini

Sebaiknya dikatakan terus terang:

- **Tanpa pengakuan (ack).** Mengangkat telepon tidak memberi tahu Sentry apa pun dan tidak menghentikan ponsel pelanggan lain.
- **Tanpa rotasi atau eskalasi.** Semua yang berlangganan menerimanya, atau tidak ada sama sekali.
- **Tanpa deduplikasi di luar milik Sentry.** Pengelompokan dan pembatasan terjadi di aturan Sentry; Echobell mengirimkan apa yang tiba.
- **Tanpa sinkronisasi dua arah.** Menyelesaikan issue di Sentry tidak membersihkan apa pun di ponsel Anda.

Kalau itu semua jadi penghalang, ini alat yang salah. Kalau yang Anda butuhkan sebenarnya "bangunkan saya kalau checkout rusak", ini kira-kira cara andal yang paling murah untuk mendapatkannya.

## Pemecahan masalah

**Aturan terpicu tapi tidak ada yang datang.** Periksa apakah **Alert Rule Action** aktif di integrasi. Kalau mati, integrasinya bahkan tidak muncul di daftar aksi — dan aturan yang disimpan sebelum Anda mengaktifkannya tetap menyimpan aksi usang.

**Notifikasi datang tapi kosong.** Template Anda membaca kunci tingkat atas. Sentry menyarangkan semuanya di bawah `data.event`.

**Berdering untuk hal yang tak terduga.** Cek kotak Webhooks pada integrasi (Jebakan 1), lalu apakah environment aturan masih "All Environments".

**Berdering berulang untuk satu error.** Naikkan action interval aturan Sentry. Percobaan ulang Echobell adalah hal lain — **Coba ulang panggilan gagal** di pengaturan aplikasi menelepon kembali panggilan yang terlewat.

**Tidak pernah ada yang datang, bahkan tes sekalipun.** Picu kanal dengan `curl` lebih dulu untuk menyingkirkan sisi Echobell:

```bash
curl -X POST https://hook.echobell.one/t/<channel-token> \
  -H 'Content-Type: application/json' \
  -d '{"data":{"event":{"level":"fatal","title":"Test error","culprit":"manual test","metadata":{"type":"TestError"}}}}'
```

Kalau itu berdering dan Sentry tidak, masalahnya ada di integrasi, bukan di kanal.

## Pertanyaan yang sering diajukan

### Bisakah Sentry menelepon secara bawaan?

Tidak. Aksi issue alert Sentry adalah notifikasi, pembuatan tiket, dan integrasi dengan produk paging. Panggilan suara memerlukan layanan eksternal — entah platform paging seperti PagerDuty, atau penerima webhook yang berdering seperti Echobell.

### Apakah alert Sentry menembus Jangan Ganggu?

Hanya jika tiba sebagai alert bergaya panggilan. Kanal Echobell bertipe panggilan berperilaku seperti telepon masuk, dan itu dilewatkan oleh Mode Fokus dan Jangan Ganggu di iOS. Push biasa dari aplikasi mana pun tidak.

### Perlukah paket Sentry berbayar untuk webhook?

Integrasi internal dan aksi aturan alert tersedia pada paket Developer Sentry ke atas. Webhook-nya sendiri tidak menambah biaya.

### Kenapa variabel template saya kosong?

Hampir selalu karena jalurnya terlalu pendek. Payload alert menyarangkan event di bawah `data.event`, jadi yang benar `{{data.event.title}}`, bukan `{{title}}`. Picu kanal sekali dan periksa body permintaan yang terekam di aplikasi untuk melihat bentuk persisnya.

### Bagaimana memberi alert hanya untuk satu environment?

Isi field **Environment** pada aturan alert Sentry. Jangan mencoba membacanya dari `data.event.tags` — itu array pasangan `[kunci, nilai]` yang urutannya tidak dijamin.

### Bisakah dua orang ditelepon untuk error yang sama?

Bisa. Bagikan kanalnya dan biarkan tiap orang berlangganan dengan tipe notifikasi yang diinginkan. Karena tidak ada pengakuan, semua yang memilih "panggilan" akan ditelepon.

### Menyaring di Sentry atau di Echobell?

Di Sentry kalau bisa — aturan juga tempat pembatasan frekuensi dan cakupan environment berada. Di Echobell kalau Anda ingin dua tingkat urgensi dari satu aturan, butuh jendela waktu tertentu, atau aturannya tidak bisa diubah hari ini.

## Penutup

Setup ini terdiri dari empat hal: kanal panggilan, integrasi internal dengan **Alert Rule Action** aktif dan kotak Webhooks kosong, aturan alert yang cukup sempit untuk pantas ditelepon, dan template yang membaca `data.event`. Sisanya di halaman ini adalah soal menjaganya tetap cukup sempit agar sebulan dari sekarang deringnya masih berarti sesuatu.

[Unduh Echobell untuk iPhone](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-sentry-phone-call-alerts-id&mt=8) atau [dapatkan di Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid), lalu kirim `curl` di atas sebelum mempercayakan apa pun yang penting pada jalur ini.

## Artikel terkait

- [Referensi kondisi kanal](/id/docs/conditions)
- [Panduan integrasi webhook](/id/docs/webhook)
- [Panduan developer mengatasi kelelahan alert](/id/blog/fix-alert-fatigue-developer-guide)
- [Notifikasi telepon Prometheus Alertmanager](/id/blog/alertmanager-phone-call-alerts)
- [Menembus Mode Fokus iOS untuk alert kritis](/id/blog/how-to-bypass-ios-focus-mode-for-critical-alerts)
