Zammad: Los DM y las menciones de Twitter no llegan

Creado en 30 ene. 2019  ·  22Comentarios  ·  Fuente: zammad/zammad

Hola,

Configuramos la integración de Twitter de acuerdo con la documentación y la configuración del canal no muestra ningún error. Sin embargo, no llega nada.

Infos:

  • Versión de Zammad utilizada: 2.8.0-1548330940.ad390e9f.stretch
  • Método de instalación (fuente, paquete, ..): paquete Debian
  • Sistema operativo: Debian stretch
  • Base de datos + versión: MariaDB

Comportamiento esperado:

  • Cuando alguien nos menciona o envía un DM, se crea un ticket Zammad.

Comportamiento real:

  • Cuando alguien nos menciona o envía un DM, no pasa nada.

Sí, estoy seguro de que se trata de un error y no se solicita una función o es una pregunta general.
¿Puede ayudarnos a averiguar qué información necesita para la depuración?

bug frontend / JS app verified

Comentario más útil

Olvidé mencionar: ¡Muchas gracias @MrXermon por saltar tan rápido! Su aporte y el de abelxluck me ayudaron a encontrar la causa raíz en el contexto de Zammad. Arreglo está en camino 🚂

Todos 22 comentarios

Hola @raphaelm ¿Hay alguna pista en log / production.log (por ejemplo, -i twitter)?

Esa es la salida de grep -i twitter /var/log/zammad/production.log , después de eliminar el registro de correos electrónicos que recibimos 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"}

Veo una llamada de verificación de Twitter para verificar su enlace web. Pero no veo llamadas http desde Twitter a su webhook.

- => Parece que Twitter no envía mensajes a su webhook. Tienes un host https, ¿verdad? ¿Quizás algo anda mal en tu certificado SSL? ¿Algún otro error en log / production.log que esté relacionado con Twitter?

Nos encontramos con el mismo problema en nuestra instancia, ejecutando la versión actual.

Igual aquí, he encontrado algo que podría ayudar?
¡No existe tal canal para el ID de usuario '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 Esto está relacionado con el problema de la comunidad, todavía no hemos encontrado la causa, sería genial si pudiéramos mantener la discusión sobre esto fuera de este rastreador. :-)

@raphaelm Envíe sus comentarios a Martin, especialmente sobre la cuestión de SSL.

@rixx ¿ Exactamente el mismo problema que @raphaelm ? Proporcione archivos de registro.

@martini

- => Parece que Twitter no envía mensajes a su webhook. Tienes un host https, ¿verdad?

Si.

¿Quizás algo anda mal en tu certificado SSL?

No que se me ocurra: https://www.ssllabs.com/ssltest/analyze.html?d=support.rami.io&latest

¿Algún otro error en log / production.log que esté relacionado con Twitter?

No encuentro ninguno.

¿Twitter proporciona alguna herramienta para depurar webhooks? No pude encontrar nada.

Creo que este es realmente el mismo problema: @raphaelm, ¿ podría agregar -A 1 a su comando grep para ver una línea después? El error no contiene la palabra "twitter", supongo que veremos la misma línea que tengo.

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

No, no es el mismo problema. "No hay tal canal para el usuario" no aparece en el registro y ya verifiqué que los ID de usuario coincidan.

Bien, entonces podríamos tener dos problemas diferentes aquí @martini

Pequeña actualización sobre el tema.
Aprendimos que esto solo ocurre si la identificación del usuario es demasiado larga.
Esto fue encontrado por un usuario de la comunidad "abelxluck".

La publicación se puede encontrar aquí: https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/34

¿Alguna actualización o corrección mientras tanto?

Hola @schiederme , lamentablemente aún no hay actualizaciones. Como @MrGeneration describió anteriormente, ha habido algunas investigaciones en la comunidad que indican que la identificación almacenada podría estar incorrecta. Escribí un pequeño script para comparar la identificación almacenada con la identificación que recibimos de la API de Twitter para cada canal de Twitter. También imprimirá la identificación para que pueda / deba verificar que esta es la identificación real de su cuenta. ¡Comentarios bienvenidos!

    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 salida se ve así:
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).

Puede ejecutarlo creando un archivo llamado debug_issue.rb en su directorio Zammad (generalmente /opt/zammad ). Luego ejecute el archivo desde su directorio Zammad a través de zammad run rails r debug_issue.rb o rails r debug_issue.rb como usuario de zammad, dependiendo de su fuente de instalación (paquete / fuente). Una vez que haya terminado, puede / debe eliminar el archivo debug_issue.rb .

Probé el script con mi cuenta (

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

En mis registros también encuentro el siguiente problema provocado por el webhook.

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

¡Guau! ¡Esto es realmente! Descubrimos que la ID se envía correctamente desde el backend (Ruby) al frontend (JavaScript) que luego rompe el número porque no puede manejar estos grandes enteros correctamente, como "abelxluck" descubrió aquí .

Entonces, el error ocurre una vez que abres un canal de Twitter para editarlo y luego guardar tus cambios. Después de este punto, no podrá recibir mensajes directos de Twitter.

Puede arreglar sus canales rotos ejecutando el comando:

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

A través de la consola de rieles Zammad .

Sin embargo, esto solo funcionará hasta que vaya y guarde / edite su canal de Twitter a través de la interfaz de administración nuevamente. Estamos trabajando en una solución sostenible para esto.

@rlue , ¿puedes tomar el relevo desde aquí? Necesitamos convertir el ID en una cadena y almacenarlo de esa manera. Mi secuencia de comandos de hotfix podría ser el punto de partida para la migración requerida. Además de eso, necesitamos cambiar el código que inicialmente obtiene y almacena la ID como un número entero . Además, necesitamos encontrar los otros lugares que usan la ID y asegurarnos de que manejen la versión de la cadena correctamente.

Olvidé mencionar: ¡Muchas gracias @MrXermon por saltar tan rápido! Su aporte y el de abelxluck me ayudaron a encontrar la causa raíz en el contexto de Zammad. Arreglo está en camino 🚂

Gracias @thorsteneckel , ¡la

¡Gracias @thorsteneckel por crear la solución! ¡También funciona con mi sistema! <3

Además, necesitamos encontrar los otros lugares que usan la ID y asegurarnos de que manejen la versión de la cadena correctamente.

@thorsteneckel , ¿es seguro asumir que

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

debe encontrar todas las instancias que estamos buscando?

Sugeriría buscar 'Twitter::Account' . Ese es el identificador para todos los canales de Twitter, que tienen el id almacenado en el atributo options .

Corregido con el compromiso anterior. Se lanzará con Zammad 3.2 que llegará pronto (1-2 semanas).

¿Fue útil esta página
0 / 5 - 0 calificaciones