---
title: "แจ้งเตือนการชำระเงิน Stripe: ให้โทรศัพท์ดังตอนที่เงินกำลังเสี่ยง"
description: "ส่ง webhook ของ Stripe เข้ามือถือด้วยระดับความเร่งด่วนที่เหมาะกับแต่ละเหตุการณ์ — เก็บเงินสำเร็จก็แจ้งเบา ๆ ส่วนข้อพิพาทที่มีกำหนดตอบกลับให้โทรเข้ามาเลย"
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Stripe
  - แจ้งเตือนการชำระเงิน
  - การแจ้งเตือนผ่าน webhook
  - นักพัฒนาอิสระ
  - ติดตามรายได้
---

# แจ้งเตือนการชำระเงิน Stripe: ให้โทรศัพท์ดังตอนที่เงินกำลังเสี่ยง

Stripe ส่งอีเมลหาคุณเรื่องทุกอย่าง ซึ่งเท่ากับไม่ได้แจ้งอะไรเลย การเก็บเงินสำเร็จ การต่ออายุสมาชิกที่ล้มเหลว และการขอคืนเงินผ่านบัตร ล้วนมาถึงในรูปแบบข้อความเดียวกันในกล่องจดหมายเดียวกัน และกว่าคุณจะได้อ่าน ความต่างระหว่างสามอย่างนี้ก็หายไปแล้ว

ทางแก้ไม่ใช่การเพิ่มการแจ้งเตือน แต่คือการให้เหตุการณ์แต่ละแบบของ Stripe มีระดับความเร่งด่วนที่มันสมควรได้จริง ๆ คือแจ้งเบา ๆ เมื่อมีคนจ่ายเงิน ใช้การแจ้งเตือนแบบไวต่อเวลาเมื่อต่ออายุไม่สำเร็จ และโทรเข้ามาเมื่อมีข้อพิพาทพร้อมกำหนดเวลาตอบกลับ

## เหตุการณ์ Stripe แบบไหนที่ต้องการตัวคุณจริง ๆ

ไม่ใช่ทุกเหตุการณ์จะควรค่าแก่การแจ้งเตือน และที่ควรค่าก็ไม่ได้เร่งด่วนเท่ากันหมด

| เหตุการณ์ Stripe | ทำไมถึงสำคัญ | ความเร่งด่วน |
| --- | --- | --- |
| `payment_intent.succeeded` | มีคนจ่ายเงินแล้ว รู้ไว้ก็ดี แต่ไม่เคยด่วน | ปกติ |
| `invoice.payment_failed` | การต่ออายุล้มเหลว ยังมีช่วงลองเก็บเงินซ้ำก่อนสมาชิกภาพจะหมด | ไวต่อเวลา |
| `charge.dispute.created` | การขอคืนเงินผ่านบัตร Stripe จะระบุกำหนดตอบกลับที่เครือข่ายบัตรกำหนดไว้ และการพลาดกำหนดนั้นเท่ากับแพ้โดยอัตโนมัติ | สายเรียกเข้า |
| `payment_intent.payment_failed` | การจ่ายเงินครั้งเดียวล้มเหลว ดูรวม ๆ มีประโยชน์ แต่ดูทีละอันน่ารำคาญ | ปกติ หรือไม่ต้องแจ้ง |

มีแค่ข้อพิพาทเท่านั้นที่คุ้มกับการโทร ที่เหลือรอจนคุณหยิบมือถือขึ้นมาเองได้ ส่วนข้อพิพาทที่เพิ่งรู้ตัวหลังผ่านไปหนึ่งสัปดาห์ ก็คือเงินที่ยังไงคุณก็รักษาไว้ไม่ได้อยู่แล้ว

## ขั้นที่ 1 — สร้างแชนเนลตามระดับความเร่งด่วน

สร้างแชนเนลใน Echobell สามอัน เพราะความเร่งด่วนเป็นการตั้งค่าระดับแชนเนล

- **Stripe · รายได้** — การแจ้งเตือนปกติ สำหรับการชำระเงินสำเร็จ
- **Stripe · ชำระเงินล้มเหลว** — ไวต่อเวลา
- **Stripe · ข้อพิพาท** — สายเรียกเข้า

คัดลอก URL ของ webhook จากหน้าตั้งค่าของแต่ละแชนเนล คุณจะให้ Stripe ชี้มาที่ทั้งสามอัน

