במדריך הזה מוסבר איך משתמשים ב-Merchant API כדי לנהל את העדפות האימייל בחשבון Merchant Center לגבי אימיילים לא חובה.
העדפות האימייל שלכם ספציפיות לכל חשבון Merchant Center שיש לכם גישה אליו. אם אתם מנהלים כמה חשבונות, אתם יכולים להגדיר העדפות שונות לכל אחד מהם. ה-Merchant API מאפשר לכם לאחזר את ההגדרות הנוכחיות ולעדכן אותן. מידע נוסף על ניהול העדפות אימייל דרך הממשק של Merchant Center זמין במאמר שינוי העדפות אימייל ב-Merchant Center.
Merchant API תומך רק בניהול ההעדפות של אימיילים בנושא 'חדשות וטיפים'.
שיקולים מיוחדים
- משתמש מאומת בלבד: אפשר לקבל או לעדכן את העדפות האימייל רק עבור חשבון המשתמש שאומת לקריאה ל-API. צריך לציין את כתובת האימייל של המשתמש בנתיב הבקשה (לדוגמה,
user@email.com
) או להשתמש בכינויme
. - חשבונות מתקדמים: אם אתם משתמשים בחשבון מתקדם, העדפות האימייל שלכם מוגדרות ברמת החשבון המתקדם, והן חלות על החשבון המתקדם עצמו ועל כל החשבונות המשניים שלו. כשמשתמשים ב-API, משתמשים בחשבון מתקדם צריכים לציין את מזהה החשבון המתקדם כדי לנהל את ההעדפות שלהם.
- חשבונות שירות: חשבונות שירות לא מקבלים התראות גם אם הוגדרו להם העדפות אימייל.
UNCONFIRMED
מצב: רק השרת יכול להגדיר אתUNCONFIRMED
מצב ההסכמה להעדפות אימייל. אי אפשר להגדיר העדפה לערךUNCONFIRMED
באמצעות ה-API. ניסיון להגדיר את ההעדפה הזו יגרום לשגיאה. הסטטוסUNCONFIRMED
מציין שנשלח אימייל אישור למשתמש שהביע הסכמה, אבל הוא עדיין לא לחץ על קישור האישור.
בדיקת העדפות האימייל ב-Merchant Center
כדי לראות את הגדרות ההתראות באימייל הנוכחיות של חשבון Merchant Center ספציפי, משתמשים בשיטה GetEmailPreferences
. תצטרכו לספק את מזהה חשבון Merchant Center ולהשתמש בכתובת האימייל של המשתמש או בכינוי me
כדי לציין את המשתמש שאומת.
הבקשה הזו מאחזרת את המשאב EmailPreferences
, שבו מוצג סטטוס ההצטרפות שלכם לקטגוריות ההתראות הזמינות, כמו news_and_tips
.
GET https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences
בקשה שמבוצעת בהצלחה מחזירה את המשאב EmailPreferences
עם ההגדרות הנוכחיות.
תשובה לדוגמה:
{
"name": "accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences",
"news_and_tips": "OPTED_IN"
}
בדוגמת הקוד הזו מוצגות ההעדפות של כתובת האימייל בחשבון Merchant Center.
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.EmailPreferences;
import com.google.shopping.merchant.accounts.v1.EmailPreferencesName;
import com.google.shopping.merchant.accounts.v1.EmailPreferencesServiceClient;
import com.google.shopping.merchant.accounts.v1.EmailPreferencesServiceSettings;
import com.google.shopping.merchant.accounts.v1.GetEmailPreferencesRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to get the email preferences of a Merchant Center account. */
public class GetEmailPreferencesSample {
public static void getEmailPreferences(Config config, String email) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
EmailPreferencesServiceSettings emailPreferencesServiceSettings =
EmailPreferencesServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates EmailPreferences name to identify the EmailPreferences.
String name =
EmailPreferencesName.newBuilder()
.setAccount(config.getAccountId().toString())
.setEmail(email)
.build()
.toString();
// Calls the API and catches and prints any network failures/errors.
try (EmailPreferencesServiceClient emailPreferencesServiceClient =
EmailPreferencesServiceClient.create(emailPreferencesServiceSettings)) {
// The name has the format: accounts/{account}/users/{user}/emailPreferences
GetEmailPreferencesRequest request =
GetEmailPreferencesRequest.newBuilder().setName(name).build();
System.out.println("Sending get EmailPreferences request:");
EmailPreferences response = emailPreferencesServiceClient.getEmailPreferences(request);
System.out.println("Retrieved EmailPreferences below");
System.out.println(response);
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// The email address of this user. If you want to get the user information
// Of the user making the Content API request, you can also use "me" instead
// Of an email address.
String email = "testUser@gmail.com";
// String email = "me";
getEmailPreferences(config, email);
}
}
PHP
use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\EmailPreferencesServiceClient;
use Google\Shopping\Merchant\Accounts\V1\GetEmailPreferencesRequest;
/**
* This class demonstrates how to get the email preferences of a Merchant Center account.
*/
class GetEmailPreferences
{
/**
* Gets the email preferences of a Merchant Center account.
*
* @param array $config
* The configuration data used for authentication and getting the acccount ID.
* @param string $email The email address of this user. If you want to get the user information
* of the user making the Merchant API request, you can also use "me" instead
* of an email address.
*
* @return void
*/
public static function getEmailPreferencesSample($config, $email): void
{
// Gets the OAuth credentials to make the request.
$credentials = Authentication::useServiceAccountOrTokenFile();
// Creates options config containing credentials for the client to use.
$options = ['credentials' => $credentials];
// Creates a client.
$emailPreferencesServiceClient = new EmailPreferencesServiceClient($options);
// Creates EmailPreferences name to identify the EmailPreferences.
// The name has the format: accounts/{account}/users/{user}/emailPreferences
$name = "accounts/" . $config['accountId'] . "/users/" . $email . "/emailPreferences";
// Calls the API and catches and prints any network failures/errors.
try {
$request = (new GetEmailPreferencesRequest())
->setName($name);
print "Sending get EmailPreferences request:\n";
$response = $emailPreferencesServiceClient->getEmailPreferences($request);
print "Retrieved EmailPreferences below\n";
print_r($response);
} catch (ApiException $e) {
print $e->getMessage();
}
}
/**
* Helper to execute the sample.
*
* @return void
*/
public function callSample(): void
{
$config = Config::generateConfig();
// The email address of this user. If you want to get the user information
// Of the user making the Merchant API request, you can also use "me" instead
// Of an email address.
// $email = "testUser@gmail.com";
$email = "me";
self::getEmailPreferencesSample($config, $email);
}
}
// Run the script
$sample = new GetEmailPreferences();
$sample->callSample();
Python
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import EmailPreferencesServiceClient
from google.shopping.merchant_accounts_v1 import GetEmailPreferencesRequest
_ACCOUNT = configuration.Configuration().read_merchant_info()
def get_email_preferences(email_address):
"""Gets the email preferences of a Merchant Center account."""
# Gets OAuth Credentials.
credentials = generate_user_credentials.main()
# Creates a client.
client = EmailPreferencesServiceClient(credentials=credentials)
# Creates EmailPreferences name to identify the EmailPreferences.
name = (
"accounts/" + _ACCOUNT + "/users/" + email_address + "/emailPreferences"
)
# Creates the request.
request = GetEmailPreferencesRequest(name=name)
# Makes the request and catches and prints any error messages.
try:
response = client.get_email_preferences(request=request)
print("Retrieved EmailPreferences below")
print(response)
except RuntimeError as e:
print(e)
if __name__ == "__main__":
# The email address of this user. If you want to get the user information
# Of the user making the Content API request, you can also use "me" instead
# Of an email address.
# email = "testUser@gmail.com"
email = "me"
get_email_preferences(email)
cURL
curl --location \
'https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences' \
--header 'Authorization: Bearer <API_TOKEN>'
שינוי העדפות אימייל ב-Merchant Center
כדי לשנות את ההעדפות לגבי קבלת התראות באימייל, למשל להביע הסכמה לקבלת אימיילים עם חדשות וטיפים או לבטל את ההסכמה, משתמשים בשיטה UpdateEmailPreferences
.
בבקשה, תציינו את מספר חשבון Merchant Center ותשתמשו בכתובת האימייל שלכם (או בכינוי me
) בשביל כתובת האימייל של המשתמש. גוף הבקשה צריך לכלול את האובייקט EmailPreferences
עם הערך opt_in_state
שנבחר בשדה news_and_tips
. צריך גם לציין את הפרמטר news_and_tips
בשאילתת update_mask
כדי לציין איזו העדפה משנים.
הפעולה הזו מעדכנת את העדפות האימייל של המשתמש המאומת בחשבון Merchant Center שצוין. לדוגמה, אם מגדירים את news_and_tips
לערך OPTED_OUT
, לא תקבלו יותר אימיילים עם חדשות וטיפים בחשבון הזה.
PATCH https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences?update_mask=news_and_tips
מטען ייעודי (payload) לדוגמה של בקשה (לביטול ההסכמה לקבלת 'חדשות וטיפים'):
{
"name": "accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences",
"news_and_tips": "OPTED_OUT"
}
בקשה שמושלמת בהצלחה מחזירה את המשאב EmailPreferences
המעודכן.
דוגמה לתשובה:
{
"name": "accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences",
"news_and_tips": "OPTED_OUT"
}
בדוגמת הקוד הזו מוצג איך לעדכן את העדפות האימייל בחשבון Merchant Center, למשל כדי להצטרף לרשימת התפוצה של אימיילים עם חדשות וטיפים.
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.accounts.v1.EmailPreferences;
import com.google.shopping.merchant.accounts.v1.EmailPreferences.OptInState;
import com.google.shopping.merchant.accounts.v1.EmailPreferencesName;
import com.google.shopping.merchant.accounts.v1.EmailPreferencesServiceClient;
import com.google.shopping.merchant.accounts.v1.EmailPreferencesServiceSettings;
import com.google.shopping.merchant.accounts.v1.UpdateEmailPreferencesRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/**
* This class demonstrates how to update a EmailPreferences to OPT_IN to News and Tips. This service
* only permits retrieving and updating email preferences for the authenticated user.
*/
public class UpdateEmailPreferencesSample {
public static void updateEmailPreferences(Config config, String email) throws Exception {
GoogleCredentials credential = new Authenticator().authenticate();
EmailPreferencesServiceSettings emailPreferencesServiceSettings =
EmailPreferencesServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates EmailPreferences name to identify EmailPreferences.
String name =
EmailPreferencesName.newBuilder()
.setAccount(config.getAccountId().toString())
.setEmail(email)
.build()
.toString();
// Create a EmailPreferences with the updated fields.
EmailPreferences emailPreferences =
EmailPreferences.newBuilder().setName(name).setNewsAndTips(OptInState.OPTED_IN).build();
FieldMask fieldMask = FieldMask.newBuilder().addPaths("news_and_tips").build();
try (EmailPreferencesServiceClient emailPreferencesServiceClient =
EmailPreferencesServiceClient.create(emailPreferencesServiceSettings)) {
UpdateEmailPreferencesRequest request =
UpdateEmailPreferencesRequest.newBuilder()
.setEmailPreferences(emailPreferences)
.setUpdateMask(fieldMask)
.build();
System.out.println("Sending Update EmailPreferences request");
EmailPreferences response = emailPreferencesServiceClient.updateEmailPreferences(request);
System.out.println("Updated EmailPreferences Name below");
System.out.println(response.getName());
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// The email address of this user. If you want to get the user information
// Of the user making the Content API request, you can also use "me" instead
// Of an email address.
// String email = "testUser@gmail.com";
String email = "me";
updateEmailPreferences(config, email);
}
}
PHP
use Google\ApiCore\ApiException;
use Google\Protobuf\FieldMask;
use Google\Shopping\Merchant\Accounts\V1\Client\EmailPreferencesServiceClient;
use Google\Shopping\Merchant\Accounts\V1\EmailPreferences;
use Google\Shopping\Merchant\Accounts\V1\EmailPreferences\OptInState;
use Google\Shopping\Merchant\Accounts\V1\UpdateEmailPreferencesRequest;
/**
* This class demonstrates how to update a EmailPreferences to OPT_IN to News and Tips. This service
* only permits retrieving and updating email preferences for the authenticated user.
*/
class UpdateEmailPreferences
{
/**
* Updates email preferences to OPT_IN to News and Tips.
*
* @param array $config
* The configuration data used for authentication and getting the acccount ID.
* @param string $email The email address of this user. If you want to get the user information
* of the user making the Merchant API request, you can also use "me" instead
* of an email address.
*
* @return void
*/
public static function updateEmailPreferencesSample($config, $email): void
{
// Gets the OAuth credentials to make the request.
$credentials = Authentication::useServiceAccountOrTokenFile();
// Creates options config containing credentials for the client to use.
$options = ['credentials' => $credentials];
// Creates a client.
$emailPreferencesServiceClient = new EmailPreferencesServiceClient($options);
// Creates EmailPreferences name to identify the EmailPreferences.
// The name has the format: accounts/{account}/users/{user}/emailPreferences
$name = "accounts/" . $config['accountId'] . "/users/" . $email . "/emailPreferences";
// Create a EmailPreferences with the updated fields.
$emailPreferences = (new EmailPreferences())
->setName($name)
->setNewsAndTips(OptInState::OPTED_OUT);
$fieldMask = (new FieldMask())
->setPaths(['news_and_tips']);
try {
$request = (new UpdateEmailPreferencesRequest())
->setEmailPreferences($emailPreferences)
->setUpdateMask($fieldMask);
print "Sending Update EmailPreferences request\n";
$response = $emailPreferencesServiceClient->updateEmailPreferences($request);
print "Updated EmailPreferences Name below\n";
print $response->getName() . "\n";
} catch (ApiException $e) {
print $e->getMessage();
}
}
/**
* Helper to execute the sample.
*
* @return void
*/
public function callSample(): void
{
$config = Config::generateConfig();
// The email address of this user. If you want to get the user information
// Of the user making the Merchant API request, you can also use "me" instead
// Of an email address.
// $email = "testUser@gmail.com";
$email = "me";
self::updateEmailPreferencesSample($config, $email);
}
}
// Run the script
$sample = new UpdateEmailPreferences();
$sample->callSample();
Python
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping.merchant_accounts_v1 import EmailPreferences
from google.shopping.merchant_accounts_v1 import EmailPreferencesServiceClient
from google.shopping.merchant_accounts_v1 import UpdateEmailPreferencesRequest
FieldMask = field_mask_pb2.FieldMask
_ACCOUNT = configuration.Configuration().read_merchant_info()
def update_email_preferences(email_address):
"""Updates a EmailPreferences to OPT_IN to News and Tips."""
# Gets OAuth Credentials.
credentials = generate_user_credentials.main()
# Creates a client.
client = EmailPreferencesServiceClient(credentials=credentials)
# Creates EmailPreferences name to identify EmailPreferences.
name = (
"accounts/" + _ACCOUNT + "/users/" + email_address + "/emailPreferences"
)
# Create a EmailPreferences with the updated fields.
email_preferences = EmailPreferences(
name=name, news_and_tips=EmailPreferences.OptInState.OPTED_IN
)
# Create field mask
field_mask = FieldMask(paths=["news_and_tips"])
# Creates the request.
request = UpdateEmailPreferencesRequest(
email_preferences=email_preferences, update_mask=field_mask
)
# Makes the request and catches and prints any error messages.
try:
response = client.update_email_preferences(request=request)
print("Updated EmailPreferences Name below")
print(response.name)
except RuntimeError as e:
print(e)
if __name__ == "__main__":
# The email address of this user. If you want to get the user information
# of the user making the Content API request, you can also use "me" instead
# of an email address.
# email = "testUser@gmail.com"
email = "me"
update_email_preferences(email)
cURL
curl --location --request PATCH \
'https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences?update_mask=news_and_tips' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_TOKEN>' \
--data '{
"name": "accounts/{ACCOUNT_ID}/users/{EMAIL_ADDRESS}/emailPreferences",
"news_and_tips": "OPTED_IN"
}'