Aller au contenu
LibertyTalk
Intégrations de jeux

Project Zomboid × LibertyTalk : Talky

Un follow Twitch fait apparaître un zombie à son nom, 300 bits en envoient trois, une récompense de points de chaîne appelle l'hélicoptère. Partie 1 : installer le mod Talky et son pont. Partie 2 : comprendre les workflows qui relient vos lives à la partie.

  • Niveau Intermédiaire
  • 45 min de lecture
  • Mis à jour le 30 octobre 2026
  • Langues disponibles FR · EN

Talky relie vos événements Twitch et YouTube à votre partie de Project Zomboid. Quand Bob suit votre chaîne, un bandeau annonce son arrivée et, deux secondes plus tard, un zombie apparaît à une dizaine de cases de votre personnage, avec « Bob » écrit en violet au-dessus de sa tête. Talky se compose de deux pièces : un mod pour le jeu et un petit programme, le pont (« Bridge » dans le menu du jeu), qui tourne sur votre PC.

  1. Déclencheur

    Follow sur Twitch

    Bob suit votre chaîne.

  2. Action

    Widget LibertyTalk

    Envoie {"user_name":"Bob"} à l'adresse de votre pont.

  3. Hors LibertyTalk

    Tunnel cloudflared

    Rend le pont joignable depuis Internet.

  4. Hors LibertyTalk

    Pont Talky

    Lance le workflow new_follower et dépose les actions pour le jeu.

  5. Hors LibertyTalk

    Mod Talky

    Affiche le bandeau puis fait apparaître le zombie nommé.

Le trajet d'un follow, du chat Twitch à votre partie.

Pourquoi un pont ? Le Lua de Project Zomboid ne peut pas recevoir d'appel réseau : il sait seulement lire et écrire des fichiers dans %USERPROFILE%\Zomboid\Lua. Le pont reçoit les appels de LibertyTalk sur http://127.0.0.1:7420 et écrit les actions dans ce dossier, que le mod lit chaque seconde.

La partie 1 installe Talky et le relie à LibertyTalk avec le widget officiel. La partie 2 explique les workflows des deux côtés, pour que vous puissiez changer ce qui se passe dans la partie quand un viewer offre 500 bits.

À savoir

Version testée

Talky 0.5.0 fonctionne en solo et sur un serveur (partie 3). Il a été testé en vraie partie sur la Build 42.21, en solo et sur un serveur dédié : follows, commandes de chat, bits, noms au-dessus des zombies, hélicoptère et météo.

Partie 1

Activer Talky dans Project Zomboid

Installer le mod et le pont, tester sans LibertyTalk, ouvrir le tunnel, puis brancher le widget officiel.

Ce qu'il vous faut

  • Windows 10 ou 11.
  • Project Zomboid Build 42, version 42.20.1 ou plus récente. Cette partie décrit le solo ; pour un serveur, voir la partie 3.
  • Node.js version 18 ou plus récente, pour faire tourner le pont.
  • cloudflared, l'outil de Cloudflare qui donne une adresse publique au pont.
  • Un compte LibertyTalk avec votre chaîne Twitch ou YouTube connectée à votre communauté.

Node.js et cloudflared s'installent avec deux commandes dans un terminal PowerShell :

powershell
winget install OpenJS.NodeJS.LTS
winget install --id Cloudflare.cloudflared
Fermez puis rouvrez le terminal après l'installation pour que les commandes node et cloudflared soient reconnues.

Récupérer Talky

Talky se télécharge à deux endroits. Le Steam Workshop distribue le mod seul : il refuse les fichiers .bat, .exe et .zip, et réécrit son dossier à chaque mise à jour, ce qui effacerait la configuration du pont. Les releases GitHub contiennent le pont, start-bridge.cmd qui le lance, et une copie du mod pour jouer sans le Workshop.

Attention

Une seule copie du mod

Le mod du Workshop et celui du zip portent le même identifiant, Talky. Si vous êtes abonné sur le Workshop, ne copiez pas le dossier Talky du zip dans %USERPROFILE%\Zomboid\mods, et supprimez %USERPROFILE%\Zomboid\mods\Talky s'il existe déjà, par exemple après une ancienne installation manuelle. Sinon, le jeu voit deux mods avec le même identifiant. Le pont vous prévient à chaque démarrage quand il trouve les deux copies : sa fenêtre affiche une ligne qui commence par warning: Talky is installed twice.

Installer

  1. Étape 1

    Extrayez le zip dans un dossier que vous gardez

    Par exemple Documents\Talky. Ne le décompressez ni dans %USERPROFILE%\Zomboid\mods ni dans le dossier du Workshop. Steam réécrit le dossier du Workshop à chaque mise à jour, et dans Zomboid\mods, supprimer ou remplacer un mod peut emporter le pont avec son fichier bridge\config.json. Le pont signale à chaque démarrage un dossier rangé dans Zomboid\mods.

  2. Étape 2

    Sans le Workshop seulement : copiez le mod

    Copiez le dossier Talky du zip dans %USERPROFILE%\Zomboid\mods, pour obtenir %USERPROFILE%\Zomboid\mods\Talky\42\mod.info. Ne copiez que ce dossier : le pont reste dans Documents\Talky. Si vous êtes abonné sur le Workshop, sautez cette étape : Steam installe déjà le mod.

Il n'y a rien d'autre à installer : le pont crée sa configuration lui-même, à son premier lancement.

Lancer le pont

Double-cliquez sur start-bridge.cmd. Une fenêtre noire intitulée « Talky bridge » s'ouvre. Elle vérifie que Node.js 18 ou plus est installé, puis lance le pont. Au premier lancement, le pont crée bridge\config.json à partir de bridge\config.example.json : il tire au sort un jeton de 48 caractères, règle la langue des exemples sur celle de Windows (fr si le format régional est le français, en sinon) et copie le jeton dans le presse-papiers sans l'afficher. Vous le collerez dans le widget à la fin de cette partie. La fenêtre affiche ensuite ces lignes, chacune précédée de l'heure :

text
created ~\Documents\Talky\bridge\config.json with a random token (language: en)
the token is in your clipboard and in config.json, never shown here: paste it into "Bridge token" in the LibertyTalk widget
created ~\Zomboid\Lua\talky_config.json from config.json
config loaded: 10 webhook(s), 14 workflow(s)
Talky bridge 0.4.0 listening on http://127.0.0.1:7420
game folder: ~\Zomboid\Lua
http steps allowed to: *.liberty-talk.com
  webhook  POST /hooks/follow
  webhook  POST /hooks/sub
  webhook  POST /hooks/gift
  webhook  POST /hooks/bits
  webhook  POST /hooks/raid
  webhook  POST /hooks/donation
  webhook  POST /hooks/superchat
  webhook  POST /hooks/member
  webhook  POST /hooks/command
  webhook  POST /hooks/points
Premier lancement sur un Windows en anglais, Talky décompressé dans Documents\Talky. Avec un format régional français, la première ligne se termine par (language: fr) et la troisième par (fr: 19 text(s) translated). Ces trois lignes n'apparaissent qu'au premier lancement : ensuite, le pont garde config.json tel quel. Le numéro de version et les nombres suivent votre installation.

Astuce

Le jeton est un mot de passe

Le jeton de bridge\config.json protège l'adresse de votre pont : quiconque le connaît peut faire apparaître des zombies dans votre partie. Le pont ne l'affiche jamais et ne le copie dans le presse-papiers qu'au premier lancement. N'ouvrez pas config.json pendant un live. Si la copie a échoué, la deuxième ligne commence par the token is in config.json ("token"). Dans ce cas, ou si vous avez copié autre chose depuis, ouvrez config.json hors live et copiez la valeur de token, sans les guillemets. Si le jeton a pu fuiter, lancez node bridge\bridge.js new-token dans le dossier de Talky : le pont écrit un nouveau jeton dans config.json et le copie dans le presse-papiers. Relancez le pont et collez-le dans « Jeton du pont » du widget.

Astuce

La langue des exemples

