# GET /asterisk/websocket/test

<div id="bkmrk-" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### Route Info

<div id="bkmrk-method-endpoint-cont" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="width: 96%; margin: 15px auto; text-align: center; border-collapse: collapse;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td dir="ltr">GET</td><td dir="ltr">/api/v2/asterisk/websocket/test</td><td dir="ltr">AsteriskAmiController@testWebSocketConnection</td><td dir="ltr">authWithJwt</td><td dir="rtl">تست و بررسی سلامت اتصال وب‌سوکت به سیستم AMI و محاسبه تاخیر (Ping/Pong Latency)</td></tr></tbody></table>

</div>### منطق عملکرد تابع

تابع **testWebSocketConnection** به منظور بررسی در دسترس بودن و پایداری ارتباطات بلادرنگ با وب‌سوکت داخلی ماژول Asterisk طراحی شده است. فرایند به صورت زیر انجام می‌شود:

<div id="bkmrk-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84%E2%80%AF%D9%BE%DB%8C%D9%86%DA%AF%E2%80%AF%28%D9%BE%DB%8C%D8%A7%D9%85%E2%80%AFpin" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">1. ارسال پینگ (پیام <span dir="ltr">ping:test</span>) به کانال داخلی `asterisk_socket`.
2. دریافت پاسخ از سرویس (پیام <span dir="ltr">pong</span>) و محاسبه‌ی اختلاف زمان بین ارسال و دریافت.
3. بازگرداندن نتیجه به صورت JSON همراه با فیلد `latency_ms` برحسب میلی‌ثانیه.
4. در صورت خطا در اتصال وب‌سوکت، کد ۵۰۴ برگردانده می‌شود.

</div>### پارامترهای ورودی

<div id="bkmrk-%D9%86%D8%A7%D9%85-%D9%85%D8%AD%D9%84-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%B2%D8%A7%D9%85%DB%8C-%D8%AA" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="width: 90%; margin: 15px auto; text-align: center; border-collapse: collapse;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>نام</td><td>محل</td><td>نوع</td><td>الزامی</td><td>توضیح</td></tr><tr><td>none</td><td>-</td><td>-</td><td>-</td><td>این مسیر نیازی به ورودی ندارد.</td></tr></tbody></table>

</div>### ساختار خروجی

```
{
  "status": true,
  "message": "WebSocket connection healthy",
  "data": {
    "ping_sent": "2025-11-23T15:20:42.002+03:30",
    "pong_received": "2025-11-23T15:20:42.135+03:30",
    "latency_ms": 133
  }
}
```

<div id="bkmrk--1" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### نکات امنیتی

<div id="bkmrk-%D8%A7%DB%8C%D9%86%E2%80%AF%D9%85%D8%AA%D8%AF%E2%80%AF%D8%B5%D8%B1%D9%81%D8%A7%D9%8B%E2%80%AF%D8%A8%D8%B1%D8%A7%DB%8C%E2%80%AF%DA%A9" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- این متد صرفاً برای کاربران با نقش `system_monitor`، `system_admin` یا `developer` در دسترس است.
- در صورت تشخیص تعداد درخواست‌های متوالی (بیش از ۵ بار در ۳۰ ثانیه)، به مدت ۶۰ ثانیه از دسترسی به این مسیر جلوگیری می‌شود (Throttle Policy).
- هیچ اطلاعات حساس از سرویس در پاسخ برگردانده نمی‌شود.

</div>### عملکرد

<div id="bkmrk-%D9%85%DB%8C%D8%A7%D9%86%DA%AF%DB%8C%D9%86%E2%80%AF%D8%AA%D8%A7%D8%AE%DB%8C%D8%B1%E2%80%AF%D8%AF%D8%B1%E2%80%AF%D8%A7%D8%B1%D8%AA" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- میانگین تاخیر در ارتباط با وب‌سوکت: ۱۰۰–۲۰۰ میلی‌ثانیه.
- تست صرفاً به صورت بلادرنگ اجرا شده و از کش استفاده نمی‌کند.

</div>### Dependencies

<div id="bkmrk-use%E2%80%AFapp%5Cservices%5Cweb" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- use App\\Services\\WebSocketGateway;
- use App\\Helpers\\Functions;
- use Carbon\\Carbon;

</div>### کدهای خطا

<div id="bkmrk-%DA%A9%D8%AF-%D8%B4%D8%B1%D8%AD-%D9%85%D9%86%D8%A8%D8%B9-401-%D8%AA%D9%88%DA%A9%D9%86" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="width: 90%; margin: 15px auto; text-align: center; border-collapse: collapse;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>کد</td><td>شرح</td><td>منبع</td></tr><tr><td>401</td><td>توکن JWT نامعتبر یا منقضی</td><td>Authentication</td></tr><tr><td>403</td><td>کاربر فاقد مجوز برای دسترسی به تست وب‌سوکت</td><td>Authorization</td></tr><tr><td>504</td><td>عدم پاسخ از وب‌سوکت در بازه‌ی ۲ ثانیه</td><td>Connection Timeout</td></tr></tbody></table>

</div>### پیشنهادهای امنیتی

<div id="bkmrk-%D9%81%D8%B9%D8%A7%D9%84%E2%80%AF%D8%B3%D8%A7%D8%B2%DB%8C%E2%80%AFtls%E2%80%AF%D8%A8%D8%B1%D8%A7%DB%8C%E2%80%AF%DA%A9" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- فعال سازی TLS برای کانال وب‌سوکت `wss://` جهت رمزنگاری پینگ/پُنگ.
- افزودن Signaling Token منحصربه‌فرد برای تست‌های برخط.

</div>### پیشنهادهای توسعه‌ای

<div id="bkmrk-%D8%A7%D9%85%DA%A9%D8%A7%D9%86%E2%80%AF%D9%86%D9%85%D8%A7%DB%8C%D8%B4%E2%80%AF%D9%86%D9%85%D9%88%D8%AF%D8%A7%D8%B1%E2%80%AF%D8%B2" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- امکان نمایش نمودار زمان پاسخ (Log Latency Chart) در داشبورد DevOps.
- افزودن پارامتر اختیاری `count` برای اجرای تست تکرارشونده (مانند ۵ بار پیاپی).
- ذخیره میانگین تاخیر در Redis برای تحلیل پایداری شبکه.

</div>### ممیزی و لاگ‌ها

<div id="bkmrk-%D8%AB%D8%A8%D8%AA%E2%80%AF%D8%AF%D8%B1%E2%80%AF%D8%AC%D8%AF%D9%88%D9%84%E2%80%AFami_webs" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- ثبت در جدول `ami_websocket_logs` به‌صورت روزانه با فیلدهای `operator_id`، `latency`، `ip_address`.
- نمایش تاریخچه پینگ‌ها در پنل پشتیبان زیر منوی Monitoring &gt; AMI Ping.

</div>### جمع‌بندی

**testWebSocketConnection** ابزاری کاملاً سبک برای اطمینان از سلامت وب‌سوکت و کاهش خطاهای زمانی در ارتباطات بلادرنگ AMI می‌باشد. عدم وابستگی به کش، امنیت سطح نقش و ثبت ممیزی بلادرنگ باعث می‌شود که این مسیر برای پایش زنده زیرساخت ارتباطی سیستم بسیار کارآمد باشد.

<div id="bkmrk-asterisk-websocket-test" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>