กฎ “โพสต์ไปยัง Webhook” ช่วยให้คุณส่งโพสต์ใหม่จากฟีด RSS ไปยังปลายทาง Webhook ที่ระบุไว้ได้โดยอัตโนมัติทันทีที่โพสต์พร้อมใช้งาน คุณยังเลือกกรองโพสต์ที่จะส่งได้ด้วยการกำหนดคีย์เวิร์ด เมื่อมีโพสต์ใหม่ที่ตรงตามเงื่อนไข ระบบจะส่งโพสต์นั้นไปยังปลายทาง Webhook ในรูปแบบคำขอ POST ที่มีข้อมูล JSON
รูปแบบเพย์โหลด JSON
คำขอ POST แต่ละรายการที่ส่งไปยัง Webhook จะมีองค์ประกอบหลักสองส่วน ได้แก่ post และ feed
นอกจากนี้ยังมีข้อมูลเมตาที่ใช้ระบุข้อความ Webhook ด้วย ฟิลด์ version ระบุเวอร์ชันของ Feeder Webhook API ที่ส่งมา โดยเวอร์ชันจะคงที่เป็น 2023-06-26 และจะอัปเดตเมื่อมีการเปลี่ยนแปลงที่ทำให้การทำงานเดิมใช้ไม่ได้
{
"version": "2023-06-26",
"message_id": "a unique UUID for this message, will be constant during retries",
"feed": { ... },
"post": { ... }
}
องค์ประกอบ post มีข้อมูลเกี่ยวกับโพสต์แต่ละรายการดังนี้
{
"id": "The unique identifier of the post",
"title": "The title of the post",
"url": "The URL where the post can be accessed",
"published": "The date and time when the post was published",
"content": "The content of the post",
"audio_url": "link to mp3 attached to post (if present)",
"image_url": "link to image attached to post (if present)
}
หมายเหตุ: ค่า published จะเป็น null หากฟีด RSS ไม่ได้ระบุวันที่เผยแพร่ที่ถูกต้อง
องค์ประกอบ feed มีข้อมูลเกี่ยวกับฟีดต้นทางของโพสต์ดังนี้
{
"id": "The unique identifier of the feed",
"source_url": "The URL of the source, for example RSS/Atom feed URL",
"public_url": "The source's self identified public URL",
"title": "The title of the feed",
"favicon": "The URL of the feed's favicon"
}
ในอนาคตเราอาจเพิ่มข้อมูลในออบเจ็กต์เหล่านี้ หากคุณต้องการข้อมูลใดเพิ่มเติม โปรดแจ้งให้เราทราบ
การลองส่งซ้ำ
หากคำขอไม่สำเร็จ Feeder จะลองส่งซ้ำโดยอัตโนมัติ หากคำขอ POST ไม่ได้รับรหัสสถานะ HTTP ตั้งแต่ 200 ถึง 399 ระบบจะพยายามส่งอีกครั้งตามกำหนดการต่อไปนี้ โดยระบุเวลาเป็นวินาที
- ลองครั้งที่ 1: หลังจาก 5 วินาที
- ลองครั้งที่ 2: หลังจาก 30 วินาที
- ลองครั้งที่ 3: หลังจาก 60 วินาที
- ลองครั้งที่ 4: หลังจาก 5 นาที
- ลองครั้งที่ 5: หลังจาก 10 นาที
- ลองครั้งที่ 6: หลังจาก 30 นาที
- ลองครั้งที่ 7: หลังจาก 30 นาที
- ลองครั้งที่ 8: หลังจาก 30 นาที
โปรดทราบว่ากลไกการลองส่งซ้ำนี้จะเริ่มทำงานเมื่อมีเหตุการณ์โพสต์จริงเท่านั้น และไม่มีผลกับการแจ้งเตือนทดสอบ ทั้งนี้ กำหนดเวลาอาจมีการเปลี่ยนแปลงได้
การแก้ไขข้อผิดพลาด
หากเกิดข้อผิดพลาด คุณสามารถดูได้ในบันทึกการทำงานของการดำเนินการ เพียงไปที่กฎที่มีปัญหา แล้วกด “เปิดบันทึกข้อผิดพลาด”

จากนั้นคุณจะเห็นรายละเอียดเพิ่มเติมเกี่ยวกับ Webhook ที่ส่งไม่สำเร็จ

ตั้งค่า Webhook

