Oi,
configuramos a integração com o Twitter de acordo com a documentação e as configurações do canal não apresentam erros. No entanto, nada chega.
Sim, tenho certeza que isso é um bug e nenhuma solicitação de recurso ou uma questão geral.
Você pode nos ajudar a descobrir quais informações você precisa para depurar?
Olá @raphaelm. Existe alguma dica em log / production.log (por exemplo, -i twitter)?
Essa é a saída de grep -i twitter /var/log/zammad/production.log
, após a remoção do registro de e-mails que recebemos do 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"}
Vejo uma chamada de verificação do Twitter para verificar seu web hook. Mas não vejo chamadas http do Twitter para o seu webhook.
- => Parece que o Twitter não está enviando mensagens para o seu webhook. Você tem um host https, certo? Talvez algo errado com o seu certificado SSL? Algum outro erro em log / production.log que esteja relacionado ao Twitter?
Encontramos o mesmo problema em nossa instância, executando a versão atual.
Mesmo aqui, encontrei algo que pode ajudar?
Esse canal não existe para o ID de usuário '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!'
Mmm, isso está vinculado a https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/26 ?
@nicolaswurtz Isso está relacionado ao problema da comunidade, ainda não encontramos a causa, seria ótimo se pudéssemos manter a discussão sobre isso fora deste rastreador. :-)
@raphaelm Por favor, dê feedback ao Martin, especialmente sobre a questão SSL.
@rixx Exatamente o mesmo problema que @raphaelm ? Forneça arquivos de log.
@martini
- => Parece que o Twitter não está enviando mensagens para o seu webhook. Você tem um host https, certo?
sim.
Talvez algo errado com o seu certificado SSL?
Não que eu consiga pensar em: https://www.ssllabs.com/ssltest/analyze.html?d=support.rami.io&latest
Algum outro erro em log / production.log que esteja relacionado ao Twitter?
Não consigo encontrar nenhum.
O Twitter fornece alguma ferramenta para depurar webhooks? Não consegui encontrar nada.
Eu acho que este é realmente o mesmo problema - @raphaelm você poderia adicionar -A 1
ao seu comando grep para ver uma linha depois? O erro não contém a palavra "twitter", acho que veremos a mesma linha que eu vi.
E, [2019-01-31T12:53:22.960167 #1-70353379302120] ERROR -- : No such channel for user [...]
Não, não é o mesmo problema. "Não existe tal canal para o usuário" não aparece no log e já verifiquei se os IDs de usuário correspondem
Ok, então podemos ter dois problemas diferentes aqui @martini
Pequena atualização sobre o problema.
Aprendemos que isso só ocorre se o ID do usuário for muito longo.
Isso foi encontrado por um usuário da comunidade "abelxluck".
A postagem pode ser encontrada aqui: https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/34
Alguma atualização ou correção entretanto?
Ei @schiederme - infelizmente ainda não há atualizações. Como @MrGeneration descrito anteriormente, houve algumas pesquisas na comunidade indicando que o ID armazenado pode estar errado. Eu escrevi um pequeno script para comparar o ID armazenado com o ID que recebemos da API do Twitter para cada canal do Twitter. Ele também imprimirá o ID para que você possa / deve verificar se este é o ID real da sua conta. Feedback seja bem-vindo!
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
A saída é semelhante a esta:
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).
Você pode executá-lo criando um arquivo chamado debug_issue.rb
em seu diretório Zammad (normalmente /opt/zammad
). Em seguida, execute o arquivo do diretório Zammad via zammad run rails r debug_issue.rb
ou rails r debug_issue.rb
como usuário zammad, dependendo da fonte de instalação (pacote / fonte). Depois de terminar, você pode / deve excluir o arquivo debug_issue.rb
.
Eu tentei o script com minha conta ( @ level66network no Twitter) e minha instalação do Zammad também, e parece que os IDs realmente não correspondem na instalação.
ATTENTION: Found ID mismatch. Local ID '1170020461641642000' doesn't match with received remote ID '1170020461641641990'.
Em meus logs, também encontro o seguinte problema acionado pelo webhook.
No such channel for user id '1170020461641641990'! (Exceptions::UnprocessableEntity)
Uau! É realmente isso! Descobrimos que o ID é enviado corretamente do backend (Ruby) para o frontend (JavaScript), o que quebra o número porque não consegue lidar com esses inteiros grandes corretamente, como "abelxluck" descobriu aqui .
Portanto, o erro ocorre quando você abre um canal do Twitter para editá-lo e depois salvar suas alterações. Após este ponto, você não poderá mais receber mensagens diretas do Twitter.
Você pode consertar seus canais quebrados executando o 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
Por meio do console de trilhos Zammad .
No entanto, isso só funcionará até que você salve / edite seu canal do Twitter por meio da interface de administrador novamente. Estamos trabalhando em uma solução sustentável para isso.
@rlue - você pode assumir o comando a partir daqui? Precisamos converter o ID em uma string e armazená-lo dessa forma. Meu script de hot fix pode ser o ponto de partida para a migração necessária. Além disso, precisamos alterar o código que inicialmente busca e armazena o ID como um inteiro . Além disso, precisamos encontrar os outros lugares que usam o ID e nos certificar de que lidam com a versão da string de maneira adequada.
Eu esqueci de mencionar: muito obrigado @MrXermon por entrar tão rápido! Sua opinião e a de abelxluck me ajudaram a encontrar a causa raiz no contexto de Zammad. A correção está a caminho 🚂
Obrigado @thorsteneckel , o trabalho em torno funciona!
Obrigado @thorsteneckel por criar a solução alternativa! Também funciona com o meu sistema! <3
Além disso, precisamos encontrar os outros lugares que usam o ID e nos certificar de que lidam com a versão da string de maneira adequada.
@thorsteneckel , é seguro assumir que
$ grep "\['user'\]\['id'\]"
deve encontrar todas as instâncias que estamos procurando?
Eu sugiro cavar para 'Twitter::Account'
. Esse é o identificador para todos os canais do Twitter, que têm id
armazenado no atributo options
.
Corrigido com o commit acima. Será lançado com Zammad 3.2 que chegará em breve (1-2 semanas).
Comentários muito úteis
Eu esqueci de mencionar: muito obrigado @MrXermon por entrar tão rápido! Sua opinião e a de abelxluck me ajudaram a encontrar a causa raiz no contexto de Zammad. A correção está a caminho 🚂