---
title: "Peringatan pembayaran Stripe: ditelepon saat uang sedang berisiko"
description: "Arahkan webhook Stripe ke ponsel dengan urgensi yang sesuai untuk tiap peristiwa — pemberitahuan senyap untuk pembayaran berhasil, panggilan untuk sengketa yang punya tenggat."
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Stripe
  - peringatan pembayaran
  - notifikasi webhook
  - indie hacker
  - pemantauan pendapatan
---

# Peringatan pembayaran Stripe: ditelepon saat uang sedang berisiko

Stripe mengirimi Anda email tentang segalanya sekaligus tentang tidak apa-apa. Pembayaran berhasil, perpanjangan langganan yang gagal, dan chargeback tiba sebagai jenis pesan yang sama di kotak masuk yang sama, dan ketika Anda membacanya perbedaan di antara ketiganya sudah hilang.

Solusinya bukan menambah notifikasi. Solusinya adalah memberi tiap peristiwa Stripe urgensi yang memang pantas: push senyap ketika seseorang membayar, peringatan sensitif waktu ketika perpanjangan gagal, dan panggilan telepon ketika sengketa masuk dengan tenggat jawaban.

## Peristiwa Stripe mana yang benar-benar butuh Anda

Tidak semua peristiwa layak diberitahukan, dan yang layak pun tidak sama mendesaknya.

| Peristiwa Stripe | Kenapa penting | Urgensi |
| --- | --- | --- |
| `payment_intent.succeeded` | Ada yang membayar. Enak diketahui, tak pernah mendesak. | Biasa |
| `invoice.payment_failed` | Perpanjangan gagal. Masih ada jendela percobaan ulang sebelum langganan lewat. | Sensitif waktu |
| `charge.dispute.created` | Chargeback. Stripe memberi tenggat jawaban yang ditetapkan jaringan kartu, dan melewatkannya berarti kalah otomatis. | Panggilan |
| `payment_intent.payment_failed` | Pembayaran sekali jalan gagal. Berguna dalam jumlah, berisik satu per satu. | Biasa, atau lewati |

Hanya sengketa yang pantas ditelepon. Sisanya bisa menunggu sampai Anda sendiri mengambil ponsel; sengketa yang baru Anda sadari seminggu kemudian adalah uang yang memang tak akan Anda pertahankan.

## Langkah 1 — Satu kanal per tingkat urgensi

Buat tiga kanal di Echobell, karena urgensi adalah setelan per kanal:

- **Stripe · Pendapatan** — notifikasi biasa, untuk pembayaran berhasil
- **Stripe · Pembayaran gagal** — sensitif waktu
- **Stripe · Sengketa** — panggilan

Salin URL webhook tiap kanal dari setelannya. Stripe akan diarahkan ke ketiganya.

Sekalian nyalakan **Hanya POST** di masing-masing. Stripe selalu mengirim lewat POST, dan ini mencegah pratinjau tautan atau pelengkapan otomatis bilah alamat memicu kanal Anda tanpa sengaja.

## Langkah 2 — Tambahkan endpoint di Stripe

Di dasbor Stripe, buka **Developers → Webhooks → Add endpoint**, tempel URL kanal, lalu pilih hanya peristiwa yang harus ditangani kanal itu.

Buat satu endpoint per kanal alih-alih satu endpoint untuk semuanya. Stripe membolehkan memilih peristiwa per endpoint, jadi perutean terjadi di sisi Stripe dan kanal Anda tetap sederhana.

Kalau lebih suka satu endpoint saja, arahkan ke satu kanal lalu saring dengan kondisi:

```
type == "charge.dispute.created"
```

Kondisi ditulis tanpa kurung `{{ }}` yang dipakai templat.

## Langkah 3 — Ubah payload jadi sesuatu yang terbaca

Stripe mengirim body JSON berbentuk seperti ini:

```json
{
  "type": "charge.dispute.created",
  "data": {
    "object": {
      "amount": 4900,
      "currency": "usd",
      "reason": "fraudulent",
      "status": "warning_needs_response"
    }
  }
}
```

Jadi templat kanal masuk ke dalam `data.object`:

**Judul**

```
Sengketa: {{data.object.reason}}
```

**Isi**

```
{{data.object.amount}} {{data.object.currency}} disengketakan
Status: {{data.object.status}}
```

