ওয়েবহুক

অ্যাকশন তৈরিতে আপনাকে আরও বেশি নমনীয়তা দিতে, আপনি HTTPS ওয়েব পরিষেবাগুলিতে যুক্তি অর্পণ করতে পারেন (পূর্ণতা)। আপনার অ্যাকশনগুলি ওয়েবহুকগুলিকে ট্রিগার করতে পারে যা একটি HTTPS এন্ডপয়েন্টে অনুরোধ করে। আপনি পরিপূর্ণতার জন্য যা করতে পারেন তার কিছু উদাহরণ অন্তর্ভুক্ত:

  • ব্যবহারকারীর দেওয়া তথ্যের উপর ভিত্তি করে একটি গতিশীল প্রম্পট তৈরি করা।
  • একটি বহিরাগত সিস্টেমে একটি অর্ডার স্থাপন এবং সাফল্য নিশ্চিত করা.
  • ব্যাকএন্ড ডেটা সহ স্লট যাচাই করা হচ্ছে।
চিত্র 1. আহ্বানের উদ্দেশ্য এবং দৃশ্যগুলি ওয়েবহুকগুলিকে ট্রিগার করতে পারে৷

ওয়েবহুক ট্রিগার এবং হ্যান্ডলার

আপনার অ্যাকশন আমন্ত্রণমূলক উদ্দেশ্য বা দৃশ্যের মধ্যে একটি ওয়েবহুক ট্রিগার করতে পারে, যা আপনার পরিপূর্ণতার শেষ পয়েন্টে একটি অনুরোধ পাঠায়। আপনার পূর্ণতায় ওয়েবহুক হ্যান্ডলার রয়েছে যা অনুরোধে JSON পেলোড প্রক্রিয়া করে। আপনি নিম্নলিখিত পরিস্থিতিতে ওয়েবহুক ট্রিগার করতে পারেন:

  • একটি আমন্ত্রণ অভিপ্রায় ম্যাচ পরে
  • মঞ্চে প্রবেশ করার সময় একটি দৃশ্য
  • একটি দৃশ্যের অবস্থা পর্যায়ে একটি শর্ত সত্যে মূল্যায়ন করার পরে
  • একটি দৃশ্যের স্লট-ভর্তি পর্যায়ের সময়
  • একটি দৃশ্যের ইনপুট পর্যায়ে একটি অভিপ্রায় ম্যাচ হওয়ার পর

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

পেলোড

নিম্নলিখিত স্নিপেটগুলি উদাহরণের অনুরোধগুলি দেখায় যা আপনার অ্যাকশনগুলি পূর্ণতার জন্য পাঠায় এবং একটি প্রতিক্রিয়া যা আপনার পূর্ণতা ফেরত পাঠায়৷ আরো তথ্যের জন্য রেফারেন্স ডকুমেন্টেশন দেখুন.

উদাহরণ অনুরোধ

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "actions.intent.MAIN",
    "params": {},
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {}
  },
  "session": {
    "id": "example_session_id",
    "params": {},
    "typeOverrides": []
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED"
    }
  },
  "home": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}

উদাহরণ প্রতিক্রিয়া

{
  "session": {
    "id": "example_session_id",
    "params": {}
  },
  "prompt": {
    "override": false,
    "firstSimple": {
      "speech": "Hello World.",
      "text": ""
    }
  },
  "scene": {
    "name": "SceneName",
    "slots": {},
    "next": {
      "name": "actions.scene.END_CONVERSATION"
    }
  }
}

রানটাইম মিথস্ক্রিয়া

নিম্নলিখিত বিভাগগুলি সাধারণ কাজগুলি বর্ণনা করে যা আপনি আপনার ওয়েবহুক হ্যান্ডলারগুলিতে সম্পাদন করতে পারেন।

প্রম্পট পাঠান

আপনি ইন্টারেক্টিভ ক্যানভাস সহ একটি ওয়েব অ্যাপ দ্বারা সমর্থিত সাধারণ পাঠ্য, সমৃদ্ধ পাঠ্য, কার্ড এবং এমনকি সম্পূর্ণ-প্রস্ফুটিত HTML প্রম্পট দিয়ে প্রম্পট তৈরি করতে পারেন। প্রম্পট ডকুমেন্টেশনে ওয়েবহুক ইভেন্ট পরিচালনা করার সময় কীভাবে একটি প্রম্পট তৈরি করতে হয় সে সম্পর্কে সম্পূর্ণ তথ্য রয়েছে। নিম্নলিখিত স্নিপেটগুলি একটি কার্ড প্রম্পট দেখায়:

Node.js

