कॉलबैक

अपने इंटरैक्टिव कैनवस ऐक्शन में, इन कॉलबैक को लागू किया जा सकता है:

onUpdate()

onUpdate()कॉलबैक से, आपके वेबहुक से वेब ऐप्लिकेशन में डेटा भेजा जाता है, ताकि वेब ऐप्लिकेशन को सही तरीके से अपडेट किया जा सके. इस कॉलबैक का इस्तेमाल, सिर्फ़ इंटरैक्टिव कैनवस डेवलपमेंट के सर्वर-साइड फ़ुलफ़िलमेंट मॉडल के साथ करें.

onUpdate() के बारे में ज़्यादा जानकारी के लिए, वेब ऐप्लिकेशन अपडेट करने के लिए डेटा पास करें देखें.

onTtsMark()

जब आपके जवाब के स्पीच सिंथेसिस मार्कअप लैंग्वेज (SSML) में शामिल कस्टम <mark> टैग, लिखाई को बोली में बदलने (टीटीएस) के दौरान उपयोगकर्ता को पढ़े जाते हैं, तो onTtsMark() कॉलबैक को कॉल किया जाता है. सर्वर-साइड और क्लाइंट-साइड फ़ुलफ़िलमेंट डेवलपमेंट, दोनों मॉडल में onTtsMark() का इस्तेमाल किया जा सकता है.

नीचे दिए गए स्निपेट में, onTtsMark() वेब ऐप्लिकेशन के ऐनिमेशन को उससे जुड़े टीटीएस आउटपुट के साथ सिंक करता है. जब कार्रवाई में उपयोगकर्ता से कहा जाता है कि "माफ़ करें, आप खो गए हैं", तो वेब ऐप्लिकेशन सही शब्द को शब्दों में पिरोता है और उपयोगकर्ता को वे अक्षर दिखाता है.

यहां दिए गए उदाहरण में, वेबहुक हैंडलर revealWord में उपयोगकर्ता के गेम हार जाने पर उसके जवाब में एक कस्टम मार्क शामिल किया गया है:

JavaScript

…
app.handle('revealWord', conv => {
  conv.add(new Simple(`<speak>Sorry, you lost.<mark name="REVEAL_WORD"/> The word is ${conv.session.params.word}.</speak>`));
  conv.add(new Canvas());
});
…
    

इसके बाद, यह कोड स्निपेट onTtsMark() कॉलबैक को रजिस्टर करता है, मार्क के नाम की जांच करता है, और revealCorrectWord() फ़ंक्शन को एक्ज़ीक्यूट करता है, जो वेब ऐप्लिकेशन को अपडेट करता है:

JavaScript

…
setCallbacks() {
    // declare Assistant Canvas Action callbacks
    const callbacks = {
        onTtsMark(markName) {
            if (markName === 'REVEAL_WORD') {
                // display the correct word to the user
                that.revealCorrectWord();
            }
        },
    }
    callbacks.onUpdate.bind(this);
}
…
    

onInputStatusChanged()

आपके इंटरैक्टिव कैनवस ऐक्शन में इनपुट की स्थिति बदलने पर, onInputStatusChanged() कॉलबैक आपको सूचना देता है. इनपुट के स्टेटस में हुए बदलावों से पता चलता है कि माइक्रोफ़ोन चालू और बंद होता है या Assistant किसी क्वेरी को प्रोसेस कर रही है. इन इवेंट की वजह से इनपुट के स्टेटस में बदलाव हो सकता है:

  • आपकी सेट की गई कार्रवाई से बात करने वाला उपयोगकर्ता
  • Android के Google Search ऐप्लिकेशन (AGSA) पर टेक्स्ट इनपुट करता है
  • कार्रवाई को टेक्स्ट क्वेरी भेजने के लिए, sendTextQuery() एपीआई का इस्तेमाल करने वाला वेब ऐप्लिकेशन
  • होम के स्टोरेज और Assistant के दूसरे इवेंट के लिए कार्रवाई लिखने की सुविधा

इस कॉलबैक का मुख्य इस्तेमाल, आपकी सेट की गई कार्रवाई को उपयोगकर्ता के वॉइस इंटरैक्शन के साथ सिंक करना है. उदाहरण के लिए, अगर कोई उपयोगकर्ता इंटरैक्टिव कैनवस गेम खेल रहा है और माइक्रोफ़ोन खोलता है, तो उसके बोलने के दौरान गेम को रोका जा सकता है. माइक्रोफ़ोन के चालू होने तक इंतज़ार किया जा सकता है और Assistant को टेक्स्ट क्वेरी भेजी जा सकती है.

यह एपीआई इन स्टेटस की रिपोर्ट करता है:

  • LISTENING - यह बताता है कि माइक्रोफ़ोन खुला है.
  • IDLE - यह बताता है कि माइक्रोफ़ोन बंद है.
  • PROCESSING - इससे यह पता चलता है कि Assistant फ़िलहाल कोई क्वेरी चला रही है और माइक्रोफ़ोन बंद है.

हर बार स्टेटस बदलने पर, एपीआई आपकी सेट की गई कार्रवाई को इनपुट के स्टेटस की रिपोर्ट देता है.

हालांकि, अलग-अलग स्थितियों के बीच ट्रांज़िशन हो सकता है, लेकिन ये फ़्लो सामान्य हैं:

  • IDLE>LISTENING>PROCESSING>IDLE - उपयोगकर्ता कोई क्वेरी कहता है, क्वेरी प्रोसेस हो जाती है, और माइक्रोफ़ोन बंद हो जाता है.
  • IDLE>PROCESSING>IDLE - कार्रवाई को टेक्स्ट क्वेरी भेजने के लिए, वेब ऐप्लिकेशन sendTextQuery() एपीआई का इस्तेमाल करता है.
  • IDLE>LISTENING>IDLE - उपयोगकर्ता माइक्रोफ़ोन खोलता है, लेकिन कोई क्वेरी नहीं बोलता.

अपनी सेट की गई कार्रवाई में इस सुविधा का इस्तेमाल करने के लिए, अपने वेब ऐप्लिकेशन के कोड में onInputStatusChanged() जोड़ें, जैसा कि इस स्निपेट में दिखाया गया है:

onInputStatusChanged(inputStatus) {
   console.log("The new input status is: ", inputStatus);
}

onInputStatusChanged() कॉलबैक, एक एनम पैरामीटर, inputStatus को वापस पास करता है. इनपुट की मौजूदा स्थिति देखने के लिए, यह वैल्यू देखी जा सकती है. inputStatus, LISTENING, PROCESSING या IDLE हो सकता है.

इसके बाद, callbacks ऑब्जेक्ट में onInputStatusChanged() को जोड़कर उसे रजिस्टर करें, जैसा कि इस स्निपेट में दिखाया गया है:

 /**
  * Register all callbacks used by the Interactive Canvas Action
  * executed during game creation time.
  */
 setCallbacks() {
   const that = this;
   // Declare the Interactive Canvas action callbacks.
   const callbacks = {
     onUpdate(data) {
       console.log('Received data', data);
     },
     onInputStatusChanged(inputStatus) {
       console.log("The new input status is: ", inputStatus);
     },
   };
   // Called by the Interactive Canvas web app once web app has loaded to
   // register callbacks.
   this.canvas.ready(callbacks);
 }
}