Skip to content

Troubleshooting

Symptom-based fixes for Tommy's Radio — connection failures, audio and microphone problems, access issues, 911 calls, dispatch panel errors, and install mistakes.

The radio won't connect

Read the health check first

Every start prints a Status row in the tRadio banner. It tells you which of three situations you are in.

StatusMeaningDo this
Green — Server started successfullyBoth the public and localhost probes passedNothing. The port is open
Amber — reachable on localhost, public probe failedThe radio works for players; this host just cannot reach its own public IP (hairpin NAT, CGNAT, or a reverse proxy)Confirm from portchecker.co or a phone on mobile data. If players connect, the warning is cosmetic
Red — both probes failedNothing is listening on that port, or something else isFollow the port fix below

ECONNREFUSED, closed port, or "Failed to connect to radio server"

What you see

[Radio-Server] ERROR Health check failed after 4 attempt(s)
[Radio-Server] WARN HTTP endpoint test failed - connect ECONNREFUSED

or players get Failed to connect to radio server in-game, or the browser console shows xhr poll error.

Why — the port is not reachable from the internet.

Diagnose — with the resource running, enter your server IP and the port from config.lua at portchecker.co. Closed confirms it.

Fix, hosting panel

  1. Confirm the port exists in your panel's Network / Ports / Allocations section
  2. Confirm it is not 30120 (FiveM) or 40120 (txAdmin)
  3. Make serverPort and the port inside serverAddress match
  4. Restart the entire server from the panel, not just the resource
  5. Re-test. If it is still closed, open a support ticket — most Pterodactyl hosts block the port at the network level even after you add it

Fix, VPS

sudo ufw allow 7777 && sudo ufw reload                                   # Ubuntu / Debian
sudo firewall-cmd --permanent --add-port=7777/tcp && sudo firewall-cmd --reload  # CentOS / RHEL

Confirmed when portchecker.co reports Open and Status goes green on the next restart.

"Invalid URL" on startup

serverAddress is malformed. Set it to "" to auto-detect, or use exactly http://IP:PORT — the protocol and the port are both required.

Port is reachable but another service answers

The banner says the port is reachable but a different service is responding. Something else is bound to it. Pick a port nothing else uses and update both serverPort and serverAddress.


The radio won't open at all

What you see — pressing F6 does nothing, and the F8 console shows radio keybind blocked: server has not granted radio access.

The server denied access. Work through the chain in order:

  1. Does the player have a codeplug? Their job must appear in JOB_CODEPLUG_MAP in config/sv_functions.lua, and the value must match a codeplug's ID in the admin panel exactly. Unmapped jobs get no radio by design
  2. Is a grade threshold excluding them? If the mapping uses grade thresholds, a player below the lowest threshold gets nothing
  3. Is the item requirement on? With Config.inventory.enabled = true, they must be carrying the item — or hold the tRadio.access ACE
  4. Did their job just change? Call exports['tRadio']:refreshNacId(source), or leave autoRefreshOnJobChange = true and let tRadio handle it
  5. Does the codeplug have any allowed models? A codeplug with none leaves the player with no radio to render

JOB_CODEPLUG_MAP changes require restart tRadio. Admin panel changes do not.

Also possible: radio keybind blocked: NUI engine not ready yet simply means the UI is still loading. Wait a few seconds.


No audio

Nobody can hear me and I can't hear anyone

The player's codeplug does not include the channel. Add the channel under Channel Access on their codeplug, or grant tRadio.connect.{freq} (drop the decimal: 154.755154755). Reconnect to the channel afterwards.

No static, tones, or radio character

Check three settings in Admin Panel → Settings → Audio & Radio:

  • Transmission Tones must be on for TX_START / TX_END
  • Radio FX must be on for the analog chain
  • SFX Volume — both the server default and the player's own setting

Robotic, warped, or metallic audio on a P25 channel

