ํ์ฌ ์นํ
์ ์ต์ข
URL์ ์ ์ ์ด๋ฉฐ JoinEUI
, DevID
, DevEUI
๋ฐ DevAddr
์ ๊ฐ์ ์ฌ์ฉ์ ์ ์ ๋ณ์๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ http://example.com/app1/wh1
์ ๊ฐ์ webhook์ ๋ํ ๊ธฐ๋ณธ URL์ด http://example.com/app1/wh1/{{.DevEUI}}
๊ฐ ๋ ์ ์๊ณ Webhook ๋์ ์ด ์
๋งํฌ๋ฅผ ๋ ์ ๋ผ์ฐํ
ํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฉ์์ง ํน์ URL(์
๋งํฌ ๋ฉ์์ง, ๋๊ธฐ ์ค์ธ ๋ค์ด๋งํฌ ๋ฑ)์๋ ์ ์ฉ๋์ด์ผ ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด Webhook์ ๋ ๋์ ๋ผ์ฐํ ์ด ๊ฐ๋ฅํ๊ณ WebHook์ผ๋ก๋ง ํน์ ํตํฉ(์: OpenSensors)์ ์์ฑํ ์ ์์ต๋๋ค.
์ ์ URL ์ง์ - BaseURL
๋ ์
๋งํฌ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ์ฃผ์ ์ ๊ฒฐํฉ๋์ง๋ง ์ฌ์ฉ์ ์ง์ ๋ผ์ฐํ
ํ๋๊ฐ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ผ์ฐํ
ํ๋ {{.AppEUI}}
, {{.JoinEUI}}
, {{.DevID}}
, {{.DevEUI}}
, {{.DevAddr}}
.
ํด๋น๋์ง ์์ต๋๋ค.
newRequest.
์์ ๊ธฐ๋ณธ URL + ๊ตฌ์ฑ URL ์กฐ์ธ์ด ๋ฐ์ํ ํ URL์ ์ฌ์ฉ์ ์ ์ ๋ณ์๋ฅผ ๊ต์ฒดํฉ๋๋ค.
์.
ํ๋๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ฐ๋ผ text/template
์ผ๋ก ์ด๊ฒ์ ๊ตฌํํ ๊ณํ์ด์๋ ๋ด
๋๋ค. ๊ทธ๊ฒ์ด ์ฌ์ค์ด๋ผ๋ฉด ๋ชจ๋ ์
๋งํฌ์์ ํ
ํ๋ฆฟ ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์คํ(ํนํ ๊ธฐ๋ณธ URL์ผ ๋ฟ๋ง ์๋๋ผ ๊ฒฝ๋ก์ธ ๊ฒฝ์ฐ)์ ์ ์ฌ์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์๋นํ ๋ง์ด ์๋ชจํ ์ ์๋ค๋ ์ฌ์ค์ ์ ์ํ์ญ์์ค.
๋ํ ํ
ํ๋ฆฟ์ด ์คํ๋ ๋งค์ฐ ์ ํ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ์ ํ๋ง ์ฌ์ฉํ๊ณ (๋ชจ๋ EUI/DevAddr์ ๋ฌธ์์ด๋ก ๋ณํ) ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
๋งค๋ฒ ํ
ํ๋ฆฟ์ ๋ค์ ์ปดํ์ผํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด Webhook ID + updated_at
๋ฅผ ์ฌ์ฉํ์ฌ ํ
ํ๋ฆฟ ์์ฒด๋ฅผ ์บ์ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ํ
ํ๋ฆฟ ์์ฒด์ ๋ฌธ์์ด๋ง ์ ๋ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค(์๋ณ์ ์ธ์ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค).
๋ ๊ฐ์ง ์ต์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
text/template
๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ฆ, *ttnpb.ApplicationUp
๊ฐ ์๋๋ผ WebhookTemplateFields
๋ฅผ Google์์ ์ง์ํ๋ ํญ๋ชฉ์ผ๋ก๋ง ์ ๋ฌํฉ๋๋ค.๋ ๋ฒ์งธ๋ก ๋์ด๊ฐ๋ฉด Go ํ ํ๋ฆฟ ๊ตฌ๋ฌธ์ ์ ํ ์ฌ์ฉํ์ง ์์์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ๊ทธ๋ ๊ฒ ํ๋ฉด ์ฌ๋๋ค์ด ํผ๋์ค๋ฌ์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค(์ ์ ์ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ ธ ์๋์?).
์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น์ ๋์ผํ๊ฒ ์ ์งํ๋ ค๋ฉด $app_id
์ ๊ฐ์ ์๋ฆฌ ํ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒํ๋ฉด ์๋ฆฌ ํ์์๊ฐ ํธ์คํธ์์ ์ ํจํ์ง ์์ง๋ง (์ฐ๋ฆฌ๋ ์ํ์ง ์๊ธฐ ๋๋ฌธ์) ๊ฒฝ๋ก์์๋ ์ ํจํฉ๋๋ค ( $
๊ฐ URL ๊ฒฝ๋ก์์ ํ์ฉ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์์ ํ์ธํด์ผ ํฉ๋๋ค. ).
$
๋ RFC3986 ์น์
2.2 ์ ๋ฐ๋ผ ํธ์คํธ ๋ฐ ๊ฒฝ๋ก์ ์ผ๋ถ๋ก ์ ํจํฉ๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ url.URL
์ ํธ์คํธ ๋ถ๋ถ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ์์๋ ๋ฉ๋๋ค.
URI ํ
ํ๋ฆฟ์ ๋ํ ํ์ค( RFC 6570 ์ ๋ฐ๋ผ 1.2 ๋ฐ 2.2 ์ฐธ์กฐ) ๊ตฌ๋ฌธ์ {[operator]variable-list}
์
๋๋ค. ์ฐ๋ฆฌ๋ ํซ์คํ์์ ์์
ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ฐ์ฐ์๋ฅผ ์ญ์ ํ๊ณ (ํ์ฅ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์) ํ๋์ ๋ณ์๋ง ํ์ฉํ๋ ๊ฒ์ด ํ๋นํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช
ํ์ง ์๊ณ string.ReplaceAll
๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
"ํ๋์ ๋ณ์ ํ์ฉ"์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
๋ํ ์ฌ์ฉ์ ๊ฒฝํ ์ธก๋ฉด์์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ์ธํ๊ณ ๋ text/template
๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ PHP ์คํ์ผ์ ๋ณ์ ์ด๋ฆ์ด ์ข์ต๋๋ค.
์์์ ์ธ๊ธํ ํ์ค์ {appEUI,devEUI}
์ ๊ฐ์ ํํ์์ ํ์ฉํ๋ฏ๋ก ๊ฐ๋จํ ๋ฌธ์์ด ๋ฐ๊พธ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์บก์ฒ๋น ํ๋์ ๋ณ์๋ง ์๋ {appEUI}/{devEUI}
์ ๊ฐ์ ํํ์์ ํ์ฉํ์ง ์์์ผ๋ฉฐ ์๋ฒฝํ๊ฒ ๊ด์ฐฎ์ต๋๋ค.
๊ทธ ํ๋๋ ๋ด๋ถ ํจํค์ง์ด๊ณ ๊ธฐ๋ณธ ํจํค์ง ์ธ๋ถ๋ก ๊ฐ์ ธ์ฌ ์ ์์ง๋ง ์ด๋ ๊ฒ ํด์ผ ํฉ๋๋ค.
ํธ์ง: ๊ธฐ๋ณธ ํจํค์ง๋ ๊ธฐ๋ฅ์ ๋
ธ์ถํฉ๋๋ค.