ระบบเทมเพลต - เนื้อหาการแจ้งเตือนแบบไดนามิก

สร้างเทมเพลตการแจ้งเตือนแบบไดนามิกด้วยตัวแปร นิพจน์ และค่าของระบบ พร้อมแนวปฏิบัติที่ดีสำหรับข้อความแจ้งเตือนที่ชัดเจน


เทมเพลตใน 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 คุณส่งตัวแปรได้ผ่าน:

  1. พารามิเตอร์ใน query string:

    GET https://hook.echobell.one/t/<channel-token>?amount=100&status=complete
  2. JSON body (สำหรับคำขอแบบ POST):

    POST https://hook.echobell.one/t/<channel-token>
    Content-Type: application/json
    
    {
      "amount": 100,
      "status": "complete",
      "user": {
        "name": "John",
        "id": 12345
      }
    }
  3. ตัวแปรพิเศษ:

    • externalLink: สร้างลิงก์ที่คลิกได้ในบันทึกการแจ้งเตือน
    • bodyAsText: เนื้อหาแบบข้อความล้วนของ body ในคำขอ หาก Content-Type เป็น text/plain
    • header: ให้เข้าถึงเฮดเดอร์ของคำขอ 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, second
  • date (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: ชื่อเดือน (JanuaryDecember)
  • sys.dayOfWeekName: ชื่อวัน (SundaySaturday)

เนมสเปซ 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
  • ใช้ให้สอดคล้องกันในช่องที่เกี่ยวข้องกัน
  • บันทึกไว้ว่าคาดหวังตัวแปรใดบ้าง เพื่อให้เพื่อนร่วมทีมเข้าใจตรงกัน

ทดสอบให้ครบถ้วน

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

  1. ทดสอบเมื่อมีตัวแปรครบทุกตัว
  2. ทดสอบเมื่อตัวแปรที่ไม่บังคับขาดหายไป
  3. ทดสอบด้วยอักขระพิเศษและ Unicode
  4. ทดสอบด้วยค่าที่ยาวมาก
  5. ทดสอบด้วยสตริงว่าง
  6. ทดสอบด้วยตัวเลข บูลีน อาร์เรย์ และอ็อบเจกต์

จัดโครงสร้างให้อ่านง่าย

ใช้การจัดรูปแบบเพื่อให้กวาดสายตาอ่านเนื้อหาการแจ้งเตือนได้ง่าย:

🚨 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/อีเมลจริง
  • ลองทดสอบด้วยตัวแปรง่าย ๆ ก่อน แล้วค่อยเพิ่มความซับซ้อน

ตัวแปรแสดงเป็นค่าว่าง:

  • ยืนยันว่าตัวแปรนั้นมีอยู่จริงในข้อมูลของทริกเกอร์
  • ตรวจหาการพิมพ์ชื่อตัวแปรผิด
  • ตรวจสอบโครงสร้าง JSON สำหรับพร็อพเพอร์ตีที่ซ้อนชั้น

ข้อผิดพลาดของนิพจน์:

  • ตรวจสอบไวยากรณ์ด้วยนิพจน์ง่าย ๆ ก่อน
  • ตรวจสอบว่ามีการเว้นวรรครอบตัวดำเนินการอย่างถูกต้อง
  • ตรวจสอบว่าการเข้าถึงพร็อพเพอร์ตีใช้ไวยากรณ์ที่ถูกต้อง

ต้องการความช่วยเหลือ? เยี่ยมชม ศูนย์ช่วยเหลือ ของเรา หรือติดต่อ echobell@weelone.com


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