CM360 অফলাইন কনভার্সন এপিআই ব্যবহারকারী শনাক্তকারী ব্যবহার করে ওয়েবসাইট ট্যাগ-ভিত্তিক কনভার্সন উন্নত করতে সহায়তা করে।

প্রস্তাবিত সেটআপ
- CM360-এ আপনার ফ্লাডলাইট কনফিগারেশনের জন্য উন্নত রূপান্তর পরিষেবার শর্তাবলী গ্রহণ করুন।
- আপনার ওয়েবসাইটগুলোকে ম্যাচ আইডি দিয়ে সজ্জিত করুন।
- আপনার ওয়েবসাইটে সংঘটিত ফ্ল্যাডলাইট কনভার্সনগুলো রেকর্ড করুন। নিম্নলিখিত সমস্ত তথ্য অবশ্যই রেকর্ড করুন, কারণ পরবর্তী এপিআই কলগুলোর জন্য এগুলো আবশ্যক ফিল্ড:
-
matchId -
ordinal -
timestampMicros -
floodlightActivityId -
floodlightConfigurationId -
quantity -
value
-
- অনলাইন ট্যাগটি কনভার্সনটি ক্যাপচার করার ৯০ মিনিট পর, ইউজার আইডেন্টিফায়ার দিয়ে এই কনভার্সনগুলোকে এনহ্যান্স করতে
conversions.batchupdateকল করুন।- ব্যবহারকারীর শনাক্তকারীগুলোকে ফরম্যাট ও হ্যাশ করে কনভার্সন অবজেক্টের
userIdentifiersফিল্ডে যোগ করতে হবে। - পরিমাণ এবং মান অবশ্যই নির্দিষ্ট করতে হবে। আপনি চাইলে একই
conversions.batchupdateকলে রূপান্তরের পরিমাণ ও মান সমন্বয় করতে পারেন, অথবা মূল পরিমাণ ও মান প্রদান করতে পারেন। - ইনসার্ট এবং আপডেটের প্রতিটি ব্যাচে সাফল্য এবং ব্যর্থতার মিশ্রণ থাকতে পারে। রূপান্তর প্রক্রিয়াকরণে স্বাভাবিকের চেয়ে বেশি বিলম্ব হলে,
NOT_FOUNDব্যর্থতার ক্ষেত্রে সর্বোচ্চ ৬ ঘন্টা পর্যন্ত পুনরায় চেষ্টা করা উচিত। - অনলাইন ট্যাগ দ্বারা ক্যাপচার করার ২৪ ঘন্টার মধ্যে ইউজার আইডেন্টিফায়ার দিয়ে কনভার্সনগুলোকে উন্নত করতে হবে।
- ব্যবহারকারীর শনাক্তকারীগুলোকে ফরম্যাট ও হ্যাশ করে কনভার্সন অবজেক্টের
স্বাভাবিকীকরণ এবং হ্যাশিং
গোপনীয়তা রক্ষায় সাহায্য করার জন্য, ইমেল ঠিকানা, ফোন নম্বর, প্রথম নাম, শেষ নাম এবং রাস্তার ঠিকানা আপলোড করার আগে অবশ্যই SHA-256 অ্যালগরিদম ব্যবহার করে হ্যাশ করতে হবে। হ্যাশ ফলাফলকে মানসম্মত করার জন্য, এই মানগুলির মধ্যে কোনো একটি হ্যাশ করার আগে আপনাকে অবশ্যই:
- শুরুতে বা শেষে থাকা অতিরিক্ত স্পেস মুছে ফেলুন।
- লেখাটিকে ছোট হাতের অক্ষরে রূপান্তর করুন।
- E164 স্ট্যান্ডার্ড অনুযায়ী ফোন নম্বর ফরম্যাট করুন। প্লাস চিহ্ন (
+) এবং দেশের কোড অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, মার্কিন ফোন নম্বর(800)555-0200কে+18005550200-এ ফরম্যাট এবং নরমালাইজ করতে হবে। gmail.comএবংgooglemail.comইমেল অ্যাড্রেস থেকে ডোমেইন নামের আগে থাকা সমস্ত ডট (.) মুছে ফেলুন।
সি#
/// <summary>
/// Normalizes the email address and hashes it. For this use case, Campaign Manager 360
/// requires removal of any '.' characters preceding <code>gmail.com</code> or
/// <code>googlemail.com</code>.
/// </summary>
/// <param name="emailAddress">The email address.</param>
/// <returns>The hash code.</returns>
private string NormalizeAndHashEmailAddress(string emailAddress)
{
string normalizedEmail = emailAddress.ToLower();
string[] emailParts = normalizedEmail.Split('@');
if (emailParts.Length > 1 && (emailParts[1] == "gmail.com" ||
emailParts[1] == "googlemail.com"))
{
// Removes any '.' characters from the portion of the email address before
// the domain if the domain is gmail.com or googlemail.com.
emailParts[0] = emailParts[0].Replace(".", "");
normalizedEmail = $"{emailParts[0]}@{emailParts[1]}";
}
return NormalizeAndHash(normalizedEmail);
}
/// <summary>
/// Normalizes and hashes a string value.
/// </summary>
/// <param name="value">The value to normalize and hash.</param>
/// <returns>The normalized and hashed value.</returns>
private static string NormalizeAndHash(string value)
{
return ToSha256String(digest, ToNormalizedValue(value));
}
/// <summary>
/// Hash a string value using SHA-256 hashing algorithm.
/// </summary>
/// <param name="digest">Provides the algorithm for SHA-256.</param>
/// <param name="value">The string value (e.g. an email address) to hash.</param>
/// <returns>The hashed value.</returns>
private static string ToSha256String(SHA256 digest, string value)
{
byte[] digestBytes = digest.ComputeHash(Encoding.UTF8.GetBytes(value));
// Convert the byte array into an unhyphenated hexadecimal string.
return BitConverter.ToString(digestBytes).Replace("-", string.Empty);
}
/// <summary>
/// Removes leading and trailing whitespace and converts all characters to
/// lower case.
/// </summary>
/// <param name="value">The value to normalize.</param>
/// <returns>The normalized value.</returns>
private static string ToNormalizedValue(string value)
{
return value.Trim().ToLower();
}
জাভা
private String normalizeAndHash(MessageDigest digest, String s)
throws UnsupportedEncodingException {
// Normalizes by removing leading and trailing whitespace and converting all characters to
// lower case.
String normalized = s.trim().toLowerCase();
// Hashes the normalized string using the hashing algorithm.
byte[] hash = digest.digest(normalized.getBytes("UTF-8"));
StringBuilder result = new StringBuilder();
for (byte b : hash) {
result.append(String.format("%02x", b));
}
return result.toString();
}
/**
* Returns the result of normalizing and hashing an email address. For this use case, Campaign Manager 360
* requires removal of any '.' characters preceding {@code gmail.com} or {@code googlemail.com}.
*
* @param digest the digest to use to hash the normalized string.
* @param emailAddress the email address to normalize and hash.
*/
private String normalizeAndHashEmailAddress(MessageDigest digest, String emailAddress)
throws UnsupportedEncodingException {
String normalizedEmail = emailAddress.toLowerCase();
String[] emailParts = normalizedEmail.split("@");
if (emailParts.length > 1 && emailParts[1].matches("^(gmail|googlemail)\\.com\\s*")) {
// Removes any '.' characters from the portion of the email address before the domain if the
// domain is gmail.com or googlemail.com.
emailParts[0] = emailParts[0].replaceAll("\\.", "");
normalizedEmail = String.format("%s@%s", emailParts[0], emailParts[1]);
}
return normalizeAndHash(digest, normalizedEmail);
}
পিএইচপি
private static function normalizeAndHash(string $hashAlgorithm, string $value): string
{
return hash($hashAlgorithm, strtolower(trim($value)));
}
/**
* Returns the result of normalizing and hashing an email address. For this use case, Campaign
* Manager 360 requires removal of any '.' characters preceding "gmail.com" or "googlemail.com".
*
* @param string $hashAlgorithm the hash algorithm to use
* @param string $emailAddress the email address to normalize and hash
* @return string the normalized and hashed email address
*/
private static function normalizeAndHashEmailAddress(
string $hashAlgorithm,
string $emailAddress
): string {
$normalizedEmail = strtolower($emailAddress);
$emailParts = explode("@", $normalizedEmail);
if (
count($emailParts) > 1
&& preg_match('/^(gmail|googlemail)\.com\s*/', $emailParts[1])
) {
// Removes any '.' characters from the portion of the email address before the domain
// if the domain is gmail.com or googlemail.com.
$emailParts[0] = str_replace(".", "", $emailParts[0]);
$normalizedEmail = sprintf('%s@%s', $emailParts[0], $emailParts[1]);
}
return self::normalizeAndHash($hashAlgorithm, $normalizedEmail);
}
পাইথন
def normalize_and_hash_email_address(email_address):
"""Returns the result of normalizing and hashing an email address.
For this use case, Campaign Manager 360 requires removal of any '.'
characters preceding "gmail.com" or "googlemail.com"
Args:
email_address: An email address to normalize.
Returns:
A normalized (lowercase, removed whitespace) and SHA-265 hashed string.
"""
normalized_email = email_address.lower()
email_parts = normalized_email.split("@")
# Checks whether the domain of the email address is either "gmail.com"
# or "googlemail.com". If this regex does not match then this statement
# will evaluate to None.
is_gmail = re.match(r"^(gmail|googlemail)\.com$", email_parts[1])
# Check that there are at least two segments and the second segment
# matches the above regex expression validating the email domain name.
if len(email_parts) > 1 and is_gmail:
# Removes any '.' characters from the portion of the email address
# before the domain if the domain is gmail.com or googlemail.com.
email_parts[0] = email_parts[0].replace(".", "")
normalized_email = "@".join(email_parts)
return normalize_and_hash(normalized_email)
def normalize_and_hash(s):
"""Normalizes and hashes a string with SHA-256.
Private customer data must be hashed during upload, as described at:
https://support.google.com/google-ads/answer/7474263
Args:
s: The string to perform this operation on.
Returns:
A normalized (lowercase, removed whitespace) and SHA-256 hashed string.
"""
return hashlib.sha256(s.strip().lower().encode()).hexdigest()
রুবি
# Returns the result of normalizing and then hashing the string using the
# provided digest. Private customer data must be hashed during upload, as
# described at https://support.google.com/google-ads/answer/7474263.
def normalize_and_hash(str)
# Remove leading and trailing whitespace and ensure all letters are lowercase
# before hasing.
Digest::SHA256.hexdigest(str.strip.downcase)
end
# Returns the result of normalizing and hashing an email address. For this use
# case, Campaign Manager 360 requires removal of any '.' characters preceding
# 'gmail.com' or 'googlemail.com'.
def normalize_and_hash_email(email)
email_parts = email.downcase.split("@")
# Removes any '.' characters from the portion of the email address before the
# domain if the domain is gmail.com or googlemail.com.
if email_parts.last =~ /^(gmail|googlemail)\.com\s*/
email_parts[0] = email_parts[0].gsub('.', '')
end
normalize_and_hash(email_parts.join('@'))
end
রূপান্তরে ব্যবহারকারী শনাক্তকারী যোগ করুন
প্রথমে স্বাভাবিকভাবে আপলোড বা সম্পাদনার জন্য Conversion অবজেক্টটি প্রস্তুত করুন, তারপর নিম্নরূপে ইউজার আইডেন্টিফায়ার সংযুক্ত করুন:
{
"matchId": "my-match-id-846513278",
"ordinal": "my-ordinal-12345678512",
"quantity": 1,
"value": 104.23,
"timestampMicros": 1656950400000000,
"floodlightConfigurationId": 99999,
"floodlightActivityId": 8888,
"userIdentifiers": [
{ "hashedEmail": "0c7e6a405862e402eb76a70f8a26fc732d07c32931e9fae9ab1582911d2e8a3b" },
{ "hashedPhoneNumber": "1fb1f420856780a29719b994c8764b81770d79f97e2e1861ba938a7a5a15dfb9" },
{
"addressInfo": {
"hashedFirstName": "81f8f6dde88365f3928796ec7aa53f72820b06db8664f5fe76a7eb13e24546a2",
"hashedLastName": "799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f",
"hashedStreetAddress": "22b7e2d69b91e0ef4a88e81a73d897b92fd9c93ccfbe0a860f77db16c26f662e",
"city": "seattle",
"state": "washington",
"countryCode": "US",
"postalCode": "98101"
}
}
]
}
একটি সফল প্রতিক্রিয়া দেখতে এইরকম হওয়া উচিত:
{
"hasFailures": false,
"status": [
{
"conversion": {
"floodlightConfigurationId": 99999,
"floodlightActivityId": 8888,
"timestampMicros": 1656950400000000,
"value": 104.23,
"quantity": 1,
"ordinal": "my-ordinal-12345678512",
"matchId": "my-match-id-846513278",
"userIdentifiers": [
{ "hashedEmail": "0c7e6a405862e402eb76a70f8a26fc732d07c32931e9fae9ab1582911d2e8a3b" },
{ "hashedPhoneNumber": "1fb1f420856780a29719b994c8764b81770d79f97e2e1861ba938a7a5a15dfb9" },
{
"addressInfo": {
"hashedFirstName": "81f8f6dde88365f3928796ec7aa53f72820b06db8664f5fe76a7eb13e24546a2",
"hashedLastName": "799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f",
"hashedStreetAddress": "22b7e2d69b91e0ef4a88e81a73d897b92fd9c93ccfbe0a860f77db16c26f662e",
"city": "seattle",
"state": "washington",
"countryCode": "US",
"postalCode": "98101"
}
}
],
"kind": "dfareporting#conversion"
},
"kind": "dfareporting#conversionStatus"
}
]
}
সাধারণ ভুল
ব্যবহারকারী শনাক্তকারী ব্যবহার করে কোনো রূপান্তর উন্নত করার সময় আপনি যে ত্রুটিগুলো দেখতে পারেন, তার কয়েকটি নিচে দেওয়া হলো:
- hashed_X ফিল্ডটি একটি বৈধ SHA-256 হ্যাশ নয়।
- যেসব ফিল্ডের শুরুতে 'hashed' লেখা আছে, সেগুলোতে শুধুমাত্র হেক্সাডেসিমেলে এনকোড করা SHA-256 হ্যাশ গ্রহণ করা হয়।
- country_code ফিল্ডটির দৈর্ঘ্য ভুল।
-
country_codeঅবশ্যই ঠিক ২টি অক্ষরের হতে হবে। - ফ্লাডলাইট কনফিগারেশন উন্নত রূপান্তর পরিষেবার শর্তাবলীতে স্বাক্ষর করেনি।
- অনুরোধটির ফ্ল্যাডলাইট কনফিগারেশন আইডির জন্য এনহ্যান্সড কনভার্সনস পরিষেবার শর্তাবলী গৃহীত হয়নি।
- পাঁচটির বেশি ব্যবহারকারী শনাক্তকারী নির্দিষ্ট করা হয়েছে
- একটি রূপান্তরে সর্বোচ্চ ৫টি ব্যবহারকারী শনাক্তকারী থাকতে পারে।
সচরাচর জিজ্ঞাস্য
- ম্যাচ আইডি কেন সুপারিশ করা হয়?
- ক্লিক আইডি ভিত্তিক সম্পাদনা সেইসব রূপান্তরকে বাদ দেয় যেগুলোর আগে কোনো ক্লিক করা হয়নি এবং উন্নত রূপান্তর ইন্টিগ্রেশনের উপযোগিতা সীমিত করে।
- পরিমাণ ও মান কেন লিপিবদ্ধ করা উচিত?
- CM360 অফলাইন রূপান্তর API ব্যবহার করার জন্য পরিমাণ এবং মান নির্দিষ্ট করতে হয়।
- অনলাইন ট্যাগ-ভিত্তিক রূপান্তর সম্পাদনা করার জন্য আমার কি গুগল দ্বারা রেকর্ড করা সঠিক মাইক্রোসেকেন্ড টাইমস্ট্যাম্পটি পাওয়ার প্রয়োজন আছে?
- ম্যাচ আইডি ভিত্তিক সম্পাদনার ক্ষেত্রে, অনুরোধে প্রদত্ত টাইমস্ট্যাম্পটি গুগলের রেকর্ড করা টাইমস্ট্যাম্পের ১ মিনিটের মধ্যে থাকলেই এপিআই এখন সম্পাদনাটি গ্রহণ করে।
- অনলাইন ট্যাগ দ্বারা একটি কনভার্সন ক্যাপচার হওয়ার পর সেটিকে এনহ্যান্স করার আগে আমাকে কেন ৯০ মিনিট অপেক্ষা করতে হয়?
- অনলাইন রূপান্তরটি এপিআই দ্বারা সূচীবদ্ধ হতে এবং সম্পাদনার জন্য উপলব্ধ হতে ৯০ মিনিট পর্যন্ত সময় লাগতে পারে।
- এপিআই রেসপন্সে আমার কোন বিষয়গুলোর প্রতি মনোযোগ দেওয়া উচিত?
- এমনকি যখন CM360 কনভার্সন API একটি সফল প্রতিক্রিয়া প্রদান করে, তখনও কিছু স্বতন্ত্র কনভার্সন আপলোড বা আপডেট হতে ব্যর্থ হতে পারে। ব্যর্থতার জন্য স্বতন্ত্র
ConversionStatusফিল্ডগুলি পরীক্ষা করুন:- রূপান্তর প্রক্রিয়াকরণে স্বাভাবিকের চেয়ে বেশি বিলম্ব হলে,
NOT_FOUNDব্যর্থতার ক্ষেত্রে ৬ ঘন্টা পর্যন্ত পুনরায় চেষ্টা করা যেতে পারে এবং করা উচিত। এছাড়াও, কেনNOT_FOUNDত্রুটি ৬ ঘন্টার পরেও থাকতে পারে, তা জানতে FAQ দেখুন। -
INVALID_ARGUMENTএবংPERMISSION_DENIEDত্রুটির ক্ষেত্রে পুনরায় চেষ্টা করা উচিত নয়।
- রূপান্তর প্রক্রিয়াকরণে স্বাভাবিকের চেয়ে বেশি বিলম্ব হলে,