Les workflows d'exemple (textes des bandeaux, mots des récompenses) sont écrits une seule fois, au premier lancement du pont, dans la langue de settings.language de bridge\config.json, ou dans celle choisie dans le menu F8 si vous l'avez réglée avant ce premier lancement. Le pont y met fr quand le format régional de Windows est le français, en sinon. Changer ensuite « Langue des textes du bridge » dans le menu F8 ne traduit pas les exemples déjà écrits : pour les obtenir dans l'autre langue, arrêtez le pont, mettez settings.language à fr ou en dans bridge\config.json, supprimez %USERPROFILE%\Zomboid\Lua\talky_config.json, puis relancez le pont, en perdant les modifications faites dans le menu F8.

À chaque démarrage, le pont peut aussi afficher des lignes qui commencent par warning:. Il démarre quand même, mais chacune signale un réglage à corriger : cloudflared absent du PATH, Talky installé deux fois (une copie dans Zomboid\mods en plus du Workshop), ou dossier du pont rangé dans Zomboid\mods. Le dépannage à la fin de cette partie donne la solution de chacune.

Laissez cette fenêtre ouverte pendant toute la session : si vous la fermez, plus rien n'arrive dans le jeu. Si le pont s'arrête sur une erreur, la fenêtre affiche le message, puis The bridge has stopped., et attend que vous appuyiez sur une touche. Dans ses messages, erreurs sur config.json comprises, le pont écrit ~ à la place de votre dossier utilisateur, ce qui garde votre nom d'utilisateur Windows hors de l'écran si la fenêtre passe en live.

Fenêtre « Talky bridge » : configuration chargée, pont 0.5.0 à l'écoute sur http://127.0.0.1:7420 et liste des dix webhooks.
Le pont démarré : configuration chargée, dix webhooks listés. Au premier lancement, les lignes de création de config.json s'affichent avant.

Activer le mod et ouvrir le menu

  1. Étape 1

    Activez le mod

    Dans le menu principal de Project Zomboid, ouvrez Mods et cochez Talky - LibertyTalk Live Events.

  2. Étape 2

    Lancez une partie

    Nouvelle partie solo ou sauvegarde.

  3. Étape 3

    Ouvrez le menu Talky avec F8

    La touche se change dans Options > Raccourcis > Talky, ligne « Ouvrir la fenêtre Talky ».

  4. Étape 4

    Vérifiez la page Statut

    En bas à gauche, la pastille doit afficher « Bridge connecté » en vert, et le haut de la page « Bridge connecté sur le port 7420 - 0 job(s) en attente », suivi de la version du pont, puis la ligne « Solo : les jobs s'exécutent dans cette partie. ». Une pastille rouge « Bridge hors ligne » s'accompagne du message « Bridge hors ligne : lancez start-bridge.cmd (ou node bridge/bridge.js) sur ce PC. ». Dans ce cas, voyez le dépannage à la fin de cette partie.

La fenêtre compte cinq pages, listées à gauche sous « TALKY ». Statut montre la connexion, l'adresse publique et les derniers événements reçus. Webhooks liste les adresses /hooks/<id> que LibertyTalk appelle. Workflows contient ce que le jeu fait pour chaque événement. Événements du jeu relie la mort d'un zombie nommé ou celle du joueur à un workflow. Réglages fixe les plafonds, par exemple « Zombies max par action » à 60. Le bouton Enregistrer, en bas à droite, devient Enregistrer * tant qu'une modification n'est pas enregistrée.

Menu F8, page Statut : « Bridge connecté sur le port 7420 - 0 job(s) en attente (v0.5.0) », adresse du tunnel masquée, webhooks avec le jeton masqué.
La page Statut du menu F8, pont connecté. Ce menu n'affiche jamais le jeton.

Tester sans LibertyTalk

Avant de brancher Twitch, vérifiez que le pont et le mod se parlent. Dans le menu F8, page Workflows, sélectionnez new_follower dans la liste de gauche, tapez Bob dans le champ « Tester avec le pseudo » puis cliquez sur Tester maintenant. Le jeu confirme l'envoi du test par une notification, et la fenêtre du pont écrit une ligne comme [test] new_follower -> 3 game step(s) (job #1) user=Bob, dont le numéro de job augmente à chaque envoi.

Vous pouvez aussi lancer le test depuis un second terminal ouvert dans le dossier de Talky, pendant que le pont tourne :

cmd
node bridge\bridge.js fire new_follower user=Bob
Le terminal répond 200 {"ok":true,"results":[{"workflow":"new_follower","job":2,"steps":3}]} et la fenêtre du pont écrit une ligne [fire] new_follower -> 3 game step(s).

Dans le jeu, le bandeau « Bob rejoint la horde ! » s'affiche (« Bob joins the horde! » avec les exemples en anglais), puis un zombie nommé « Bob » apparaît entre 8 et 14 cases de votre personnage. Si rien ne s'affiche, vérifiez que la partie n'est pas en pause : le mod n'exécute rien en pause, au menu principal ou quand votre personnage est mort. Tester maintenant envoie aussi bits à 500, viewers à 10 et tier à 1000 : sur le workflow bits, il fait apparaître 5 zombies.

Menu F8, page Workflows : new_follower sélectionné, ses trois étapes et le champ « Tester avec le pseudo » rempli avec Bob.
Le workflow new_follower : un bandeau, deux secondes d'attente, puis un zombie nommé.
En jeu : le bandeau « Bob 2 rejoint la horde ! » en haut de l'écran et deux zombies nommés Bob et Bob 2 en violet.
Après le test : le bandeau, puis le zombie qui porte le pseudo.

Ouvrir le tunnel

LibertyTalk refuse d'appeler une adresse locale comme 127.0.0.1, pour empêcher les requêtes vers des réseaux privés. Le tunnel cloudflared donne au pont une adresse publique en https. Dans un nouveau terminal, lancez :

powershell
cloudflared tunnel --url http://127.0.0.1:7420
Le terminal affiche un cadre avec une adresse en https://...trycloudflare.com. Copiez-la et laissez la fenêtre ouverte.

Attention

Une nouvelle adresse à chaque lancement

Ce tunnel rapide, sans compte Cloudflare, change d'adresse chaque fois que vous relancez cloudflared. À chaque session, recopiez la nouvelle adresse dans le widget (étape suivante). Pour garder la même adresse d'un live à l'autre, il faut un tunnel nommé sur votre propre domaine, avec un compte Cloudflare (documentation Cloudflare).

Terminal PowerShell : cloudflared annonce l'adresse du tunnel en https://…trycloudflare.com, partie aléatoire masquée.
L'adresse du tunnel est dans le cadre. Elle change à chaque lancement de cloudflared.

Facultatif : collez aussi cette adresse dans F8, page Statut, champ « URL publique (tunnel Cloudflare) », puis cliquez sur Enregistrer. La liste des webhooks affiche alors leurs adresses publiques, jeton masqué. Copier la commande copie node bridge\bridge.js url <webhook> pour le webhook sélectionné : lancée dans un terminal ouvert dans le dossier de Talky, cette commande met l'URL complète, jeton compris, dans le presse-papiers et l'affiche masquée. Le jeu ne voit jamais le jeton. Le widget n'en a pas besoin : cette commande sert quand vous construisez vous-même un workflow LibertyTalk.

Installer le widget officiel

Le widget officiel « Project Zomboid · Talky » contient déjà les dix chaînes LibertyTalk qui appellent le pont : follow, abonnement, abonnements offerts, bits, raid, points de chaîne, commande de chat, don Streamlabs, Super Chat et nouveau membre YouTube. Vous remplissez l'adresse du tunnel et le jeton, puis vous l'activez.

Project Zomboid · Talky

Widget gratuit publié par LibertyTalk. Dix déclencheurs Twitch et YouTube reliés au pont, chacun avec sa case à cocher.

