ব্যাচে মেসেজ রিলিজ বা বাতিল করুন

একসাথে অনেক কোয়ারেন্টাইন করা মেসেজের উপর অ্যাকশন নিতে হলে, Mail Admin Quarantine API-তে customers.quarantinedMessages রিসোর্সের ব্যাচ পদ্ধতি ব্যবহার করুন:

  • batchRelease পদ্ধতিটি সর্বাধিক ৫০০টি মেসেজ রিলিজ করে।
  • batchDeny পদ্ধতি সর্বাধিক ৫০০টি মেসেজ প্রত্যাখ্যান করে।

দুটি পদ্ধতিই অ্যাসিঙ্ক্রোনাস। API অনুরোধ গ্রহণ করে, একটি দীর্ঘ-চলমান অপারেশন রিটার্ন করে এবং ব্যাকগ্রাউন্ডে মেসেজ প্রসেস করে। তারপর, অপারেশন সম্পূর্ণ না হওয়া পর্যন্ত আপনি customers.operations রিসোর্সের get মেথড পোল করেন এবং উত্তর থেকে প্রতিটি মেসেজের ফলাফল পড়েন।

লুপে সিঙ্গেল-মেসেজ পদ্ধতি কল করার তুলনায়, ব্যাচ পদ্ধতিতে কতগুলি মেসেজ আছে তা নির্বিশেষে আপনার কোটা ব্যবহার-এর বিপরীতে একটি লেখার অনুরোধ হিসেবে গণনা করা হয়।

পূর্বশর্ত

ব্যাচ অপারেশন শুরু করুন

ব্যাচে মেসেজ রিলিজ করতে, 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')}")

পরবর্তী ধাপ