๐ InstaWP ๋ด์ค๋ ํฐ ๊ตฌ๋ ์๋ฅผ Mailchimp๋ก ์๋ ์ ์กํ๊ธฐ
Gato GraphQL์์๋ InstaWP๋ฅผ ํ์ฉํ์ฌ ๋ฐฉ๋ฌธ์๋ค์ด ๊ตฌ๋งค๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ ์ ์์ ๋ง์ ์๋๋ฐ์ค ์ฌ์ดํธ์์ ํ๋ฌ๊ทธ์ธ์ ์์ฉ ํ์ฅ ๊ธฐ๋ฅ์ ์ฒดํํ ์ ์๋๋ก ํ๊ณ ์์ต๋๋ค.
์ดํ ์ , ์๋๋ฐ์ค ์ฌ์ดํธ์ ์ ํจ ๊ธฐ๊ฐ์ 4์๊ฐ์์ 7์ผ๋ก ๋๋ฆฌ๊ณ , Gato GraphQL์ ์ฒดํํ ๋ ๋ด์ค๋ ํฐ์ ๋ฑ๋กํ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์์งํ ์ ์๋๋ก InstaWP ๊ตฌ๋ ์ Personal ํ๋์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค.

์ ํ๋์์๋ ใAdvanced Optionsใ ํญ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์๋ก ์์ฑ๋ ์๋๋ฐ์ค ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์นํ ์ ์ค์ ํ ์ ์์ต๋๋ค.

ใSubscribe to mailing listใ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ ํํ ๋ฐฉ๋ฌธ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์๋์ผ๋ก ์์งํ์ฌ, ์๋ ์์ ์์ด ๋ฐ๋ก Mailchimp ๋ชฉ๋ก์ผ๋ก ์ ์กํ๊ณ ์ถ์์ต๋๋ค.
์นํ ๋ฌธ์์๋ ์ ์๋๋ฐ์ค ์ฌ์ดํธ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ์์๊ฐ ๋์ ์์ผ๋ฉฐ, Make ํ๋ซํผ์ ์ฌ์ฉํด ์นํ ์ ๋ง๋ค๊ณ ํ์ด๋ก๋ ํ๋๋ฅผ ์ถ์ถํ์ฌ Google Sheet๋ก ์ ์กํ๋ ๋ฐฉ๋ฒ์ด ์ค๋ช ๋์ด ์์ต๋๋ค.

๊ทธ๋ฌ๋ ์ด ์ํฌํ๋ก๋ ์ ์๊ตฌ๋ฅผ ์์ ํ ์ถฉ์กฑ์ํค์ง ๋ชปํ์ต๋๋ค. ๋ ๋ค๋ฅธ ์๋น์ค ์ ๊ณต์ ์ฒด์ ์์กดํ๊ณ ์ถ์ง ์๊ณ , ๊ทธ๊ณณ์ Mailchimp ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ ๊ฒ๋ ํผํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ํ์ํ์ต๋๋ค.
InstaWP + Gato GraphQL์ ์ฌ์ฉํ์ฌ ์นํ ๋ฐ์ดํฐ ์ ๋ฌํ๊ธฐ
ํด๊ฒฐ์ฑ ์ ๋ฐ๋ก ๋์์ ์์์ต๋๋ค. InstaWP๋ฅผ ์ง์ ์ฌ์ฉํ์ฌ ์ ์ฉ ์ฌ์ดํธ๋ฅผ ํธ์คํ ํ๊ณ , ใPower Extensionsใ ๋ฒ๋ค๊ณผ ํจ๊ป Gato GraphQL ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด ๋ฉ๋๋ค.
์ด ์กฐํฉ์ผ๋ก ์ ๋ ดํ๊ฒ ใAPI Gatewayใ ์ธ์คํด์ค๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค. ์ด ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์นํ ํ์ด๋ก๋๋ฅผ ์์ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ฉฐ, GraphQL ์ฟผ๋ฆฌ๋ก ์ฝ๋ฉ๋ ๋ก์ง์ ํตํด Mailchimp๋ก ์ ์กํ ์ ์์ต๋๋ค.
GraphQL์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฒ์์๋ ๋ช ํํ ์ ํ์ง๋ก ๋ณด์ด์ง ์์ ์ ์์ต๋๋ค. GraphQL ์๋ฒ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ ํ๊ณ , ์ฒ๋ฆฌํ๋ฉฐ, ์๋ต์ ๋ฐํํ๋ ๋จ์ผ ์๋ํฌ์ธํธ๋ฅผ ๋ ธ์ถํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ๋ฅํ๊ธฐ๋ ํ์ง๋ง, GraphQL ์ฟผ๋ฆฌ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ฉด์ ๋จ์ผ ์๋ํฌ์ธํธ๋ฅผ ์นํ URL๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํ ๊ฒ์ ๋๋ค.
https://my-api-gateway.instawp.xyz/graphql/?query=query HasSubscribedToNewsletter { hasSubscriberOptIn: _httpRequestHasParam(name: "marketing_optin") subscriberOptIn: _httpRequestStringParam(name: "marketing_optin") isNotSubscriberOptInNAValue: _notEquals(value1: $__subscriberOptIn, value2: "NA") subscribedToNewsletter: _and(values: [$__hasSubscriberOptIn, $__isNotSubscriberOptInNAValue]) @export(as: "subscribedToNewsletter") } query MaybeCreateContactOnMailchimp @depends(on: "HasSubscribedToNewsletter") @include(if: $subscribedToNewsletter) { subscriberEmail: _httpRequestStringParam(name: "email") mailchimpUsername: _env(name: "MAILCHIMP_API_CREDENTIALS_USERNAME") @remove mailchimpPassword: _env(name: "MAILCHIMP_API_CREDENTIALS_PASSWORD") @remove mailchimpListMembersJSONObject: _sendJSONObjectItemHTTPRequest(input: { url: "https://us7.api.mailchimp.com/3.0/lists/bdfd6885fe/members", method: POST, options: { auth: { username: $__mailchimpUsername, password: $__mailchimpPassword }, json: { email_address: $__subscriberEmail, status: "subscribed" } } }) }๋ณด๊ธฐ ์ข์ง ์์ฃ ?
Gato GraphQL์๋ ์ด๋ฅผ ๋ ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐ๋ก Persisted Queries์ ๋๋ค. Persisted Query๋ ๊ณ ์ ํ URL๋ก ์ ๊ทผํ ์ ์๊ณ , ์ถ๋ ฅ์ด ์ฌ์ ์ ์๋์ด ์๋ค๋ ์ (GraphQL ์ฟผ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ์ ๊ณต๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋จ)์์ REST ์๋ํฌ์ธํธ์ ์ ์ฌํฉ๋๋ค.