Installer le widget
  1. Étape 1

    Installez-le dans votre communauté

    Sélectionnez votre communauté dans la barre latérale. Sur la fiche du widget dans la Marketplace, cliquez sur Installer. Le même bouton se trouve sur sa carte dans la Bibliothèque officielle de Widgets. LibertyTalk ajoute le widget à la communauté sélectionnée, désactivé, puis ouvre sa page.

  2. Étape 2

    Gardez la portée Global

    Sur la page du widget, gardez la portée Global, sélectionnée par défaut : le widget écoutera tous les comptes Twitch et YouTube de la communauté. Pour revenir plus tard sur cette page, ouvrez Widgets et cliquez sur la carte Project Zomboid · Talky, sous « Widgets de workflow ».

  3. Étape 3

    Remplissez sa configuration

    Dans l'onglet Configuration du widget, ouvrez la section « Connexion au pont Talky » et remplissez « Adresse publique du pont Talky » et « Jeton du pont ». Le tableau ci-dessous détaille chaque champ. Cliquez sur Enregistrer : le message « Configuration du widget enregistrée. » confirme.

  4. Étape 4

    Activez-le

    Dans le bloc Activation, cliquez sur Activer : la ligne « Inactif sur Global. » devient « Actif sur Global. » et le bloc Écoute liste les comptes écoutés. La page refuse d'activer tant qu'une modification de la configuration n'est pas enregistrée. Si seule votre chaîne Twitch est connectée, les déclencheurs YouTube restent muets ; ils se branchent quand vous connectez YouTube à la communauté.

Fiche du widget « Project Zomboid · Talky » dans la Marketplace du dashboard : badges Officiel et Gratuit, bouton Installer.
La fiche du widget. Installer l'ajoute, désactivé, à la communauté sélectionnée.
ChampCe qu'il faut y mettre
Adresse publique du pont Talky (talky_bridge_url)Obligatoire. L'adresse https donnée par cloudflared, par exemple https://votre-tunnel.trycloudflare.com, sans / final.
Jeton du pont (talky_token)Obligatoire. La valeur de token dans bridge\config.json, sans les guillemets : celle que le pont a copiée dans votre presse-papiers à son premier lancement. LibertyTalk la traite comme un secret : elle n'est pas réaffichée après l'enregistrement et elle est masquée dans les traces d'exécution. Pour la changer, saisissez la nouvelle valeur.
Commande de chat (sans « ! ») (talky_command)La commande, en minuscules et sans le !. Par défaut zombie : un viewer tape !zombie dans le chat Twitch. Le champ n'apparaît que si « Envoyer la commande de chat » est cochée.
Envoyer les follows à Envoyer les nouveaux membres YouTube (talky_on_follow à talky_on_member)Section « Événements envoyés au jeu » : dix cases, toutes cochées par défaut. Décochez un événement pour qu'il n'atteigne plus le jeu, par exemple « Envoyer les raids » si vous ne voulez pas de horde pendant un raid.
Configuration du widget, section « Connexion au pont Talky » : adresse du tunnel (partie aléatoire floutée), jeton enregistré masqué, commande zombie.
La configuration remplie. Une fois enregistré, le jeton n'est plus affiché.
Page du widget : bloc Activation avec « Actif sur Global. » et le bouton Désactiver, bloc Écoute avec les comptes Twitch et YouTube.
Le widget activé, à l'écoute des comptes Twitch et YouTube de la communauté.

Astuce

À chaque session

Relancez start-bridge.cmd et cloudflared, collez la nouvelle adresse du tunnel dans « Adresse publique du pont Talky », onglet Configuration du widget, et cliquez sur Enregistrer. Le changement s'applique tout de suite, sans désactiver le widget.

Vérifier de bout en bout

Demandez à quelqu'un de suivre votre chaîne, ou suivez-la avec un second compte. Quelques secondes plus tard, la fenêtre du pont écrit une ligne [hook:follow] new_follower -> 3 game step(s), le zombie apparaît, et dans F8, page Statut, la liste « Derniers événements reçus par le bridge » affiche hook:follow -> new_follower (Pseudo) précédé de l'heure. Côté LibertyTalk, ouvrez l'onglet Exécutions de la page du widget et cliquez sur « Charger le dernier run » pour voir le même passage.

En jeu : le bandeau « TechLiberty rejoint la horde ! » après un vrai follow Twitch.
Un vrai follow : le bandeau porte le pseudo du nouveau follower.
Menu F8, page Statut, « Derniers événements reçus par le bridge » : ligne « hook:follow -> new_follower (TechLiberty) ».
Le pont a reçu l'appel de LibertyTalk (hook:follow) et lancé new_follower.
Onglet Exécutions du widget : run channelFollow terminé, appel webhook en arrière-plan avec la réponse 200 du pont (job 1017).
Le même follow côté LibertyTalk : webhook_response_status à 200 et webhook_response_ok à true. Adresse du tunnel floutée, jeton masqué.

Dépannage