ระหว่างที่อยู่ตรงนั้น เปิด **เฉพาะ POST** ให้ทุกแชนเนลด้วย Stripe ส่งด้วย POST เสมอ และการเปิดไว้จะกันไม่ให้การแสดงตัวอย่างลิงก์หรือการเติมข้อความอัตโนมัติในแถบที่อยู่ไปทริกเกอร์แชนเนลโดยไม่ตั้งใจ

## ขั้นที่ 2 — เพิ่มเอนด์พอยต์ใน Stripe

ในแดชบอร์ดของ Stripe ไปที่ **Developers → Webhooks → Add endpoint** วาง URL ของแชนเนล แล้วเลือกเฉพาะเหตุการณ์ที่แชนเนลนั้นควรรับผิดชอบ

แนะนำให้ทำหนึ่งเอนด์พอยต์ต่อหนึ่งแชนเนล แทนที่จะยัดทุกอย่างไว้ในเอนด์พอยต์เดียว Stripe ให้เลือกเหตุการณ์ได้ทีละเอนด์พอยต์ การกระจายจึงจบที่ฝั่ง Stripe และแชนเนลของคุณก็ยังเรียบง่าย

ถ้าอยากใช้เอนด์พอยต์เดียวจริง ๆ ให้ชี้ไปที่แชนเนลหนึ่งแล้วกรองด้วยเงื่อนไข

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

เงื่อนไขเขียนโดยไม่ต้องมี `{{ }}` ครอบแบบที่เทมเพลตใช้

## ขั้นที่ 3 — แปลง payload ให้อ่านรู้เรื่อง

Stripe ส่ง JSON มาหน้าตาประมาณนี้

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

เทมเพลตของแชนเนลจึงต้องเอื้อมเข้าไปใน `data.object`

**หัวเรื่อง**

```
ข้อพิพาท: {{data.object.reason}}
```

**เนื้อหา**

```
{{data.object.amount}} {{data.object.currency}} ถูกยื่นข้อพิพาท
สถานะ: {{data.object.status}}
```

**กับดักที่แทบทุกคนเจอ:** จำนวนเงินของ Stripe อยู่ในหน่วยย่อยที่สุดของสกุลนั้น `4900` คือ 49.00 ดอลลาร์ ไม่ใช่ 4,900 ดอลลาร์ เทมเพลตของ Echobell จะแทนค่าตรง ๆ ดังนั้นให้หารก่อนส่ง หรือเขียนสกุลเงินต่อท้ายแล้วอ่านมันเป็นเซนต์ ถ้าตัวเลขต้องถูกต้องตั้งแต่แรกเห็น ให้เอาการหารไปไว้ในสิ่งที่คั่นอยู่ระหว่าง Stripe กับ Echobell ไม่ว่าจะเป็น Worker ระบบอัตโนมัติ หรือเอนด์พอยต์ของคุณเอง

สำหรับแชนเนลรายได้ ใช้แนวคิดเดียวกันแต่สั้นกว่า

**หัวเรื่อง**

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

**เนื้อหา**

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

## ขั้นที่ 4 — ทดสอบโดยไม่ต้องรอการจ่ายเงินจริง

Stripe CLI ยิง payload ของเหตุการณ์จริงเข้าเอนด์พอยต์ของคุณได้

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

ทำก่อนที่จะไว้ใจมัน และนี่ยังเป็นวิธีที่เร็วที่สุดในการดูว่าเทมเพลตจะแสดงผลอย่างไรเมื่อฟิลด์ที่คุณคิดว่าต้องมีกลับส่งมาเป็น `null`

## สิ่งที่การตั้งค่านี้ไม่ได้ให้

มีข้อจำกัดสองข้อที่ควรรู้ก่อนเอาไปวางไว้หน้ารายได้ของคุณ

**Echobell ไม่ตรวจสอบลายเซ็นของ Stripe** Stripe เซ็นทุก webhook ด้วยเฮดเดอร์ `Stripe-Signature` และการตรวจสอบต้องใช้ secret ของเอนด์พอยต์ แต่เอนด์พอยต์ webhook ของ Echobell ไม่ได้ทำการตรวจนั้น สิ่งเดียวที่ปกป้องแชนเนลอยู่จึงคือตัว URL เอง ให้ถือว่ามันเป็นความลับ เปิด **เฉพาะ POST** ไว้ และอย่าเอาไปวางในรีโพสาธารณะหรือภาพหน้าจอ