What you hearWhyFix
Robotic or warped at the very start of a sessionThe WASM vocoder is warming upNone needed — it resolves after the first transmission
Metallic buzz or warbling throughoutMicrophone input is clippingLower the mic level in Windows Sound settings → Recording → Properties → Levels
First syllable cut offNormal codec behaviourIf severe, raise PTT Release Delay
Dispatch hears clean audio instead of P25That channel is not a P25 channelSet the channel's Mode to P25 Digital in Zones & Channels. There is no global P25 switch — it is per channel

Idle hum, pops, or clicks

Turn Signal Degradation off in Settings → Audio & Radio and listen again. Degradation deliberately inserts dropouts at low signal; if that removes the artefacts, either lower Degradation Intensity or add more signal towers so players are not sitting at the edge of coverage.

Run /tradio_debug_audio before and after reproducing the noise and compare the two reports.

Unwanted bonk tones, or people talking over each other

Both are in Settings → Audio & Radio → Half-Duplex (Bonking). Turn Play Bonk Tone off to silence the tone; turn Block Transmission on to actually prevent the second transmission.


Microphone not working

Wrong device

Open the radio → STMIC, or /tradio → Audio → Microphone, and pick the right input. The refresh button beside it re-enumerates devices and re-acquires the stream.

FiveM was denied microphone access

If you clicked Deny on FiveM's permission prompt, no device list appears at all.

  1. Close FiveM completely
  2. Delete %localappdata%\FiveM\FiveM.app\cache
  3. Relaunch — the prompt reappears
  4. Click Allow

canTalk is returning false

This is the most common non-hardware cause

Config.canTalk in config/cl_functions.lua blocks transmission whenever it returns false — the shipped version does so when the player is dead or swimming. If it starts returning false mid-transmission, the client force-stops PTT and logs canTalk check failed mid-transmission, force-stopping PTT to the F8 console. Check for that line before suspecting hardware.

Voice chat works but the radio doesn't (or the reverse)

Expected, and explainable. Radio PTT uses tRadio's own microphone capture. In-game Mumble voice activity detection is used only for 911 calls. The two paths are entirely separate, so one working while the other does not is not by itself a bug.

Diagnostic commands

CommandShows
/tradio_debug_audioFull F8 report: audio context state, signal degradation parameters, active voice buffers, and micStreamReady / isRecording — check those two first for mic reports
/tradio_debug_output [deviceId]Output-device switching report
/_tradio_diagConnection diagnostics — socket health and connected endpoint
/_tradio_tone [TONE]Play a tone by key (default BEEP) — tests the tone path independently of PTT
/_tradio_fx [EFFECT]Play a background effect: transmission, gunshot, siren, heli, transEnd
/_tradio_mute2dToggle 2D audio mute, to isolate 3D positional audio while testing
/_tradio_coords [lua|json]Copy your position to the clipboard for placing speakers, towers, and geo zones
/_tradio_debugToggle the radio UI debug overlay
/tradio_con <url>Override this client's voice server address — useful for testing one player against another endpoint. Run with no argument to clear it. Power-cycle the radio to apply

Wrong channels, zones, or blips

SymptomFix
A channel is missing from the radioAdd the channel to the codeplug's Channel Access, or grant tRadio.connect.{freq}
A channel cannot be scannedAdd it to Scan Access, or grant tRadio.scan.{freq}. Connect-access channels are scannable automatically
A zone is missingZone access is derived from channels — select at least one of that zone's channels on the codeplug, or grant tRadio.zone.{N}
No GPS blips for other playersCheck all three: the target codeplug is selected under GPS Visibility on the viewer's codeplug, GPS Blips is on in that codeplug's Features, and Radio Blips is on in Settings → General. The player's own GPS toggle must also be on
A zone vanished from the dispatch panel but works in-gameIts Hide from dispatch toggle is on. That is display scope only, not access control
Zone ACE grants apply to the wrong zonetRadio.zone.{N} is positional. Deleting or reordering zones shifts every later-numbered grant — review server.cfg

911 calls

/911 says unknown command