F8 affiche « Bridge hors ligne ».
Le pont écrit un battement toutes les 2 secondes ; après 6 secondes sans battement, le menu le considère hors ligne. Vérifiez que la fenêtre « Talky bridge » est ouverte et sans erreur. Si vous lancez Project Zomboid avec l'option -cachedir, le jeu lit un autre dossier : indiquez ce dossier Lua dans zomboidLuaDir de bridge\config.json, puis relancez le pont.
La fenêtre du pont affiche une ligne warning:.
Le pont démarre quand même ; corrigez ce que la ligne signale. warning: cloudflared is not in the PATH : installez cloudflared avec winget install --id Cloudflare.cloudflared, puis fermez la fenêtre et relancez start-bridge.cmd ; si vous lancez cloudflared depuis son propre dossier, ignorez cette ligne. warning: Talky is installed twice : le mod est à la fois dans %USERPROFILE%\Zomboid\mods\Talky et dans le Workshop ; supprimez le dossier de Zomboid\mods, la version du Workshop suffit. warning: The bridge folder ... is inside ...\Zomboid\mods : sortez tout le dossier de Talky de Zomboid\mods, bridge\config.json compris, par exemple vers Documents\Talky, puis relancez start-bridge.cmd depuis ce nouvel emplacement. Le jeton ne change pas.
La fenêtre du pont affiche Cannot create ...\bridge\config.json.
Au premier lancement, le pont n'a pas pu écrire config.json dans le dossier de Talky, par exemple parce que vous l'avez décompressé sous C:\Program Files. Déplacez le dossier dans Documents\Talky et relancez start-bridge.cmd.
La fenêtre du pont affiche Set a long random "token".
Le jeton de bridge\config.json est vide ou commence encore par change-me, ce qui arrive quand config.example.json a été copié à la main. Remplacez-le par une longue chaîne aléatoire, ou supprimez config.json et relancez start-bridge.cmd : le pont en crée un nouveau, avec un nouveau jeton à coller dans « Jeton du pont » du widget.
node bridge\bridge.js fire affiche No config at ....
bridge\config.json n'existe pas encore : la commande fire ne le crée pas. Lancez d'abord le pont une fois avec start-bridge.cmd, puis relancez la commande pendant qu'il tourne.
La fenêtre affiche Node.js was not found on this PC. ou Node.js ... is too old.
Node.js manque, ou sa version est antérieure à la 18. Lancez winget install OpenJS.NodeJS.LTS (ou winget upgrade OpenJS.NodeJS.LTS pour une mise à jour), fermez la fenêtre, puis relancez start-bridge.cmd. Une fenêtre ouverte avant l'installation ne voit pas encore Node.js.
Le pont affiche Port 7420 is already used.
Un autre programme utilise déjà le port 7420, souvent une seconde fenêtre du pont restée ouverte. Fermez-la, ou changez port dans bridge\config.json, par exemple 7421, et utilisez le même port pour le tunnel : cloudflared tunnel --url http://127.0.0.1:7421.
Un follow arrive sur Twitch mais rien ne bouge dans F8.
Ouvrez l'onglet Exécutions de la page du widget, cliquez sur « Charger le dernier run » et lisez webhook_response_status dans la sortie de l'étape d'appel. 401 : le jeton ne correspond pas. Le pont vérifie le jeton avant tout le reste et répond 401 même pour un webhook qui n'existe pas : recopiez token de config.json dans « Jeton du pont ». Le widget envoie ce jeton global : si ce webhook figure dans hookTokens de bridge\config.json, il le refuse, retirez-le de hookTokens et relancez le pont (F8, page Webhooks, rubrique « Jeton dédié » : « Oui » ou « Non »). 404 : le jeton est bon, mais le webhook a été renommé ou supprimé dans F8 ; le widget appelle follow, sub, gift, bits, raid, points, command, donation, superchat et member. Code 0 ou 5xx : le tunnel est fermé ou son adresse a changé. Un run qui s'arrête au nœud « Si (classique) » : la case de l'événement est décochée. Aucun run : le widget n'est pas activé, ou le bloc Écoute ne liste pas ce compte.
L'étape d'appel webhook passe en « Échec ».
Deux causes : « Adresse publique du pont Talky » est vide, et l'erreur indique Webhook URL is empty, ou elle contient une adresse locale comme http://127.0.0.1:7420, que LibertyTalk refuse. Collez l'adresse https://...trycloudflare.com du tunnel et cliquez sur Enregistrer.
Un abonnement offert ne lance pas new_sub.
C'est voulu. Quand un viewer offre 5 abonnements, Twitch envoie un événement de cadeau, puis un abonnement par bénéficiaire. Le widget ne relaie que le cadeau, sur le webhook gift avec total à 5 : le pont lance gift_subs une seule fois au lieu de six workflows.
Le pont affiche job #N mais rien ne se passe dans le jeu.
Le mod n'avance pas quand la partie est en pause, quand votre personnage est mort ou au menu principal. Un job qui attend plus de 15 minutes (jobTtlSeconds dans config.json) est abandonné, pour que vous ne receviez pas d'un coup les événements d'un live joué jeu fermé. Enfin, 8 workflows au plus tournent en même temps (page Réglages, « Workflows simultanés max ») et 200 jobs au plus attendent leur tour : les suivants restent dans le pont, et le jeu les reprend quelques secondes plus tard.
F8 affiche « ignoré : cooldown » ou une autre raison.
Le workflow du pont a refusé l'événement. « cooldown » : le délai du workflow court encore, par exemple 600 secondes pour points_helicopter. « condition non remplie » : la condition réglée avec « Modifier la condition » est fausse. « tirage de chance perdu » : le champ « Chance (0 à 1) » a dit non. « workflow désactivé » : la case « Activé » est décochée. « aucune route ne correspond » : aucune route du webhook points ne reconnaît le titre de la récompense (voir la partie 2).
Le zombie de !zombie s'appelle « Anonyme ».
C'est attendu : le widget n'envoie pas le pseudo de l'auteur d'une commande de chat (voir la partie 2). Le zombie prend le nom des événements anonymes : « Anonyme » avec un pont en français, « Anonymous » en anglais, ou le texte du champ « Pseudo des événements anonymes (vide = Anonyme) » de la page Réglages.
Plus rien n'arrive après avoir relancé le tunnel.
Le tunnel rapide a changé d'adresse. Copiez la nouvelle dans « Adresse publique du pont Talky » et cliquez sur Enregistrer.
Le mod n'apparaît pas dans la liste des mods.
Vérifiez que vous lancez la Build 42 du jeu. Sans le Workshop, le jeu cherche %USERPROFILE%\Zomboid\mods\Talky\42\mod.info : copiez le dossier Talky du zip, pas le dossier qui le contient. Vérifiez aussi qu'il n'existe pas deux copies du mod, celle du Workshop et %USERPROFILE%\Zomboid\mods\Talky, et gardez-en une seule.
Les bits ne déclenchent rien.
Le déclencheur « Bits reçus (cheer) » demande à Twitch l'autorisation bits:read. Si votre chaîne Twitch a été connectée avant l'ajout de cette autorisation, reconnectez Twitch à la communauté.
Les Super Chats et les nouveaux membres YouTube n'arrivent pas.
LibertyTalk les lit dans le chat de vos lives YouTube : ils n'arrivent que pendant un live, avec la chaîne YouTube connectée à la communauté.
Les dons n'arrivent pas.
Le déclencheur « Don reçu (Streamlabs) » ne reçoit des dons que si Streamlabs est connecté à la communauté LibertyTalk.
Le pont refuse une étape http d'un workflow.
La fenêtre du pont affiche alors http step refused: host "..." is not in httpAllowedHosts (bridge/config.json) et la page Statut montre la même raison après « erreur : ». Le pont n'appelle que les hôtes listés dans httpAllowedHosts de bridge\config.json, par défaut ceux de LibertyTalk (*.liberty-talk.com), comme le rappelle la ligne http steps allowed to au démarrage. Ajoutez-y l'hôte voulu puis relancez le pont. Cette liste se trouve dans config.json et non dans talky_config.json, que d'autres mods du jeu pourraient réécrire.
F8 affiche « Bridge antérieur à 0.4.0 ».
Le mod a été mis à jour, par exemple par le Workshop, mais pas le pont : les événements du jeu et Tester maintenant n'arrivent plus au pont. Fermez la fenêtre du pont, téléchargez le zip de la même version dans les releases GitHub et extrayez-le dans le même dossier que l'ancien, par exemple Documents\Talky, en remplaçant les fichiers. Le zip ne contient pas bridge\config.json : le jeton et la configuration du pont restent les mêmes. Relancez ensuite start-bridge.cmd.
F8 affiche « Solo : le code Talky de la partie n'a pas démarré ».
Le code de Talky qui exécute les jobs n'a pas répondu pendant 2 minutes : il ne s'est pas chargé. Cherchez dans %USERPROFILE%\Zomboid\console.txt une erreur Lua qui mentionne Talky. Une fois le problème réglé, relancez la partie : Talky ne refait cette vérification qu'au chargement d'une partie.
Où trouver les journaux ?
Côté pont, dans sa fenêtre. Côté mod, dans %USERPROFILE%\Zomboid\console.txt, lignes préfixées par [Talky]. L'adresse http://127.0.0.1:7420/health?token=<votre jeton>, ouverte dans un navigateur du même PC, renvoie la version, le nombre de jobs en attente et les 50 derniers événements. Ne l'affichez pas en live : elle contient votre jeton.
Partie 2

Comprendre les workflows avec Talky

Ce que fait le widget, où placer la logique, trois exemples commentés, puis le retour du jeu vers LibertyTalk.

Deux moteurs, un même modèle

Un workflow LibertyTalk part d'un déclencheur, un événement comme « Nouveau follower », puis exécute ses nœuds dans l'ordre en leur passant les données de l'événement. Le pont Talky a son propre moteur, plus petit : chaque webhook /hooks/<id> lance un workflow du pont, une liste d'étapes que le mod exécute dans la partie.

  1. Déclencheur

    Nouveau follower

    Déclencheur Twitch, il fournit {user_name}.

  2. Condition

    Si (classique)

    La case « Envoyer les follows » (talky_on_follow) est-elle cochée ?

  3. Action

    Appel webhook / API (arrière-plan)

    POST vers {talky_bridge_url}/hooks/follow.

  4. Hors LibertyTalk

    Pont : webhook follow

    Lance le workflow new_follower du pont.

  5. Hors LibertyTalk

    Mod : trois étapes

    notify, wait, spawn_zombie.

Les trois premières cases vivent dans LibertyTalk, les deux dernières sur votre PC.

Retenez cette frontière : LibertyTalk décide quels événements partent vers le jeu et avec quelles données, le pont décide de ce qui se passe dans la partie.

Ce que fait le widget officiel

Le widget contient dix chaînes construites sur le même patron : un déclencheur, un nœud « Si (classique) » qui teste la case de l'événement, puis un « Appel webhook / API (arrière-plan) ». Chaque appel envoie un POST à {talky_bridge_url}/hooks/<id> avec l'en-tête {"X-Bridge-Token":"{talky_token}"}. L'appel part en arrière-plan pour qu'un tunnel lent ne retarde pas les autres événements de votre communauté. La chaîne des abonnements teste aussi is_gift : elle ne relaie que les abonnements qui ne sont pas offerts, la chaîne des cadeaux s'occupe des autres.