app.handle('rich_response', conv => {
  conv.add('This is a card rich response.');
  conv.add(new Card({
    title: 'Card Title',
    subtitle: 'Card Subtitle',
    text: 'Card Content',
    image: new Image({
      url: 'https://developers.google.com/assistant/assistant_96.png',
      alt: 'Google Assistant logo'
    })
  }));
});

প্রতিক্রিয়া JSON

{
  "session": {
    "id": "example_session_id",
    "params": {}
  },
  "prompt": {
    "override": false,
    "content": {
      "card": {
        "title": "Card Title",
        "subtitle": "Card Subtitle",
        "text": "Card Content",
        "image": {
          "alt": "Google Assistant logo",
          "height": 0,
          "url": "https://developers.google.com/assistant/assistant_96.png",
          "width": 0
        }
      }
    },
    "firstSimple": {
      "speech": "This is a card rich response.",
      "text": ""
    }
  }
}

অভিপ্রায় পরামিতি পড়ুন

যখন অ্যাসিস্ট্যান্ট রানটাইম কোনও উদ্দেশ্যের সাথে মেলে, তখন এটি কোনও সংজ্ঞায়িত প্যারামিটার বের করে। মূল সম্পত্তি ছিল যা ব্যবহারকারী ইনপুট হিসাবে প্রদান করে এবং সমাধানকৃত সম্পত্তি হল যা NLU ইনপুটটি টাইপ স্পেসিফিকেশনের উপর ভিত্তি করে সমাধান করেছে।

Node.js

conv.intent.params['param_name'].original
conv.intent.params['param_name'].resolved

অনুরোধ JSON

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "intent_name",
    "params": {
      "slot_name": {
        "original": "1",
        "resolved": 1
      }
    },
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {},
    "next": {
      "name": "actions.scene.END_CONVERSATION"
    }
  },
  "session": {
    "id": "session_id",
    "params": {},
    "typeOverrides": []
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED"
    }
  },
  "home": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}

ব্যবহারকারীর লোকেল পড়ুন

এই মানটি Google সহকারীর জন্য ব্যবহারকারীর লোকেল সেটিং এর সাথে মিলে যায়।

Node.js

conv.user.locale

JSON

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "actions.intent.MAIN",
    "params": {},
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {}
  },
  "session": {
    "id": "session_id",
    "params": {},
    "typeOverrides": []
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED"
    }
  },
  "home": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}

পড়া এবং স্টোরেজ লিখুন

বিভিন্ন স্টোরেজ বৈশিষ্ট্যগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে সম্পূর্ণ তথ্যের জন্য স্টোরেজ ডকুমেন্টেশন দেখুন।

Node.js

//read
conv.session.params.key
conv.user.params.key
conv.home.params.key

// write
conv.session.params.key = value
conv.user.params.key = value
conv.home.params.key = value 

অনুরোধ JSON

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "actions.intent.MAIN",
    "params": {},
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {}
  },
  "session": {
    "id": "session_id",
    "params": {
      "key": "value"
    },
    "typeOverrides": [],
    "languageCode": ""
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED",
      "key": "value"
    }
  },
  "home": {
    "params": {
      "key": "value"
    }
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}

প্রতিক্রিয়া JSON

{
  "session": {
    "id": "session_id",
    "params": {
      "key": "value"
    }
  },
  "prompt": {
    "override": false,
    "firstSimple": {
      "speech": "Hello world.",
      "text": ""
    }
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED",
      "key": "value"
    }
  },
  "home": {
    "params": {
      "key": "value"
    }
  }
}

ডিভাইসের ক্ষমতা পরীক্ষা করুন

আপনি বিভিন্ন অভিজ্ঞতা বা কথোপকথন প্রবাহ প্রদান করতে একটি ডিভাইসের ক্ষমতা পরীক্ষা করতে পারেন.

Node.js

const supportsRichResponse = conv.device.capabilities.includes("RICH_RESPONSE");
const supportsLongFormAudio = conv.device.capabilities.includes("LONG_FORM_AUDIO");
const supportsSpeech = conv.device.capabilities.includes("SPEECH");
const supportsInteractiveCanvas = conv.device.capabilities.includes("INTERACTIVE_CANVAS");

অনুরোধ JSON

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "actions.intent.MAIN",
    "params": {},
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {}
  },
  "session": {
    "id": "session_id",
    "params": {},
    "typeOverrides": [],
    "languageCode": ""
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED"
    }
  },
  "home": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO",
      "INTERACTIVE_CANVAS"
    ]
  }
}

পৃষ্ঠের ক্ষমতার সম্পূর্ণ তালিকার জন্য, Capability রেফারেন্স দেখুন।

