একটি এক্সটেনশনের জন্য ক্লাউড ফাংশন লিখুন

যখন আপনি একটি এক্সটেনশন তৈরি করেন, তখন আপনি Cloud Functions ব্যবহার করে এর লজিক লেখেন, ঠিক সেভাবেই যেভাবে আপনি আপনার নিজের প্রোজেক্টে ব্যবহৃত হবে এমন একটি ফাংশন লেখেন। আপনি extension.yaml ফাইলে আপনার ফাংশনগুলো ডিক্লেয়ার করেন, এবং যখন ব্যবহারকারীরা আপনার এক্সটেনশনটি ইনস্টল করেন, তখন এই ফাংশনগুলো তাদের প্রোজেক্টে ডেপ্লয় হয়ে যায়।

ক্লাউড Cloud Functions ব্যবহারের সাধারণ তথ্যের জন্য Cloud Functions ডকুমেন্টেশন দেখুন।

প্রথম এবং দ্বিতীয় প্রজন্মের Cloud Functions

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

প্রতিটি ট্রিগার প্রকারের জন্য ফাংশন তৈরির সমর্থন নিচে উল্লেখ করা হলো।

বিশেষ বিবেচনা

  • কিছু ফাংশন সংজ্ঞায় এমন তথ্য নির্দিষ্ট করার প্রয়োজন হয়, যা extension.yaml ফাইলেও উল্লেখ করা থাকে। উদাহরণস্বরূপ, ক্লাউড ফায়ারস্টোরে একটি document() মেথড আছে যা পর্যবেক্ষণ করার জন্য ডকুমেন্ট প্যাটার্ন নির্দিষ্ট করে, এবং extension.yaml এ এর সংশ্লিষ্ট ডিক্লারেশনে একটি resource ফিল্ড থাকে যা একই বিষয় নির্দিষ্ট করে।

    এইসব ক্ষেত্রে, extension.yaml ফাইলে নির্দিষ্ট করা কনফিগারেশনটি ব্যবহৃত হয় এবং ফাংশন ডেফিনিশনে নির্দিষ্ট করা কনফিগারেশনটি উপেক্ষা করা হয়।

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

  • Cloud Functions ১ম প্রজন্মের SDK-তে functions.config() মেথড এবং functions:config:set CLI কমান্ড রয়েছে, যা ব্যবহার করে আপনি ১ম প্রজন্মের ফাংশনগুলিতে প্যারামিটারযুক্ত মান নিয়ে কাজ করতে পারেন। Cloud Functions -এ এই পদ্ধতিটি এখন আর ব্যবহার করা হয় না এবং কোনো এক্সটেনশনে এটি মোটেও কাজ করবে না । এর পরিবর্তে, functions.params মডিউল (প্রস্তাবিত) অথবা process.env ব্যবহার করুন।

টাইপস্ক্রিপ্ট ব্যবহার করে

আপনার নিজস্ব এক্সটেনশন তৈরির বেশিরভাগ ডকুমেন্টেশনে Cloud Functions for Firebase জন্য জাভাস্ক্রিপ্ট ব্যবহার করে ওয়ার্কফ্লো বর্ণনা করা হয়েছে। তবে, আপনি এর পরিবর্তে টাইপস্ক্রিপ্ট ব্যবহার করে আপনার ফাংশনগুলো লিখতে পারেন।

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