DéclencheurWebhook du pontDonnées envoyéesWorkflow du pont
Nouveau follower (Twitch)followuser_namenew_follower
Nouveau subscriber (Twitch), hors abonnements offertssubuser_name, tier, is_giftnew_sub
Nouveau cadeau subscriber (Twitch)giftuser_name, total, tiergift_subs
Bits reçus (cheer)bitsuser_name, bitsbits
Raid reçuraiduser_name, viewersraid
Récompense (points de chaîne)pointsuser_name, reward_titleroutes selon reward_title
Commande reçue, filtrée sur {talky_command}commandcommandchat_zombie
Don reçu (Streamlabs)donationdonor, amount, formatted_amountdonation
Super Chat (YouTube)superchatauthor_display_name, formatted_amountdonation
Nouveau membre (YouTube)memberauthor_display_namenew_sub

Les workflows du pont de la dernière colonne sont ceux livrés avec Talky. Vous les modifiez dans F8, page Workflows, sans toucher au widget. Par exemple, Super Chats et dons partagent donation, qui tire au sort un fusil à pompe avec ses cartouches, un soin avec des conserves, ou un pick-up.

À savoir

Pourquoi la commande arrive sans pseudo ni texte

Le contrat développeur de Twitch interdit de redistribuer les messages du chat hors de Twitch. LibertyTalk applique cette règle aux widgets de la marketplace : un widget ne peut envoyer à un service externe ni le pseudo de l'auteur d'un message de chat, ni le texte de ce message (règles des plateformes). Une commande !zombie est un message de chat : le webhook command reçoit donc seulement {"command":"zombie"}. Conséquence : !zombie et !zombie Bob font la même chose, et le zombie porte le nom des événements anonymes du pont, « Anonyme » en français, ou la valeur de « Pseudo des événements anonymes » dans F8, page Réglages. Le widget n'envoie pas non plus le texte qu'un viewer saisit avec une récompense de points : les routes du pont travaillent sur le titre de la récompense.

Pour qu'un viewer obtienne un zombie à son nom, passez par un événement qui fournit un pseudo hors du chat : un follow, des bits, ou une récompense de points de chaîne dont le titre contient « zombie ». Cette dernière lance points_zombie, qui nomme le zombie d'après le viewer qui a échangé la récompense.

Les variables

Dans LibertyTalk, une variable s'écrit entre accolades simples. Chaque déclencheur annonce les siennes : « Bits reçus (cheer) » fournit {bits}, {user_name} et {is_anonymous}, et « Récompense (points de chaîne) » fournit {reward_title} et {reward_cost}. Le sélecteur de variables de l'éditeur les propose dans les nœuds qui suivent.

Les variables du widget, {talky_bridge_url}, {talky_token} et {talky_command}, sont remplies à l'installation et relues à chaque exécution. Elles portent le préfixe talky_ parce que les données de l'événement passent en priorité : une variable de widget nommée user_name serait masquée par celle du déclencheur. {talky_token} est déclarée secrète : sa valeur est masquée dans les traces d'exécution.

Une variable mal orthographiée reste telle quelle : avec {user_nmae}, le pont reçoit ce texte et votre zombie s'appelle « {user_nmae} ». Une variable prévue par le déclencheur mais absente de l'événement devient vide, comme {user_name} pour un cheer anonyme ; le pont utilise alors son nom par défaut.

Le pont a ses propres modèles, entre accolades doubles, avec des filtres : {{bits | div:100 | floor}} donne 4 pour 450 bits. {{user}} prend le premier champ rempli parmi user_name, author_display_name, donor et quelques autres, ce qui permet au même workflow new_sub de servir aux abonnés Twitch et aux membres YouTube. Quand aucun de ces champs n'est rempli, {{user}} vaut le nom des événements anonymes.

Astuce

Écrire un corps JSON

Placez chaque variable entre guillemets dans un JSON valide, comme {"bits":"{bits}"}. LibertyTalk échappe alors les valeurs : un guillemet dans le titre d'une récompense, comme Appel "urgent", ne casse plus le corps. Les valeurs partent en texte ; le pont convertit bits, viewers, total, amount et tier en nombres avant de tester ses conditions.

Attention

Gardez les modèles du pont dans le pont

N'écrivez pas {{user_name}} dans un champ LibertyTalk : LibertyTalk remplace la partie {user_name} et le pont reçoit {Bob}. Les modèles à accolades doubles se règlent dans F8, page Workflows.

Décider dans LibertyTalk ou dans le pont

Les deux moteurs ne savent pas faire les mêmes choses. LibertyTalk n'a pas de nœud de boucle ni de calcul : un nœud ne peut pas se répéter « une fois par tranche de 100 bits ». Le pont, lui, ne voit que ce que LibertyTalk lui envoie. Ce tableau indique où placer chaque besoin.

BesoinDans LibertyTalkDans le pont Talky
Choisir les événements qui partent vers le jeuCases du widget (« Si (classique) ») et filtres du déclencheur, comme filter_commandCase « Activé » d'un workflow
Aiguiller selon un texte, comme le titre d'une récompense« Aiguillage (switch) » avec « ~ correspond au regex »routes avec contains ou matches
Calculer un nombre, comme bits ÷ 100Impossible : aucun nœud de calculFiltres div, floor, clamp
Répéter une action N foisImpossible : un workflow ne boucle pasÉtape repeat avec un plafond max
Tirer au sortSeulement en détournant {@uuid}, déconseillérandom avec weights, ou chance
Limiter la fréquence (cooldown)« Détecter du spam (répétition / flood) » détourné, fenêtre d'une heure au pluscooldownSeconds et userCooldownSeconds
Mettre un texte en formeNon, la valeur part telle quelleFiltres upper, lower, truncate, default
Réagir dans le chat à un événement du jeu« Webhook entrant » puis « Envoyer un message »Étape http vers ce webhook entrant

En pratique, laissez LibertyTalk router et filtrer, et donnez au pont les nombres bruts. Le widget suit cette règle : il envoie {bits} tel quel et le pont calcule la taille de la horde.

Exemple 1 · Un follow, un zombie nommé

Quand Bob suit la chaîne, le widget envoie {"user_name":"Bob"} à /hooks/follow. Le pont lance new_follower, qui contient trois étapes :

  1. notify : un bandeau avec le pseudo, en violet #b388ff.
  2. wait : 2 secondes de pause dans le jeu.
  3. spawn_zombie : un zombie nommé {{user}}, entre 8 et 14 cases du personnage, avec son nom affiché de la même couleur.

Pour changer ce zombie, ouvrez F8, page Workflows, new_follower, et double-cliquez sur l'étape du zombie dans la liste des étapes. Cochez « Rampant » pour qu'il rampe, ou passez « Nombre » à 3 : trois zombies apparaissent, nommés « Bob #1 » à « Bob #3 », ou tous « Bob » avec « Même nom pour tous ». Cliquez sur Valider, puis sur Enregistrer : le pont recharge la configuration sans redémarrer.

Exemple 2 · Des bits, une horde à leur mesure

Le widget transmet {bits} sans le transformer, car LibertyTalk ne sait ni diviser un nombre ni répéter un nœud. C'est le workflow bits du pont qui fait le calcul :

talky_config.jsonjson
"bits": {
  "steps": [
    { "if": { "bits": { "gte": 1000 } },
      "then": [ { "action": "helicopter" } ],
      "else": [
        { "if": { "bits": { "gte": 100 } },
          "then": [
            { "repeat": "{{bits | div:100 | floor}}", "max": 20, "steps": [
              { "action": "spawn_zombie", "name": "{{user}}", "sameName": true, "distance": 18 },
              { "action": "wait", "seconds": 1 }
            ] }
          ],
          "else": [ { "action": "noise", "radius": 25 } ] }
      ] }
  ]
}
Extrait du workflow bits livré avec Talky, sans les étapes notify qui affichent les bandeaux.
  • 450 bits : 450 / 100 arrondi à l'entier inférieur donne 4 zombies au nom du viewer, un par seconde, à 18 cases au plus.
  • 1 000 bits ou plus : l'hélicoptère passe, sans zombie nommé.
  • Moins de 100 bits : un bruit attire les zombies dans un rayon de 25 cases.

Le plafond max: 20 protège la partie si vous retirez la branche de l'hélicoptère : 5 000 bits donneraient sinon 50 zombies. Pour tester sans dépenser de bits, Tester maintenant sur bits envoie 500 bits, soit 5 zombies.

