Blog

🚀 InstaWP'den Mailchimp'e bülten abonelerini otomatik olarak gönderme

Leonardo Losoviz
Yazan: Leonardo Losoviz ·

Gato GraphQL için, ziyaretçilerin satın alma kararı vermeden önce eklentinin ticari uzantılarını kendi sandbox sitelerinde denemelerine olanak tanımak amacıyla InstaWP kullanıyoruz.

İki gün önce InstaWP aboneliğimi Personal planına yükselttim; böylece sandbox sitelerin ömrünü 4 saatten 7 güne çıkardım ve Gato GraphQL'i test ederken bültene abone olan e-postaları yakalayabilir hale geldim:

InstaWP ile Gato GraphQL Test Sürüşü
InstaWP ile Gato GraphQL Test Sürüşü

Yeni plan bana "Advanced Options" sekmesine erişim sağlıyor; burada yeni oluşturulan bir sandbox sitenin verilerini alacak bir webhook belirtebiliyorum:

InstaWP şablonları için gelişmiş seçenekler
InstaWP şablonları için gelişmiş seçenekler

"Subscribe to mailing list" onay kutusunu işaretleyen ziyaretçilerin e-postalarını otomatik olarak yakalamak ve herhangi bir manuel müdahale olmaksızın doğrudan Mailchimp listeme göndermek istiyorum.

Webhook belgeleri, payload alanlarını çıkarıp Google Sheet'e gönderen bir webhook oluşturmak için Make platformunu kullanan bir sandbox site veri yakalama örneği sunuyor:

Make + InstaWP

Ancak bu iş akışı ihtiyaçlarımı tam olarak karşılamıyor; başka bir hizmet sağlayıcısına bağımlı olmak ve Mailchimp kimlik bilgilerimi oraya girmek istemiyorum. Daha basit bir şey istiyorum.

Webhook verilerini iletmek için InstaWP + Gato GraphQL kullanımı

Çözüm gözümün önünde belirdi: Doğrudan InstaWP'yi kullanarak ayrılmış bir site barındırabilir ve Gato GraphQL eklentisini "Power Extensions" paketiyle kurabilirdim.

Bu kombinasyon bana ucuz bir "API Gateway" örneği sağlıyor. Artık bu örneği webhook payload'ını almak, verileri çıkarmak ve bir GraphQL queries içinde bu mantığı kodlayarak Mailchimp'e göndermek için kullanabiliyorum.

GraphQL kullanmak ilk başta açık bir seçenek gibi görünmeyebilir; çünkü bir GraphQL sunucusu normalde queries'i almak, çözümlemek ve yanıtını döndürmek için tek bir endpoint sunar. Mümkün olsa da, tek endpoint'i webhook URL'si olarak kullanmak ve GraphQL queries'ini parametre olarak iletmek oldukça zahmetli olurdu:

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" } } }) }

Pek güzel değil, değil mi?

Gato GraphQL bununla başa çıkmanın daha iyi bir yolunu sunuyor: Persisted Queries. Persisted query, REST endpoint'e benzer şekilde kendi URL'si altında erişilebilir olan ve çıktısı önceden belirlenmiş bir yapıdır (GraphQL queries önceden sağlanır ve veritabanında saklanır):

Persisted query düzenleyici

Artık webhook URL'si şu şekilde görünecek:

https://my-api-gateway.instawp.xyz/graphql-query/process-instawp-sandbox-webhook/?operationName=MaybeCreateContactOnMailchimp

Persisted query olarak saklanan GraphQL queries ise şu şekilde:

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"
      }
    }
  })
}

Çok daha iyi, değil mi?

Artık InstaWP'de yeni bir sandbox site oluşturulduğunda ve kullanıcı bültene kaydolduğunda, o e-posta Mailchimp listeme otomatik olarak ekleniyor:

Mailchimp listesine otomatik olarak eklenen e-posta
Mailchimp listesine otomatik olarak eklenen e-posta

Bu GraphQL queries'inin nasıl çalıştığını öğrenmek istiyorsanız, şu blog yazısına göz atın: 👨🏻‍🏫 InstaWP'den Mailchimp'e bülten abonelerini otomatik olarak göndermek için GraphQL queries


Bültenimize abone olun

Gato GraphQL'deki tüm güncellemelerden haberdar olun.