你好,
我们根据文档资料设置了Twitter集成,并且频道设置未显示任何错误。 但是,什么也没有到达。
是的,我确定这是一个错误,没有功能要求或一般性问题。
您可以帮助我们找出调试所需的信息吗?
嗨, @ raphaelm在log / production.log中是否有任何提示(例如-i twitter)?
这是grep -i twitter /var/log/zammad/production.log
的输出,在删除了我们从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"}
我看到来自twitter的验证电话,以验证您的网络挂钩。 但是我看不到来自twitter到您的webhook的http调用。
-=>似乎Twitter没有向您的Webhook发送消息。 您有一个https主机,对吗? 也许您的ssl证书有问题? log / production.log中是否还有其他与Twitter相关的错误?
我们在运行当前版本的实例上遇到了相同的问题。
同样在这里,我发现了一些可以帮助的东西?
用户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请提供反馈给Martin,特别是有关SSL问题的反馈。
@rixx完全一样的问题,因为@raphaelm? 请提供日志文件。
@马蒂尼
-=>似乎Twitter没有向您的Webhook发送消息。 您有一个https主机,对吗?
是的。
也许您的ssl证书有问题?
并不是我能想到的: https :
log / production.log中是否还有其他与Twitter相关的错误?
我找不到。
Twitter是否提供任何调试Webhooks的工具? 我什么都找不到。
我认为这确实是同一问题- @raphaelm您可以在grep命令中添加-A 1
来在其后看到一行吗? 该错误不包含“ twitter”一词,我想我们会看到相同的行。
E, [2019-01-31T12:53:22.960167 #1-70353379302120] ERROR -- : No such channel for user [...]
不,不是同一个问题。 日志中没有出现“没有此类用户频道”,我已经检查了用户ID是否匹配
好的,所以我们这里可能有两个不同的问题@martini
关于此问题的小更新。
我们了解到,只有在用户ID太长的情况下才会发生这种情况。
这是由社区用户“ abelxluck”找到的。
该帖子可以在这里找到: https :
在此期间有任何更新或修复?
嘿@schiederme-很抱歉,尚无更新。 正如@MrGeneration先前所述,社区中已有一些研究表明所存储的ID可能是错误的。 我编写了一个小脚本,将存储的ID与我们从Twitter API收到的每个Twitter频道的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目录中创建一个名为debug_issue.rb
的文件(通常/opt/zammad
)来执行该文件。 然后以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”所示。
因此,一旦您打开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
但是,只有在您再次通过管理界面保存和编辑Twitter频道后,此方法才能起作用。 我们正在为此寻求一种可持续的解决方案。
@rlue-您能从这里接管吗? 我们需要将ID转换为字符串并以这种方式存储。 我的修补程序脚本可能是所需迁移的起点。 除此之外,我们还需要更改最初获取和存储ID为整数的代码。 另外,我们需要查找使用该ID的其他位置,并确保它们正确处理了字符串版本。
我忘了提:感谢一吨@MrXermon这么快跳! 您的意见和abelxluck的意见帮助我在Zammad上下文中找到了根本原因。 修复方法the
谢谢@thorsteneckel ,工作正常!
感谢@thorsteneckel创建解决方法! 它也适用于我的系统! <3
另外,我们需要查找使用该ID的其他位置,并确保它们正确处理了字符串版本。
@thorsteneckel ,可以安全地假设
$ grep "\['user'\]\['id'\]"
应该找到我们正在寻找的所有实例?
我建议挖'Twitter::Account'
。 这是所有在options
属性中存储了id
Twitter频道的标识符。
已通过上面的提交修复。 将与Zammad 3.2一起发布,该版本将很快(1-2周)到货。
最有用的评论
我忘了提:感谢一吨@MrXermon这么快跳! 您的意见和abelxluck的意见帮助我在Zammad上下文中找到了根本原因。 修复方法the