En jeu : le bandeau « Bob envoie 5 zombie(s) ! » et un premier zombie qui arrive.
Test du workflow bits : les zombies arrivent un par seconde.

À savoir

Et avec un Aiguillage ?

Dans LibertyTalk, un « Aiguillage (switch) » sur bits peut envoyer des paliers fixes vers des webhooks différents, par exemple 100, 500 et 1 000 bits. Il ne peut pas produire un zombie par tranche de 100 bits : ce calcul reste dans le pont.

Exemple 3 · Une récompense de points, un événement au choix

Le widget envoie toutes les récompenses de points de chaîne au même webhook, points, avec user_name et reward_title. Le pont choisit le workflow avec des routes : la première dont la condition est vraie gagne. Les routes livrées avec Talky cherchent un mot dans le titre, en français si le pont a été lancé la première fois avec settings.language à fr :

  • « hélico » lance points_helicopter : l'hélicoptère passe, une fois toutes les 10 minutes au plus.
  • « soin » lance points_heal : soin complet et texte flottant au nom du viewer.
  • « tempête » lance points_storm : 3 heures de tempête dans le jeu.
  • « zombie » lance points_zombie : un zombie dont le nom, en bleu clair, est le pseudo du viewer qui a échangé la récompense.

La comparaison contains du pont ignore les majuscules : « Appeler l'Hélico » correspond, mais « Appeler l'helico » sans accent ne correspond pas, et un pont resté en anglais cherche helicopter, heal et storm. Des routes en matches acceptent plusieurs graphies et les deux langues. Une récompense qui ne correspond à aucune route ne lance rien : la page Statut l'affiche avec « ignoré : aucune route ne correspond ».

json
[
  { "when": { "reward_title": { "matches": "h[ée]lico" } },        "workflow": "points_helicopter" },
  { "when": { "reward_title": { "matches": "soin|heal" } },        "workflow": "points_heal" },
  { "when": { "reward_title": { "matches": "temp[êe]te|storm" } }, "workflow": "points_storm" },
  { "when": { "reward_title": { "contains": "zombie" } },          "workflow": "points_zombie" }
]
Des routes qui reconnaissent les titres en français et en anglais, à coller dans F8, page Webhooks, points, bouton « Modifier les routes (JSON) ». h[ée]lico reconnaît « hélico », « helico » et « helicopter ».

La même logique dans LibertyTalk

Vous préférez voir l'aiguillage dans l'éditeur de workflows ? Décochez « Envoyer les récompenses de points de chaîne » dans le widget pour éviter les doublons, puis construisez votre propre workflow :

  1. Étape 1

    Le déclencheur

    « Récompense (points de chaîne) » sur votre compte Twitch.

  2. Étape 2

    Un Aiguillage exclusif

    « Aiguillage (switch) » en mode « Exclusif (1er cas vrai) », un cas par récompense, par exemple reward_title « ~ correspond au regex » /h[ée]lico/iu.

  3. Étape 3

    Une variable par cas

    Dans chaque branche, « Définir une variable » nommée talky_hook, avec la valeur helico, soin ou tempete.

  4. Étape 4

    Un seul appel

    Reliez toutes les branches au même « Appel webhook / API (arrière-plan) » : URL https://votre-tunnel.trycloudflare.com/hooks/{talky_hook}, méthode POST, en-têtes {"X-Bridge-Token":"votre jeton"}, corps {"user_name":"{user_name}","reward_title":"{reward_title}"}. Comme ce workflow n'est pas le widget, son adresse est à mettre à jour à chaque nouveau tunnel.

  5. Étape 5

    Les webhooks côté pont

    Dans F8, page Webhooks, créez helico, soin et tempete avec + Nouveau puis Renommer, et associez-les à points_helicopter, points_heal et points_storm.

Attention

Deux différences avec le pont

Dans LibertyTalk, contains respecte les majuscules : « Hélico » ne contient pas « hélico ». Et une expression régulière s'écrit entre délimiteurs avec ses options, /h[ée]lico/iu : sans les /, un motif qui commence par [ ou ^ est mal lu et la condition reste fausse.

Un seul appel final plutôt qu'un appel par branche : au-delà de 5 appels HTTP atteignables depuis un même déclencheur, l'éditeur affiche un avertissement à l'enregistrement.

Limiter la fréquence

Chaque workflow du pont a deux délais, réglables dans F8, page Workflows : « Cooldown global (s) » bloque le workflow pour tout le monde, « Cooldown par viewer (s) » pour un même pseudo. Par défaut, points_helicopter attend 600 secondes entre deux hélicoptères, et chat_zombie 20 secondes entre deux zombies.

chat_zombie n'a pas de « Cooldown par viewer (s) » : la commande de chat arrive sans pseudo, tous les viewers portent donc le même nom par défaut, et un délai par viewer y agirait comme un délai global. Pour espacer les !zombie, augmentez son « Cooldown global (s) ».

À savoir

Délais en mémoire

Le pont garde ses délais en mémoire : relancer start-bridge.cmd les remet à zéro.

Côté LibertyTalk, aucun nœud n'est prévu pour ça, mais le nœud de modération « Détecter du spam (répétition / flood) » peut servir de délai : portée network_id, valeur à comparer constante (helico), fenêtre de 600 secondes, « Flood : messages max dans la fenêtre » à 2, puis « Si (classique) » sur is_flood faux. Le premier passage est accepté, les suivants sont bloqués jusqu'à la fin de la fenêtre, qui ne dépasse pas une heure.

Le retour du jeu vers LibertyTalk

Le mod renvoie trois événements au pont : zombie_killed avec name et byPlayer quand un zombie nommé meurt, player_died avec hoursSurvived et zombieKills, et game_started. F8, page Événements du jeu, relie chacun à un workflow du pont. Exemple : poster « Le zombie de Bob est tombé. » dans votre chat Twitch, avec le workflow désactivé report_to_libertytalk que Talky livre pour ça.

  1. Étape 1

    Créez le webhook entrant

    Dans LibertyTalk, créez un workflow avec le déclencheur « Webhook entrant » et enregistrez-le : le champ « URL & secret du webhook » affiche l'adresse, qui se termine par /webhooks/workflow/<jeton>, et le secret.

  2. Étape 2

    Récupérez le nom du zombie

    Dans « Variables depuis le payload », ajoutez la variable cible name avec la clé name.

  3. Étape 3

    Postez dans le chat

    Ajoutez l'action Twitch « Envoyer un message » avec le contenu Le zombie de {name} est tombé., puis activez le workflow.

  4. Étape 4

    Remplissez la cible du pont

    Hors live, ouvrez bridge\config.json dans un éditeur de texte. Dans httpTargets > lt_report, remplacez PASTE_THE_TOKEN_OF_YOUR_INCOMING_WEBHOOK par le jeton qui termine l'adresse du webhook entrant et PASTE_THE_SECRET_OF_YOUR_INCOMING_WEBHOOK par son secret, enregistrez, puis relancez le pont. Ce fichier reste hors de portée du jeu et de ses mods ; tant qu'une valeur PASTE_ reste, le pont refuse l'étape.

  5. Étape 5

    Activez le workflow du pont

    Dans F8, page Workflows, sélectionnez report_to_libertytalk, cochez « Activé », puis cliquez sur Enregistrer. Son étape http indique seulement "target": "lt_report" : l'adresse et le secret ne passent pas par talky_config.json. Si votre talky_config.json vient de Talky 0.3.0, cette étape porte encore url et headers : remplacez-les par "target": "lt_report" (bouton « Workflow en JSON »), sinon le pont envoie l'appel avec un avertissement.

  6. Étape 6

    Reliez l'événement du jeu

    Page Événements du jeu, choisissez report_to_libertytalk pour « Un zombie nommé meurt », puis cliquez sur Enregistrer.