์ด์ ์นํ URL์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค.
https://my-api-gateway.instawp.xyz/graphql-query/process-instawp-sandbox-webhook/?operationName=MaybeCreateContactOnMailchimp๊ทธ๋ฆฌ๊ณ Persisted Query๋ก ์ ์ฅ๋ GraphQL ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
query HasSubscribedToNewsletter {
hasSubscriberOptIn: _httpRequestHasParam(name: "marketing_optin")
subscriberOptIn: _httpRequestStringParam(name: "marketing_optin")
isNotSubscriberOptInNAValue: _notEquals(value1: $__subscriberOptIn, value2: "NA")
subscribedToNewsletter: _and(values: [$__hasSubscriberOptIn, $__isNotSubscriberOptInNAValue])
@export(as: "subscribedToNewsletter")
}
query MaybeCreateContactOnMailchimp
@depends(on: "HasSubscribedToNewsletter")
@include(if: $subscribedToNewsletter)
{
subscriberEmail: _httpRequestStringParam(name: "email")
mailchimpUsername: _env(name: "MAILCHIMP_API_CREDENTIALS_USERNAME")
@remove
mailchimpPassword: _env(name: "MAILCHIMP_API_CREDENTIALS_PASSWORD")
@remove
mailchimpListMembersJSONObject: _sendJSONObjectItemHTTPRequest(input: {
url: "https://us7.api.mailchimp.com/3.0/lists/{listCode}/members",
method: POST,
options: {
auth: {
username: $__mailchimpUsername,
password: $__mailchimpPassword
},
json: {
email_address: $__subscriberEmail,
status: "subscribed"
}
}
})
}ํจ์ฌ ๋ซ์ฃ ?
์ด์ InstaWP์์ ์ ์๋๋ฐ์ค ์ฌ์ดํธ๊ฐ ์์ฑ๋๊ณ ์ฌ์ฉ์๊ฐ ๋ด์ค๋ ํฐ์ ๋ฑ๋กํ๋ฉด, ํด๋น ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์๋์ผ๋ก Mailchimp ๋ชฉ๋ก์ ์ถ๊ฐ๋ฉ๋๋ค.

์ด GraphQL ์ฟผ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์ธํ ์๊ณ ์ถ์ผ์๋ค๋ฉด, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๐จ๐ปโ๐ซ InstaWP ๋ด์ค๋ ํฐ ๊ตฌ๋ ์๋ฅผ Mailchimp๋ก ์๋ ์ ์กํ๋ GraphQL ์ฟผ๋ฆฌ๋ฅผ ํ์ธํด ๋ณด์ธ์.