কাস্টম ইভেন্ট ট্রিগার তৈরি করুন এবং পরিচালনা করুন

ক্লাউড ফাংশন (২য় জেনারে), আপনি কাস্টম ইভেন্টগুলির প্রতিক্রিয়া হিসাবে ফাংশনগুলি ট্রিগার করতে পারেন৷ ক্লাউড ফাংশনের জন্য Firebase SDK দ্বারা স্থানীয়ভাবে সমর্থিত Firebase ইভেন্টগুলির বিপরীতে এইগুলি বিশেষ বা অতিরিক্ত ইভেন্ট প্রদানকারীর দ্বারা প্রদান করা ইভেন্ট। কাস্টম ইভেন্ট ট্রিগারের মাধ্যমে, আপনার অ্যাপ Firebase এক্সটেনশন দ্বারা প্রদত্ত ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে পারে, অথবা আপনি আপনার নিজস্ব কাস্টম ইভেন্টগুলি প্রকাশ করতে পারেন এবং তাদের প্রতিক্রিয়া হিসাবে ফাংশনগুলি ট্রিগার করতে পারেন৷

সমস্ত কাস্টম ইভেন্ট CloudEvents JSON ইভেন্ট ফরম্যাটের সাথে সামঞ্জস্যপূর্ণ এবং Eventarc- এ প্রকাশিত হয়। Eventarc ব্যবহার ফি প্রযোজ্য.

কাস্টম ইভেন্ট সহ ফাংশন ট্রিগার

আপনি কাস্টম ইভেন্টগুলি প্রকাশ করতে পারেন (বা ফায়ারবেস এক্সটেনশন থেকে ইভেন্টগুলি পেতে পারেন) এবং এই মৌলিক প্রবাহটি প্রয়োগ করে সেই ইভেন্টগুলির প্রতিক্রিয়া হিসাবে ফাংশনগুলি ট্রিগার করতে পারেন:

  1. একটি Eventarc চ্যানেলে পছন্দসই ইভেন্টগুলি প্রকাশ করুন, বা আপনার ইনস্টল করা একটি এক্সটেনশন দ্বারা উপলব্ধ ইভেন্টগুলি সনাক্ত করুন৷
  2. আপনার ফাংশন কোডে, একটি ইভেন্ট হ্যান্ডলার দিয়ে Eventarc চ্যানেলে ইভেন্টগুলিতে সদস্যতা নিন।
  3. ফাংশনে, ক্লাউড ইভেন্ট অবজেক্টে ফিরে আসা পেলোডকে পার্স করুন এবং আপনার অ্যাপের প্রয়োজন অনুযায়ী কাস্টম লজিক সম্পাদন করুন।

উদাহরণস্বরূপ, একটি গেম অ্যাপ ব্যবহারকারীদের নোটিফিকেশন পাঠাতে চাইতে পারে যখন তারা শীর্ষ দশ প্রতিযোগীদের লিডারবোর্ডে প্রবেশ করে বা ছেড়ে যায়। এই অ্যাপটি ডিফল্ট চ্যানেলে লিডারবোর্ড ইভেন্ট প্রকাশ করতে পারে এবং তারপরে ব্যবহারকারীদের লক্ষ্যযুক্ত পুশ বিজ্ঞপ্তি পাঠায় এমন একটি ফাংশনে ইভেন্ট পরিচালনা করতে পারে।

অন্য একটি উদাহরণে, অ্যাপগুলিকে বড় ইমেজগুলিকে প্রক্রিয়া করতে সাহায্য করার জন্য ডিজাইন করা একটি এক্সটেনশন ইমেজ রিসাইজ করার সমাপ্তিতে একটি ইভেন্ট নির্গত করতে পারে। এই এক্সটেনশনটি ইনস্টল করা অ্যাপগুলি ইমেজের রিসাইজ করা সংস্করণগুলিকে নির্দেশ করতে অ্যাপে লিঙ্কগুলি আপডেট করে সমাপ্তি ইভেন্ট পরিচালনা করতে পারে।

একটি চ্যানেলে একটি ইভেন্ট প্রকাশ করুন

ইভেন্টর্ক ইভেন্টগুলি চ্যানেলগুলিতে প্রকাশিত হয়। চ্যানেলগুলি গোষ্ঠী সম্পর্কিত ইভেন্টগুলি এবং অ্যাক্সেসের অনুমতিগুলি পরিচালনা করার একটি উপায়৷ আপনি যখন একটি এক্সটেনশন ইনস্টল করেন বা কাস্টম ইভেন্টগুলি ব্যবহার করে এমন একটি ফাংশন স্থাপন করেন, তখন Firebase স্বয়ংক্রিয়ভাবে us-central1 অঞ্চলে firebase নামে একটি ডিফল্ট চ্যানেল তৈরি করে। ফায়ারবেস অ্যাডমিন SDK চ্যানেলগুলিতে প্রকাশ করার জন্য একটি eventarc সাবপ্যাকেজ প্রদান করে।

ডিফল্ট চ্যানেল ব্যবহার করে একটি বিশ্বস্ত সার্ভার (বা অন্য ফাংশন) থেকে একটি ইভেন্ট প্রকাশ করতে:

import {getEventarc} from 'firebase-admin/eventarc';

