Before Anything Else#
Most problems come from one of these four. Check them first:
Every other phone script (npwd, lb-phone, qb-phone, older qs-smartphone versions…) is removed.
qs-smartphonestarts after oxmysql, ox_lib, your framework, inventory, voice and xsound.[sql]/database.sqlwas imported without errors.The resource folders are still named
qs-smartphoneandsmartphone-prop.
Then read the server console from the top after a restart, and press F8 in game to see client errors. Config.Debug adds detailed logs while you test; turn it off on a live server.
Opening the Phone#
F1 does nothing
With
Config.Phone.requireItem = truethe player needs the item. Its name must matchConfig.Phone.itemNameexactly.The player may have changed the key. Check Settings → Key Bindings → FiveM → Open Phone. Changing
openKeyin the config only changes the default for players who never set it.The player is handcuffed. With
blockWhenRestricted = truethe phone is blocked; adjustframework:isPhoneRestricted()incustom/<framework>/if your cuff script sets a flag you do not use.Another script called
ToggleDisabled(true)(a jail or minigame) and never turned it back.
Using the phone item opens npwd or another phone
ox_inventory ships an npwd handler for the phone item. Comment it out in ox_inventory/modules/items/client.lua as shown in Installation, and restart ox_inventory.
With several phones, the wrong one opens
The open key always uses the first phone in the inventory. To open the one the player clicked, add server = { export = 'qs-smartphone.useItem' } to the phone item in ox_inventory and remove the npwd handler.
The Nova or foldable phone opens the wrong skin
The item names must match Config.Platform.androidItemName, Config.Fold.iosItemName and Config.Fold.androidItemName. The Nova item is only used when Config.Platform.mode = 'item'; in 'settings' mode the skin is chosen in Settings.
The phone screen is blank or the prop is missing
Make sure smartphone-prop is started before the phone, that the folder is named qs-smartphone, and that you uploaded the complete download from the CFX Portal. If you replaced files during an update, upload the whole qs-smartphone folder again, keeping only your config files.
Database and Numbers#
The SQL import fails
The file uses JSON columns and ADD COLUMN IF NOT EXISTS, which need MariaDB 10.6 or newer. Older MySQL versions and local stacks like XAMPP fail on them. Update the database server and import again.
Unknown column or table errors after an update
Import the new [sql]/database.sql again. It only adds what is missing and keeps your data.
Several players have the same number or the same data
Run /phonediag (admin) or phonediag in the console. It prints how each online player's number is found, and the inventory and framework the phone detected. Usually the inventory does not save item metadata, or Config.MetaSystem.enabled was changed on a live server.
Phone numbers look wrong
phoneNumberPrefix must be a string ('06', not 06, which drops the zero), and the number of X in phoneNumberMask must equal the prefix length plus phoneNumberLength. Existing numbers keep their old format; only new ones change.
Calls and Audio#
The call connects but nobody hears anything
Voice in calls comes from your voice script. Check that pma-voice (or your Mumble-based voice) is running and that voice works outside the phone. Start the voice script before the phone.
Video calls are disabled or show a black screen
A TURN server is required. Without one, players see a warning and video calls stay off. Set up Cloudflare or Metered as in Installation.
Cloudflare returns 404: you created a Realtime SFU app. Create a TURN app instead and use its TURN Token ID and API Token.
Run
phone:turn:statusin the server console. With no cached servers, the keys are wrong;phone:turn:refreshtries again.Video only works with at least
midsignal. If it works for some players only, tryforceRelay = true.
Calls fail or drop in some places
The player is in a no-signal zone or the battery is at 0%. Look at the signal bars on the phone. Enable Config.Signal.debug to see the zones, and edit or remove the ones you do not want in Config.Signal.zones.
No ringtone, music or notification sounds
xsound must be running (or qs-3dsound / mx-surround). Also check the phone's volume and Silent Mode in Settings, and that the player is not wearing earbuds, which send all audio to them only.
911 rings nobody
Service numbers ring online players whose job is in the line's jobs list with at least minGrade. Check that the job names in Config.ServiceNumbers match your framework exactly.
Apps#
Photos, videos or voice notes do not save
No media host is set. Add your FiveManage token or FiveMesh key in server/webhooks.lua and restart. With FiveMesh, the key needs the cdn:write permission. Also check that the phone has free storage.
An app says there is no signal
Online apps need mid signal by default. Lower an app's requirement in Config.Signal.policy.appMinLevel, or add it to offlineApps.
Garages, Bills or Home show nothing
The phone did not detect your garage, billing or housing script. Start it before qs-smartphone. If you renamed the resource, add the new name to the detection table in config/main.lua (see Integrations). The Home app needs qs-housing 5.3.2 or newer.
A DLC app does not appear in the App Store
Start it after qs-smartphone. Integrated apps also need their Quasar script running first; otherwise the console shows a missing dependency and the resource does not start.
Aura is missing from Settings
qs-smartphone-aura is not started, or Config.Aura.enabled = false. Ensure the add-on after the phone; the console prints a warning while it is missing.
Players cannot send money
Wallet and Messages transfers need the recipient online, and the amount within the min and max in Config.Wallet or Config.Messages. If your server uses other account names, check the mapping in custom/<framework>/server.lua.
Export Error Codes#
Code | Means |
|---|---|
| The player has no active phone (no item, or never opened one). |
| The player id or the table you passed is wrong. |
| No phone number for that player or number. |
|
|
| The player has not created a Mail account, or the address is not registered. |
| That number is not in the conversation you asked for. |
| Dynamic Island calls without an id or title, or for an island that is gone. |
Still stuck? Open a ticket on our Discord with your server console from the start, your F8 errors, your framework and inventory, and what you already tried.



