#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 با مشخصات ارسالکننده ثبت مینماید.
- اعتبارسنجی وجود پارامترهای
type و data.
- ساخت Payload شامل نوع و دادهی رویداد.
- انتشار رویداد در کانال آزمایشی (پیشفرض:
test_notification_channel).
- ثبت در پایگاه داده
ami_notifications_log به همراه user_id.
- بازگرداندن نتیجه برای تأیید انتشار.
پارامترهای ورودی
| نام |
محل |
نوع |
الزامی |
توضیح |
| 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 است.