Echange Telegram impossible

Bon alors, après avoir un peu galérer pour changer les droits sur le fichier afin de le mettre à jour via transfert FTP j’ai pu mettre à jour l’user id dans

gladys-production.db

Je relance gladys et du coup je mets à jour le token.
Et c’est là que ça devient intéressant : je refais le lien avec Telegram et bim ça ne marche toujours pas !
Je vérifie à nouveau l’ID dans la db et là, surprise, à nouveau le .0
Comme si il s’ajoutait au moment de la génération du lien.
Du coup je créé l’issue github. (Du moins j’essaie :blush: )
Merci

Issue GitHub créée Erreur User with telegram_user_id “xxxxxxxxxxx” not found

Mince ! Il va falloir débugger ça, par contre ça va être très compliqué parce que c’est un bug qui n’arrive qu’avec ton compte du fait de ton identifiant…

Tu as des compétences en développement Node.js ou pas du tout ?

On utilise cette librairie dans Gladys:

Je ne serais pas étonné que le cast se passe de leur côté lors du parsing de la data retourné par l’API de Telegram, donc il va falloir faire un bout de code qui test uniquement le code de la lib ?

Je ne m’y connais pas trop mais je vais essayer de voir ce que je peux faire pour débugguer :slight_smile:

Ok, tiens nous au courant si tu as besoin d’aide :slight_smile:

Bonjour !
Merci pour ce thread, j’ai exactement le même problème que celui décrit ci-dessus… j’ai fait les mêmes vérifications, et bingo ! Mon userid a également un .0 à la fin :frowning:

Dingue, ça confirme le souci ! Merci de ton retour @Christophe_LOCHON :slight_smile:

Est-ce que tu as quelque compétences technique pour nous aider à voir d’où vient le problème ? Le souci c’est que n’ayant pas de compte Telegram avec un id qui pose problème (finissant par 0), je n’arrive pas à reproduire le souci chez moi

1 Like

Salut @pierre-gilles ! Mis à part vous fournir des logs, je n’ai malheureusement que peu de compétences dans les domaines de la programmation…

Ok on va attendre le retour de @Mazshaka alors

ça marche :slight_smile: J’ai réessayé également de tout recréer, le comportement est le même.

Bonjour,
D’abord merci à @Christophe_LOCHON ça confirme le bug :slight_smile:
Pour le reste à vrai dire je n’ai pas vraiment avancé dans le debug car je ne sais pas vraiment comment m’y prendre.
Si j’ai bien compris le fonctionnement, lorsque l’on saisie la clé API dans Gladys il y a un appel vers Telegram qui parse la clé, confirme qu’elle est valide et retourne (ou déduit) l’user ID associé.
Lors de l’initialisation cet user ID est enregistré en BDD dans Gladys.
Il est ensuite utilisé pour faire le lien lors des échanges Telegram/Gladys.

Pour moi il y a 2 problèmes:
1/ lors de l’initialisation l’user ID est renvoyé (ou du moins enregistré) avec un .0 à la fin
On constate également que même si on supprimer en BDD le .0 à la fin de l’ID et que l’on refait un test de connexion avec Telegram, l’ID est ensuite à nouveau modifier avec un .0.
d’ou le problème 2:
2/ L’ ID Telegram est enregistré lors de chaque échange au lieu de faire un simple “match” avec celui disponible en BDD…

Maintenant je ne sais pas comment “monitorer” ces échanges pour confirmer tout ça et trouver d’où vient le problème.

@Mazshaka En fait je suspecte la librairie qu’on utilise de se tromper lors du parsing du retour de l’API Telegram, car la lib retourne déjà un “Number” Javascript.

Du coup il faudrait faire un test avec juste un bout de Javascript sur ta machine avec le code d’exemple de la librairie: GitHub - yagop/node-telegram-bot-api: Telegram Bot API for NodeJS

Le code d’exemple est celui dans le README:

