fn_phone : héberger photos, vidéos et vocaux sur FiveDock
Envoyez photos, vidéos et messages vocaux de fn_phone vers FiveDock plutôt que dans la base : une ligne de config, plus l’agent fivedock ou un jeton API.
Par Termi
- fn_phone
- Uploads
- Lua
Sur cette page
- Où fn_phone stocke les médias
- Envoyer via l’agent fivedock
- Envoyer avec un jeton API
- Modifier depuis le jeu
- Vérifier que ça marche
- Ce que fn_phone envoie
- Photos encore chez Fivemanage
- Si les uploads échouent
- Questions fréquentes
- fn_phone fonctionne-t-il avec FiveDock ?
- Faut-il un jeton API pour fn_phone ?
- fn_phone peut-il encore envoyer vers Fivemanage ?
- Les joueurs peuvent-ils utiliser des liens FiveDock comme sonnerie ?
- Config.Fivedock est-il le même réglage ?
fn_phone est notre propre téléphone pour FiveM. Par défaut, il garde chaque photo, vidéo et message vocal dans votre base de données. Une ligne dans sa config les envoie à FiveDock, et la base ne conserve que le lien. L’upload se fait côté serveur via fn_bridge : vous ne modifiez aucun fichier de fn_phone, et aucun jeton n’arrive jamais chez un joueur.
Où fn_phone stocke les médias
Chaque fichier enregistré par le téléphone est une ligne de fn_phone_media. Avec Config.Media.provider = 'local', la valeur par défaut, la colonne url contient le fichier entier sous forme de data URI, jusqu’à 3 MiB pour une photo et 12 MiB pour une vidéo. Le serveur le rappelle à chaque démarrage :
[fn_phone] photos are stored in the database (Config.Media.provider = local); use fivedock for a CDNAvec provider = 'fivedock', le serveur passe chaque fichier à FN_BRIDGE.MEDIA.Upload dans fn_bridge, qui l’envoie et renvoie le lien du CDN. fn_bridge joint FiveDock de deux façons. Si un jeton est défini, il poste le fichier sur https://api.fivedock.dev/api/v3/file/base64, la même adresse base64 que l’API v3 de Fivemanage. Sans jeton et avec la resource de l’agent fivedock démarrée, il écrit le fichier dans son dossier cache, le confie à exports.fivedock:upload, puis le supprime.
Les joueurs ne reçoivent jamais de lien d’upload. Une vidéo enregistrée sur le téléphone part d’abord vers le serveur en latent event, et le serveur l’envoie comme une photo.
Envoyer via l’agent fivedock
Si l’agent fivedock tourne déjà sur votre serveur, vous n’avez aucun jeton à créer. L’agent se connecte avec la clé fda_live_ du server.cfg, et fn_bridge lui confie les uploads tant qu’aucun jeton n’est défini. L’agent demande deux lignes dans server.cfg, comme le décrit le guide de l’agent. Placez-les au-dessus de ensure fn_phone :
set fivedock_key "fda_live_…"
ensure fivedockEnsuite, changez le provider dans fn_phone/config.lua et laissez token vide :
Media = { provider = 'fivedock', token = '', encoding = 'webp', quality = 0.85, limit = 2000 },Redémarrez fn_phone. Les uploads arrivent dans le dossier fn_phone de votre organisation.
Envoyer avec un jeton API
Sans agent, fn_bridge a besoin d’un jeton API. Dans le panel FiveDock, ouvrez Jetons, créez un jeton avec le scope files:write et liez-le à votre serveur. Il commence par fd_live_. Ce n’est pas la clé d’agent fda_live_, que l’API d’upload n’accepte pas.
fn_phone lit d’abord le jeton dans Config.Media.token. Si ce champ reste vide, fn_bridge se rabat sur une convar du server.cfg, que tout script reposant sur fn_bridge peut utiliser :
set fn_bridge:upload_token "fd_live_…"Utilisez set ici. setr réplique la convar dans le jeu de chaque joueur. config.lua est sûr aussi, puisque fn_phone ne le charge que comme script serveur. Réglez provider = 'fivedock' comme dans la section sur l’agent. Si un jeton et l’agent sont tous deux présents, fn_bridge utilise le jeton.
Pour chaque fichier, fn_bridge envoie cette requête :
POST https://api.fivedock.dev/api/v3/file/base64
Authorization: fd_live_…
Content-Type: application/json
{"base64":"UklGR…","filename":"fn_phone_1792756800_482913.webp","path":"fn_phone"}Le nom du fichier est fn_phone_, l’heure d’upload en secondes Unix et un nombre aléatoire. FiveDock répond avec le lien du CDN dans data.url, et c’est là que fn_bridge le lit.
Modifier depuis le jeu
Admin → Configuration du serveur contient les deux réglages dans l’étape Envois et web : Stockage correspond à Media.provider et Jeton fivedock à Media.token. Le panel n’affiche jamais un jeton enregistré, seulement s’il y en a un. Les valeurs enregistrées vont dans le stockage KVP du serveur et s’appliquent par-dessus config.lua après un redémarrage de fn_phone : un Stockage enregistré en jeu l’emporte donc sur le fichier.
Vérifier que ça marche
Après le redémarrage, la console n’affiche plus la ligne sur les photos dans la base. Prenez une photo avec l’appareil et ouvrez Fichiers dans le panel FiveDock : elle est dans le dossier fn_phone, sous un nom comme fn_phone_1792756800_482913.webp. Dans la base, les lignes les plus récentes doivent contenir des liens FiveDock :
SELECT id, kind, LEFT(url, 40) AS url
FROM fn_phone_media
ORDER BY id DESC
LIMIT 10;Une url qui commence par https://cdn.fivedock.dev/ est sur FiveDock. Une url qui commence par data: est dans la base : l’upload a échoué et fn_phone y a stocké le fichier. Pour obtenir une erreur sur le téléphone à la place, ajoutez fallback = false dans Config.Media ; une photo ou une vidéo dont l’upload échoue n’est alors pas enregistrée du tout. Les messages vocaux retombent toujours dans la base.
Ce que fn_phone envoie
FiveDock accepte tout cela. Côté téléphone, les enregistrements d’écran font exception : fn_phone les garde dans la base, dans son propre format, quel que soit le provider.
Les messages vocaux apparaissent comme des vidéos
Les messages vocaux sont des fichiers WebM, le même conteneur que les vidéos de fn_phone. FiveDock lit le type d’un fichier dans ses octets, donc le panel range les messages vocaux sous vidéo.
Photos encore chez Fivemanage
fn_phone a supprimé l’option Fivemanage dans la version 1.1.11. Si votre config.lua contient encore provider = 'fivemanage', remplacez-le par 'fivedock' comme plus haut. Les photos prises avant le changement gardent leurs liens Fivemanage, tout comme celles que fn_phone_migrate a reprises de lb-phone ou d’un autre téléphone, puisque l’import copie chaque lien tel quel. Elles se chargent tant que les fichiers restent chez Fivemanage. Depuis la 1.1.11, les liens r2.fivemanage.com ne fonctionnent plus comme sonneries personnalisées.
Les liens se trouvent dans la colonne url de fn_phone_media, et les Messages, les annonces et les stories pointent vers ces lignes par leur clé de 16 caractères. La migration copie vos fichiers Fivemanage avec une clé en lecture seule et vous remet une liste ancien lien → nouveau lien. Chaque ligne de cette liste devient une requête :
UPDATE fn_phone_media
SET url = 'https://cdn.fivedock.dev/f/8Kq2nR4t.webp'
WHERE url = 'https://r2.fivemanage.com/…/IMG_0412.webp';Rien n’est modifié ni supprimé chez Fivemanage, vous pouvez donc lancer ces requêtes quand vous voulez.
Si les uploads échouent
Questions fréquentes
fn_phone fonctionne-t-il avec FiveDock ?
Oui, sans toucher à ses fichiers. Réglez Config.Media.provider = 'fivedock', puis lancez l’agent fivedock ou donnez à fn_phone un jeton fd_live_ avec le scope files:write, dans Config.Media.token ou dans la convar fn_bridge:upload_token. fn_bridge envoie chaque photo, vidéo et message vocal depuis le serveur et stocke le lien du CDN.
Faut-il un jeton API pour fn_phone ?
Pas si l’agent fivedock tourne sur le serveur. Sans jeton défini, fn_bridge confie chaque upload à l’agent, qui se connecte avec sa propre clé fda_live_. Un jeton fd_live_ ne sert que sur un serveur sans agent.
fn_phone peut-il encore envoyer vers Fivemanage ?
Non. La version 1.1.11 a retiré l’option Fivemanage, et Config.Media.provider accepte désormais local ou fivedock. Les anciens liens Fivemanage dans fn_phone_media continuent de se charger tant que les fichiers existent, et la migration de FiveDock copie les fichiers et liste les nouveaux liens.
Les joueurs peuvent-ils utiliser des liens FiveDock comme sonnerie ?
Oui. fivedock.dev est le premier hôte de Config.Ringtones.hosts, et les sous-domaines comptent, donc un lien sur cdn.fivedock.dev passe. Le lien doit se terminer par une extension de fichier audio comme .mp3 ou .ogg. Envoyez le fichier dans Fichiers, puis collez son lien sur le téléphone dans Réglages → Sons et vibrations → Sonnerie.
Config.Fivedock est-il le même réglage ?
Non. Config.Fivedock envoie les événements Black Box, les journaux du téléphone, vers votre panel FiveDock. Les photos, vidéos et messages vocaux ne suivent que Config.Media. Quand l’agent tourne, les deux fonctionnent sans jeton.