bridge\config.jsonjson
"httpTargets": {
  "lt_report": {
    "url": "https://api.liberty-talk.com/webhooks/workflow/PASTE_THE_TOKEN_OF_YOUR_INCOMING_WEBHOOK",
    "headers": { "X-Webhook-Secret": "PASTE_THE_SECRET_OF_YOUR_INCOMING_WEBHOOK" }
  }
}
La cible lt_report telle que livrée avec Talky, avant de la remplir. Le pont lit ce fichier à son démarrage.
talky_config.jsonjson
"report_to_libertytalk": {
  "enabled": false,
  "steps": [
    { "action": "http", "target": "lt_report",
      "body": { "event": "{{event}}", "name": "{{name}}", "hoursSurvived": "{{hoursSurvived}}", "zombieKills": "{{zombieKills}}" } }
  ]
}
Le workflow report_to_libertytalk tel que livré avec Talky : son étape nomme la cible, l'adresse et le secret restent dans bridge\config.json. Le webhook entrant répond 202 quand il accepte l'appel.

L'hôte api.liberty-talk.com fait partie de httpAllowedHosts par défaut, l'étape passe donc sans réglage. Elle s'exécute en arrière-plan : elle ne retarde ni le jeu ni les autres événements. Relier « Un zombie nommé meurt » à report_to_libertytalk remplace on_zombie_killed, qui fait apparaître dans 30 % des cas deux « cousins » du zombie tué. Pour garder les deux, copiez plutôt l'étape http dans les étapes de on_zombie_killed.

Le corps envoie aussi event, hoursSurvived et zombieKills. Reliez « Le joueur meurt » au même workflow, déclarez aussi les variables event et hoursSurvived dans « Variables depuis le payload », et un « Aiguillage (switch) » avec un cas event égal à player_died peut poster un autre message à votre mort, par exemple Mort après {hoursSurvived} h de survie.

Attention

Pas d'aller-retour sans fin

Un workflow du pont lancé par un webhook ne doit pas rappeler le webhook entrant qui l'a déclenché : LibertyTalk et le pont se renverraient l'événement en boucle. LibertyTalk coupe un webhook entrant qui reçoit trop d'appels.

Tester et déboguer

Testez d'abord le pont seul, avec Tester maintenant ou node bridge\bridge.js fire. Pour tester le trajet de LibertyTalk vers le pont sans attendre un vrai follow, créez un workflow avec le déclencheur « Déclenchement manuel » et, dans « Variables simulées », user_name égal à Bob. Ajoutez un « Appel webhook / API » vers https://votre-tunnel.trycloudflare.com/hooks/follow, avec l'en-tête {"X-Bridge-Token":"votre jeton"} et le corps {"user_name":"{user_name}"}. Le bouton de déclenchement manuel fonctionne même si le workflow n'est pas activé.

La console d'exécution montre ce que chaque nœud a reçu et produit. Pour le widget, ouvrez son onglet Exécutions puis cliquez sur « Charger le dernier run ». Chaque étape affiche son entrée et sa sortie, et le bouton « Variables » montre toutes les variables disponibles à ce moment, secrets masqués, {talky_token} compris.

Attention

Une étape terminée n'est pas un appel réussi

Si le pont refuse l'appel ou ne répond pas, l'étape d'appel webhook s'affiche quand même « Terminé » : LibertyTalk a bien envoyé la requête. Lisez sa sortie : webhook_response_ok vaut false et webhook_response_status donne le code reçu. L'étape passe en « Échec » seulement quand l'adresse est vide (Webhook URL is empty) ou refusée par LibertyTalk, comme une adresse locale.

Code reçuCe que ça veut direQue faire
200Le pont a accepté l'appel.Regardez F8, page Statut : la ligne indique le workflow lancé ou la raison du refus, par exemple « ignoré : cooldown ».
401Jeton refusé. Le pont vérifie le jeton avant le webhook : sans le bon jeton, tout identifiant répond 401.Recopiez token de bridge\config.json dans « Jeton du pont ». Un webhook listé dans hookTokens de bridge\config.json refuse ce jeton : retirez-le de hookTokens et relancez le pont, ou appelez-le avec l'URL que donne node bridge\bridge.js url <webhook>.
404Le jeton est bon, mais le webhook n'existe pas dans le pont.Recréez dans F8, page Webhooks, l'identifiant appelé, par exemple follow.
413Corps de plus de 64 Ko.Retirez les longs champs de texte du corps.
0 ou 5xxLe tunnel ou le pont ne répond pas.Vérifiez que les fenêtres du pont et de cloudflared sont ouvertes, et que « Adresse publique du pont Talky » contient l'adresse du jour.

Limites à connaître

  • L'adresse du tunnel rapide change à chaque lancement de cloudflared : recopiez-la dans le widget à chaque session, ou passez à un tunnel nommé.
  • La commande de chat arrive sans pseudo ni texte, à cause de la règle de Twitch sur la redistribution des messages du chat : le zombie de !zombie porte le nom des événements anonymes.
  • Un événement attend 15 minutes au plus : si le jeu reste fermé ou en pause plus longtemps, il est abandonné.
  • Le pont plafonne chaque workflow : une étape wait dure 600 secondes au plus, les textes de notify, say et halo sont coupés à 200 caractères, un bandeau reste 60 secondes au plus, et un repeat ne dépasse jamais 100 tours, quel que soit son max.
  • Les Super Chats et les membres YouTube n'arrivent que pendant un live, et les dons que si Streamlabs est relié.
  • Talky 0.5.0 a été testé sur la Build 42.21. Une mise à jour du jeu peut changer les fonctions qu'il utilise : mettez à jour le mod et le pont ensemble.
Partie 3

Jouer à Talky sur un serveur

L'admin lance le pont à côté du serveur et ajoute les streamers depuis le jeu ; chaque streamer colle une adresse et un jeton dans son widget.

Sur un serveur, dédié ou hébergé depuis le menu principal du jeu, le pont ne tourne pas sur le PC des streamers : l'admin le lance sur la machine du serveur et ajoute les streamers depuis le jeu. Chaque streamer reçoit une adresse et un jeton, qu'il colle dans son widget LibertyTalk. Les effets de son live se produisent autour de son personnage, et tous les joueurs les voient.

  • L'admin du serveur installe le mod sur le serveur, lance le pont à côté, ouvre un port et ajoute les streamers.
  • Chaque streamer rejoint le serveur, installe le widget LibertyTalk et y colle l'adresse et le jeton reçus. Rien d'autre à installer sur son PC que le mod, que le serveur demande de toute façon.

Pour l'admin : préparer le serveur

  1. Étape 1

    Ajoutez Talky aux mods du serveur

    Serveur dédié : dans Zomboid/Server/<nom du serveur>.ini, mettez Mods=Talky et WorkshopItems=3830066321, l'id de Talky sur le Steam Workshop. Le serveur télécharge le mod au démarrage, et chaque joueur le reçoit en se connectant. Partie hébergée : Héberger > Modifier les réglages..., page Mods, puis page Workshop Steam.

  2. Étape 2

    Réglez les limites

    Les options de Talky sont sur la page Talky des options bac à sable : limites de zombies, d'objets et de météo, un interrupteur par catégorie, délais, distance des autres joueurs. Le feu et l'hélicoptère sont désactivés par défaut sur un serveur.

  1. Étape 1

    Installez Node.js 18 ou plus sur la machine du serveur

    Sous Windows : winget install OpenJS.NodeJS.LTS. Sous Linux : le paquet nodejs de la distribution s'il est en version 18 ou plus, sinon celui de nodejs.org.

  2. Étape 2

    Décompressez le zip de Talky

    Téléchargez Talky-0.5.0.zip dans les releases GitHub et décompressez-le dans un dossier du compte qui lance le serveur.

  3. Étape 3

    Lancez le pont en mode serveur

    Avec le compte qui lance le serveur : sh start-bridge.sh sous Linux, start-bridge.cmd server dans un terminal ouvert dans le dossier de Talky sous Windows. Partie hébergée : start-bridge.cmd server sur le PC de l'hôte. La fenêtre du pont affiche listening on http://0.0.0.0:7420 (server mode).

  4. Étape 4

    Démarrez le serveur

    Sa console affiche [Talky] server ready (Talky 0.5.0), puis [Talky] inbox ready à la première lecture des jobs.