**Satu jebakan yang mengenai semua orang:** nominal Stripe memakai satuan mata uang terkecil. `4900` berarti $49,00, bukan $4.900. Templat Echobell menyisipkan nilainya apa adanya, jadi bagilah sebelum mengirim, atau tulis mata uangnya di belakang dan bacalah sebagai sen. Kalau angkanya harus benar dalam sekali lihat, taruh pembagian itu di apa pun yang berada di antara Stripe dan Echobell — sebuah Worker, sebuah automasi, endpoint Anda sendiri.

Untuk kanal pendapatan, gagasan yang sama dengan lebih sedikit kata:

**Judul**

```
+{{data.object.amount}} {{data.object.currency}}
```

**Isi**

```
{{data.object.description}}
```

## Langkah 4 — Uji tanpa menunggu pembayaran sungguhan

CLI Stripe bisa menembakkan payload peristiwa asli ke endpoint Anda:

```bash
stripe trigger payment_intent.succeeded
stripe trigger charge.dispute.created
```

Lakukan ini sebelum Anda bergantung padanya. Ini juga cara tercepat melihat apa yang dirender templat Anda ketika sebuah field yang Anda kira selalu ada ternyata datang sebagai `null`.

## Yang tidak diberikan susunan ini

Dua batas yang perlu diketahui sebelum menaruhnya di depan pendapatan Anda.

**Echobell tidak memverifikasi tanda tangan Stripe.** Stripe menandatangani setiap webhook dengan header `Stripe-Signature`, dan memverifikasinya butuh secret endpoint. Endpoint webhook Echobell tidak melakukan pemeriksaan itu, jadi URL kanal adalah satu-satunya yang melindunginya. Perlakukan sebagai rahasia, biarkan **Hanya POST** menyala, dan jangan tempel ke repositori publik atau tangkapan layar.

Anda bisa menambah pemeriksaan lemah lewat kondisi:

```
header["stripe-signature"] != ""
```

Itu memastikan ada sesuatu yang mengirim permintaan berbentuk Stripe. Itu tidak memastikan pengirimnya Stripe. Kalau notifikasi palsu bisa menimbulkan kerugian nyata — bukan sekadar kebingungan sesaat — taruh endpoint Anda sendiri di depan, verifikasi tanda tangannya di sana, lalu biarkan dia yang memanggil Echobell.

**Ini jalur peringatan, bukan buku besar.** Stripe mencoba ulang pengiriman webhook yang gagal, tetapi notifikasi bukan catatan atas apa yang terjadi. Rekonsiliasi terhadap Stripe, bukan terhadap riwayat notifikasi Anda.

## Pertanyaan umum

### Bisakah Stripe menelepon saya langsung?

Tidak. Stripe mengirim email dan webhook. Sebuah panggilan berarti mengarahkan webhook ke sesuatu yang bisa melakukannya.

### Apakah peringatan sengketa benar-benar akan membangunkan saya?

Kalau kanalnya disetel ke mode panggilan, ya — ia tiba sebagai panggilan masuk dan berdering menembus Fokus serta Jangan Ganggu. Lihat [menembus mode Fokus iOS untuk peringatan kritis](/id/blog/how-to-bypass-ios-focus-mode-for-critical-alerts).

### Bisakah rekan pendiri saya menerima peringatan yang sama?

Bisa. Bagikan kanalnya, dan tiap pelanggan memilih jenis notifikasinya sendiri. Anda yang menerima panggilan sementara orang lain mendapat push senyap untuk peristiwa yang sama.

### Bagaimana dengan mode uji?

Peristiwa mode uji Stripe pergi ke endpoint yang terdaftar dalam mode uji. Daftarkan URL kanal di keduanya bila ingin melihat lalu lintas itu, atau hanya di mode uji sampai Anda memercayai susunannya.

## Penutup

Tiga kanal, tiga endpoint, satu templat masing-masing. Intinya bukan Anda jadi diberi tahu oleh Stripe — itu sudah terjadi sejak dulu. Intinya adalah chargeback berhenti tampak persis seperti sebuah struk.

[Unduh Echobell untuk iPhone](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-stripe-payment-alerts-id&mt=8) atau [ambil di Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid), lalu jalankan `stripe trigger charge.dispute.created` dan biarkan ponsel Anda berdering sekali dengan sengaja.

---

## Konten terkait

- [Dokumentasi pemicu webhook](/id/docs/webhook)
- [Referensi sistem templat](/id/docs/template)
- [Referensi kondisi kanal](/id/docs/conditions)
- [Menembus mode Fokus iOS untuk peringatan kritis](/id/blog/how-to-bypass-ios-focus-mode-for-critical-alerts)
- [Panduan pengembang mengatasi kelelahan peringatan](/id/blog/fix-alert-fatigue-developer-guide)
