์๋ ํ์ธ์,
๋ฌธ์์ ๋ฐ๋ผ Twitter ํตํฉ์ ์ค์ ํ๊ณ ์ฑ๋ ์ค์ ์ ์ค๋ฅ๊ฐ ํ์๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฌด๊ฒ๋ ๋์ฐฉํ์ง ์์ต๋๋ค.
์, ์ด๊ฒ์ด ๋ฒ๊ทธ์ด๋ฉฐ ๊ธฐ๋ฅ ์์ฒญ์ด๋ ์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ด ์๋๋ผ๊ณ ํ์ ํฉ๋๋ค.
๋๋ฒ๊น
์ ํ์ํ ์ ๋ณด๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๊น?
์๋ ํ์ธ์ @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 ์ฃผ).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ธ๊ธํ๋ ๊ฒ์ ์์๋ค : ๊ทธ๋ ๊ฒ ๋นจ๋ฆฌ ๋ฐ์ด ์ค๋ฅด๋ ํค @MrXermon ์๊ฒ ๊ฐ์ฌํ๋ค! ๊ทํ์ ์๊ฒฌ๊ณผ abelxluck ์ค ํ๋๋ Zammad ์ปจํ ์คํธ์์ ๊ทผ๋ณธ ์์ธ์ ์ฐพ๋ ๋ฐ ๋์์ด๋์์ต๋๋ค. ํด๊ฒฐ ์ค์ ๋๋ค ๐