রানটাইম টাইপ ওভাররাইড করে

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

রানটাইম প্রকারগুলি ব্যবহার করার জন্য, আপনি আপনার অ্যাকশন থেকে একটি ওয়েবহুক ট্রিগার করেন যা আপনার পরিপূর্ণতায় একজন হ্যান্ডলারকে কল করে। সেখান থেকে, আপনি আপনার অ্যাকশনের প্রতিক্রিয়ায় session.typeOverrides প্যারামিটারটি পূরণ করতে পারেন। উপলব্ধ মোডগুলির মধ্যে বিদ্যমান প্রকারের এন্ট্রি সংরক্ষণের জন্য TYPE_MERGE বা বিদ্যমান এন্ট্রিগুলিকে ওভাররাইডগুলির সাথে প্রতিস্থাপন করার জন্য TYPE_REPLACE অন্তর্ভুক্ত রয়েছে৷

Node.js

conv.session.typeOverrides = [{
    name: type_name,
    mode: 'TYPE_REPLACE',
    synonym: {
      entries: [
        {
          name: 'ITEM_1',
          synonyms: ['Item 1', 'First item']
        },
        {
          name: 'ITEM_2',
          synonyms: ['Item 2', 'Second item']
       },
       {
          name: 'ITEM_3',
          synonyms: ['Item 3', 'Third item']
        },
        {
          name: 'ITEM_4',
          synonyms: ['Item 4', 'Fourth item']
        },
    ]
  }
}];

প্রতিক্রিয়া JSON

{
  "session": {
    "id": "session_id",
    "params": {},
    "typeOverrides": [
      {
        "name": "type_name",
        "synonym": {
          "entries": [
            {
              "name": "ITEM_1",
              "synonyms": [
                "Item 1",
                "First item"
              ]
            },
            {
              "name": "ITEM_2",
              "synonyms": [
                "Item 2",
                "Second item"
              ]
            },
            {
              "name": "ITEM_3",
              "synonyms": [
                "Item 3",
                "Third item"
              ]
            },
            {
              "name": "ITEM_4",
              "synonyms": [
                "Item 4",
                "Fourth item"
              ]
            }
          ]
        },
        "typeOverrideMode": "TYPE_REPLACE"
      }
    ]
  },
  "prompt": {
    "override": false,
    "firstSimple": {
      "speech": "This is an example prompt.",
      "text": "This is an example prompt."
    }
  }
}

বক্তৃতা পক্ষপাতিত্ব প্রদান

স্পীচ বায়াসিং আপনাকে ইন্টেন্ট ম্যাচিং উন্নত করতে NLU-তে ইঙ্গিত নির্দিষ্ট করতে দেয়। আপনি 1000টি পর্যন্ত এন্ট্রি নির্দিষ্ট করতে পারেন।

Node.js

conv.expected.speech = ['value_1', 'value_2']
conv.expected.language = 'locale_string'

প্রতিক্রিয়া JSON

{
  "session": {
    "id": "session_id",
    "params": {}
  },
  "prompt": {
    "override": false,
    "firstSimple": {
      "speech": "This is an example prompt.",
      "text": "This is an example prompt."
    }
  },
  "expected": {
    "speech": "['value_1', 'value_2']",
    "language": "locale_string"
  }
}

রূপান্তর দৃশ্য

আপনার অ্যাকশন প্রজেক্টে স্ট্যাটিক ট্রানজিশন সংজ্ঞায়িত করার পাশাপাশি, আপনি রানটাইমে দৃশ্যের পরিবর্তন ঘটাতে পারেন।

Node.js

app.handle('transition_to_hidden_scene', conv => {
  // Dynamic transition
  conv.scene.next.name = "HiddenScene";
});

প্রতিক্রিয়া JSON

{
  "session": {
    "id": "session_id",
    "params": {}
  },
  "prompt": {
    "override": false,
    "firstSimple": {
      "speech": "This is an example prompt.",
      "text": ""
    }
  },
  "scene": {
    "name": "SceneName",
    "slots": {},
    "next": {
      "name": "HiddenScene"
    }
  }
}

দৃশ্য স্লট পড়ুন

স্লট ভরাটের সময়, আপনি স্লট যাচাই করতে বা স্লট ফিলিং এর স্থিতি পরীক্ষা করতে পরিপূর্ণতা ব্যবহার করতে পারেন ( SlotFillingStatus )।

Node.js

conv.scene.slotFillingStatus  // FINAL means all slots are filled
conv.scene.slots  // Object that contains all the slots
conv.scene.slots['slot_name'].<property_name> // Accessing a specific slot's properties