Fenêtre du pont en mode serveur : talky_config.json créé dans le dossier Lua du serveur, écoute sur http://0.0.0.0:7421 (server mode), aucun streamer, adresse publique pas encore réglée.
Le pont lancé avec start-bridge.cmd server. Ici sur le port 7421, parce qu'un pont solo occupait déjà 7420 sur la même machine.
Console du serveur dédié : *** SERVER STARTED ***, puis [Talky] server ready (Talky 0.5.0).
La console du serveur : Talky est chargé côté serveur.

À savoir

Le pont doit utiliser le dossier Zomboid/Lua du serveur : lancez-le avec le compte qui lance le serveur. Pour un serveur lancé avec -cachedir=<dossier>, mettez <dossier>/Lua dans zomboidLuaDir de bridge/config.json. Sous Linux, le zip contient talky-bridge.service, un exemple d'unité systemd pour démarrer le pont avec la machine.

  1. Étape 1

    Ouvrez le port TCP 7420

    Dans le pare-feu de la machine (sous Linux, par exemple sudo ufw allow 7420/tcp ; sous Windows, une règle entrante TCP 7420) et dans celui de l'hébergeur s'il y en a un. Partie hébergée : redirigez aussi le port TCP 7420 de la box vers le PC de l'hôte.

  2. Étape 2

    Notez l'adresse publique du pont

    http://<IP publique du serveur>:7420. Une adresse privée (192.168.…, 10.…) ne marche pas : LibertyTalk doit joindre le pont depuis internet.

  1. Étape 1

    Passez admin

    La page Webhooks de F8 est réservée aux admins et aux modérateurs. Serveur dédié : tapez setaccesslevel "<nom d'utilisateur>" admin dans la console du serveur, ou connectez-vous avec le compte admin créé au premier démarrage. Partie hébergée : voir l'encadré plus bas.

  2. Étape 2

    Enregistrez l'adresse publique

    En jeu : F8 > Webhooks > onglet Streamers. Tapez l'adresse notée plus haut dans Adresse publique du bridge, puis Enregistrer. L'IP seule suffit : Talky ajoute http:// et le port du pont.

  3. Étape 3

    Ajoutez chaque streamer

    Tapez son nom d'utilisateur en bas à gauche, puis + Ajouter un streamer. Une seconde plus tard, le pont lui a tiré un jeton et il apparaît dans la liste.

  4. Étape 4

    Envoyez-lui son adresse et son jeton

    Choisissez-le, puis Copier l'URL et le jeton : le presse-papiers contient les deux valeurs de son widget, une par ligne. Envoyez-les en message privé.

Menu F8, page Webhooks, onglet Streamers : adresse publique du pont (partie aléatoire floutée), streamer layenz en ligne avec son adresse et son jeton masqué, boutons Copier l'URL et le jeton, Nouveau jeton et Retirer.
Ici l'adresse est celle d'un tunnel cloudflared ; sur un serveur, ce sera http://<IP publique>:7420. Le jeton reste masqué.

Attention

Le jeton s'affiche masqué dans F8 ; Afficher le jeton le montre : ne le faites pas pendant un live. Nouveau jeton remplace le jeton d'un streamer : l'ancien s'arrête tout de suite, et le streamer colle le nouveau dans son widget. Retirer arrête son jeton et abandonne ses jobs en attente.

À savoir

Partie hébergée

Dans une partie hébergée, le compte de l'hôte n'est pas admin au départ. Sur la page Statut ou Webhooks de F8, cliquez sur M'autoriser (hôte) : quelques secondes plus tard, les pages des admins s'ouvrent.

Pour le streamer : brancher son live

  1. Étape 1

    Rejoignez le serveur

    Le mod Talky vient avec la liste des mods du serveur : le jeu le télécharge à la connexion.

  2. Étape 2

    Installez le widget

    Dans le dashboard LibertyTalk : Marketplace > Project Zomboid · Talky > Installer, puis ouvrez sa page dans Widgets, comme dans la partie 1.

  3. Étape 3

    Collez l'adresse et le jeton

    Onglet Configuration du widget : Adresse publique du pont Talky = l'adresse reçue de l'admin, Jeton du pont = votre jeton. Enregistrer, puis Activer.

  4. Étape 4

    Vérifiez en jeu

    F8 > Statut affiche « Vous êtes streamer ici : les événements de votre live se produisent autour de votre personnage. »

Astuce

Rien à lancer sur votre PC : ni pont, ni tunnel. Si l'admin vous donne un nouveau jeton, remplacez Jeton du pont dans le widget et enregistrez. Les workflows (ce qui se passe pour un follow, un raid...) et l'affichage (noms au-dessus des zombies, bandeaux) sont ceux du serveur : c'est l'admin qui les règle, dans F8.

Ports et sécurité

  • Un seul port à ouvrir : TCP 7420 (port de bridge/config.json), vers la machine qui fait tourner le pont. Le serveur du jeu garde ses propres ports.
  • Les appels de LibertyTalk arrivent en http, en clair : le jeton du streamer circule en clair entre LibertyTalk et le pont. Quelqu'un qui intercepte ce trafic pourrait le réutiliser jusqu'au prochain Nouveau jeton.
  • Le jeton d'un streamer ne déclenche que des effets autour de ce streamer, dans les limites des options bac à sable du serveur.

À savoir

Pour du https

Placez un proxy inverse avec un certificat (Caddy, nginx...) devant le pont, mettez "host": "127.0.0.1" dans bridge/config.json pour que le pont ne réponde qu'au proxy, et tapez l'adresse https:// du proxy comme adresse publique dans F8. Pour une partie hébergée sans adresse publique, un tunnel cloudflared (cloudflared tunnel --url http://127.0.0.1:7420) donne aussi une adresse https://.

Limites

  • La machine du serveur doit pouvoir lancer Node.js et être joignable depuis internet sur le port du pont. Un serveur loué sans accès à la ligne de commande, géré seulement par un panneau web, ne convient pas.
  • Un seul jeu de workflows pour tout le serveur : chaque streamer reçoit les mêmes effets, autour de son propre personnage. Les délais comptent par streamer.
  • La météo et l'heure sont les mêmes pour tous les joueurs, et leurs délais comptent pour tout le serveur.
  • L'hélicoptère va vers un joueur au hasard : il est désactivé par défaut et, une fois activé, ne part que si un seul joueur est connecté (sauf option contraire).
  • Les jobs d'un streamer hors ligne attendent son retour, 15 minutes au plus ; au-delà, ils sont abandonnés.
  • Les effets autour d'un streamer évitent les autres joueurs (15 cases par défaut) et les refuges où il n'a pas accès.

Dépannage

SymptômeSolution
F8 > Statut : « Bridge du serveur : hors ligne. »Lancez le pont sur la machine du serveur, avec le compte du serveur.
F8 > Statut : « Le bridge du serveur tourne en mode solo »Relancez-le avec start-bridge.sh (Linux) ou start-bridge.cmd server (Windows).
F8 > Webhooks : « Réservé aux admins de ce serveur »Votre rôle n'est ni admin ni modérateur. Hôte d'une partie : M'autoriser (hôte).
Le serveur vous expulse : « Lua/script checksums do not match »Votre jeu et le serveur n'ont pas les mêmes fichiers Lua. Gardez une seule copie de Talky (le Workshop ou Zomboid/mods, pas les deux) et retirez les mods copiés à la main dans le dossier du jeu, puis redémarrez le jeu.
La fenêtre du pont : Port 7420 is already usedUn autre programme prend ce port, par exemple un pont solo sur la même machine. Changez port dans bridge/config.json, puis le port de l'adresse publique.
Rien ne se passe en jeu après un followLe port n'est pas ouvert, l'adresse du widget est fausse, ou le streamer a été retiré : la fenêtre du pont affiche 401 bad token ou not_streamer, et l'onglet Exécutions du widget montre l'erreur.

Pour aller plus loin : tous les déclencheurs, conditions et statuts d'exécution de LibertyTalk, au-delà de Project Zomboid.Workflows en profondeurComment le moteur exécute un workflow : déclencheurs, variables, conditions, appels webhook, tests et widgets, avec les pièges qui font échouer un scénario sans message d'erreur.Lire le guide

Essayez sur votre communauté

Créez un compte gratuit et suivez le guide avec vos propres réseaux.