Zammad: Les messages publicitaires et les mentions Twitter n'arrivent pas

Créé le 30 janv. 2019  ·  22Commentaires  ·  Source: zammad/zammad

Salut,

nous avons configuré l'intégration de Twitter conformément à la documentation et les paramètres de la chaîne ne montrent aucune erreur. Cependant, rien n'arrive.

Infos:

  • Version Zammad utilisée: 2.8.0-1548330940.ad390e9f.stretch
  • Méthode d'installation (source, paquet, ..): paquet Debian
  • Système d'exploitation: Debian stretch
  • Base de données + version: MariaDB

Comportement prévisible:

  • Quand quelqu'un nous mentionne ou envoie un DM, un ticket Zammad est créé.

Comportement réel:

  • Quand quelqu'un nous mentionne ou envoie un DM, rien ne se passe.

Oui, je suis sûr que c'est un bogue et aucune demande de fonctionnalité ou une question générale.
Pouvez-vous nous aider à trouver les informations dont vous avez besoin pour le débogage?

bug frontend / JS app verified

Commentaire le plus utile

J'ai oublié de mentionner: merci beaucoup @MrXermon pour avoir sauté aussi vite! Votre contribution et celle d'abelxluck m'ont aidé à trouver la cause profonde dans le contexte de Zammad. Le correctif est en route 🚂

Tous les 22 commentaires

Salut @raphaelm Y a-t-il un indice dans log / production.log (par exemple -i twitter)?

C'est la sortie de grep -i twitter /var/log/zammad/production.log , après la suppression de la journalisation des e-mails que nous avons reçus de Twitter.

