Zammad: TwitterのDMとメンションが届かない

作成日 2019年01月30日  ·  22コメント  ·  ソース: zammad/zammad

こんにちは、

ドキュメントに従ってTwitter統合を設定し、チャネル設定でエラーが表示されないようにしました。 しかし、何も到着しません。

情報:

  • 使用済みZammadバージョン:2.8.0-1548330940.ad390e9f.stretch
  • インストール方法(ソース、パッケージ、..):Debianパッケージ
  • オペレーティングシステム:Debianストレッチ
  • データベース+バージョン:MariaDB

予想される行動:

  • 誰かが私たちに言及したり、DMを送信したりすると、Zammadチケットが作成されます。

実際の動作:

  • 誰かが私たちに言及したり、DMを送信したりしても、何も起こりません。

はい、これはバグであり、機能のリクエストや一般的な質問はないと確信しています。
デバッグに必要な情報を見つけるのを手伝ってもらえますか?

bug frontend / JS app verified

最も参考になるコメント

私は言及するのを忘れました:そんなに速く飛び込んでくれた

全てのコメント22件

こんにちは@raphaelmlog / production.logにヒントはありますか(例:-i twitter)?

これは、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"}

TwitterからWebフックを確認するための確認呼び出しが表示されます。 しかし、TwitterからWebhookへのhttp呼び出しは見当たりません。

-=> TwitterがWebhookにメッセージを送信していないようです。 あなたはhttpsホストを持っていますよね? たぶんあなたのSSL証明書に何か問題がありますか? Twitterに関連するlog / production.logの他のエラーはありますか?

現在のリリースを実行しているインスタンスで同じ問題が発生します。

ここでも同じですが、役立つものを見つけましたか?
ユーザーID「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の質問について、Martinにフィードバックを

@raphaelmとまったく同じ問題を@rixx? ログファイルを提供してください。

@マティーニ

-=> TwitterがWebhookにメッセージを送信していないようです。 あなたはhttpsホストを持っていますよね?

はい。

たぶんあなたのSSL証明書に何か問題がありますか?

私が考えることができるわけではありません: https

Twitterに関連するlog / production.logの他のエラーはありますか?

何も見つかりません。

TwitterはWebhookをデバッグするためのツールを提供していますか? 何も見つかりませんでした。

これは本当に同じ問題だと思います— @raphaelm grepコマンドに-A 1を追加して、1行後に表示できますか? エラーには「twitter」という単語が含まれていません。私と同じ行が表示されると思います。

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

いいえ、同じ問題ではありません。 「そのようなユーザーのチャネルはありません」はログに表示されず、ユーザーIDが一致することをすでに確認しました

さて、ここで2つの異なる問題が発生する可能性があります@martini

この問題に関する小さな更新。
これは、ユーザーIDが長すぎる場合にのみ発生することがわかりました。
これは、コミュニティユーザー「abelxluck」によって発見されました。

投稿はここで見つけることができます: https

それまでの間、更新や修正はありますか?

ねえ@ schiederme-残念ながらまだ更新はありません。 @MrGenerationが前述したように、コミュニティでは、保存されているIDが間違っている可能性があることを示す調査が行われています。 保存されたIDを、各TwitterチャネルのTwitterAPIから受け取ったIDと比較するための小さなスクリプトを作成しました。 また、IDが出力されるため、これがアカウントの実際のIDであることを確認できます。 フィードバックを歓迎します!

    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).

Zammadディレクトリ(通常は/opt/zammad )にdebug_issue.rbというファイルを作成することで実行できます。 次に、インストールソース(パッケージ/ソース)に応じて、Zammadディレクトリからzammad run rails r debug_issue.rbまたはrails r debug_issue.rbを介してzammadユーザーとしてファイルを実行します。 完了したら、 debug_issue.rbファイルを削除できます/削除する必要があります。

アカウント(Twitterの@ level66network )とZammadインストールでもスクリプトを試しましたが、インストールでIDが実際に一致していないようです。

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

私のログには、Webhookによって引き起こされた次の問題もあります。

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

うわー! これは本当にそれです! IDがバックエンド(Ruby)からフロントエンド(JavaScript)に適切に送信され、 「abelxluck」がここで見つけたように、この大きな整数を適切に処理できないため、IDが数値を分割することが

そのため、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

ZammadRailsコンソール経由。

ただし、これは、管理インターフェースを介してTwitterチャネルにアクセスし、保存/編集するまでのみ機能します。 私たちはこのための持続可能な解決策に取り組んでいます。

@ rlue-ここから引き継いでいただけますか? IDを文字列に変換し、そのように保存する必要があります。 私のホットフィックススクリプトは、必要な移行の開始点になる可能性があります。 それに加えて、最初にIDを整数としてフェッチして格納するコードを変更

私は言及するのを忘れました:そんなに速く飛び込んでくれた

ありがとう@thorsteneckel

回避策を作成してくれてありがとう@thorsteneckel ! それは私のシステムでも動作します! <3

さらに、IDを使用する他の場所を見つけて、それらが文字列バージョンを適切に処理することを確認する必要があります。

@thorsteneckel 、それを仮定するのは安全ですか

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

探しているすべてのインスタンスを見つける必要がありますか?

'Twitter::Account'を掘ることをお勧めします。 これは、 options属性にid格納されているすべてのTwitterチャネルの識別子です。

上記のコミットで修正されました。 間もなく(1〜2週間)到着するZammad3.2でリリースされます。

このページは役に立ちましたか?
0 / 5 - 0 評価