PHASE2_07 — Operations Manual¶
PyroRadius Enterprise Documentation | Phase 2 Last Updated: 2026-07-13 Audience: ISP Operations Staff (non-technical day-to-day operators)
SECTION 1: Daily Operations¶
Morning Checklist¶
Run through these checks at the start of every working day:
| Check | Where to look | What to do if not green |
|---|---|---|
| All services healthy | Health page → Status tiles | Contact tech team |
| Queue workers running | Health → Queue Workers | Contact tech team to restart |
| Any RADIUS alerts | Health → RADIUS | Contact tech team |
| Overnight expired customers | Customers → filter Status: Expired | Process renewals or send reminders |
| Failed WhatsApp messages | WhatsApp → Logs → filter Status: Failed | Check session, resend if needed |
Recharging a Customer¶
This is the most common daily task.
- Go to Customers in the left menu
- Search for the customer by name, username, or mobile number
- Click the customer row to open their profile
- Click the Recharge tab
- Fill in:
- Amount — the payment received (in PKR)
- Payment Method — cash, bank transfer, JazzCash, etc.
- Notes — optional (e.g., "paid via JazzCash ref 12345")
- Click Recharge
What happens automatically: - Invoice is generated for the current billing period - Payment is recorded against the invoice - Expiry date is extended based on the package duration - Customer's PPPoE access is restored in RADIUS (within seconds) - WhatsApp notification is sent to the customer automatically
You do not need to do anything else. If the recharge button is greyed out, check that the customer has a package assigned and a valid PPPoE username.
Creating a New Customer¶
- Go to Customers → Add New Customer
- Fill in the required fields:
| Field | Required | Notes |
|---|---|---|
| Full Name | Yes | Customer's legal name |
| Mobile | Yes | 03XX format — used for WhatsApp |
| PPPoE Username | Yes | Must be unique across the system |
| PPPoE Password | No | Leave blank to auto-generate |
| Package | Yes | Select from assigned packages |
| Dealer | Yes | Which dealer this customer belongs to |
| Area | Yes | Geographic area |
| NAS | Yes | Which router this customer connects through |
| Static IP | Only for Static | Fill IP, Gateway, Subnet Mask |
| Connection Type | Yes | PPPoE, Static IP, or CIR Corporate |
- For CIR Corporate customers (dedicated bandwidth contracts):
- Set Connection Type to CIR
- Fill Committed Bandwidth and Burst Bandwidth
-
Add SLA notes in the Notes field
-
Click Save
The customer is immediately created in the RADIUS system. They can connect via PPPoE as soon as their router is configured with the username and password.
Disconnecting a Customer (for non-payment or violation)¶
Method 1 — Soft suspension (prevents reconnect) 1. Open customer profile → click Edit 2. Change Status to Suspended or Disabled 3. Click Save 4. RADIUS will reject the next PPPoE authentication attempt
The customer's current active session continues until it drops naturally. They cannot reconnect after that.
Method 2 — Immediate disconnect (kicks live session) 1. Open customer profile 2. Click the Kick Session button (in the Actions section) 3. Confirm the action
This sends a CoA Disconnect packet to the router. The customer is disconnected within seconds. This requires the NAS (router) to be reachable and to support RADIUS CoA.
To restore access: Edit the customer → Status: Active → Save. The customer can then reconnect.
Monthly Billing Cycle¶
- Generate invoices — Go to Billing → Batch Billing and run GenerateMonthlyInvoices, or wait for the scheduled run (check Health → Cron Jobs for the schedule)
- Review generated invoices — Billing → Invoices → filter by current month
- Send payment reminders — use WhatsApp Bulk Send or let automated templates run
- Track collections — Reports → Collections → set date range to current month
- Follow up on defaulters — Reports → Defaulters → shows all customers past expiry
SECTION 2: Managing Dealers¶
Adding a New Dealer¶
- Go to Users → Add User
- Set Role to Dealer
- Fill name, email, mobile, password
- Save
The dealer can now log in. They will see only their own customers.
Assigning Packages to a Dealer¶
- Go to Users → {Dealer Name}
- Click the Packages tab
- Click Assign Package → select package → optionally set a custom rate (what the dealer pays vs. the standard price)
- Save
Dealers can only create customers on packages assigned to them.
Viewing the System as a Dealer (for troubleshooting)¶
- From any page in the app, go to the Dashboard
- Find the View As dropdown (top right or sidebar)
- Select the dealer's name
- The system now shows exactly what that dealer sees
To return to your admin view, select Exit View As from the same dropdown.
Checking a Dealer's Account Balance¶
- Go to Users → {Dealer Name}
- Click the Ledger tab
- The ledger shows all credits (collections from customers) and debits (payments to PyroNet)
- Running balance at the bottom shows what the dealer currently owes
SECTION 3: Network Management¶
Adding a New NAS (Router)¶
A NAS (Network Access Server) is a router — typically MikroTik — that handles PPPoE sessions for customers.
- Go to Network → NAS → Add NAS
- Fill in:
| Field | Value |
|---|---|
| IP Address (nasname) | The router's IP as seen from the RADIUS server |
| Short Name | Friendly label (e.g., "Site-A-MK01") |
| Type | mikrotik, cisco, juniper, or other |
| SNMP Community | Used for traffic polling (usually "public" or custom) |
| API Username | MikroTik API user (for live traffic and session kick) |
| API Password | MikroTik API password |
| API Port | Default 8728 (or 8729 for SSL) |
- On the MikroTik router (done by tech team):
- Allow API access from the PyroRadius server IP
-
Configure
/radius incomingto allow CoA packets from the server -
On the FreeRADIUS server (done by tech team):
- Add the NAS IP to
clients.confwith the correct shared secret
Once added, the NAS appears in the NAS dropdown when creating or editing customers.
Monitoring Fiber Signal (OLT/ONT)¶
OLTs are the fiber head-end devices. Each OLT manages many ONT (fiber modem) ports.
- Go to Network → OLT → select an OLT
- The ONT list shows all connected fiber modems with their signal strength (Rx Power in dBm)
| Signal Level | Range | Action |
|---|---|---|
| Good (green) | Above -27 dBm | No action needed |
| Marginal (yellow) | -27 to -30 dBm | Monitor — check fiber connector cleanliness |
| Bad (red) | Below -30 dBm | Investigate — customer likely has fiber issues |
If a customer reports slow speeds or drops, check their ONT signal here first before dispatching a technician.
Managing WhatsApp Sessions¶
PyroRadius sends WhatsApp messages through linked phone accounts. Each session corresponds to a phone.
- Go to WhatsApp → Sessions
- Each session shows status: Connected or Disconnected
If a session is disconnected: 1. Click Reconnect next to the session 2. A QR code appears on screen 3. Open WhatsApp on the linked phone → Settings → Linked Devices → Link a Device 4. Scan the QR code 5. Session status changes to Connected within 30 seconds
One session can handle several hundred messages per day. If message volume is high, consider linking a second session.
SECTION 4: Importing Customers (Bulk)¶
Use this when migrating from another system or onboarding a large batch of customers.
- Go to Customers → Import
- Click Download Template — this gives you an Excel file with the correct column headers
- Fill in the template:
| Column | Required | Format |
|---|---|---|
| full_name | Yes | Text |
| mobile | Yes | 03XXXXXXXXX |
| pppoe_username | Yes | Unique — will fail if duplicate |
| pppoe_password | No | Leave blank to auto-generate |
| package | Yes | Must match exact package name in system |
| dealer | Yes | Must match dealer's username or ID |
| area | Yes | Must match area name in system |
| expiry_date | No | YYYY-MM-DD format |
| status | No | active, suspended, expired |
- Upload the filled file: Import → Customer Import → Upload
- The system processes each row and shows:
- Success — customer created
- Skipped — duplicate PPPoE username
-
Error — invalid data (shows which column failed)
-
Download the error report and fix the failed rows
- Re-upload only the failed rows (already-imported customers will be skipped automatically)
SECTION 5: Reports¶
| Report | Location | What it shows |
|---|---|---|
| Defaulters | Reports → Defaulters | All customers whose expiry_date has passed |
| Collections | Reports → Collections | Payments collected — filter by date range and dealer |
| Package Summary | Reports → Packages | Number of active customers per package |
| Dealer Summary | Reports → Dealer Summary | Revenue collected per dealer for the period |
| Audit Log | Reports → Audit | Full history of every change — who did what and when |
Exporting reports: Most reports have an Export to Excel button. Use this for sharing with management or for further analysis.
SECTION 6: Troubleshooting Common Issues¶
"Customer says internet is not working but their account shows active"¶
Work through this checklist in order:
-
Check expiry date — Open customer profile. Is expiry_date in the future? If expired, recharge the customer.
-
Check status — Is status
active? Ifsuspendedordisabled, change to active and save. -
Check RADIUS sync — Click the Sync RADIUS button on the customer profile (if available) or ask tech team to verify RADIUS entries.
-
Check the NAS — Is the customer's assigned NAS (router) reachable? Go to Network → NAS and check the status of their NAS.
-
Try kicking and reconnecting — Click Kick Session on the customer profile, then ask the customer to reconnect their router.
-
Escalate to tech team — If the above steps don't resolve it, provide tech team with the customer's PPPoE username.
"WhatsApp messages are not being sent"¶
- Go to Health → check WhatsApp session status
- If any session shows Disconnected:
- Go to WhatsApp → Sessions
- Click Reconnect → scan QR code on the linked phone
- If session shows Connected but messages are still failing:
- Check WhatsApp → Logs — look at the error message for recent failed logs
- Contact tech team with a sample of the failed log entries
"Dashboard shows 0 online customers"¶
This means the system cannot read current session data from the routers.
- Go to Health → check if Queue Workers are running
- Check if MikroTik API is reachable: Network → NAS → check if any NAS shows "Unreachable"
- Contact tech team — they will check Redis and the RouterOS API connection
This does not affect billing or internet service. Customers are still online; the counter just cannot display the count.
"A customer was recharged but their internet is still not working"¶
- Check the Audit Log for the customer — confirm the recharge was actually recorded (event:
customer.recharged) - Check the recharge details — is the expiry date now in the future?
- Ask tech team to check RADIUS: is
Cleartext-Passwordpresent in radcheck for this username? Is there anAuth-Type=Rejectentry that should have been removed? - Try Kick Session to force a fresh authentication
"Invoice was generated for the wrong amount"¶
- Do not delete the invoice — contact tech team
- Note: PyroRadius can create a credit note or adjustment — this is handled manually by an admin
- Never manually edit payment amounts in the database
SECTION 7: Scheduled Operations Reference¶
These tasks run automatically. You can view their last-run status and schedule from Health → Cron Jobs.
| Task | Schedule | What it does |
|---|---|---|
| CheckExpiry | Daily (midnight) | Marks customers past expiry_date as expired; adds Auth-Type=Reject to RADIUS |
| GenerateMonthlyInvoices | Configured per deployment | Auto-creates invoices for the new billing period |
| SyncOntAssignments | Every 1 minute | Reads ONT data from OLTs and updates fiber signal readings |
| PollTraffic | Every 5 minutes | Queries MikroTik API for bandwidth usage; updates traffic graphs |
| PruneAuditLogs | Weekly | Removes audit log entries older than 30 days to manage database size |
| BackupRun | Daily | Creates database backup and stores it securely |
If a cron job shows "missed" or "failed": Contact the tech team. Do not attempt to run these manually unless specifically instructed.
If CheckExpiry did not run: Customers who should have expired remain active. This is not an emergency but should be fixed within the day. Tech team can run it manually: php artisan expiry:check.
Quick Reference Card¶
| Task | Path |
|---|---|
| Recharge customer | Customers → {Customer} → Recharge tab |
| Add customer | Customers → Add New Customer |
| Suspend customer | Customers → {Customer} → Edit → Status: Suspended |
| Kick session | Customers → {Customer} → Kick Session button |
| Add dealer | Users → Add User → Role: Dealer |
| Assign package to dealer | Users → {Dealer} → Packages tab |
| View as dealer | Dashboard → View As dropdown |
| Add NAS | Network → NAS → Add NAS |
| Check fiber signal | Network → OLT → |
| Reconnect WhatsApp | WhatsApp → Sessions → Reconnect |
| Defaulters list | Reports → Defaulters |
| Collections report | Reports → Collections |
| System health | Health (top nav) |
| Audit log | Reports → Audit |