I, [2019-01-30T12:43:16.877706 #5931-47137720567500]  INFO -- : Started POST "/api/v1/external_credentials/twitter/app_verify" for 2a02:…:23b0 at 2019-01-30 12:43:16 +0100
I, [2019-01-30T12:43:16.882895 #5931-47137720567500]  INFO -- :   Parameters: {"consumer_key"=>"…", "consumer_secret"=>"…", "oauth_token"=>"…", "oauth_token_secret"=>"…", "env"=>"…", "provider"=>"twitter"}
I, [2019-01-30T12:43:18.081499 #5931-47137720546680]  INFO -- : Started GET "/api/v1/channels_twitter_webhook?crc_token=…&nonce=…" for … at 2019-01-30 12:43:18 +0100
I, [2019-01-30T12:43:18.085266 #5931-47137720546680]  INFO -- : Processing by ChannelsTwitterController#webhook_verify as HTML
I, [2019-01-30T12:43:18.982109 #5931-70307650490460]  INFO -- :   Parameters: {"name"=>"twitter", "credentials"=>{"consumer_key"=>"…", "consumer_secret"=>"…", "oauth_token"=>"22133603-…", "oauth_token_secret"=>"…", "env"=>"zammad", "controller"=>"external_credentials", "action"=>"app_verify", "provider"=>"twitter", "webhook_id"=>"…"}, "id"=>"c-0"}
I, [2019-01-30T12:43:19.337857 #5931-70307339885820]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548750017521" for 2a02:…:23b0 at 2019-01-30 12:43:19 +0100
I, [2019-01-30T12:43:19.344139 #5931-70307339885820]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:43:22.154145 #5931-47137720546680]  INFO -- : Started GET "/api/v1/external_credentials/twitter/link_account" for 2a02:…:23b0 at 2019-01-30 12:43:22 +0100
I, [2019-01-30T12:43:22.165744 #5931-47137720546680]  INFO -- :   Parameters: {"provider"=>"twitter"}
I, [2019-01-30T12:43:22.345333 #5931-47137720546680]  INFO -- : Redirected to https://api.twitter.com/oauth/authorize?oauth_token=…
I, [2019-01-30T12:43:41.122898 #5931-70307339885820]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548848605494" for 2a02:…:23b0 at 2019-01-30 12:43:41 +0100
I, [2019-01-30T12:43:41.129583 #5931-70307339885820]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:43:42.183169 #5931-70307650490460]  INFO -- : Started GET "/api/v1/external_credentials/twitter/link_account" for 2a02:…:23b0 at 2019-01-30 12:43:42 +0100
I, [2019-01-30T12:43:42.190428 #5931-70307650490460]  INFO -- :   Parameters: {"provider"=>"twitter"}
I, [2019-01-30T12:43:42.722202 #5931-70307650490460]  INFO -- : Redirected to https://api.twitter.com/oauth/authorize?oauth_token=--…
I, [2019-01-30T12:43:45.737308 #5931-70307339871840]  INFO -- : Started GET "/api/v1/external_credentials/twitter/callback?oauth_token=--…&oauth_verifier=…" for 2a02:…:23b0 at 2019-01-30 12:43:45 +0100
I, [2019-01-30T12:43:45.744095 #5931-70307339871840]  INFO -- :   Parameters: {"oauth_token"=>"--…", "oauth_verifier"=>"…", "provider"=>"twitter"}
I, [2019-01-30T12:43:47.400984 #5931-70307339871840]  INFO -- : Redirected to https://support.rami.io/#channels/twitter/8
I, [2019-01-30T12:43:48.717842 #5931-70307339885820]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548848627791" for 2a02:…:23b0 at 2019-01-30 12:43:48 +0100
I, [2019-01-30T12:43:48.723376 #5931-70307339885820]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:44:11.587083 #5931-70307339871840]  INFO -- : Started POST "/api/v1/channels_twitter/8" for 2a02:…:23b0 at 2019-01-30 12:44:11 +0100
I, [2019-01-30T12:44:11.597494 #5931-70307339871840]  INFO -- : Processing by ChannelsTwitterController#update as JSON
I, [2019-01-30T12:44:11.597694 #5931-70307339871840]  INFO -- :   Parameters: {"area"=>"Twitter::Account", "options"=>{"adapter"=>"twitter", "user"=>{"id"=>…, "screen_name"=>"pretixeu", "name"=>"pretix"}, "auth"=>{"external_credential_id"=>1, "oauth_token"=>"…", "oauth_token_secret"=>"…", "consumer_key"=>"…", "consumer_secret"=>"…"}, "sync"=>{"webhook_id"=>"", "track_retweets"=>false, "mentions"=>{"group_id"=>"9"}, "direct_messages"=>{"group_id"=>"9"}, "search"=>[]}}, "group_id"=>nil, "active"=>true, "id"=>"8"}
I, [2019-01-30T12:44:12.005019 #5931-47137720546680]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548848627807" for 2a02:…:23b0 at 2019-01-30 12:44:12 +0100
I, [2019-01-30T12:44:12.010727 #5931-47137720546680]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:44:20.436356 #5931-70307374877540]  INFO -- : Started GET "/api/v1/external_credentials/twitter/link_account" for 2a02:…:23b0 at 2019-01-30 12:44:20 +0100
I, [2019-01-30T12:44:20.441759 #5931-70307374877540]  INFO -- :   Parameters: {"provider"=>"twitter"}
I, [2019-01-30T12:44:20.776232 #5931-70307374877540]  INFO -- : Redirected to https://api.twitter.com/oauth/authorize?oauth_token=…
I, [2019-01-30T12:44:23.329907 #5931-70307339885820]  INFO -- : Started GET "/api/v1/external_credentials/twitter/callback?oauth_token=…&oauth_verifier=…" for 2a02:…:23b0 at 2019-01-30 12:44:23 +0100
I, [2019-01-30T12:44:23.335028 #5931-70307339885820]  INFO -- :   Parameters: {"oauth_token"=>"…", "oauth_verifier"=>"…", "provider"=>"twitter"}
I, [2019-01-30T12:44:24.963013 #5931-70307339885820]  INFO -- : Redirected to https://support.rami.io/#channels/twitter/8
I, [2019-01-30T12:44:26.218570 #5931-47137720546680]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548848665152" for 2a02:…:23b0 at 2019-01-30 12:44:26 +0100
I, [2019-01-30T12:44:26.226071 #5931-47137720546680]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:44:28.066560 #5931-47137720546680]  INFO -- : Started POST "/api/v1/channels_twitter/8" for 2a02:…:23b0 at 2019-01-30 12:44:28 +0100
I, [2019-01-30T12:44:28.076235 #5931-47137720546680]  INFO -- : Processing by ChannelsTwitterController#update as JSON
I, [2019-01-30T12:44:28.076351 #5931-47137720546680]  INFO -- :   Parameters: {"area"=>"Twitter::Account", "options"=>{"adapter"=>"twitter", "user"=>{"id"=>4362252801, "screen_name"=>"pretixeu", "name"=>"pretix"}, "auth"=>{"external_credential_id"=>1, "oauth_token"=>"…", "oauth_token_secret"=>"…", "consumer_key"=>"…", "consumer_secret"=>"…"}, "sync"=>{"webhook_id"=>"", "track_retweets"=>false, "mentions"=>{"group_id"=>"9"}, "direct_messages"=>{"group_id"=>"9"}, "search"=>[]}, "subscribed_to_webhook_id"=>"…"}, "group_id"=>nil, "active"=>true, "id"=>"8"}
I, [2019-01-30T12:44:28.742588 #5931-70307339885820]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548848665162" for 2a02:…:23b0 at 2019-01-30 12:44:28 +0100
I, [2019-01-30T12:44:28.752236 #5931-70307339885820]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:48:46.835649 #5931-70307339885820]  INFO -- : Started GET "/api/v1/channels_twitter?_=1548848665187" for 2a02:…:23b0 at 2019-01-30 12:48:46 +0100
I, [2019-01-30T12:48:46.843058 #5931-70307339885820]  INFO -- : Processing by ChannelsTwitterController#index as JSON
I, [2019-01-30T12:43:18.081499 #5931-47137720546680]  INFO -- : Started GET "/api/v1/channels_twitter_webhook?crc_token=…&nonce=…" for … at 2019-01-30 12:43:18 +0100
I, [2019-01-30T12:43:18.085266 #5931-47137720546680]  INFO -- : Processing by ChannelsTwitterController#webhook_verify as HTML
I, [2019-01-30T12:43:18.982109 #5931-70307650490460]  INFO -- :   Parameters: {"name"=>"twitter", "credentials"=>{"consumer_key"=>"…", "consumer_secret"=>"…", "oauth_token"=>"22133603-…", "oauth_token_secret"=>"…", "env"=>"zammad", "controller"=>"external_credentials", "action"=>"app_verify", "provider"=>"twitter", "webhook_id"=>"…"}, "id"=>"c-0"}

Je vois un appel de vérification de Twitter pour vérifier votre crochet Web. Mais je ne vois aucun appel http de Twitter vers votre webhook.

- => Il semble que Twitter n'envoie pas de messages à votre webhook. Vous avez un hôte https, non? Peut-être que quelque chose ne va pas avec votre certificat SSL? Y a-t-il d'autres erreurs dans log / production.log qui sont liées à Twitter?

Nous rencontrons le même problème sur notre instance, en exécutant la version actuelle.

Pareil ici, j'ai trouvé quelque chose qui pourrait aider?
Aucun canal de ce type pour l'identifiant d'utilisateur «1090618064528424961»!

I, [2019-01-31T12:53:22.891153 #1-70353379302120]  INFO -- : Started POST "/api/v1/channels_twitter_webhook" for ::ffff:172.21.0.10 at 2019-01-31 12:53:22 +0000
I, [2019-01-31T12:53:22.896366 #1-70353379302120]  INFO -- : Processing by ChannelsTwitterController#webhook_incoming as HTML
I, [2019-01-31T12:53:22.896571 #1-70353379302120]  INFO -- :   Parameters: {" some data removed "}
E, [2019-01-31T12:53:22.960167 #1-70353379302120] ERROR -- : No such channel for user id '1090618064528424961'! (Exceptions::UnprocessableEntity)
/opt/zammad/app/controllers/channels_twitter_controller.rb:32:in 'validate_webhook_signature!'

@nicolaswurtz Ceci est lié au problème de la communauté, nous n'avons toujours pas trouvé la cause, ce serait formidable si nous pouvions garder la discussion à ce sujet hors de ce tracker. :-)

@raphaelm Veuillez donner vos commentaires à Martin, en particulier sur la question SSL.

@rixx Exactement le même problème que @raphaelm ? Veuillez fournir les fichiers journaux.

@martini

- => Il semble que Twitter n'envoie pas de messages à votre webhook. Vous avez un hôte https, non?

Oui.

Peut-être que quelque chose ne va pas avec votre certificat SSL?

Pas que je puisse penser: https://www.ssllabs.com/ssltest/analyze.html?d=support.rami.io&latest

Y a-t-il d'autres erreurs dans log / production.log qui sont liées à Twitter?

Je n'en trouve pas.

Twitter fournit-il un outil pour déboguer les webhooks? Je n'ai rien trouvé.

Je pense que c'est vraiment le même problème - @raphaelm pourriez-vous ajouter -A 1 à votre commande grep pour voir une ligne après? L'erreur ne contient pas le mot "twitter", je suppose que nous verrons la même ligne que moi.

E, [2019-01-31T12:53:22.960167 #1-70353379302120] ERROR -- : No such channel for user [...]

Non, pas le même problème. "Aucun canal de ce type pour l'utilisateur" n'apparaît pas dans le journal et j'ai déjà vérifié que les ID utilisateur correspondent

D'accord, nous pourrions donc avoir deux problèmes différents ici @martini

Petite mise à jour sur la question.
Nous avons appris que cela n'a lieu que si l'ID utilisateur est trop long.
Cela a été trouvé par un utilisateur de la communauté "abelxluck".

Le message peut être trouvé ici: https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/34

Des mises à jour ou des correctifs en attendant?

Hey @schiederme - malheureusement pas encore de mises à jour. Comme @MrGeneration l'a décrit précédemment, il y a eu des recherches dans la communauté indiquant que l'ID stocké pourrait être erroné. J'ai écrit un petit script pour comparer l'ID stocké avec l'ID que nous recevons de l'API Twitter pour chaque canal Twitter. Il imprimera également l'ID afin que vous puissiez / devriez vérifier qu'il s'agit bien de l'ID réel de votre compte. Vos commentaires sont les bienvenus!

    Channel.where(area: 'Twitter::Account').each do |channel|
      client = Twitter::REST::Client.new do |config|
        config.consumer_key        = channel.options['auth']['consumer_key']
        config.consumer_secret     = channel.options['auth']['consumer_secret']
        config.access_token        = channel.options['auth']['oauth_token']
        config.access_token_secret = channel.options['auth']['oauth_token_secret']
      end

      if channel.options['user']['id'] != client.user.id
        puts "ATTENTION: Found ID mismatch. Local ID '#{channel.options['user']['id']}' doesn't match with received remote ID '#{client.user.id}'."
      else
        puts "Local ID '#{channel.options['user']['id']}' matches with received remote ID. Please double check if this is the ID of your twitter account (via e.g. https://tweeterid.com)."
      end
    end

La sortie ressemble à ceci:
Local ID '785412523193425920' matches with received remote ID. Please double check if this is the ID of your twitter account (via e.g. https://tweeterid.com).

Vous pouvez l'exécuter en créant un fichier appelé debug_issue.rb dans votre répertoire Zammad (généralement /opt/zammad ). Ensuite, exécutez le fichier à partir de votre répertoire Zammad via zammad run rails r debug_issue.rb ou rails r debug_issue.rb tant qu'utilisateur zammad, en fonction de votre source d'installation (package / source). Une fois que vous avez terminé, vous pouvez / devez supprimer le fichier debug_issue.rb .

J'ai également essayé le script avec mon compte ( @ level66network sur Twitter) et mon installation Zammad, et il semble que les identifiants ne correspondent pas dans l'installation.

ATTENTION: Found ID mismatch. Local ID '1170020461641642000' doesn't match with received remote ID '1170020461641641990'.

Dans mes journaux, je trouve également le problème suivant déclenché par le webhook.

No such channel for user id '1170020461641641990'! (Exceptions::UnprocessableEntity)

Wow! C'est vraiment ça! Nous avons découvert que l'ID est correctement envoyé du backend (Ruby) au frontend (JavaScript) qui rompt alors le nombre car il ne peut pas gérer correctement ces grands entiers, comme "abelxluck" l'a découvert ici .

Ainsi, l'erreur se produit une fois que vous ouvrez un canal Twitter pour le modifier et enregistrer vos modifications par la suite. Après ce stade, vous ne pourrez plus recevoir de messages directs Twitter.

Vous pouvez réparer vos canaux cassés en exécutant la commande:

Channel.where(area: 'Twitter::Account').each do |channel|

  client = Twitter::REST::Client.new do |config|
    config.consumer_key        = channel.options['auth']['consumer_key']
    config.consumer_secret     = channel.options['auth']['consumer_secret']
    config.access_token        = channel.options['auth']['oauth_token']
    config.access_token_secret = channel.options['auth']['oauth_token_secret']
  end

  channel.options['user']['id'] = client.user.id

  channel.save!
end

Via la console des rails Zammad .

Cependant, cela ne fonctionnera que jusqu'à ce que vous ayez à nouveau enregistré / édité votre chaîne Twitter via l'interface d'administration. Nous travaillons sur une solution durable pour cela.

@rlue - pouvez-vous prendre le relais d'ici? Nous devons convertir l'ID en chaîne et le stocker de cette façon. Mon script de correctif pourrait être le point de départ de la migration requise. En plus de cela, nous devons changer le code qui récupère et stocke initialement l'ID sous forme d'entier . De plus, nous devons trouver les autres emplacements qui utilisent l'ID et nous assurer qu'ils gèrent correctement la version de la chaîne.

J'ai oublié de mentionner: merci beaucoup @MrXermon pour avoir sauté aussi vite! Votre contribution et celle d'abelxluck m'ont aidé à trouver la cause profonde dans le contexte de Zammad. Le correctif est en route 🚂

Merci @thorsteneckel , le travail autour fonctionne!

Merci @thorsteneckel d' avoir créé la solution de contournement! Cela fonctionne aussi avec mon système! <3

De plus, nous devons trouver les autres emplacements qui utilisent l'ID et nous assurer qu'ils gèrent correctement la version de la chaîne.

@thorsteneckel , est-il prudent de supposer que

$ grep "\['user'\]\['id'\]"

devrait trouver toutes les instances que nous recherchons?

Je suggérerais de creuser pour 'Twitter::Account' . C'est l'identifiant de tous les canaux Twitter, qui ont le id stocké dans l'attribut options .

Corrigé avec le commit ci-dessus. Sera publié avec Zammad 3.2 qui arrivera bientôt (1-2 semaines).

Cette page vous a été utile?
0 / 5 - 0 notes