যদি আপনি আপনার এক্সটেনশনের ফাংশনগুলো টাইপস্ক্রিপ্টে লেখেন, তবে আপনার এক্সটেনশনটি ইনস্টল করার আগে আপনাকে অবশ্যই নিম্নলিখিত কাজগুলো করতে হবে:

  1. আপনার এক্সটেনশনের ফাংশনগুলোর সোর্স কোড জাভাস্ক্রিপ্টে কম্পাইল করুন।

    ` firebase ext:dev:init কমান্ডটি আপনাকে আপনার ফাংশন লেখার জন্য টাইপস্ক্রিপ্ট বেছে নেওয়ার সুযোগ দেয়। এই কমান্ডটি আপনাকে একটি সম্পূর্ণ, ইনস্টলযোগ্য এক্সটেনশন এবং একটি বিল্ড স্ক্রিপ্ট প্রদান করে, যা আপনি npm run build মাধ্যমে চালাতে পারেন

  2. আপনার package.json ফাইলে, main ফিল্ডটিকে অবশ্যই জেনারেট করা জাভাস্ক্রিপ্টের দিকে নির্দেশ করতে হবে।

  3. আপনি যদি স্থানীয় উৎস থেকে আপনার এক্সটেনশন ইনস্টল বা আপলোড করেন, তাহলে প্রথমে আপনার TypeScript ফাইলগুলো কম্পাইল করে নিন।

সমর্থিত ফাংশন ট্রিগার

HTTP ট্রিগার

একটি HTTP-ট্রিগারড ফাংশন একটি পাবলিক https এন্ডপয়েন্টে ডেপ্লয় করা হয় এবং এন্ডপয়েন্টটি অ্যাক্সেস করা হলে এটি রান করে।

HTTP-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে “Call functions via HTTP requests” অংশটি দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onRequest(async (req, resp) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

কলযোগ্য ফাংশন

কলযোগ্য ফাংশনগুলো HTTP-ট্রিগারড ফাংশনের মতোই, কিন্তু এগুলো এমন একটি প্রোটোকল প্রয়োগ করে যা আপনার ক্লায়েন্ট-সাইড কোড থেকে এগুলোকে কল করা সুবিধাজনক করে তোলে।

কলযোগ্য ফাংশন ব্যবহার করার বিষয়ে তথ্যের জন্য Cloud Functions ডকুমেন্টেশনের “আপনার অ্যাপ থেকে ফাংশন কল করুন” অংশটি দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { https } from "firebase-functions/v1";

export const yourFunctionName = https.onCall(async (data, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      runtime: nodejs16
      httpsTrigger: {}
  - name: anotherFunction
    type: ...

নির্ধারিত ফাংশন ট্রিগার

একটি নির্ধারিত ফাংশন একটি কাস্টমাইজযোগ্য সময়সূচী অনুসারে বারবার চলে।

শিডিউল করা ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনের শিডিউল ফাংশন অংশটি দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.schedule("every 6 hours").onRun((context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: 'every 5 minutes'
  - name: anotherFunction
    type: ...

scheduleTrigger এর জন্য উপলব্ধ সাবফিল্ডগুলি হলো:

মাঠ বর্ণনা
schedule
(প্রয়োজনীয়)

যে ফ্রিকোয়েন্সিতে আপনি ফাংশনটি চালাতে চান।

এই ফিল্ডটি উভয় সিনট্যাক্স ব্যবহার করে স্ট্রিং গ্রহণ করতে পারে ( একক উদ্ধৃতি চিহ্নের মধ্যে রাখা আবশ্যক):

timeZone
(ঐচ্ছিক)

যে সময় অঞ্চলে সময়সূচীটি চলবে

আপনি যদি চান যে ব্যবহারকারীরা আপনার এক্সটেনশন ইনস্টল করার সময় সময়সূচী নির্ধারণ করতে পারুক, তাহলে আপনার extension.yaml ফাইলে একটি নতুন প্যারামিটার যোগ করুন এবং আপনার ফাংশনের resource ডিক্লারেশনে প্যারামিটারটি উল্লেখ করুন:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      scheduleTrigger:
        schedule: ${SCHEDULE_FREQUENCY}
  - name: anotherFunction
    type: ...

params:
  - param: SCHEDULE_FREQUENCY
    label: Schedule
    description: How often do you want to run yourFunctionName()?
    type: string
    default: 'every 5 minutes'  # Specifying a default is optional.
    required: true

টাস্ক কিউ ট্রিগার

একটি টাস্ক কিউ ফাংশন আপনার এক্সটেনশনের লাইফসাইকেল ইভেন্টগুলিতে অথবা অ্যাডমিন SDK-এর TaskQueue.enqueue() মেথড ব্যবহার করে ম্যানুয়ালি আপনার এক্সটেনশনের টাস্ক কিউতে যুক্ত করা হলে ট্রিগার হয়।

লাইফসাইকেল ইভেন্ট পরিচালনা করে এমন ফাংশন লেখার তথ্যের জন্য "আপনার এক্সটেনশনের লাইফসাইকেল ইভেন্টগুলি পরিচালনা করুন" দেখুন।

টাস্ক কিউ ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ‘ক্লাউড টাস্কের সাথে ফাংশন এনকিউ করুন’ (Enqueue functions with Cloud Tasks) অংশটি দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { tasks } from "firebase-functions/v1";

export const yourFunctionName = tasks.taskQueue().onDispatch(async (data, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: myTaskFunction
    type: firebaseextensions.v1beta.function
    description: >-
      Perform a task when triggered by a lifecycle event
    properties:
      taskQueueTrigger: {}

taskQueueTrigger প্রপার্টিটিকে হয় {} অথবা অপশনগুলোর একটি ম্যাপে সেট করুন, যা টাস্ক কিউ-এর রেট লিমিট এবং রিট্রাই আচরণকে টিউন করে ( টাস্ক কিউ টিউনিং দেখুন)।

যদি আপনি আপনার এক্সটেনশনের লাইফসাইকেল ইভেন্টগুলোর ওপর ভিত্তি করে আপনার ফাংশনটি ট্রিগার করতে চান, তাহলে ফাংশনের নাম এবং একটি ঐচ্ছিক প্রসেসিং মেসেজ সহ lifecycleEvents রেকর্ড যুক্ত করুন, যা প্রসেসিং শুরু হলে Firebase কনসোলে প্রদর্শিত হবে।

lifecycleEvents:
  onInstall:
    function: myTaskFunction
    processingMessage: Resizing your existing images
  onUpdate:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension
  onConfigure:
    function: myOtherTaskFunction
    processingMessage: Setting up your extension

Analytics

যখন কোনো নির্দিষ্ট অ্যানালিটিক্স ইভেন্ট লগ হয়, তখন একটি অ্যানালিটিক্স-ট্রিগারড ফাংশন চালু হয়।

অ্যানালিটিক্স-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে গুগল অ্যানালিটিক্স ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { analytics } from "firebase-functions/v1";

export const yourFunctionName = analytics.event("event_name").onLog((event, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/ga_event
  - name: anotherFunction
    type: ...

আপনি যদি চান যে ব্যবহারকারীরা আপনার এক্সটেনশন ইনস্টল করার সময় শোনার জন্য Analytics ইভেন্টটি কনফিগার করতে সক্ষম হোক, তাহলে আপনার extension.yaml ফাইলে একটি নতুন প্যারামিটার যোগ করুন এবং আপনার ফাংশনের resource ডিক্লারেশনে প্যারামিটারটি রেফারেন্স করুন:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.analytics/eventTypes/event.log
        resource: projects/${PROJECT_ID}/events/${EVENT_NAME}
  - name: anotherFunction
    type: ...

params:
  - param: EVENT_NAME
    label: Analytics event
    description: What event do you want to respond to?
    type: string
    default: ga_event  # Specifying a default is optional.
    required: true

Authentication

যখন কোনো ব্যবহারকারী তৈরি বা মুছে ফেলা হয়, তখন একটি প্রমাণীকরণ-চালিত ফাংশন চালু হয়।

অথোরাইজেশন-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে থাকা ফায়ারবেস অথেন্টিকেশন ট্রিগারস অংশটি দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { auth } from "firebase-functions/v1";

export const yourFunctionName = auth.user().onCreate((user, context) => {
  // ...
});

export const yourFunctionName2 = auth.user().onDelete((user, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/firebase.auth/eventTypes/user.create
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...

নিম্নলিখিত সারণিতে প্রতিটি সমর্থিত Authentication ইভেন্ট প্রকার কীভাবে নির্দিষ্ট করতে হয় তা দেখানো হয়েছে:

Cloud Functions ইভেন্ট ট্রিগার eventType বর্ণনা
onCreate() providers/firebase.auth/eventTypes/user.create নতুন ব্যবহারকারী তৈরি করা হয়েছে
onDelete() providers/firebase.auth/eventTypes/user.delete ব্যবহারকারী মুছে ফেলেছেন

Cloud Firestore

যখন কোনো ডকুমেন্ট তৈরি, আপডেট বা ডিলিট করা হয়, তখন ক্লাউড ফায়ারস্টোর দ্বারা চালিত একটি ফাংশন চালু হয়।

ফায়ারস্টোর-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ক্লাউড ফায়ারস্টোর ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { firestore } from "firebase-functions/v1";

export const yourFunctionName = firestore.document("collection/{doc_id}")
  .onCreate((snapshot, context) => {
    // ...
  });

export const yourFunctionName2 = firestore.document("collection/{doc_id}")
  .onUpdate((change, context) => {
    // ...
  });

export const yourFunctionName3 = firestore.document("collection/{doc_id}")
  .onDelete((snapshot, context) => {
    // ...
  });

export const yourFunctionName4 = firestore.document("collection/{doc_id}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/collection/{documentID}
  - name: anotherFunction
    type: ...

নিম্নলিখিত সারণিতে দেখানো হয়েছে কীভাবে প্রতিটি সমর্থিত Cloud Firestore ইভেন্ট টাইপ নির্দিষ্ট করতে হয়:

Cloud Functions ইভেন্ট ট্রিগার eventType বর্ণনা
onCreate() providers/cloud.firestore/eventTypes/document.create নতুন নথি তৈরি করা হয়েছে
onDelete() providers/cloud.firestore/eventTypes/document.delete নথি মুছে ফেলা হয়েছে
onUpdate() providers/cloud.firestore/eventTypes/document.update নথি আপডেট করা হয়েছে
onWrite() providers/cloud.firestore/eventTypes/document.write নথি তৈরি, মুছে ফেলা বা আপডেট করা হয়েছে

আপনি যদি চান যে ব্যবহারকারীরা আপনার এক্সটেনশন ইনস্টল করার সময় ডকুমেন্ট পাথ কনফিগার করতে সক্ষম হোক, তাহলে আপনার extension.yaml ফাইলে একটি নতুন প্যারামিটার যোগ করুন এবং আপনার ফাংশনের resource ডিক্লারেশনে প্যারামিটারটি রেফারেন্স করুন:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/cloud.firestore/eventTypes/document.write
        resource: projects/${PROJECT_ID}/databases/(default)/documents/${YOUR_DOCUMENT_PATH}
  - name: anotherFunction
    type: ...

params:
  - param: YOUR_DOCUMENT_PATH
    label: Cloud Firestore path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{documentID}  # Specifying a default is optional.
    required: true

Pub/Sub

যখন কোনো নির্দিষ্ট টপিকে একটি মেসেজ পাবলিশ করা হয়, তখন একটি পাব/সাব-ট্রিগারড ফাংশন রান করে।

পাব/সাব-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে পাব/সাব ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { pubsub } from "firebase-functions/v1";

export const yourFunctionName = pubsub.topic("topic_name").onPublish((message, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/topic-name
  - name: anotherFunction
    type: ...

আপনি যদি চান যে ব্যবহারকারীরা আপনার এক্সটেনশন ইনস্টল করার সময় Pub/Sub টপিক কনফিগার করতে পারুক, তাহলে আপনার extension.yaml ফাইলে একটি নতুন প্যারামিটার যোগ করুন এবং আপনার ফাংশনের resource ডিক্লারেশনে প্যারামিটারটি রেফারেন্স করুন:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.pubsub.topic.publish
        resource: projects/${PROJECT_ID}/topics/${PUBSUB_TOPIC}
  - name: anotherFunction
    type: ...

params:
  - param: PUBSUB_TOPIC
    label: Pub/Sub topic
    description: Which Pub/Sub topic do you want to watch for messages?
    type: string
    default: topic-name  # Specifying a default is optional.
    required: true

Realtime Database

যখন একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে এমন কোনো পাথ তৈরি, আপডেট বা মুছে ফেলা হয়, তখন একটি রিয়েলটাইম ডেটাবেস-ট্রিগারড ফাংশন চলে।

RTDB-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে রিয়েলটাইম ডেটাবেস ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { database } from "firebase-functions/v1";

export const yourFunctionName = database.ref("path/to/{item}")
  .onCreate((snapshot, context) => {
    // ...
  });

export const yourFunctionName2 = database.ref("path/to/{item}")
  .onUpdate((change, context) => {
    // ...
  });

export const yourFunctionName3 = database.ref("path/to/{item}")
  .onDelete((snapshot, context) => {
    // ...
  });

export const yourFunctionName4 = database.ref("path/to/{item}")
  .onWrite((change, context) => {
    // onWrite triggers on creation, update, and deletion.
    // ...
  });

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/path/to/{itemId}
  - name: anotherFunction
    type: ...

নিম্নলিখিত সারণিতে দেখানো হয়েছে কীভাবে প্রতিটি সমর্থিত Cloud Firestore ইভেন্ট টাইপ নির্দিষ্ট করতে হয়:

Cloud Functions ইভেন্ট ট্রিগার eventType বর্ণনা
onCreate() providers/google.firebase.database/eventTypes/ref.create তৈরি করা ডেটা
onDelete() providers/google.firebase.database/eventTypes/ref.delete ডেটা মুছে ফেলা হয়েছে
onUpdate() providers/google.firebase.database/eventTypes/ref.update ডেটা আপডেট করা হয়েছে
onWrite() providers/google.firebase.database/eventTypes/ref.write ডেটা তৈরি, মুছে ফেলা বা আপডেট করা হয়েছে

আপনি যদি চান যে ব্যবহারকারীরা আপনার এক্সটেনশন ইনস্টল করার সময় কোন পাথটি দেখবেন তা কনফিগার করতে পারুক, তাহলে আপনার extension.yaml ফাইলে একটি নতুন প্যারামিটার যোগ করুন এবং আপনার ফাংশনের resource ডিক্লারেশনে প্যারামিটারটি রেফারেন্স করুন:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: providers/google.firebase.database/eventTypes/ref.create
        # DATABASE_INSTANCE (project's default instance) is an auto-populated
        # parameter value. You can also specify an instance.
        resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${DB_PATH}
  - name: anotherFunction
    type: ...

params:
  - param: DB_PATH
    label: Realtime Database path
    description: Where do you want to watch for changes?
    type: string
    default: path/to/{itemId}  # Specifying a default is optional.
    required: true

Remote Config

যখন কোনো প্রজেক্টের প্যারামিটার টেমপ্লেট আপডেট করা হয়, তখন একটি রিমোট কনফিগ-ট্রিগারড ফাংশন রান করে।

রিমোট কনফিগ-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ‘রিমোট কনফিগ ট্রিগারস’ অংশটি দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { remoteConfig } from "firebase-functions/v1";

export const yourFunctionName = remoteConfig.onUpdate((version, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.firebase.remoteconfig.update
        resource: projects/${PROJECT_ID}
  - name: anotherFunction
    type: ...

Cloud Storage

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

স্টোরেজ-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ক্লাউড স্টোরেজ ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { storage } from "firebase-functions/v1";

export const yourFunctionName = storage.object().onFinalize((object, context) => {
  // ...
});

export const yourFunctionName2 = storage.object().onMetadataUpdate((object, context) => {
  // ...
});

export const yourFunctionName3 = storage.object().onArchive((object, context) => {
  // ...
});

export const yourFunctionName4 = storage.object().onDelete((object, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        # STORAGE_BUCKET (project's default bucket) is an auto-populated
        # parameter. You can also specify a bucket.
        resource: projects/_/buckets/${STORAGE_BUCKET}
  - name: anotherFunction
    type: ...

নিম্নলিখিত সারণিতে প্রতিটি সমর্থিত Cloud Storage ইভেন্ট টাইপ কীভাবে নির্দিষ্ট করতে হয় তা দেখানো হয়েছে:

Cloud Functions ইভেন্ট ট্রিগার eventType বর্ণনা
onFinalize() google.storage.object.finalize বস্তু তৈরি করা হয়েছে
onMetadataUpdate() google.storage.object.metadataUpdate অবজেক্ট মেটাডেটা আপডেট করা হয়েছে
onArchive() google.storage.object.archive বস্তুটি আর্কাইভ করা হয়েছিল
onDelete() google.storage.object.delete বস্তুটি মুছে ফেলা হয়েছে

আপনি যদি চান যে ব্যবহারকারীরা আপনার এক্সটেনশন ইনস্টল করার সময় স্টোরেজ বাকেটটি কনফিগার করতে সক্ষম হোক, তাহলে আপনার extension.yaml ফাইলে একটি নতুন প্যারামিটার যোগ করুন এবং আপনার ফাংশনের resource ডিক্লারেশনে প্যারামিটারটি রেফারেন্স করুন:

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.storage.object.finalize
        resource: projects/_/buckets/${YOUR_BUCKET}
  - name: anotherFunction
    type: ...

params:
  - param: YOUR_BUCKET
    label: Cloud Storage bucket
    description: Which bucket do you want to watch for changes?
    type: selectResource
    resourceType: storage.googleapis.com/Bucket
    default: ${STORAGE_BUCKET}  # Specifying a default is optional.
    required: true

Test Lab

যখন কোনো টেস্ট ম্যাট্রিক্স তার পরীক্ষাগুলো সম্পন্ন করে, তখন একটি টেস্ট ল্যাব-ট্রিগারড ফাংশন চলে।

টেস্ট ল্যাব-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ফায়ারবেস টেস্ট ল্যাব ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র প্রথম প্রজন্মের জন্য)

import { testLab } from "firebase-functions/v1";

export const yourFunctionName = testLab.testMatrix().onComplete((matrix, context) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourFunctionName
    type: firebaseextensions.v1beta.function
    properties:
      eventTrigger:
        eventType: google.testing.testMatrix.complete
        resource: projects/${PROJECT_ID}/testMatrices/{matrixId}
  - name: anotherFunction
    type: ...

Crashlytics অ্যালার্ট ট্রিগার

Crashlytics যখন কোনো অ্যালার্ট প্রকাশ করে, তখন Crashlytics দ্বারা সক্রিয় একটি ফাংশন রান করে।

অ্যালার্ট-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ফায়ারবেস অ্যালার্টস ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র ২য় প্রজন্মের জন্য)

import {
  onNewFatalIssuePublished,
  onNewNonfatalIssuePublished,
  onNewAnrIssuePublished,
  onRegressionAlertPublished,
  onVelocityAlertPublished,
  onStabilityDigestPublished,
} from "firebase-functions/v2/alerts/crashlytics";

export const yourFunctionName = onNewFatalIssuePublished((event) => {
  // ...
});

export const yourFunctionName2 = onNewNonfatalIssuePublished((event) => {
  // ...
});

export const yourFunctionName3 = onNewAnrIssuePublished((event) => {
  // ...
});

export const yourFunctionName4 = onRegressionAlertPublished((event) => {
  // ...
});

export const yourFunctionName5 = onVelocityAlertPublished((event) => {
  // ...
});

export const yourFunctionName6 = onStabilityDigestPublished((event) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: crashlytics.newFatalIssue
  - name: anotherFunction
    type: ...

আপনি alerttype এর জন্য নিম্নলিখিত মানগুলি ব্যবহার করতে পারেন।

  • crashlytics.newFatalIssue
  • crashlytics.newNonfatalIssue
  • crashlytics.regression
  • crashlytics.stabilityDigest
  • crashlytics.velocity
  • crashlytics.newAnrIssue

Performance Monitoring অ্যালার্ট ট্রিগার

Performance Monitoring যখন কোনো অ্যালার্ট প্রকাশ করে, তখন Performance Monitoring মনিটরিং দ্বারা ট্রিগার হওয়া একটি ফাংশন চলে।

অ্যালার্ট-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ফায়ারবেস অ্যালার্টস ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র ২য় প্রজন্মের জন্য)

import { onThresholdAlertPublished } from "firebase-functions/v2/alerts/performance";

export const yourFunctionName = onThresholdAlertPublished((event) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: performance.threshold
  - name: anotherFunction
    type: ...

App Distribution অ্যালার্ট ট্রিগার

App Distribution যখন কোনো অ্যালার্ট প্রকাশ করে, তখন একটি App Distribution -ট্রিগারড ফাংশন চলে।

অ্যালার্ট-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনে ফায়ারবেস অ্যালার্টস ট্রিগারস দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র ২য় প্রজন্মের জন্য)

import {
  onNewTesterIosDevicePublished,
  onInAppFeedbackPublished
} from "firebase-functions/v2/alerts/appDistribution";

export const yourFunctionName = onNewTesterIosDevicePublished((event) => {
  // ...
});

export const yourFunctionName2 = onInAppFeedbackPublished((event) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
      eventTrigger:
        eventType: google.firebase.firebasealerts.alerts.v1.published
        triggerRegion: global
        eventFilters:
          - attribute: alerttype
            value: appDistribution.inAppFeedback
  - name: anotherFunction
    type: ...

আপনি alerttype এর জন্য নিম্নলিখিত মানগুলি ব্যবহার করতে পারেন।

  • appDistribution.newTesterIosDevice
  • appDistribution.inAppFeedback

কাস্টম ইভেন্ট ট্রিগার (ইভেন্টআর্ক)

যখন কোনো নির্দিষ্ট চ্যানেলে একটি নির্দিষ্ট ধরনের ইভেন্ট প্রকাশিত হয়, তখন একটি ইভেন্টআর্ক-ট্রিগারড ফাংশন চলে।

ইভেন্টআর্ক-ট্রিগারড ফাংশন লেখার তথ্যের জন্য Cloud Functions ডকুমেন্টেশনের "কাস্টম ইভেন্ট ট্রিগার তৈরি এবং পরিচালনা" অংশটি দেখুন।

আপনার এক্সটেনশনে ব্যবহারকারীদের নিজস্ব লজিক যুক্ত করার সুযোগ দিতে আপনি সেখান থেকে ইভেন্টও প্রকাশ করতে পারেন। এক্সটেনশনে ডেভেলপার-প্রদত্ত নিজস্ব লজিক ব্যবহার দেখুন।

ফাংশন সংজ্ঞা (শুধুমাত্র ২য় প্রজন্মের জন্য)

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

export const yourFunctionName = onCustomEventPublished((event) => {
  // ...
});

রিসোর্স ঘোষণা (extension.yaml)

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      # LOCATION is a user-configured parameter value specified by the user
      # during installation.
      location: ${param:LOCATION}
      buildConfig:
        runtime: nodejs16
      serviceConfig:
        availableMemory: 512M
        timeoutSeconds: 60
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/us-central1/channels/firebase
  - name: anotherFunction
    type: ...

আপনার এক্সটেনশনটি ইনস্টল করার সময় চ্যানেলটি অবশ্যই আগে থেকে বিদ্যমান থাকতে হবে। উদাহরণস্বরূপ, যদি আপনি চ্যানেল তৈরি করে এমন অন্য কোনো এক্সটেনশনের কাস্টম ইভেন্টের উপর নির্ভর করেন, তাহলে আপনার ব্যবহারকারীদের প্রথমে সেই এক্সটেনশনটি ইনস্টল করতে নির্দেশ দিন।

উপরের উদাহরণটি us-central1 অঞ্চলের 'ডিফল্ট' ফায়ারবেস চ্যানেলের জন্য একটি কাস্টম ইভেন্ট ট্রিগার তৈরি করবে। আপনি প্যারামিটার ব্যবহার করে চ্যানেলের নাম এবং অঞ্চল কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ:


params:
  - param: EVENTARC_CHANNEL_NAME
    label: Eventarc channel name
    description: What is the name of the Eventarc channel.
    default: firebase
    type: string
    required: true

resources:
  - name: yourfunctionname
    type: firebaseextensions.v1beta.v2function
    properties:
      location: ${param:LOCATION}
      eventTrigger:
        eventType: firebase.extensions.storage-resize-images.v1.complete
        channel: projects/${param:PROJECT_ID}/locations/${param:LOCATION}/channels/${param:EVENTARC_CHANNEL_NAME}