getEventarc().channel().publish({
    type: 'achieved-leaderboard',
    subject: 'Welcome to the top 10',
    data: {
      message: 'You have achieved the nth position in our leaderboard!  To see . . .'
    }
});

স্বয়ংক্রিয়ভাবে ডিফল্ট চ্যানেল তৈরি করার পাশাপাশি, ফায়ারবেস পরিবেশ পরিবর্তনশীল EVENTARC_CLOUD_EVENT_SOURCE সেট করে, যা ইভেন্টের উৎস নির্দিষ্ট করে। আপনি যদি Firebase-এর জন্য ক্লাউড ফাংশনের বাইরে ইভেন্ট প্রকাশ করেন, তাহলে আপনাকে আপনার ইভেন্ট পেলোডে সুস্পষ্টভাবে source ফিল্ড যোগ করতে হবে।

কাস্টম ইভেন্টগুলি পরিচালনা করুন

আপনি onCustomEventPublished বা on_custom_event_published হ্যান্ডলারগুলির সাথে এক্সটেনশন ইভেন্ট সহ সমস্ত কাস্টম ইভেন্ট পরিচালনা করতে পারেন৷ প্রথমে, Firebase অ্যাডমিন SDK সহ Eventarc SDK থেকে এই হ্যান্ডলারটি আমদানি করুন:

Node.js

const {onCustomEventPublished} = require("firebase-functions/v2/eventarc");
const logger = require("firebase-functions/logger");
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

পাইথন

from firebase_admin import firestore, initialize_app
from firebase_functions import eventarc_fn

আপনার ফাংশন কোডে, উদাহরণ ফাংশনের জন্য দেখানো হিসাবে ইভেন্টের নাম পাস করুন:

Node.js

exports.onimageresized = onCustomEventPublished(
    "firebase.extensions.storage-resize-images.v1.complete",
    (event) => {
      logger.info("Received image resize completed event", event);
      // For example, write resized image details into Firestore.
      return getFirestore()
          .collection("images")
          .doc(event.subject.replace("/", "_")) // original file path
          .set(event.data); // resized images paths and sizes
    });

পাইথন

@eventarc_fn.on_custom_event_published(
    event_type="firebase.extensions.storage-resize-images.v1.complete")
def onimageresized(event: eventarc_fn.CloudEvent) -> None:
    print("Received image resize completed event: ", event.type)

    if not isinstance(event.subject, str):
        print("No 'subject' data.")
        return

    # For example, write resized image details into Firestore.
    firestore_client: google.cloud.firestore.Client = firestore.client()
    collection = firestore_client.collection("images")
    doc = collection.document(event.subject.replace("/", "_"))  # original file path
    doc.set(event.data)  # resized images paths and sizes

প্রতিটি নির্দিষ্ট এক্সটেনশনের জন্য, ইভেন্ট অবজেক্টে ফিরে আসা পেলোড ডেটা প্রদান করে যা আপনি আপনার অ্যাপ্লিকেশন প্রবাহের জন্য কাস্টম লজিক সম্পাদন করতে ব্যবহার করতে পারেন। এই ক্ষেত্রে, ফাংশনটি ক্লাউড ফায়ারস্টোরের একটি সংগ্রহে রিসাইজ করা ছবির মেটাডেটা কপি করতে, ইভেন্টের দেওয়া subject থেকে ফাইলের নাম পেতে এবং ইভেন্টের দেওয়া data থেকে মেটাডেটা সংরক্ষণ করতে অ্যাডমিন SDK ব্যবহার করে।

অ-ডিফল্ট চ্যানেলে ইভেন্টগুলি প্রকাশ এবং পরিচালনা করুন

কাস্টম চ্যানেলগুলি এমন ক্ষেত্রে উপযোগী হতে পারে যেখানে আপনার বিশেষ অনুমতি প্রয়োজন বা অন্যান্য প্রয়োজনীয়তা রয়েছে এবং সমস্ত ইভেন্টের জন্য একই স্তরের দৃশ্যমানতা এবং অ্যাক্সেস চান না। আপনি Google ক্লাউড কনসোল ব্যবহার করে আপনার নিজস্ব চ্যানেল তৈরি করতে পারেন। ইভেন্টের জন্য প্রকাশনা এবং সদস্যতা একই চ্যানেলে করা আবশ্যক।

এমন ক্ষেত্রে যেখানে একটি কাস্টম ইভেন্ট একটি নন-ডিফল্ট চ্যানেলে প্রকাশিত হয়, আপনাকে আপনার ফাংশন কোডে চ্যানেলটি নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ, আপনি যদি us-west1 অবস্থানের জন্য একটি নন-ডিফল্ট চ্যানেলে প্রকাশিত ইভেন্টগুলি পরিচালনা করতে চান, তাহলে আপনাকে দেখানো চ্যানেলটি নির্দিষ্ট করতে হবে:

Node.js

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const func = onCustomEventPublished(
    {
      eventType: "firebase.extensions.storage-resize-images.v1.complete",
      channel: "locations/us-west1/channels/firebase",
      region: "us-west1",
    },
    (event) => { ... });

পাইথন

@eventarc_fn.on_custom_event_published(
    event_type="firebase.extensions.storage-resize-images.v1.complete",
    channel="locations/us-west1/channels/firebase",
    region="us-west1")
def onimageresizedwest(event: eventarc_fn.CloudEvent) -> None:
    print("Received image resize completed event: ", event.type)
    # ...