ðšð»âð« InstaWPã®ãã¥ãŒã¹ã¬ã¿ãŒè³Œèªè ãMailchimpãžèªåéä¿¡ããGraphQLã¯ãšãª
ïŒãã®ã¯ãšãªã®èæ¯ã«ã€ããŠã¯ãããã°èšäº ð InstaWPã®ãã¥ãŒã¹ã¬ã¿ãŒè³Œèªè ãMailchimpãžèªåéä¿¡ãã ããèªã¿ãã ãããïŒ
ãã®GraphQLã¯ãšãªã¯ãInstaWP ã§æ°ãããµã³ãããã¯ã¹ãµã€ããäœæããéã«ãSubscribe to mailing listããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå ¥ãã蚪åè ã®ã¡ãŒã«ã¢ãã¬ã¹ãååŸãããã®ã¡ãŒã«ã¢ãã¬ã¹ãMailchimpã®ãªã¹ãã«ç»é²ããŸãã
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"
}
}
})
}ãããã¯ãWordPress ãã¥ãŒã¹ã¬ã¿ãŒãã©ã°ã€ã³ïŒäŸïŒNoptin ãªã©ïŒã«è³Œèªè ãç»é²ããããšãã§ããŸãã
ãã®GraphQLã¯ãšãªãã©ã®ããã«æ©èœããã®ãã詳ããèŠãŠãããŸãããã
GraphQLã¯ãšãªãç¬ç«ããåäœã«åå²ãã
GraphQLããã¥ã¡ã³ãã«ã¯è€æ°ã®ãªãã¬ãŒã·ã§ã³ïŒã¯ãšãªãšãã¥ãŒããŒã·ã§ã³ïŒãå«ããããšãã§ããŸãããå®è¡ãããã®ã¯ãã®ãã¡1ã€ã ãã§ããã©ããå®è¡ãããã¯ãGraphQLãšã³ããã€ã³ãã® ?operationName=... ãã©ã¡ãŒã¿ãŒã§æå®ããŸããæå®ããªãå Žåã¯ãæåŸã®ãªãã¬ãŒã·ã§ã³ãå®è¡ãããŸãã
äžèšã®ããã¥ã¡ã³ãã«ã¯2ã€ã® query ãªãã¬ãŒã·ã§ã³ãããããšã«æ³šç®ããŠãã ããã
HasSubscribedToNewsletterMaybeCreateContactOnMailchimp
Webhookã®URLã«ã¯ ?operationName=MaybeCreateContactOnMailchimp ãå«ãŸããŠããããããã®ãªãã¬ãŒã·ã§ã³ãå®è¡ãããŸãã
Multiple Query Execution æ¡åŒµæ©èœã®ãããã§ãMaybeCreateContactOnMailchimp 㯠@depends ãã£ã¬ã¯ãã£ãã§æå®ããããšãããæåã« HasSubscribedToNewsletter ãå®è¡ããŸãã
query MaybeCreateContactOnMailchimp
@depends(on: "HasSubscribedToNewsletter")
# ...
{
#
}ããã«ãMaybeCreateContactOnMailchimp ã¯æ¡ä»¶ä»ãã§å®è¡ãããŸãã倿° $subscribedToNewsletter ã®å€ã true ã®å Žåã«ã®ã¿å®è¡ãããŸãã
query MaybeCreateContactOnMailchimp
@depends(on: "HasSubscribedToNewsletter")
@include(if: $subscribedToNewsletter)
{
#
}$subscribedToNewsletter 㯠åç倿° ã§ãããHasSubscribedToNewsletter ãªãã¬ãŒã·ã§ã³å
ã§ãšã¯ã¹ããŒããããŸãã
query HasSubscribedToNewsletter {
# ...
subscribedToNewsletter: _and(values: [$__hasSubscriberOptIn, $__isNotSubscriberOptInNAValue])
@export(as: "subscribedToNewsletter")
}ãããã£ãŠãMaybeCreateContactOnMailchimp ãªãã¬ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒããSubscribe to mailing listããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå
¥ããå Žåã«ã®ã¿å®è¡ãããŸãã
ãŠãŒã¶ãŒããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå ¥ãããã©ãããå€å®ãã
InstaWP ã® Webhookããã¥ã¡ã³ã ã«ã¯ããã€ããŒãããŒã¿ã«æ¬¡ã®ãã£ãŒã«ããå«ãŸããããšãèšèŒãããŠããŸãïŒä»ã«ãè€æ°ãããŸãïŒã
marketing_optinïŒãŠãŒã¶ãŒããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå ¥ãããã©ããã瀺ããŸãemailïŒèšªåè ã®ã¡ãŒã«ã¢ãã¬ã¹
ããã¥ã¡ã³ãã«ã¯ããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå
¥ã£ãŠããªãå Žåããã£ãŒã«ã marketing_optin ã®å€ã NA ã«ãªããšã ã説æãããŠããããããããåæã«åŠçããå¿
èŠããããŸãã
ãŠãŒã¶ãŒããã§ãã¯ããã¯ã¹ã«ãã§ãã¯ãå ¥ãããã©ãããå€å®ããããžãã¯ã¯æ¬¡ã®ãšããã§ãã
- ãã£ãŒã«ã
marketing_optinãååšãããã©ããã確èªãã - ãã®å€ã
NAã§ãªãããšã確èªãã
ãã®åŠç㯠HasSubscribedToNewsletter ãªãã¬ãŒã·ã§ã³ã§è¡ãããŸããåè¡ãäœãããŠããããã³ã¡ã³ãã§èª¬æãã圢ã§ç€ºããŸãã
query HasSubscribedToNewsletter {
# Check if field `marketing_optin` is present
hasSubscriberOptIn: _httpRequestHasParam(name: "marketing_optin")
# Get the value of field `marketing_optin`
subscriberOptIn: _httpRequestStringParam(name: "marketing_optin")
# Check if the value of the field is not "NA"
isNotSubscriberOptInNAValue: _notEquals(value1: $__subscriberOptIn, value2: "NA")
# Perform an AND operation: field present && value != "NA"
subscribedToNewsletter: _and(values: [$__hasSubscriberOptIn, $__isNotSubscriberOptInNAValue])
# Export the result under dynamic variable $subscribedToNewsletter
@export(as: "subscribedToNewsletter")
}ãã®ã¯ãšãªã«ã¯ããã€ãè峿·±ãç¹ããããŸãã
ã°ããŒãã«ãã£ãŒã«ã
_ ã§å§ãŸããã£ãŒã«ãã«æ°ã¥ããŸãããïŒå
·äœçã«ã¯æ¬¡ã®ãã®ã§ãã
_httpRequestHasParam_httpRequestStringParam_notEquals_and
ããã㯠ã°ããŒãã«ãã£ãŒã«ã ãšåŒã°ãããã®ã§ãããGraphQLã¹ããŒãã®ãã¹ãŠã®åã§å©çšå¯èœãªãã£ãŒã«ãã§ããã°ããŒãã«ãã£ãŒã«ãã¯ããŒã¿ã§ã¯ãªãæ©èœãæäŸããæ
£äŸãšã㊠_ ã§å§ãŸããŸãã
Field to Input
$__ ã§å§ãŸã倿°ã«æ°ã¥ããŸãããïŒå
·äœçã«ã¯æ¬¡ã®ãã®ã§ãã
$__subscriberOptIn$__hasSubscriberOptIn$__isNotSubscriberOptInNAValue
ãããã¯åç倿°ã§ãããåäžãªãã¬ãŒã·ã§ã³å
ã§ããããåã«å®çŸ©ããããã£ãŒã«ãã®å€ãä¿æããŸããããšãã°ã倿° $__subscriberOptIn ã«ã¯ããã®äžã§å®£èšããããã£ãŒã«ã subscriberOptIn ã®å€ãæ ŒçŽãããŠããŸãã
ãã®æ©èœã¯ Field to Input æ¡åŒµæ©èœã«ãã£ãŠæäŸãããŠããããããã£ãŒã«ãã®åºåãå¥ã®ãã£ãŒã«ãã®å ¥åãšããŠäœ¿çšã§ããŸããããã«ãããGraphQLã¯ãšãªå ã«æ©èœãäœã蟌ãããšãã§ããŸãã
ãã®ã¯ãšãªã§ã¯ããã£ãŒã«ã isNotSubscriberOptInNAValue ããåã«ã¯ãšãªãããã£ãŒã«ã subscriberOptIn ã®å€ã "NA" ãšçãããªãããšã確èªããsubscribedToNewsletter ããã£ãŒã«ã hasSubscriberOptIn ãš isNotSubscriberOptInNAValue ã®å€ã䜿ã£ãŠ AND æŒç®ãè¡ããŸãã
Mailchimpãžã®æ¥ç¶
MaybeCreateContactOnMailchimp ãªãã¬ãŒã·ã§ã³ã«ã¯ããã€ããŒãããŒã¿ãæœåºããŠMailchimp APIãåŒã³åºããã¡ãŒã«ã¢ãã¬ã¹ããã¥ãŒã¹ã¬ã¿ãŒãªã¹ãã«ç»é²ããããžãã¯ãå«ãŸããŠããŸãã
åè¡ãäœãããŠããããã³ã¡ã³ãã§èª¬æãã圢ã§ãªãã¬ãŒã·ã§ã³ã瀺ããŸãã
query MaybeCreateContactOnMailchimp
@depends(on: "HasSubscribedToNewsletter")
@include(if: $subscribedToNewsletter)
{
# Extract form field `email` from the body of the request
subscriberEmail: _httpRequestStringParam(name: "email")
# Obtain Mailchimp credentials, defined in wp-config.php
mailchimpUsername: _env(name: "MAILCHIMP_API_CREDENTIALS_USERNAME")
# Do not print the credentials in the response
@remove
mailchimpPassword: _env(name: "MAILCHIMP_API_CREDENTIALS_PASSWORD")
@remove
# Connect to Mailchimp to add a new member to the list
mailchimpListMembersJSONObject: _sendJSONObjectItemHTTPRequest(input: {
url: "https://us7.api.mailchimp.com/3.0/lists/{listCode}/members",
method: POST,
options: {
# Provide credentials to connect to the API
auth: {
username: $__mailchimpUsername,
password: $__mailchimpPassword
},
# Provide form data
json: {
email_address: $__subscriberEmail,
status: "subscribed"
}
}
})
}ãã®ã¯ãšãªã§äœ¿çšãããŠããæ©èœã詳ããèŠãŠãããŸãããã
ç°å¢å€æ°
Mailchimp APIã«æ¥ç¶ããéã«ã¯ãèªèšŒæ å ±ãæäŸããå¿ èŠããããŸããããããèªèšŒæ å ±ãGraphQLã¯ãšãªã«çŽæ¥èšè¿°ããããšã¯é¿ããã¹ãã§ããã©ããã«æŒæŽ©ããå¯èœæ§ãããããã§ãïŒäŸïŒãã°ã«åºåãããŠããŸããªã©ïŒã
ãã®ãããã°ããŒãã«ãã£ãŒã«ã _envïŒPHP Constants and Environment via Schema æ¡åŒµæ©èœãæäŸïŒã䜿ã£ãŠç°å¢å€æ°ãŸãã¯PHP宿°ãèªã¿èŸŒã¿ã@remove ãã£ã¬ã¯ãã£ãïŒField Response Removal æ¡åŒµæ©èœãæäŸïŒã䜿ã£ãŠã¬ã¹ãã³ã¹ã«èªèšŒæ
å ±ãåºåãããªãããã«ããŸãã
ããã§ãèªèšŒæ
å ±ã wp-config.php ã«å®£èšã§ããŸãã
define( 'MAILCHIMP_API_CREDENTIALS_USERNAME', '{ username }' );
define( 'MAILCHIMP_API_CREDENTIALS_PASSWORD', '{ password }' );Mailchimpãžã®HTTPãªã¯ãšã¹ãã®éä¿¡
ããžãã¯ã®æåŸã®éšåã¯ããã£ãŒã«ã _sendJSONObjectItemHTTPRequest ã§ãããã®ãã£ãŒã«ãã¯ä»»æã®ãµãŒãã¹ã«HTTPãªã¯ãšã¹ããéä¿¡ããŸãã
Mailchimp APIã«æ¥ç¶ããããããã£ãŒã«ã mailchimpListMembersJSONObject 㯠Mailchimpãªã¹ãã«ã¡ã³ããŒãç»é²ãã ããã¥ã¡ã³ãã«èšèŒããã Mailchimp ã® REST APIãšã³ããã€ã³ããå¿
èŠãšããããŒã¿ãæäŸããŸãã
POSTãªã¯ãšã¹ããéä¿¡ãã- ãšã³ããã€ã³ãã¯
https://{subdomain}.api.mailchimp.com/3.0/lists/{listCode}/members - ããã£ã«ã¯
email_addressãšstatusãã£ãŒã«ããå«ããå¿ èŠããã
ä»»æã®APIãšé£æºããWebhookãäœæãã
ãã®èšäºã®GraphQLã¯ãšãªã¯ãInstaWP ããMailchimp ãžããŒã¿ã転éããŸãã
åãã¢ã€ãã¢ããå¿ èŠãªä»»æã®çµã¿åããã«å¿çšã§ããŸãããœãŒã¹ãµãŒãã¹ïŒã©ã®ãããªãã®ã§ãïŒããããŒã¿ãæœåºããå å·¥ããŠããã¹ãã£ããŒã·ã§ã³ãµãŒãã¹ïŒã©ã®ãããªãã®ã§ãïŒã«éä¿¡ããŠãã ããã
ãæ¥œãã¿ãã ããïŒ