উদাহরণস্বরূপ, ধরুন আপনি একটি প্রতিক্রিয়া থেকে সময় অঞ্চলটি বের করতে চান। এই উদাহরণে, স্লটের নাম হল datetime1 । সময় অঞ্চল পেতে, আপনি ব্যবহার করবেন:

conv.scene.slots['datetime1'].value.time_zone.id

অনুরোধ JSON

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "",
    "params": {
      "slot_name": {
        "original": "1",
        "resolved": 1
      }
    },
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "FINAL",
    "slots": {
      "slot_name": {
        "mode": "REQUIRED",
        "status": "SLOT_UNSPECIFIED",
        "updated": true,
        "value": 1
      }
    },
    "next": {
      "name": "actions.scene.END_CONVERSATION"
    }
  },
  "session": {
    "id": "session_id",
    "params": {
      "slot_name": 1
    },
    "typeOverrides": []
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED"
    }
  },
  "home": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}

দৃশ্য স্লট অবৈধ

আপনি স্লট বাতিল করতে পারেন এবং ব্যবহারকারীকে একটি নতুন মান প্রদান করতে পারেন।

Node.js

conv.scene.slots['slot_name'].status = 'INVALID'

প্রতিক্রিয়া JSON

{
  "session": {
    "id": "session_id",
    "params": {
      "slot_name": 1
    }
  },
  "prompt": {
    "override": false,
    "firstSimple": {
      "speech": "This is an example prompt.",
      "text": ""
    }
  },
  "scene": {
    "name": "SceneName",
    "slots": {
      "slot_name": {
        "mode": "REQUIRED",
        "status": "INVALID",
        "updated": true,
        "value": 1
      }
    },
    "next": {
      "name": "actions.scene.END_CONVERSATION"
    }
  }
}

উন্নয়ন বিকল্প

অ্যাকশন বিল্ডার ক্লাউড ফাংশন এডিটর নামে একটি ইনলাইন এডিটর প্রদান করে, যা আপনাকে সরাসরি কনসোলে Firebase-এর জন্য একটি ক্লাউড ফাংশন তৈরি এবং স্থাপন করতে দেয়। এছাড়াও আপনি আপনার পছন্দের হোস্টিং-এ পরিপূর্ণতা তৈরি এবং স্থাপন করতে পারেন এবং আপনার ওয়েবহুক হ্যান্ডলার হিসাবে আপনার HTTPS পরিপূর্ণতা শেষ পয়েন্ট নিবন্ধন করতে পারেন।

ইনলাইন সম্পাদক

ক্লাউড ফাংশন সম্পাদকের সাথে বিকাশ করতে:

  1. sdk/webhooks/ActionsOnGoogleFulfillment.yaml ফাইলটি তৈরি করুন এবং আপনার অ্যাকশনের জন্য হ্যান্ডলার এবং পূরণের জন্য ব্যবহৃত ইনলাইন ক্লাউড ফাংশন নির্ধারণ করুন।
    handlers:
    - name: questionOnEnterFunc
    - name: fruitSlotValidationFunc
    inlineCloudFunction:
      executeFunction: ActionsOnGoogleFulfillment
        
  2. sdk/webhooks/ActionsOnGoogleFulfillment ফোল্ডারটি তৈরি করুন, এবং একটি index.js ফাইল যোগ করুন যা পূর্বে সংজ্ঞায়িত হ্যান্ডলারগুলিকে প্রয়োগ করে এবং একটি package.json ফাইল যা আপনার কোডের জন্য npm প্রয়োজনীয়তাগুলিকে সংজ্ঞায়িত করে৷
    // index.js
    const {conversation} = require('@assistant/conversation');
    const functions = require('firebase-functions');
    
    const app = conversation();
    
    app.handle('questionOnEnterFunc', conv => {
      conv.add('questionOnEnterFunc triggered on webhook');
    });
    
    app.handle('fruitSlotValidationFunc', conv => {
      conv.add('fruitSlotValidationFunc triggered on webhook');
    });
    
    exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
        
    // package.json
    {
      "name": "ActionsOnGoogleFulfillment",
      "version": "0.1.0",
      "description": "Actions on Google fulfillment",
      "main": "index.js",
      "dependencies": {
        "@assistant/conversation": "^3.0.0",
        "firebase-admin": "^5.4.3",
        "firebase-functions": "^0.7.1"
      }
    }
        

বাহ্যিক HTTPS এন্ডপয়েন্ট

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

পরিবেশ স্থাপন করুন

যখন আপনি Firebase-এর জন্য ক্লাউড ফাংশনগুলি পরিপূর্ণতা পরিষেবা হিসাবে ব্যবহার করেন তখন আমরা নিম্নলিখিত প্রকল্প কাঠামোর সুপারিশ করি:

ProjectFolder        - Root folder for the project
  sdk                - Actions project configuration files
  functions          - Cloud functions for Firebase files

আপনার পরিবেশ সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Node.js ডাউনলোড এবং ইনস্টল করুন
  2. Firebase CLI সেট আপ এবং আরম্ভ করুন। যদি নিম্নলিখিত কমান্ডটি একটি EACCES ত্রুটির সাথে ব্যর্থ হয়, তাহলে আপনাকে npm অনুমতি পরিবর্তন করতে হতে পারে।

    npm install -g firebase-tools
    
  3. আপনার Google অ্যাকাউন্ট দিয়ে ফায়ারবেস টুলটি প্রমাণীকরণ করুন:

    firebase login
    
  4. আপনি যেখানে আপনার অ্যাকশন প্রকল্প সংরক্ষণ করেছেন সেই প্রকল্প ডিরেক্টরিটি শুরু করুন। আপনার অ্যাকশন প্রকল্পের জন্য আপনি কোন Firebase CLI বৈশিষ্ট্যগুলি সেটআপ করতে চান তা নির্বাচন করতে বলা হবে৷ Functions এবং অন্যান্য বৈশিষ্ট্যগুলি বেছে নিন যা আপনি ব্যবহার করতে চান, যেমন Firestore, তারপর নিশ্চিত করতে এবং চালিয়ে যেতে এন্টার টিপুন:

    $ cd <ACTIONS_PROJECT_DIRECTORY>
    $ firebase init
    
  5. প্রজেক্ট তালিকা নেভিগেট করতে তীর কী ব্যবহার করে এটি নির্বাচন করে আপনার অ্যাকশন প্রকল্পের সাথে ফায়ারবেস টুলটিকে সংযুক্ত করুন:

  6. প্রকল্পটি বেছে নেওয়ার পরে, ফায়ারবেস টুল ফাংশন সেটআপ শুরু করে এবং আপনাকে জিজ্ঞাসা করে আপনি কোন ভাষা ব্যবহার করতে চান। তীর কীগুলি ব্যবহার করে নির্বাচন করুন এবং চালিয়ে যেতে এন্টার টিপুন।

    === Functions Setup
    A functions directory will be created in your project with a Node.js
    package pre-configured. Functions can be deployed with firebase deploy.
    
    ? What language would you like to use to write Cloud Functions? (Use arrow keys)
    > JavaScript
    TypeScript
    
  7. আপনি সম্ভাব্য বাগগুলি ধরতে এবং Y বা N টাইপ করে শৈলী প্রয়োগ করতে ESLint ব্যবহার করতে চান কিনা তা চয়ন করুন:

    ? Do you want to use ESLint to catch probable bugs and enforce style? (Y/n)
  8. প্রম্পটে Y টাইপ করে প্রকল্প নির্ভরতা পান:

    ? Do you want to install dependencies with npm now? (Y/n)

    সেটআপ সম্পন্ন হলে, আপনি নিম্নলিখিত অনুরূপ একটি আউটপুট দেখতে পাবেন:

    ✔  Firebase initialization complete!
    
  9. @অ্যাসিস্ট্যান্ট/কথোপকথন নির্ভরতা ইনস্টল করুন:

    $ cd <ACTIONS_PROJECT_DIRECTORY>/functions
    $ npm install @assistant/conversation --save
    
  10. পরিপূর্ণ নির্ভরতা পান এবং পরিপূর্ণতা ফাংশন স্থাপন করুন:

    $ npm install
    $ firebase deploy --only functions
    

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

    ✔  Deploy complete!
    Project Console: https://console.firebase.google.com/project/<PROJECT_ID>/overview Function URL (<FUNCTION_NAME>): https://us-central1-<PROJECT_ID>.cloudfunctions.net/<FUNCTION_NAME>
  11. পরবর্তী বিভাগে ব্যবহার করার জন্য পূরণের URLটি কপি করুন।

ওয়েবহুক হ্যান্ডলার নিবন্ধন করুন

  1. sdk/webhooks/ActionsOnGoogleFulfillment.yaml ফাইলটি তৈরি করুন এবং আপনার অ্যাকশনের জন্য হ্যান্ডলার এবং ওয়েবহুক অনুরোধের URL নির্ধারণ করুন।
    httpsEndpoint:
      baseUrl: https://my.web.hook/ActionsOnGoogleFulfillment
      endpointApiVersion: 2
    handlers:
    - name: questionOnEnterFunc
    - name: fruitSlotValidationFunc