Zammad: Прямые сообщения и упоминания в Twitter не поступают

Созданный на 30 янв. 2019  ·  22Комментарии  ·  Источник: zammad/zammad

Привет,

мы настроили интеграцию с Твиттером согласно документации, и настройки канала не показывают ошибок. Однако ничего не приходит.

Информация:

  • Используемая версия Zammad: 2.8.0-1548330940.ad390e9f.stretch
  • Метод установки (исходный код, пакет, ..): пакет Debian
  • Операционная система: Debian stretch
  • База данных + версия: MariaDB

Ожидаемое поведение:

  • Когда кто-то упоминает нас или отправляет DM, создается тикет Zammad.

Фактическое поведение:

  • Когда кто-то упоминает нас или отправляет личное сообщение, ничего не происходит.

Да, я уверен, что это ошибка, а не запрос функции или общий вопрос.
Можете ли вы помочь нам узнать, какая информация вам нужна для отладки?

bug frontend / JS app verified

Самый полезный комментарий

Я забыл упомянуть: спасибо @MrXermon за то, что прыгнул так быстро! Ваш вклад и вклад abelxluck помог мне найти основную причину в контексте Заммада. Исправление уже в пути 🚂

Все 22 Комментарий

Привет @raphaelm Есть ли подсказка в log / production.log (например, -i twitter)?

Это результат grep -i twitter /var/log/zammad/production.log после удаления регистрации электронных писем, полученных от твиттера.

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"}

Я вижу запрос на подтверждение из твиттера, чтобы проверить ваш веб-крючок. Но я не вижу http-вызовов из твиттера на ваш веб-перехватчик.

- => Похоже, твиттер не отправляет сообщения на ваш веб-перехватчик. У вас ведь есть https-хост? Может что-то не так с вашим ssl-сертификатом? Есть ли другие ошибки в журнале / production.log, связанные с твиттером?

Мы сталкиваемся с той же проблемой на нашем экземпляре, работающем с текущим выпуском.

То же самое, я нашел кое-что, что могло бы помочь?
Для пользователя с идентификатором 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 Это связано с проблемой сообщества, мы еще не нашли причину, было бы здорово, если бы мы могли не обсуждать это в этом трекере. :-)

@raphaelm Пожалуйста, дайте Мартину отзыв, особенно по вопросу SSL.

@rixx Точно @raphaelm ? Пожалуйста, предоставьте файлы журналов.

@мартини

- => Похоже, твиттер не отправляет сообщения на ваш веб-перехватчик. У вас ведь есть https-хост?

Да.

Может что-то не так с вашим ssl-сертификатом?

Не то, чтобы я мог подумать: https://www.ssllabs.com/ssltest/analyze.html?d=support.rami.io&latest

Есть ли другие ошибки в журнале / production.log, связанные с твиттером?

Я ничего не могу найти.

Предоставляет ли Twitter какой-либо инструмент для отладки веб-перехватчиков? Ничего не нашел.

Я думаю, что это действительно та же проблема - @raphaelm не могли бы вы добавить -A 1 в свою команду grep, чтобы увидеть одну строку после? Ошибка не содержит слова "twitter", думаю, мы увидим ту же строку, что и я.

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

Нет, это не та же проблема. "Нет такого канала для пользователя" не отображается в журнале, и я уже проверил, совпадают ли идентификаторы пользователей.

Хорошо, у нас могут быть две разные проблемы @martini

Небольшое обновление по проблеме.
Мы узнали, что это происходит только в том случае, если идентификатор пользователя слишком длинный.
Это было обнаружено пользователем сообщества "abelxluck".

Сообщение можно найти здесь: https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/34

Какие-нибудь обновления или исправления тем временем?

Привет, @schiederme - к сожалению, обновлений пока нет. Как ранее описал

    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

Результат выглядит так:
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).

Вы можете выполнить его, создав файл с именем debug_issue.rb в вашем каталоге Zammad (обычно /opt/zammad ). Затем запустите файл из каталога Zammad через zammad run rails r debug_issue.rb или rails r debug_issue.rb в качестве пользователя zammad, в зависимости от вашего источника установки (пакет / источник). После того, как вы закончите, вы можете / должны удалить файл debug_issue.rb .

Я попробовал сценарий со своей учетной записью ( @ level66network в Twitter) и с моей установкой Zammad, и похоже, что идентификаторы действительно не

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

В моих журналах я также обнаружил следующую проблему, вызванную веб-перехватчиком.

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

Ух ты! Это действительно так! Мы обнаружили, что идентификатор правильно отправляется из бэкэнда (Ruby) во внешний интерфейс (JavaScript), который затем разбивает число, потому что он не может должным образом обрабатывать эти большие целые числа, как выяснил здесь «abelxluck» .

Таким образом, ошибка возникает, когда вы открываете канал Twitter, чтобы отредактировать его, а затем сохранить изменения. После этого вы не сможете получать прямые сообщения Twitter.

Вы можете исправить свои сломанные каналы, выполнив команду:

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

Через консоль Zammad rails .

Однако это будет работать только до тех пор, пока вы снова не сохраните / не отредактируете свой канал Twitter через интерфейс администратора. Мы работаем над устойчивым решением этой проблемы.

@rlue - не могли бы вы занять место здесь? Нам нужно преобразовать идентификатор в строку и сохранить ее в таком виде. Мой сценарий оперативного исправления может стать отправной точкой для необходимой миграции. Кроме того, нам нужно изменить код, который изначально извлекает и сохраняет идентификатор как целое число . Кроме того, нам нужно найти другие места, которые используют идентификатор, и убедиться, что они правильно обрабатывают строковую версию.

Я забыл упомянуть: спасибо @MrXermon за то, что прыгнул так быстро! Ваш вклад и вклад abelxluck помог мне найти основную причину в контексте Заммада. Исправление уже в пути 🚂

Спасибо @thorsteneckel , обход работает!

Спасибо @thorsteneckel за создание обходного пути! Это тоже работает с моей системой! <3

Кроме того, нам нужно найти другие места, которые используют идентификатор, и убедиться, что они правильно обрабатывают строковую версию.

@thorsteneckel , можно ли предположить, что

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

должны найти все искомые экземпляры?

Предлагаю копать за 'Twitter::Account' . Это идентификатор для всех Twitter-каналов, у которых id хранится в атрибуте options .

Исправлено с фиксацией выше. Будет выпущен вместе с Zammad 3.2, который выйдет в ближайшее время (1-2 недели).

Была ли эта страница полезной?
0 / 5 - 0 рейтинги