Two settings suppress it, both deliberately:

  1. 911 Calling is off in Settings → General. Turn it on
  2. LB Phone 911 Dial-In is on in Settings → Advanced. That replaces the command — players dial 911 on the phone instead. Turn it off and restart to get the command back

If the phone integration is on but lb-phone is not installed or started, players have no way to reach 911 at all. tRadio logs a warning about exactly this a few seconds after startup.

Turning 911 off didn't remove the command

Expected and harmless. FiveM cannot unregister a chat command, so it stays for players already connected — but the server rejects every call and tells them 911 is unavailable. It disappears for anyone who reconnects, and after a resource restart.

Calls never reach the panel

The call is queued — a dispatcher connecting later will see it. Confirm a dispatcher is actually logged in, and that the sidebar's 911 section is not collapsed or popped out. With nobody on the panel, call911NoDispatcherFallback fires instead; by default that chat-broadcasts to everyone with radio access.

The caller can't be heard after accept

911 calls use in-game voice activity detection, not radio PTT. If the player's in-game voice chat is not working, the call carries no audio even though their radio PTT may be fine. See Voice chat works but the radio doesn't.


Dispatch panel

The desktop app shows someone else's server

It is pointed at the demo endpoint. In the app's settings, set Endpoint URL to http://YOUR_IP:YOUR_PORT/ and reconnect.

The panel asks for a NAC ID and I don't have one

It is not generated — you define it. Set dispatchNacId in config/config.lua and restart.

Microphone doesn't work in the browser

Browsers only expose microphone APIs over HTTPS. Use the desktop app, which has no such requirement, or put a reverse proxy with a valid TLS certificate in front of the radio server.

"No authentication method configured"

Neither adminPassword nor discord.adminRoles is set, so nobody can log into the admin panel. Set one in config/config.lua and restart. tRadio also prints this as a startup warning.

Session expired banner

Admin sessions log out after 30 minutes of inactivity, and a resource restart invalidates them. Click Log in again. Unsaved changes are lost, so save before stepping away.


Install and config errors

Syntax error referencing <\1>

Two causes:

  1. Corrupted transfer. FTP clients in ASCII mode (FileZilla's default) and Remote Desktop drag-and-drop corrupt Lua files. Use WinSCP or set binary mode — and always transfer the .zip and unzip on the server
  2. Outdated artifact. Build 4752 or newer is required. Check with version in the console

To update a Linux artifact: download the latest from the build server, stop the server, delete the cache and alpine folders, run tar -xf fx.tar.xz, and restart.

Missing .fxap file

The escrow file is dot-prefixed, so it is hidden on Linux and macOS and commonly dropped by FTP clients set to hide hidden files, or by .gitignore rules in a CI pipeline. Enable hidden files and transfer it; make sure .fxap is not gitignored in a git-based deploy.

The SGN button does nothing

The player needs the tlib.admin ACE, or Supervisor Access enabled on their codeplug. Note that tlib.admin grants in-game supervisor features only — it does not unlock the web admin panel, which uses adminPassword or Discord.

Framework failed to initialize

[tRadio] ERROR: Framework 'esx' failed to initialize.

All players are denied radio access until this is resolved. Confirm the framework resource is running and that Config.frameworkResources matches its actual resource name.

Changes in the admin panel aren't applying

Almost everything applies live. The exceptions are marked Restart required in the panel: 911 Calling, the Callsign Command name, and LB Phone 911 Dial-In. Anything edited in config/config.lua, sv_functions.lua, or cl_functions.lua also needs restart tRadio.


Getting more detail

Raise Log Level in Admin Panel → Settings → General. It applies immediately.

LevelOutput
0Errors only
1Warnings
2Minimal
3Normal — the production default
4Debug — for troubleshooting
5Verbose — very noisy, measurable performance cost on a busy server

Reproduce the problem at level 4 or 5, then look for [tRadio]-prefixed lines in the server console. Connection failures appear at startup; audio path problems only appear when someone transmits. Set it back to 3 when you are done.

Still stuck? Post in the FiveM community thread with the full console error block, your config.lua with secrets redacted, the level 4 output captured during the failure, and your framework.