ตั้งค่า Webhook ตามขั้นตอนต่อไปนี้
- ไปที่หน้า กฎ
- สร้างกฎใหม่
- เพิ่มชื่อ ฟีด และเงื่อนไข
- ในส่วน “ควรทำอะไรต่อไป?” ให้เลือก “โพสต์ไปยัง Webhook”
- กรอก URL ของ Webhook ในช่องข้อความที่กำหนด
- หากต้องการตรวจสอบว่าตั้งค่าทุกอย่างถูกต้องแล้ว ให้ใช้ปุ่ม “โพสต์ข้อความทดสอบ” เพื่อส่งการแจ้งเตือนทดสอบไปยังปลายทางของคุณ โปรดทราบว่านี่เป็นเพียงการทดสอบ และหากส่งไม่สำเร็จ ระบบจะไม่เริ่มกลไกการลองส่งซ้ำ นอกจากนี้ บัญชีของคุณต้องมีฟีดที่เพิ่มโพสต์แล้วอย่างน้อย 1 ฟีด จึงจะส่งโพสต์ทดสอบได้
ความปลอดภัย: ตรวจสอบลายเซ็น Webhook
เพื่อให้มั่นใจว่าคำขอ Webhook ที่ได้รับมาจาก Feeder จริงและไม่มีการแก้ไข คุณสามารถตรวจสอบ Webhook secret ที่สร้างขึ้นสำหรับ Webhook แต่ละรายการได้ คำขอ Webhook ทุกครั้งจะมีส่วนหัว X-Feeder-Signature ซึ่งบรรจุลายเซ็น HMAC-SHA256 ของเนื้อหาคำขอ
วิธีการทำงาน

- ในการตั้งค่ากฎ ให้เปิดตัวเลือก “ขั้นสูง” คุณจะเห็นสตริงในช่อง “Webhook Secret”
- เมื่อ Feeder ส่ง Webhook ไปยังปลายทางของคุณ ระบบจะคำนวณแฮช HMAC-SHA256 ของเนื้อหาคำขอ JSON โดยใช้ secret ของคุณเป็นคีย์
- ระบบจะส่งลายเซ็นที่ได้มาในส่วนหัว
X-Feeder-Signatureโดยมีsha256=นำหน้า ตัวอย่างเช่น
X-Feeder-Signature: sha256=a1b2c3d4e5f6...
- บนเซิร์ฟเวอร์ของคุณ ให้คำนวณแฮช HMAC-SHA256 เดิมอีกครั้งโดยใช้เนื้อหาคำขอดิบและสำเนา secret ของคุณ แล้วเปรียบเทียบกับค่าในส่วนหัว
เหตุใดจึงควรใช้
- ยืนยันแหล่งที่มา: ยืนยันว่าคำขอส่งมาจาก Feeder ไม่ใช่บุคคลที่สาม
- ความถูกต้องสมบูรณ์: รับประกันว่าเพย์โหลดไม่ได้ถูกแก้ไขระหว่างการส่ง
ตรวจสอบลายเซ็น
วิธีตรวจสอบ
- อ่านเนื้อหาคำขอดิบเป็นสตริง อย่าแยกวิเคราะห์ก่อน
- คำนวณ HMAC-SHA256 ของสตริงนั้นโดยใช้ secret ของคุณ
- เปรียบเทียบลายเซ็นที่คำนวณได้กับค่าในส่วนหัว
X-Feeder-Signatureโดยใช้ การเปรียบเทียบแบบป้องกันการโจมตีด้วยเวลา เพื่อป้องกันการโจมตีแบบ timing attack
ตัวอย่าง: Node.js (Express)
const crypto = require("crypto");
const WEBHOOK_SECRET = process.env.FEEDER_WEBHOOK_SECRET;
function verifyFeederSignature(req, res, next) {
const signature = req.headers["x-feeder-signature"];
if (!signature) {
return res.status(401).send("Missing signature");
}
const expectedSignature =
"sha256=" +
crypto.createHmac("sha256", WEBHOOK_SECRET).update(req.body).digest("hex");
const isValid = crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
if (!isValid) {
return res.status(401).send("Invalid signature");
}
next();
}
// Important: use express.raw() so req.body is the raw string, not parsed JSON
app.post(
"/webhook",
express.raw({ type: "application/json" }),
verifyFeederSignature,
(req, res) => {
const payload = JSON.parse(req.body);
// Handle the webhook payload
console.log("Received verified webhook:", payload);
res.sendStatus(200);
}
);
สำคัญ: คุณต้องเข้าถึงเนื้อหาคำขอดิบเพื่อตรวจสอบลายเซ็น หากเฟรมเวิร์กของคุณแยกวิเคราะห์เนื้อหา JSON ก่อนคำนวณ HMAC สตริงที่แปลงกลับมาอาจแตกต่างจากต้นฉบับ ทำให้ลายเซ็นไม่ตรงกัน ใน Express ให้ใช้ express.raw({ type: "application/json" }) กับเส้นทาง Webhook ตามตัวอย่างด้านบน
มีคำถามอื่นไหม?
มีคำถามไหม? ส่งอีเมลหาเราได้ที่ support@feeder.co