ระบบเทมเพลต - เนื้อหาการแจ้งเตือนแบบไดนามิก
สร้างเทมเพลตการแจ้งเตือนแบบไดนามิกด้วยตัวแปร นิพจน์ และค่าของระบบ พร้อมแนวปฏิบัติที่ดีสำหรับข้อความแจ้งเตือนที่ชัดเจน
เทมเพลตใน Echobell ช่วยให้คุณสร้างการแจ้งเตือนที่เป็นไดนามิกและเต็มไปด้วยบริบท โดยแทรกตัวแปรลงในหัวข้อและเนื้อหาของการแจ้งเตือน ฟีเจอร์อันทรงพลังนี้ทำให้ได้การแจ้งเตือนที่เจาะจงและให้ข้อมูลครบถ้วน ปรับเปลี่ยนตามข้อมูลของทริกเกอร์ เปลี่ยนการแจ้งเตือนกว้าง ๆ ให้กลายเป็นข้อมูลที่ลงมือทำต่อได้ทันที
แทนที่จะได้รับข้อความกว้าง ๆ ว่า "Alert triggered" เทมเพลตช่วยให้คุณสร้างการแจ้งเตือนที่เจาะจงได้ เช่น "Production server CPU at 95%" หรือ "Build #142 failed in deploy stage" ซึ่งให้บริบทได้ทันทีโดยไม่ต้องไปสืบค้นเพิ่ม
ไวยากรณ์เทมเพลตพื้นฐาน
ในเทมเพลตของ Echobell คุณใช้ตัวแปรได้โดยครอบด้วยวงเล็บปีกกาคู่:
{{variableName}}
เมื่อช่องถูกทริกเกอร์ ตัวแปรเหล่านี้จะถูกแทนที่ด้วยค่าจริงที่ส่งมาพร้อมทริกเกอร์ ตัวอย่างเช่น หากเทมเพลตหัวข้อของคุณคือ You have received ${{amount}} และคุณทริกเกอร์ช่องด้วยค่า amount เท่ากับ 100 การแจ้งเตือนที่ได้จะแสดงเป็น You have received $100
นิพจน์เทมเพลตขั้นสูง
เทมเพลตของ Echobell รองรับนิพจน์หลายรูปแบบสำหรับสถานการณ์ที่ซับซ้อนขึ้น:
- การเข้าถึงพร็อพเพอร์ตีของอ็อบเจกต์
{{user.name}}
{{data["value"]}}
- การเข้าถึงสมาชิกของอาร์เรย์
{{items[0]}}
- การใช้ตัวดำเนินการเปรียบเทียบ
{{status == "active"}}
{{age > 18}}
- ตัวดำเนินการทางตรรกะ
{{isSubscribed && !isPaused}}
{{isUrgent || isHighPriority}}
ระบบรองรับตัวดำเนินการมาตรฐานทั้งหมด ได้แก่ ==, !=, <, >, <=, >=, &&, || และ !
ตัวแปรในเทมเพลตจากทริกเกอร์แต่ละแบบ
ทริกเกอร์แบบ Webhook
เมื่อทริกเกอร์ผ่าน webhook คุณส่งตัวแปรได้ผ่าน:
-
พารามิเตอร์ใน query string:
GET https://hook.echobell.one/t/<channel-token>?amount=100&status=complete -
JSON body (สำหรับคำขอแบบ POST):
POST https://hook.echobell.one/t/<channel-token> Content-Type: application/json { "amount": 100, "status": "complete", "user": { "name": "John", "id": 12345 } } -
ตัวแปรพิเศษ:
externalLink: สร้างลิงก์ที่คลิกได้ในบันทึกการแจ้งเตือนbodyAsText: เนื้อหาแบบข้อความล้วนของ body ในคำขอ หากContent-Typeเป็นtext/plainheader: ให้เข้าถึงเฮดเดอร์ของคำขอ HTTP (เช่น{{header["content-type"]}})
ทริกเกอร์อีเมล
เมื่อช่องถูกทริกเกอร์ผ่านอีเมล จะมีตัวแปรต่อไปนี้ให้ใช้โดยอัตโนมัติ:
from: ที่อยู่อีเมลของผู้ส่งto: ที่อยู่อีเมลของผู้รับsubject: บรรทัดหัวข้อของอีเมลtext: เนื้อหาแบบข้อความล้วนของอีเมลhtml: เนื้อหาแบบ HTML ของอีเมล
กรณีใช้งานเทมเพลต
การเปรียบเทียบและค่าบูลีน
นิพจน์ที่ใช้ตัวดำเนินการเปรียบเทียบหรือตรรกะจะแสดงผลลัพธ์บูลีนออกมาเป็นข้อความ true หรือ false:
Payment over $1000: {{amount > 1000}}
High priority: {{isUrgent || isImportant}}
เทมเพลตของ Echobell ไม่ รองรับตรรกะ if/else แบบเขียนในบรรทัดเดียว (ternary) หากต้องการส่งเนื้อหาที่ต่างกันในแต่ละสถานการณ์ ให้ใช้ เงื่อนไข ของช่องเพื่อกำหนดเส้นทางของทริกเกอร์ หรือแทรกค่าดิบเข้าไปโดยตรง
เงื่อนไขของช่อง
นอกจากการใช้เทมเพลตในเนื้อหาการแจ้งเตือนแล้ว คุณยังตั้ง เงื่อนไข ในการตั้งค่าขั้นสูงของช่องได้ เพื่อกำหนดว่าควรส่งการแจ้งเตือนหรือไม่ตั้งแต่แรก เงื่อนไขเหล่านี้ใช้ไวยากรณ์นิพจน์เดียวกัน (แต่ไม่ต้องใส่วงเล็บปีกกา)
ตัวอย่างเช่น หากต้องการส่งการแจ้งเตือนเฉพาะเมื่อจำนวนเงินมากกว่าค่าเกณฑ์:
amount > 100
เทมเพลตของลิงก์
ตั้งค่าเทมเพลตลิงก์แบบกำหนดเองในการตั้งค่าขั้นสูงของช่อง เพื่อสร้างลิงก์ที่คลิกได้ในบันทึกการแจ้งเตือน:
https://dashboard.example.com/orders/{{orderId}}
หากไม่ได้ตั้งเทมเพลตลิงก์ไว้ ระบบจะใช้ค่าของตัวแปร externalLink เป็นค่าเริ่มต้น
ตัวแปรเวลาของระบบ (UTC)
ตัวแปรเหล่านี้ใช้ได้เสมอทั้งในเทมเพลต (และเงื่อนไข) และคำนวณตามเวลา UTC
ค่าต่อไปนี้ถูกใส่เข้ามาโดยตรง (ระดับบนสุด) และเรียกใช้ด้วยชื่อได้เลย:
year,month(1–12)dayOfMonth,dayOfWeek(0–6 โดยวันอาทิตย์ = 0)hour(0–23),minute,seconddate(YYYY-MM-DD),time(HH:mm:ss)iso: เวลาในรูปแบบ ISO‑8601 (เช่น2025-05-06T12:34:56.789Z)
ส่วนค่าอื่น ๆ ใช้ได้ เฉพาะ ภายใต้เนมสเปซ sys. เท่านั้น (ไม่ได้ถูกใส่เข้ามาเป็นชื่อระดับบนสุด):
sys.timezone: เป็น"UTC"เสมอsys.now: เวลาในรูปแบบ ISO‑8601 (ค่าเดียวกับiso)sys.epochMs,sys.epochSeconds: เวลาปัจจุบันนับจาก Unix epoch (เป็นตัวเลข)sys.monthName: ชื่อเดือน (January–December)sys.dayOfWeekName: ชื่อวัน (Sunday–Saturday)
เนมสเปซ sys. ยังสะท้อนค่าระดับบนสุดทุกตัวไว้ด้วย (เช่น sys.year, sys.hour)
ตัวอย่าง:
Sent at {{date}} {{time}} {{sys.timezone}}
Today is {{sys.dayOfWeekName}}, {{sys.monthName}} {{dayOfMonth}}, {{year}}
Epoch: {{sys.epochSeconds}}
แนวปฏิบัติที่ดี
รับมือกับตัวแปรที่ขาดหายไป
Echobell ไม่มีตัวดำเนินการสำหรับกำหนดค่าเริ่มต้น ตัวดำเนินการ || เป็นตรรกะล้วน ๆ โดยจะประเมินทั้งสองฝั่งเป็นบูลีนแล้วแสดงผลเป็น true หรือ false ดังนั้น {{username || "Anonymous User"}} จะแสดงเป็นข้อความ true หรือ false ตรง ๆ ไม่ใช่ชื่อผู้ใช้หรือข้อความสำรองแต่อย่างใด
เมื่อตัวแปรขาดหายไป {{variable}} จะแสดงผลเป็นสตริงว่างเฉย ๆ จึงควรออกแบบป้ายกำกับของคุณให้ยังอ่านเข้าใจได้แม้ค่าจะว่างเปล่า:
User: {{username}}
Server: {{serverName}}
Errors detected: {{errorCount}}
หากคุณต้องการค่าที่รับประกันว่ามีแน่นอน ให้ส่งค่านั้นมาใน payload ของทริกเกอร์อย่างชัดเจน แทนที่จะพึ่งค่าสำรองในเทมเพลต
เทมเพลตที่ให้ข้อมูลครบถ้วน
ใส่ข้อมูลสำคัญลงในเทมเพลตของคุณ เพื่อให้การแจ้งเตือนนำไปลงมือทำต่อได้โดยไม่ต้องหาบริบทเพิ่ม:
ตัวอย่างที่ดี:
Title: {{service}} {{status}} on {{environment}}
Body: {{errorMessage}} at {{timestamp}}
Action required: {{recommendedAction}}
ควรเลี่ยง:
Title: Alert
Body: Check logs
เขียนเทมเพลตให้กระชับ
การแจ้งเตือนจะแสดงผลได้ดีที่สุดเมื่อหัวข้อและเนื้อหาชัดเจนและตรงประเด็น:
- หัวข้อ: 3-8 คำกำลังดี ไม่เกิน 20 คำ
- เนื้อหา: 1-3 ประโยคกำลังดี เลี่ยงข้อความยาวเป็นพืด
- ลำดับความสำคัญ: วางข้อมูลที่สำคัญที่สุดไว้ก่อน
ข้อจำกัดของการแจ้งเตือนบน iOS:
- หัวข้อ: มองเห็นได้ประมาณ 40 อักขระในมุมมองแบบย่อ
- เนื้อหา: ประมาณ 60 อักขระในมุมมองแบบย่อ และมากขึ้นเมื่อขยาย
ตั้งชื่อให้สอดคล้องกัน
รักษาการตั้งชื่อตัวแปรให้สอดคล้องกันในทุกช่องของคุณ:
- ใช้ชื่อที่ชัดเจนและสื่อความหมาย:
server_nameไม่ใช่sn - ยึดแบบแผนเดียว: snake_case, camelCase หรือ kebab-case
- ใช้ให้สอดคล้องกันในช่องที่เกี่ยวข้องกัน
- บันทึกไว้ว่าคาดหวังตัวแปรใดบ้าง เพื่อให้เพื่อนร่วมทีมเข้าใจตรงกัน
ทดสอบให้ครบถ้วน
ทดสอบเทมเพลตของคุณด้วยชุดตัวแปรที่หลากหลาย เพื่อให้แน่ใจว่าแสดงผลตามที่คาดไว้:
- ทดสอบเมื่อมีตัวแปรครบทุกตัว
- ทดสอบเมื่อตัวแปรที่ไม่บังคับขาดหายไป
- ทดสอบด้วยอักขระพิเศษและ Unicode
- ทดสอบด้วยค่าที่ยาวมาก
- ทดสอบด้วยสตริงว่าง
- ทดสอบด้วยตัวเลข บูลีน อาร์เรย์ และอ็อบเจกต์
จัดโครงสร้างให้อ่านง่าย
ใช้การจัดรูปแบบเพื่อให้กวาดสายตาอ่านเนื้อหาการแจ้งเตือนได้ง่าย:
🚨 Alert: {{alertName}}
━━━━━━━━━━━━━━━
Server: {{server}}
Metric: {{metric}}
Value: {{value}}
Time: {{time}}
━━━━━━━━━━━━━━━
Details: {{message}}
หรือใช้ป้ายกำกับง่าย ๆ:
Server: {{server}}
CPU Usage: {{cpu}}%
Memory: {{memory}}%
Status: {{status}}
ใช้ประโยชน์จากนิพจน์
ใช้นิพจน์เพื่อแสดงค่าที่คำนวณได้และผลของการเปรียบเทียบ:
Title: {{service}} alert — critical: {{severity == "critical"}}
Body: {{metric}} is {{value}} (over threshold: {{value > threshold}})
นิพจน์เปรียบเทียบและตรรกะจะแสดงผลเป็น true หรือ false จึงควรใช้คู่กับข้อความป้ายกำกับแบบคงที่เพื่อสื่อความหมาย
คำนึงถึงเขตเวลา
โปรดจำไว้ว่าตัวแปรเวลาของระบบอิงเวลา UTC ควรระบุเรื่องนี้ไว้ในข้อความ หรือแปลงค่าในเทมเพลตของคุณ:
Alert triggered at {{time}} UTC
Triggered: {{date}} {{time}} (UTC)
รูปแบบที่พบบ่อยและตัวอย่าง
การมอนิเตอร์เซิร์ฟเวอร์
Title: {{hostname}} - {{metric}} Alert
Body: {{metric}} on {{hostname}} is at {{value}}{{unit}}
Threshold: {{threshold}}{{unit}}
Time: {{date}} {{time}}
ไปป์ไลน์ CI/CD
Title: {{repository}} - Build {{status}}
Body: Build #{{buildNumber}} {{status}} in {{duration}}s
Branch: {{branch}}
Commit: {{commit_message}}
Author: {{author}}
อีคอมเมิร์ซ
Title: New Order #{{orderNumber}}
Body: Customer: {{customerName}}
Items: {{itemCount}} items
Total: ${{totalAmount}}
Shipping: {{shippingAddress}}
การติดตามข้อผิดพลาด
Title: {{errorType}} in {{service}}
Body: {{errorMessage}}
File: {{filename}}:{{lineNumber}}
User: {{userId}}
Environment: {{environment}}
ฟีเจอร์ขั้นสูง
เทมเพลตของลิงก์
ตั้งค่า เทมเพลตลิงก์ แบบกำหนดเองในการตั้งค่าขั้นสูงของช่อง เพื่อสร้างลิงก์ที่คลิกได้ในบันทึกการแจ้งเตือน:
https://dashboard.example.com/orders/{{orderId}}
https://grafana.example.com/d/{{dashboardId}}
https://github.com/{{repo}}/actions/runs/{{runId}}
หากไม่ได้ตั้งเทมเพลตลิงก์ไว้ ระบบจะใช้ค่าของตัวแปร externalLink เป็นค่าเริ่มต้น วิธีนี้มีประโยชน์สำหรับการเข้าถึงแดชบอร์ด ล็อก หรือเอกสารที่เกี่ยวข้องได้อย่างรวดเร็วจากตัวการแจ้งเตือนโดยตรง
การแสดงค่าที่คำนวณได้
เทมเพลตไม่สามารถแตกเงื่อนไขด้วยตรรกะ ternary (? :) ได้ และไม่มีตัวดำเนินการเชื่อมสตริง (+) ให้ใช้การแทรกค่าและผลของการเปรียบเทียบเข้าไปตรง ๆ แทน โดยใช้ข้อความคงที่เป็นป้ายกำกับ:
Online: {{isOnline}}
High severity: {{severity > 5}}
Errors detected: {{count}}
นิพจน์เปรียบเทียบจะแสดงผลเป็น true หรือ false หากต้องการส่งข้อความที่ต่างกันจริง ๆ ในแต่ละสถานการณ์ ให้กำหนดเส้นทางของทริกเกอร์ด้วย เงื่อนไข ของช่องแทนการแตกเงื่อนไขภายในเทมเพลตเดียว
เงื่อนไขของช่อง
นอกจากการใช้เทมเพลตในเนื้อหาการแจ้งเตือนแล้ว คุณยังตั้ง เงื่อนไข ในการตั้งค่าขั้นสูงของช่องได้ เพื่อกำหนดว่าควรส่งการแจ้งเตือนหรือไม่ตั้งแต่แรก เงื่อนไขเหล่านี้ใช้ไวยากรณ์นิพจน์เดียวกัน (แต่ไม่ต้องใส่วงเล็บปีกกา)
ตัวอย่างเช่น หากต้องการส่งการแจ้งเตือนเฉพาะเมื่อจำนวนเงินมากกว่าค่าเกณฑ์:
amount > 100
status == "critical"
temperature > 30 && location == "datacenter"
วิธีนี้ช่วยป้องกันความล้าจากการแจ้งเตือน โดยกรองอีเวนต์ที่ไม่สำคัญออกไปก่อนที่จะส่งการแจ้งเตือน เรียนรู้เพิ่มเติมได้ใน คู่มือเงื่อนไข ของเรา
เอกสารที่เกี่ยวข้อง
- การเชื่อมต่อ Webhook — เรียนรู้วิธีส่งตัวแปรผ่าน webhook
- ทริกเกอร์อีเมล — ตัวแปรที่ใช้ได้จากทริกเกอร์อีเมล
- เงื่อนไข — กรองการแจ้งเตือนด้วยนิพจน์แบบมีเงื่อนไข
- เริ่มต้นใช้งาน — ตั้งค่าช่องแรกของคุณพร้อมเทมเพลต
การแก้ปัญหา
เทมเพลตไม่แสดงค่าของตัวแปร:
- ตรวจสอบว่าชื่อตัวแปรตรงกันทุกตัวอักษร (แยกตัวพิมพ์ใหญ่เล็ก)
- ตรวจสอบว่ามีการส่งตัวแปรมาในทริกเกอร์แบบ webhook/อีเมลจริง
- ลองทดสอบด้วยตัวแปรง่าย ๆ ก่อน แล้วค่อยเพิ่มความซับซ้อน
ตัวแปรแสดงเป็นค่าว่าง:
- ยืนยันว่าตัวแปรนั้นมีอยู่จริงในข้อมูลของทริกเกอร์
- ตรวจหาการพิมพ์ชื่อตัวแปรผิด
- ตรวจสอบโครงสร้าง JSON สำหรับพร็อพเพอร์ตีที่ซ้อนชั้น
ข้อผิดพลาดของนิพจน์:
- ตรวจสอบไวยากรณ์ด้วยนิพจน์ง่าย ๆ ก่อน
- ตรวจสอบว่ามีการเว้นวรรครอบตัวดำเนินการอย่างถูกต้อง
- ตรวจสอบว่าการเข้าถึงพร็อพเพอร์ตีใช้ไวยากรณ์ที่ถูกต้อง
ต้องการความช่วยเหลือ? เยี่ยมชม ศูนย์ช่วยเหลือ ของเรา หรือติดต่อ echobell@weelone.com
เทมเพลตเป็นวิธีอันทรงพลังในการสร้างการแจ้งเตือนที่เป็นไดนามิกและให้ข้อมูลครบถ้วน มอบข้อมูลที่ผู้ใช้ต้องการอย่างตรงจุดในเวลาที่ต้องการ เริ่มจากการแทนค่าตัวแปรง่าย ๆ แล้วค่อย ๆ เพิ่มนิพจน์และตรรกะแบบมีเงื่อนไขเข้าไป เพื่อสร้างระบบแจ้งเตือนที่ซับซ้อนขึ้น