๋ธ”๋กœ๊ทธ

๐Ÿš€ InstaWP ๋‰ด์Šค๋ ˆํ„ฐ ๊ตฌ๋…์ž๋ฅผ Mailchimp๋กœ ์ž๋™ ์ „์†กํ•˜๊ธฐ

Leonardo Losoviz
์ž‘์„ฑ์ž: Leonardo Losoviz ยท

Gato GraphQL์—์„œ๋Š” InstaWP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธ์ž๋“ค์ด ๊ตฌ๋งค๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์ „์— ์ž์‹ ๋งŒ์˜ ์ƒŒ๋“œ๋ฐ•์Šค ์‚ฌ์ดํŠธ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ƒ์šฉ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ดํ‹€ ์ „, ์ƒŒ๋“œ๋ฐ•์Šค ์‚ฌ์ดํŠธ์˜ ์œ ํšจ ๊ธฐ๊ฐ„์„ 4์‹œ๊ฐ„์—์„œ 7์ผ๋กœ ๋Š˜๋ฆฌ๊ณ , Gato GraphQL์„ ์ฒดํ—˜ํ•  ๋•Œ ๋‰ด์Šค๋ ˆํ„ฐ์— ๋“ฑ๋กํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋„๋ก InstaWP ๊ตฌ๋…์„ Personal ํ”Œ๋žœ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

InstaWP๋กœ Gato GraphQL ํ…Œ์ŠคํŠธ ๋“œ๋ผ์ด๋ธŒํ•˜๊ธฐ
InstaWP๋กœ Gato GraphQL ํ…Œ์ŠคํŠธ ๋“œ๋ผ์ด๋ธŒํ•˜๊ธฐ

์ƒˆ ํ”Œ๋žœ์—์„œ๋Š” ใ€ŒAdvanced Optionsใ€ ํƒญ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ƒŒ๋“œ๋ฐ•์Šค ์‚ฌ์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•  ์›นํ›…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

InstaWP ํ…œํ”Œ๋ฆฟ์˜ ๊ณ ๊ธ‰ ์˜ต์…˜
InstaWP ํ…œํ”Œ๋ฆฟ์˜ ๊ณ ๊ธ‰ ์˜ต์…˜

ใ€ŒSubscribe to mailing listใ€ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•œ ๋ฐฉ๋ฌธ์ž์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ง‘ํ•˜์—ฌ, ์ˆ˜๋™ ์ž‘์—… ์—†์ด ๋ฐ”๋กœ Mailchimp ๋ชฉ๋ก์œผ๋กœ ์ „์†กํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์›นํ›… ๋ฌธ์„œ์—๋Š” ์ƒˆ ์ƒŒ๋“œ๋ฐ•์Šค ์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์˜ˆ์‹œ๊ฐ€ ๋‚˜์™€ ์žˆ์œผ๋ฉฐ, Make ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•ด ์›นํ›…์„ ๋งŒ๋“ค๊ณ  ํŽ˜์ด๋กœ๋“œ ํ•„๋“œ๋ฅผ ์ถ”์ถœํ•˜์—ฌ Google Sheet๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Make + InstaWP

๊ทธ๋Ÿฌ๋‚˜ ์ด ์›Œํฌํ”Œ๋กœ๋Š” ์ œ ์š”๊ตฌ๋ฅผ ์™„์ „ํžˆ ์ถฉ์กฑ์‹œํ‚ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด์— ์˜์กดํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ , ๊ทธ๊ณณ์— 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 ์—”๋“œํฌ์ธํŠธ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Persisted query ํŽธ์ง‘๊ธฐ

์ด์ œ ์›นํ›… 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 ๋ชฉ๋ก์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Mailchimp ๋ชฉ๋ก์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ
Mailchimp ๋ชฉ๋ก์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ

์ด GraphQL ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ InstaWP ๋‰ด์Šค๋ ˆํ„ฐ ๊ตฌ๋…์ž๋ฅผ Mailchimp๋กœ ์ž๋™ ์ „์†กํ•˜๋Š” GraphQL ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.


๋‰ด์Šค๋ ˆํ„ฐ ๊ตฌ๋…ํ•˜๊ธฐ

Gato GraphQL์˜ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ๋†“์น˜์ง€ ๋งˆ์„ธ์š”.