Skip to main content
#P1537

POST /asterisk/notification/test

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/asterisk/notification/test AsteriskAmiController@sendTestNotification authWithJwt ارسال نوتیفیکیشن تستی دلخواه برای بررسی سلامت سیستم انتشار رویدادهای بلادرنگ

منطق عملکرد تابع

تابع sendTestNotification برای تست درستی و پایداری سرویس نوتیفیکیشن داخلی سیستم طراحی شده است. کاربر می‌تواند نوع نوتیفیکیشن (type) و محتوای آنی (data) را در درخواست ارسال کند تا سرویس، پیام را از طریق کانال بلادرنگ (معمولاً Redis Pub/Sub یا WebSocket Gateway) به تمام Listenerهای فعال منتقل کند. سرویس علاوه بر انتشار رویداد، عملیات را در جدول ami_notifications_log با مشخصات ارسال‌کننده ثبت می‌نماید.

  1. اعتبارسنجی وجود پارامترهای type و data.
  2. ساخت Payload شامل نوع و داده‌ی رویداد.
  3. انتشار رویداد در کانال آزمایشی (پیش‌فرض: test_notification_channel).
  4. ثبت در پایگاه داده ami_notifications_log به همراه user_id.
  5. بازگرداندن نتیجه برای تأیید انتشار.

پارامترهای ورودی

نام محل نوع الزامی توضیح
type Body string بله نوع نوتیفیکیشن (مثلاً alert، info، success)
data Body object بله محتوای متنی و داده‌ای که داخل پیام منتشر می‌شود
channel Body string خیر نام کانال انتشار (در صورت عدم ارسال، پیش‌فرض test_notification_channel)

ساختار خروجی

{
  "status": true,
  "message": "Notification broadcasted successfully",
  "data": {
    "id": "TEST-NOTIF-1732364015",
    "type": "success",
    "channel": "test_notification_channel",
    "payload": {
      "text": "Ping from AsteriskAmiController",
      "from": "admin"
    },
    "timestamp": "2025-11-23T15:40:15.570+03:30"
  }
}

نکات امنیتی

  • دسترسی تنها برای کاربران با نقش developer یا tester مجاز است.
  • هیچ پیامی به کاربران نهایی منتشر نمی‌شود، مگر در کانال آزمایشی خاص.
  • پارامتر data قبل از انتشار در JSON Encode می‌شود تا از تزریق داده جلوگیری گردد.

عملکرد

  • میانگین زمان انتشار در شبکه Redis/WebSocket: ۵۰–۸۰ میلی‌ثانیه.
  • ثبت در لاگ در همان تراکنش انجام می‌شود (Atomic Operation).

Dependencies

  • use App\Services\NotificationService;
  • use App\Models\AmiNotificationLog;
  • use Illuminate\Support\Facades\Auth;
  • use Carbon\Carbon;

کدهای خطا

کد شرح منبع
400 ارسال پارامترهای ناقص (نبود type یا data) Validation
401 توکن JWT نامعتبر یا منقضی Authentication
403 سطح دسترسی ناکافی برای تست نوتیفیکیشن Authorization
500 خطای داخلی در ارسال به سرویس WebSocket/Redis Notification Gateway

پیشنهادهای امنیتی

  • افزودن پارامتر احراز هویت دو مرحله‌ای برای فعال سازی حالت DevTest.
  • محدود کردن تعداد broadcast ها به ۳۰ در دقیقه به ازای هر کاربر.
  • رمزنگاری محتوای data در سطح برنامه در صورت شامل بودن داده‌های حساس.

پیشنهادهای توسعه‌ای

  • افزودن پارامتر priority برای تعیین اولویت نوتیفیکیشن (LOW/MEDIUM/HIGH).
  • ایجاد سیستم Ack/Nack جهت تأیید دریافت توسط Listenerها.
  • افزودن پنل گرافیکی در داشبورد Admin برای تست زنده رویدادها.

ممیزی و لاگ‌ها

  • ثبت در جدول ami_notifications_log با فیلدهای user_id، channel، payload، status.
  • ذخیره زمان ارسال در sent_at (به صورت timestamp UTC).

جمع‌بندی

sendTestNotification به عنوان ابزار پایش و رفع اشکال بلادرنگ در زیرساخت ارتباطی Asterisk استفاده می‌شود. این مسیر به توسعه‌دهندگان اجازه می‌دهد توان ارسال، انتشار، و ثبت رویدادها را به‌صورت متمرکز و امن سنجش کنند و بنابراین، جزئی کلیدی از پایش زنده‌ی سامانه NotifyCenter است.