Zammad: Twitter DM ๋ฐ ๋ฉ˜์…˜์ด ๋„์ฐฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 01์›” 30์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: zammad/zammad

์•ˆ๋…•ํ•˜์„ธ์š”,

๋ฌธ์„œ์— ๋”ฐ๋ผ Twitter ํ†ตํ•ฉ์„ ์„ค์ •ํ•˜๊ณ  ์ฑ„๋„ ์„ค์ •์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ๋„์ฐฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ •๋ณด :

  • ์ค‘๊ณ  Zammad ๋ฒ„์ „ : 2.8.0-1548330940.ad390e9f.stretch
  • ์„ค์น˜ ๋ฐฉ๋ฒ• (์†Œ์Šค, ํŒจํ‚ค์ง€, ..) : Debian ํŒจํ‚ค์ง€
  • ์šด์˜ ์ฒด์ œ : ๋ฐ๋น„์•ˆ ์ŠคํŠธ๋ ˆ์น˜
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค + ๋ฒ„์ „ : MariaDB

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :

  • ๋ˆ„๊ตฐ๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๋ฉ˜์…˜ํ•˜๊ฑฐ๋‚˜ DM์„ ๋ณด๋‚ด๋ฉด Zammad ํ‹ฐ์ผ“์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™ :

  • ๋ˆ„๊ตฐ๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๋ฉ˜์…˜ํ•˜๊ฑฐ๋‚˜ DM์„ ๋ณด๋‚ด๋„ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์ด ๋ฒ„๊ทธ์ด๋ฉฐ ๊ธฐ๋Šฅ ์š”์ฒญ์ด๋‚˜ ์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ์ด ์•„๋‹ˆ๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
๋””๋ฒ„๊น…์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

bug frontend / JS app verified

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ๋‹ค : ๊ทธ๋ ‡๊ฒŒ ๋นจ๋ฆฌ ๋›ฐ์–ด ์˜ค๋ฅด๋Š” ํ†ค @MrXermon ์—๊ฒŒ ๊ฐ์‚ฌํ•œ๋‹ค! ๊ท€ํ•˜์˜ ์˜๊ฒฌ๊ณผ abelxluck ์ค‘ ํ•˜๋‚˜๋Š” Zammad ์ปจํ…์ŠคํŠธ์—์„œ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ์ค‘์ž…๋‹ˆ๋‹ค ๐Ÿš‚

๋ชจ๋“  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 ์ธ์ฆ์„œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? 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!'

์Œ, https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/26์— ๋งํฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

@nicolaswurtz ์ด๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์ง€๋งŒ ์•„์ง ์›์ธ์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.์ด ์ถ”์ ๊ธฐ์—์„œ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ† ๋ก ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :-)

@raphaelm ํŠนํžˆ SSL ์งˆ๋ฌธ์— ๋Œ€ํ•ด Martin์—๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„

@raphaelm์œผ๋กœ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ @rixx? ๋กœ๊ทธ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

@๋งˆํ‹ฐ๋‹ˆ

-=> ํŠธ์œ„ํ„ฐ๊ฐ€ ์›นํ›…์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. https ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ.

SSL ์ธ์ฆ์„œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์—†๋Š” ๊ฒƒ : https://www.ssllabs.com/ssltest/analyze.html?d=support.rami.io&latest

Twitter์™€ ๊ด€๋ จ๋œ log / production.log์˜ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋ฌด๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Twitter๋Š” ์›นํ›…์„ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋‚˜์š”? ๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ •๋ง๋กœ ๊ฐ™์€ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. @raphaelm grep ๋ช…๋ น์— -A 1 ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•œ ์ค„์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ค๋ฅ˜์— "twitter"๋‹จ์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ค„์ด ํ‘œ์‹œ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์•„๋‹ˆ์š”, ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋กœ๊ทธ์— "No such channel for user"๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ์ž ID๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ์ด๋ฏธ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž, ์—ฌ๊ธฐ @martini์—์„œ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž‘์€ ์—…๋ฐ์ดํŠธ.
์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ID๊ฐ€ ๋„ˆ๋ฌด ๊ธธ ๋•Œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์šฉ์ž "abelxluck"์— ์˜ํ•ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๋ฌผ์€ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : https://community.zammad.org/t/dont-receive-twitter-dms-railsserver-error/1799/34

๊ทธ ๋™์•ˆ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @schiederme- ๋ถˆํ–‰ํžˆ๋„ ์•„์ง ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. @MrGeneration์ด ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ €์žฅ๋œ ID๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ๋ถ€ ์—ฐ๊ตฌ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ ID์™€ ๊ฐ Twitter ์ฑ„๋„์— ๋Œ€ํ•ด Twitter API์—์„œ๋ฐ›์€ 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'.

๋‚ด ๋กœ๊ทธ์—์„œ ์›นํ›…์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ ๋œ ๋‹ค์Œ ๋ฌธ์ œ๋„ ์ฐพ์Šต๋‹ˆ๋‹ค.

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

์™€! ์ด๊ฒƒ์€ ์ •๋ง์ž…๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ID๊ฐ€ ๋ฐฑ์—”๋“œ (Ruby)์—์„œ ํ”„๋ก ํŠธ ์—”๋“œ (JavaScript)๋กœ ์ ์ ˆํ•˜๊ฒŒ ์ „์†ก๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค .

๋”ฐ๋ผ์„œ 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 ๋ ˆ์ผ ์ฝ˜์†”์„ ํ†ตํ•ด.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๊ด€๋ฆฌ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด Twitter ์ฑ„๋„์„ ๋‹ค์‹œ ์ €์žฅ / ํŽธ์ง‘ ํ•  ๋•Œ๊นŒ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”์ด๋ฅผ์œ„ํ•œ ์ง€์† ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@rlue- ์—ฌ๊ธฐ์„œ ์ธ๊ณ„ ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ID๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ•ซํ”ฝ์Šค ์Šคํฌ๋ฆฝํŠธ๋Š” ํ•„์š”ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์‹œ์ž‘์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ์ฒ˜์Œ์— ID๋ฅผ ์ •์ˆ˜๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ID๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ๋ฌธ์ž์—ด ๋ฒ„์ „์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ๋‹ค : ๊ทธ๋ ‡๊ฒŒ ๋นจ๋ฆฌ ๋›ฐ์–ด ์˜ค๋ฅด๋Š” ํ†ค @MrXermon ์—๊ฒŒ ๊ฐ์‚ฌํ•œ๋‹ค! ๊ท€ํ•˜์˜ ์˜๊ฒฌ๊ณผ abelxluck ์ค‘ ํ•˜๋‚˜๋Š” Zammad ์ปจํ…์ŠคํŠธ์—์„œ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ์ค‘์ž…๋‹ˆ๋‹ค ๐Ÿš‚

@thorsteneckel ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค์–ด ์ฃผ์‹  @thorsteneckel ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‚ด ์‹œ์Šคํ…œ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! <3

๋˜ํ•œ ID๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ๋ฌธ์ž์—ด ๋ฒ„์ „์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@thorsteneckel , ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „

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

์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ ์žˆ๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์•„์•ผํ•ฉ๋‹ˆ๊นŒ?

'Twitter::Account' ๋ฅผ) ๋ฐœ๊ตดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” options ์†์„ฑ์— id ์ €์žฅ๋œ ๋ชจ๋“  Twitter ์ฑ„๋„์˜ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

์œ„์˜ ์ปค๋ฐ‹์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณง ๋„์ฐฉํ•  Zammad 3.2์™€ ํ•จ๊ป˜ ์ถœ์‹œ ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค (1-2 ์ฃผ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