คุณเพิ่มการตรวจแบบอ่อน ๆ ด้วยเงื่อนไขได้

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

มันยืนยันได้ว่ามีบางอย่างกำลังส่งคำขอที่มีหน้าตาแบบ Stripe แต่ยืนยันไม่ได้ว่านั่นคือ Stripe ถ้าการแจ้งเตือนปลอมจะสร้างความเสียหายจริง ไม่ใช่แค่ทำให้งงชั่วครู่ ให้เอาเอนด์พอยต์ของคุณเองไปวางไว้ข้างหน้า ตรวจลายเซ็นตรงนั้น แล้วค่อยให้มันเรียก Echobell

**นี่คือเส้นทางแจ้งเตือน ไม่ใช่บัญชี** Stripe จะลองส่ง webhook ที่ล้มเหลวซ้ำ แต่การแจ้งเตือนไม่ใช่บันทึกว่าเกิดอะไรขึ้น การกระทบยอดให้ยึด Stripe เป็นหลัก ไม่ใช่ประวัติการแจ้งเตือนของคุณ

## คำถามที่พบบ่อย

### Stripe โทรหาผมเองได้ไหม

ไม่ได้ Stripe ส่งอีเมลกับ webhook เท่านั้น จะให้กลายเป็นสายโทรเข้าต้องส่ง webhook ต่อไปยังบริการที่โทรออกได้

### การแจ้งเตือนข้อพิพาทจะปลุกผมได้จริงไหม

ถ้าตั้งแชนเนลเป็นโหมดสายเรียกเข้า ได้ มันจะมาถึงเหมือนสายโทรเข้าและดังทะลุโหมดโฟกัสกับห้ามรบกวน ดูเพิ่มที่ [ทำให้การแจ้งเตือนสำคัญทะลุโหมดโฟกัสของ iOS](/th/blog/how-to-bypass-ios-focus-mode-for-critical-alerts)

### หุ้นส่วนของผมรับการแจ้งเตือนชุดเดียวกันได้ไหม

ได้ แชร์แชนเนลออกไป แล้วผู้ติดตามแต่ละคนเลือกประเภทการแจ้งเตือนของตัวเอง คุณอาจรับสายเอง ส่วนอีกคนได้แค่การแจ้งเตือนเงียบ ๆ จากเหตุการณ์เดียวกัน

### แล้วโหมดทดสอบล่ะ

เหตุการณ์ในโหมดทดสอบของ Stripe จะไปที่เอนด์พอยต์ที่ลงทะเบียนไว้ในโหมดทดสอบเท่านั้น ถ้าอยากเห็นทราฟฟิกนั้นด้วยก็ลงทะเบียน URL แชนเนลไว้ทั้งสองโหมด หรือจะลงเฉพาะโหมดทดสอบไปก่อนจนกว่าจะไว้ใจการตั้งค่านี้ก็ได้

## สรุป

สามแชนเนล สามเอนด์พอยต์ แชนเนลละหนึ่งเทมเพลต ประเด็นไม่ได้อยู่ที่ว่าคุณจะได้รับการแจ้งเตือนจาก Stripe เพราะคุณได้รับอยู่แล้ว ประเด็นคือการขอคืนเงินผ่านบัตรจะเลิกหน้าตาเหมือนใบเสร็จเสียที

[ดาวน์โหลด Echobell สำหรับ iPhone](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-stripe-payment-alerts-th&mt=8) หรือ [รับบน Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid) แล้วลองรัน `stripe trigger charge.dispute.created` หนึ่งครั้ง ปล่อยให้โทรศัพท์ดังขึ้นมาโดยตั้งใจ

---

## เนื้อหาที่เกี่ยวข้อง

- [เอกสารทริกเกอร์ webhook](/th/docs/webhook)
- [คู่มืออ้างอิงระบบเทมเพลต](/th/docs/template)
- [คู่มืออ้างอิงเงื่อนไขแชนเนล](/th/docs/conditions)
- [ทำให้การแจ้งเตือนสำคัญทะลุโหมดโฟกัสของ iOS](/th/blog/how-to-bypass-ios-focus-mode-for-critical-alerts)
- [คู่มือนักพัฒนาเรื่องการแก้อาการล้าจากการแจ้งเตือน](/th/blog/fix-alert-fatigue-developer-guide)
