একসাথে অনেক কোয়ারেন্টাইন করা মেসেজের উপর অ্যাকশন নিতে হলে, Mail Admin Quarantine API-তে
customers.quarantinedMessages
রিসোর্সের ব্যাচ
পদ্ধতি ব্যবহার করুন:
batchReleaseপদ্ধতিটি সর্বাধিক ৫০০টি মেসেজ রিলিজ করে।batchDenyপদ্ধতি সর্বাধিক ৫০০টি মেসেজ প্রত্যাখ্যান করে।
দুটি পদ্ধতিই অ্যাসিঙ্ক্রোনাস। API অনুরোধ গ্রহণ করে, একটি
দীর্ঘ-চলমান অপারেশন রিটার্ন করে এবং ব্যাকগ্রাউন্ডে
মেসেজ প্রসেস করে। তারপর, অপারেশন সম্পূর্ণ না হওয়া পর্যন্ত আপনি
customers.operations
রিসোর্সের
get
মেথড পোল করেন এবং উত্তর থেকে প্রতিটি মেসেজের ফলাফল
পড়েন।
লুপে সিঙ্গেল-মেসেজ পদ্ধতি কল করার তুলনায়, ব্যাচ পদ্ধতিতে কতগুলি মেসেজ আছে তা নির্বিশেষে আপনার কোটা ব্যবহার-এর বিপরীতে একটি লেখার অনুরোধ হিসেবে গণনা করা হয়।
পূর্বশর্ত
- আপনি API সেট-আপ করুন বিকল্পে ধাপগুলি সম্পূর্ণ করেছেন।
- একটি অ্যাক্সেস টোকেন যা অ্যাডমিন কোয়ারেন্টাইন বিশেষাধিকার সহ একজন অ্যাডমিনিস্ট্রেটরের ছদ্মবেশ ধারণ করে এবং এতে
https://www.googleapis.com/auth/gmail.admin.quarantineস্কোপ অন্তর্ভুক্ত থাকে। ডোমেন-ওয়াইড ডেলিগেশনের মাধ্যমে অনুমোদন করুন দেখুন। PENDING_TRIAGEস্ট্যাটাসে থাকা সর্বাধিক ৫০০টি কোয়ারেন্টাইন করা মেসেজের রিসোর্স নাম, যা আপনি কোয়ারেন্টাইন করা মেসেজের তালিকা ও সার্চ থেকে পাবেন।
ব্যাচ অপারেশন শুরু করুন
ব্যাচে মেসেজ রিলিজ করতে, customers.quarantinedMessages রিসোর্সে :batchRelease কাস্টম পদ্ধতিতে POST অনুরোধ পাঠান। requests
অ্যারেতে প্রতিটি মেসেজের জন্য একটি করে অবজেক্ট থাকে, যার প্রতিটিতে মেসেজের রিসোর্স নাম থাকে:
POST https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages:batchRelease
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
"requests": [
{"name": "customers/CUSTOMER_ID/quarantinedMessages/user1@example.com:18d3ef45a8b2c1d0"},
{"name": "customers/CUSTOMER_ID/quarantinedMessages/user2@example.com:18d3ef45a8b2c1d1"}
]
}
ব্যাচে মেসেজ প্রত্যাখ্যান করতে, একই অনুরোধের প্রধান অংশ
:batchDeny
কাস্টম পদ্ধতিতে customers.quarantinedMessages রিসোর্সে পাঠান:
POST https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/quarantinedMessages:batchDeny
প্রতিটি অনুরোধে ১ থেকে ৫০০টি এন্ট্রি থাকতে হবে। প্রতিটি মেসেজ অবশ্যই
অনুরোধের পাথে থাকা গ্রাহকের হতে হবে। ৫০০-এর বেশি এন্ট্রি সহ অনুরোধের ক্ষেত্রে
400 INVALID_ARGUMENT সমস্যা দেখা দেয়।
API অবিলম্বে একটি
Operation
রিসোর্স সহ উত্তর দেয়:
{
"name": "customers/01abc23de/operations/7f1c2a0e-5b7d-4d3a-9c1e-2f4b6a8d0e13",
"metadata": {
"@type": "type.googleapis.com/google.gmail.mailadminquarantine.v1.BatchReleaseQuarantinedMessagesMetadata",
"state": "PROCESSING",
"processedCount": 0,
"totalCount": 2
},
"done": false
}
অপারেশনের name স্টোর করো। অপারেশনের প্রোগ্রেস চেক করার জন্য এটি প্রয়োজন।
ব্যাচ অপারেশনের স্ট্যাটাস চেক করা
ব্যাচ অপারেশনের প্রোগ্রেস চেক করতে, অপারেশনের রিসোর্স নেমে
get
মেথডে GET অনুরোধ পাঠান:
GET https://mailadminquarantine.googleapis.com/v1/customers/CUSTOMER_ID/operations/OPERATION_ID
Authorization: Bearer ACCESS_TOKEN
get পদ্ধতিটি অ্যাডমিন কোয়ারেন্টাইন API স্কোপ গ্রহণ করে, তাই একটি রিড-অনলি
ইন্টিগ্রেশন অন্য সিস্টেমের শুরু করা অপারেশনগুলি মনিটর করতে পারে।
অপারেশন চলাকালীন, done ফিল্ডটি false-এ সেট করা হয় এবং metadata
ফিল্ড প্রগ্রেস রিপোর্ট করে:
| মেটাডেটা ফিল্ড | বিবরণ |
|---|---|
state |
মেসেজ প্রসেস করার সময় PROCESSING, তারপর SUCCEEDED বা FAILED। |
processedCount |
এখনও পর্যন্ত যত মেসেজ প্রসেস করা হয়েছে। |
totalCount |
ব্যাচে মেসেজের মোট সংখ্যা। |
অপারেশন শেষ হলে, done ফিল্ড true-এ সেট করা হয় এবং
response ফিল্ডে ব্যাচের প্রতিটি মেসেজের জন্য একটি ফলাফল থাকে:
{
"name": "customers/01abc23de/operations/7f1c2a0e-5b7d-4d3a-9c1e-2f4b6a8d0e13",
"metadata": {
"@type": "type.googleapis.com/google.gmail.mailadminquarantine.v1.BatchReleaseQuarantinedMessagesMetadata",
"state": "SUCCEEDED",
"processedCount": 2,
"totalCount": 2
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.gmail.mailadminquarantine.v1.BatchReleaseQuarantinedMessagesResponse",
"results": [
{
"name": "customers/01abc23de/quarantinedMessages/user1@example.com:18d3ef45a8b2c1d0",
"status": {},
"quarantinedMessage": {
"name": "customers/01abc23de/quarantinedMessages/user1@example.com:18d3ef45a8b2c1d0",
"messageId": "18d3ef45a8b2c1d0",
"messageOwner": "user1@example.com",
"state": "RELEASED"
}
},
{
"name": "customers/01abc23de/quarantinedMessages/user2@example.com:18d3ef45a8b2c1d1",
"status": {
"code": 5,
"message": "Quarantined message not found"
}
}
]
}
}
results-এর প্রতিটি এন্ট্রি একটি মেসেজের ফলাফল বর্ণনা করে:
| ফলাফলের ফিল্ড | বিবরণ |
|---|---|
name |
মেসেজের রিসোর্স নাম। |
status |
google.rpc.Status। একটি খালি অবজেক্ট (কোড 0, OK) মানে অ্যাকশনটি হয়ে গেছে। অন্যথায়, code এবং message ব্যাখ্যা করে যে কেন মেসেজটি এড়িয়ে যাওয়া হয়েছে। |
quarantinedMessage |
নতুন state সহ আপডেট করা মেসেজ। শুধুমাত্র status, OK হলে তবেই উপস্থিত থাকে। |
কিছু মেসেজ পাঠানো না গেলেও ব্যাচ অপারেশন সফল হয়। অপারেশনের
state-এর উপর নির্ভর না করে সবসময় প্রতিটি ফলাফলের status
পরীক্ষা করুন।
পুরো অপারেশনটি ব্যর্থ হলে, যেমন ব্যাকএন্ড উপলভ্য না থাকার কারণে,
done ফিল্ডটি true-এ সেট করা হয় এবং error ফিল্ডে response-এর পরিবর্তে
google.rpc.Status থাকে।
যেমন: ব্যাচ রিলিজ এবং সম্পূর্ণ করার জন্য পোল
নিম্নলিখিত Python উদাহরণটি একটি ব্যাচ রিলিজ শুরু করে এবং অপারেশনটি সম্পূর্ণ না হওয়া পর্যন্ত প্রতি কয়েক সেকেন্ডে পোল করে:
import time
import requests
BASE_URL = 'https://mailadminquarantine.googleapis.com/v1'
CUSTOMER_ID = '01abc23de' # Your customer ID without the leading 'C'.
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json',
}
# message_names is a list of up to 500 quarantined message resource names.
batch_url = f'{BASE_URL}/customers/{CUSTOMER_ID}/quarantinedMessages:batchRelease'
body = {'requests': [{'name': name} for name in message_names]}
operation = requests.post(batch_url, headers=headers, json=body)
operation.raise_for_status()
operation_name = operation.json()['name']
while True:
status = requests.get(f'{BASE_URL}/{operation_name}', headers=headers)
status.raise_for_status()
operation = status.json()
if operation.get('done'):
break
metadata = operation.get('metadata', {})
print(f"Processed {metadata.get('processedCount', 0)} of "
f"{metadata.get('totalCount', 0)} messages...")
time.sleep(5)
if 'error' in operation:
raise RuntimeError(f"Batch failed: {operation['error']}")
for result in operation['response'].get('results', []):
if result.get('status', {}).get('code', 0) == 0:
print(f"Released: {result['name']}")
else:
print(f"Skipped {result['name']}: {result['status'].get('message')}")