const TelegramBot = require('node-telegram-bot-api');

// replace the value below with the Telegram token you receive from @BotFather
const token = 'YOUR_TELEGRAM_BOT_TOKEN';

// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: true});

// Listen for any kind of message. There are different kinds of
// messages.
bot.on('message', (msg) => {
  const chatId = msg.chat.id;

  console.log(msg);
});

Il faudrait que tu exécute ce bout de code sur ta machine, puis que tu envoie un message au bot avec ton user.

Sinon, une autre possibilité c’est que tu m’envoie ta clé d’API (en privée, d’un bot bidon créé pour le test) et que je fasse le test sur ma machine, mais ça implique que tu sois devant ton téléphone au moment ou je fais le test pour pouvoir envoyer un message :slight_smile:

Merci @pierre-gilles !
Du coup c’est plus claire. Je regarde ça ce week-end et je vois tiens au courant.
Au pire on pourra toujours arriver à se coordonner pour des tests si je bloque.
Bonne journée

1 Like

Re,
J’ai besoin d’un petit coup de main.
Je ne sais pas où déposer le fichier .js.
Sauf erreur Gladys utilise des routes url pour accèder au fichier.
Du coup je ne sais pas où je peux déposer le fichier pour y accèder.
A moins que je puisse le lancer via une commande.
Mais là encore je ne suis pas sur de moi…
Voilà si vous pouviez me guider :innocent:
Merci!
Cdt,
Lionel

En fait ça n’a rien à voir avec Gladys ce dont je parlais là :slight_smile:

Je te proposais d’installer la librairie sur ton ordinateur, et de faire un test.

Après il faut un environnement de développement Node.js sur ta machine, si tu n’as jamais fais ça la marche est peut-être un peu haute

bonjour @pierre-gilles ,
Alors pour être complet j’ai bien penser à lancer le script du pi. j’ai compris que celà ne fonctionnait pas comme celà. j’ai néanmoins installer Node js sur l’instance pour pouvoir lancer des commandes npm. mais je ne sais pas si c’est utile et/ou suffisant ?
J’avoue qu’à partir de là je ne saurais pas aller plus loin sans un coup de main plus poussé…genre step by step :sweat_smile:
Ou un lien vers un tuto ?
Sinon je peux toujours t’envoyer ma clé APi pour que tu puisses tester.
Merci

C’est peut-être plus facile si tu m’envoie :

  • ta clé d’API en MP
  • ton ID telegram
  • tu envoie un message sur le bot

Merci pour le message ! J’ai bien reçu toutes les informations de mon côté.

Heureusement, le bug n’est pas du côté de la lib qui envoie un chatId bien formatté mais par contre effectivement en Number.

Il faut enquêter côté Gladys du coup.

Si quelqu’un a un peu de temps ici et voudrait travailler sur le bug, l’issue avec les informations est ici:

Salut à tous !

Je viens de travailler sur le bug ce matin. J’ai isolé la cause du bug côté Gladys, effectivement on recevait l’ID en Number JS, sauf que le cast vers un String pour la DB était fait automatiquement par Sequelize, et je pense qu’il pensait que notre Number était un float.

En faisant le cast nous même dans le service Telegram avec un .toString(), le bug n’est plus présent.

J’ai écrit toute une batterie de test pour être sur que le problème ne se reproduise plus.

Le correctif est dans cette PR :

Merci à ceux qui ont pris le temps de me donner les bonnes informations, c’est un bug assez marrant car il n’a touché que 10% des utilisateurs, car le cast n’a l’air de prendre ce chiffre pour un float que si votre ID Telegram finit par un 9 ! 1 chance sur 10 donc :stuck_out_tongue:

2 Likes

Pour information, j’ai mergé la PR et j’ai fais un build Docker sur le tag dev ( gladysassistant/gladys:dev )

Le fix partira dans la prochaine release de Gladys !

1 Like