बुकिंग करना

इस गाइड में ऐसे Actions प्रोजेक्ट को बनाने की प्रोसेस के बारे में बताया गया है जो बुकिंग करने के लिए ऑर्डर एपीआई का इस्तेमाल करता है.

लेन-देन फ़्लो

जब आपका Actions प्रोजेक्ट बुकिंग मैनेज करता है, तब यह इस फ़्लो का इस्तेमाल करता है:

  1. लेन-देन से जुड़ी ज़रूरी शर्तों की पुष्टि करना (ज़रूरी नहीं) - बातचीत की शुरुआत में लेन-देन की ज़रूरी शर्तों के लिए मदद करने वाले हेल्पर का इस्तेमाल करें. इससे यह पक्का हो जाता है कि उपयोगकर्ता लेन-देन करने के लिए तैयार है या नहीं.
  2. ऑर्डर बनाएं - उपयोगकर्ता को "कार्ट असेंबली" के ज़रिए बताएं, जहां वे अपनी बुकिंग की जानकारी तैयार करते हैं.
  3. ऑर्डर पेश करना - "कार्ट" पूरा होने पर, उपयोगकर्ता को रिज़र्वेशन "ऑर्डर" करने का सुझाव दें, ताकि वह पुष्टि कर सके कि ऑर्डर सही है. बुकिंग की पुष्टि हो जाने पर, आपको बुकिंग की जानकारी के साथ जवाब मिलता है.
  4. ऑर्डर पूरा करें और रसीद भेजें - ऑर्डर की पुष्टि हो जाने के बाद, अपना रिज़र्वेशन सिस्टम अपडेट करें और उपयोगकर्ता को रसीद भेजें.
  5. ऑर्डर के अपडेट भेजें - बुकिंग खत्म होने के दौरान, ऑर्डर एपीआई को पैच अनुरोध भेजकर, उपयोगकर्ता की बुकिंग की स्थिति के अपडेट दें.

पाबंदियां और समीक्षा के लिए दिशा-निर्देश

ध्यान रखें कि कुछ और नीतियां उन कार्रवाइयों पर भी लागू होती हैं जो ट्रांज़ैक्शन और ऑर्डर एपीआई का इस्तेमाल करती हैं. लेन-देन वाली कार्रवाइयों की समीक्षा करने में हमें छह हफ़्ते तक लग सकते हैं, इसलिए अपने रिलीज़ शेड्यूल की योजना बनाते समय उस समय का ध्यान रखें. समीक्षा के लिए कार्रवाई सबमिट करने से पहले, पक्का करें कि समीक्षा की प्रोसेस को आसान बनाने के लिए, लेन-देन से जुड़ी नीतियों और दिशा-निर्देशों का पालन किया जा रहा हो.

नीचे दिए गए देशों में सिर्फ़ उन कार्रवाइयों को डिप्लॉय किया जा सकता है जो ऑर्डर एपीआई का इस्तेमाल करती हैं:

ऑस्ट्रेलिया
ब्राज़ील
कनाडा
इंडोनेशिया
जापान
मेक्सिको
कतर
रूस
सिंगापुर
स्विट्ज़रलैंड
थाईलैंड
तुर्किये
यूनाइटेड किंगडम
अमेरिका

अपना प्रोजेक्ट बनाएं

लेन-देन से जुड़ी बातचीत के ज़्यादा उदाहरण देखने के लिए, Node.js में लेन-देन का सैंपल देखें.

सेटअप

अपनी सेट की गई कार्रवाई बनाते समय, आपको यह बताना होगा कि आप Actions कंसोल में लेन-देन करना चाहते हैं.

अपना प्रोजेक्ट सेट अप करने और उसे पूरा करने के लिए, यह तरीका अपनाएं:

  1. एक नया प्रोजेक्ट बनाएं या कोई मौजूदा प्रोजेक्ट इंपोर्ट करें.
  2. डिप्लॉय करें > डायरेक्ट्री की जानकारी पर जाएं.
  3. ज़्यादा जानकारी > लेन-देन में जाकर > "क्या आपकी कार्रवाइयां, भौतिक चीज़ों के लेन-देन के लिए लेन-देन एपीआई का इस्तेमाल करती हैं?" वाले बॉक्स को चुनें.

लेन-देन से जुड़ी ज़रूरी शर्तों की पुष्टि करना (ज़रूरी नहीं)

जैसे ही उपयोगकर्ता बताएं कि वह बुकिंग के लिए सेट अप करना चाहता है, आपको यह देखना होगा कि वह बुकिंग का अनुरोध कर सकता है या नहीं. उदाहरण के लिए, शुरू किए जाने पर आपकी सेट की गई कार्रवाई में यह पूछा जा सकता है, "क्या आपको सीट बुक करनी है?" अगर उपयोगकर्ता "हां" कहता है, तो आपको पक्का करना चाहिए कि वह आगे बढ़ सकती है. साथ ही, ऐसी सेटिंग को ठीक करने का मौका दे सकते हैं जो उन्हें लेन-देन जारी रखने से रोकती है. इसके लिए, आपको उस सीन पर जाना होगा जहां ट्रांज़ैक्शन से जुड़ी ज़रूरी शर्तों की जांच की जाती है.

लेन-देन की ज़रूरी शर्तों की जांच करने का सीन बनाएं

  1. सीन टैब में जाकर, TransactionRequirementsCheck नाम के साथ नया सीन जोड़ें.
  2. स्लॉट भरना में जाकर, नया स्लॉट जोड़ने के लिए + पर क्लिक करें.
  3. टाइप चुनें में जाकर, स्लॉट टाइप के तौर पर actions.type.TransactionRequirementsCheckResult चुनें.
  4. स्लॉट के नाम वाले फ़ील्ड में, स्लॉट को TransactionRequirementsCheck नाम दें.
  5. पसंद के मुताबिक स्लॉट वैल्यू में बदलाव करें चेकबॉक्स को चालू करें. यह डिफ़ॉल्ट रूप से चालू होता है.
  6. सेव करें पर क्लिक करें.

लेन-देन की ज़रूरी शर्तों की जांच करने पर, इनमें से कोई एक नतीजा मिलता है:

  • अगर ज़रूरी शर्तें पूरी हो जाती हैं, तो सेशन पैरामीटर सफल होने की शर्त के साथ सेट होता है. इसके बाद, उपयोगकर्ता के लिए ऑर्डर बनाने का काम जारी रखा जा सकता है.
  • अगर एक या उससे ज़्यादा ज़रूरी शर्तें पूरी नहीं की जा सकतीं, तो सेशन पैरामीटर फ़ेल होने की स्थिति के साथ सेट होता है. ऐसे मामले में, आपको बातचीत को लेन-देन के अनुभव से दूर रखना चाहिए या बातचीत खत्म करनी चाहिए.
    • अगर गड़बड़ी होने की किसी वजह को उपयोगकर्ता ठीक कर पाते हैं, तो उन्हें अपने डिवाइस पर उन समस्याओं को ठीक करने के लिए कहा जाएगा. अगर कोई बातचीत ऐसी जगह पर हो रही है जहां सिर्फ़ आवाज़ हो, तो उपयोगकर्ता के फ़ोन पर हैंडऑफ़ शुरू हो जाएगा.

लेन-देन की ज़रूरी शर्तों से जुड़े जांच के नतीजे मैनेज करना

  1. सीन टैब से, अपने बनाए गए नए TransactionRequirementsCheck सीन चुनें.
  2. स्थिति में, नई शर्त जोड़ने के लिए + पर क्लिक करें.
  3. सफलता की स्थिति की जांच करने के लिए, टेक्स्ट फ़ील्ड में यह कंडिशन सिंटैक्स डालें:

    scene.slots.status == "FINAL" && session.params.TransactionRequirementsCheck.resultType == "CAN_TRANSACT"
    
  4. आपने अभी जिस शर्त को जोड़ा है उस पर अपना कर्सर घुमाएं और उसे if scene.slots.status == "FINAL" से पहले रखने के लिए, अप ऐरो पर क्लिक करें.

  5. अनुरोध भेजें को चालू करें और एक आसान शब्दों में, उपयोगकर्ता को यह बताएं कि वे लेन-देन करने के लिए तैयार हैं:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Looks like you're good to go!.
    
  6. ट्रांज़िशन में, कोई दूसरा सीन चुनें. इससे उपयोगकर्ता बातचीत जारी रख सकेगा और लेन-देन कर सकेगा.

  7. शर्त else if scene.slots.status == "FINAL" चुनें.

  8. अनुरोध भेजें को चालू करें और एक आसान सूचना देकर, लोगों को बताएं कि वे लेन-देन नहीं कर सकते:

    candidates:
      - first_simple:
          variants:
            - speech: Transaction requirements check failed.
    
  9. अगर कोई उपयोगकर्ता लेन-देन नहीं कर पा रहा है, तो ट्रांज़िशन में जाकर, बातचीत खत्म करने के लिए बातचीत खत्म करें को चुनें.

ऑर्डर बनाएं

उपयोगकर्ता की ज़रूरत की जानकारी मिलने के बाद, "कार्ट असेंबली" का एक ऐसा अनुभव बनाएं जो उपयोगकर्ता को बुकिंग करने में मदद करे. हर कार्रवाई की सेवा के हिसाब से, कार्ट असेंबली फ़्लो थोड़ा अलग होगा.

कार्ट असेंबली के बुनियादी अनुभव में, कोई उपयोगकर्ता अपने रिज़र्वेशन में जोड़ने के लिए, सूची से विकल्पों को चुनता है. हालांकि, आपके पास उपयोगकर्ता अनुभव को आसान बनाने के लिए बातचीत को इस तरह से डिज़ाइन करने का विकल्प होता है. उदाहरण के लिए, एक ऐसा कार्ट असेंबली अनुभव तैयार करें जिसकी मदद से उपयोगकर्ता हां या नहीं में सवाल पूछने के लिए हर महीने अपनी बुकिंग शेड्यूल कर सकें. आप उपयोगकर्ता को "सुझाई गई" बुकिंग का कैरसेल या सूची कार्ड भी दिखा सकते हैं.

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

ऑर्डर बनाएं

अपनी पूरी बातचीत के दौरान, उपयोगकर्ता की बुकिंग की जानकारी इकट्ठा करें और एक Order ऑब्जेक्ट बनाएं.

आपके Order में कम से कम ये चीज़ें होनी चाहिए:

  • buyerInfo - खरीदारी करने वाले उपयोगकर्ता के बारे में जानकारी.
  • transactionMerchant - उस व्यापारी/कंपनी के बारे में जानकारी जिसने ऑर्डर देने में मदद की.
  • contents - ऑर्डर का असल कॉन्टेंट lineItems के तौर पर लिस्ट किया गया है.

अपना कार्ट बनाने के लिए, Order रिस्पॉन्स दस्तावेज़ देखें. ध्यान दें कि रिज़र्वेशन के आधार पर आपको अलग-अलग फ़ील्ड शामिल करने पड़ सकते हैं.

यहां दिए गए सैंपल कोड में, रिज़र्वेशन कैंपेन की पूरी जानकारी दी गई है. इसमें वैकल्पिक फ़ील्ड भी शामिल हैं:

const order = {
   createTime: '2019-09-24T18:00:00.877Z',
   lastUpdateTime: '2019-09-24T18:00:00.877Z',
   merchantOrderId: orderId, // A unique ID String for the order
   userVisibleOrderId: orderId,
   transactionMerchant: {
     id: 'http://www.example.com',
     name: 'Example Merchant',
   },
   contents: {
     lineItems: [
       {
         id: 'LINE_ITEM_ID',
         name: 'Dinner reservation',
         description: 'A world of flavors all in one destination.',
         reservation: {
           status: 'PENDING',
           userVisibleStatusLabel: 'Reservation is pending.',
           type: 'RESTAURANT',
           reservationTime: {
             timeIso8601: '2020-01-16T01:30:15.01Z',
           },
           userAcceptableTimeRange: {
             timeIso8601: '2020-01-15/2020-01-17',
           },
           partySize: 6,
           staffFacilitators: [
             {
               name: 'John Smith',
             },
           ],
           location: {
             zipCode: '94086',
             city: 'Sunnyvale',
             postalAddress: {
               regionCode: 'US',
               postalCode: '94086',
               administrativeArea: 'CA',
               locality: 'Sunnyvale',
               addressLines: [
                 '222, Some other Street',
               ],
             },
           },
         },
       },
     ],
   },
   buyerInfo: {
     email: 'janedoe@gmail.com',
     firstName: 'Jane',
     lastName: 'Doe',
     displayName: 'Jane Doe',
   },
   followUpActions: [
     {
       type: 'VIEW_DETAILS',
       title: 'View details',
       openUrlAction: {
         url: 'http://example.com',
       },
     },
     {
       type: 'CALL',
       title: 'Call us',
       openUrlAction: {
         url: 'tel:+16501112222',
       },
     },
     {
       type: 'EMAIL',
       title: 'Email us',
       openUrlAction: {
         url: 'mailto:person@example.com',
       },
     },
   ],
   termsOfServiceUrl: 'http://www.example.com'
 };

ऑर्डर करने और प्रज़ेंटेशन के विकल्प बनाएं

const orderOptions = {
      'requestDeliveryAddress': false,
    };

const presentationOptions = {
      'actionDisplayName': 'RESERVE'
    };

सेशन पैरामीटर में ऑर्डर डेटा को सेव करें

फ़ुलफ़िलमेंट के तहत दिए गए ऑर्डर के डेटा को, सेशन पैरामीटर में सेव करें. ऑर्डर ऑब्जेक्ट का इस्तेमाल, एक ही सेशन के सभी सीन में किया जाएगा.

conv.session.params.order = {
    '@type': 'type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec',
    order: order,
    orderOptions: orderOptions,
    presentationOptions: presentationOptions
};

आदेश प्रस्तावित करें

बुकिंग ऑर्डर बनाने के बाद, आपको इसकी पुष्टि या अस्वीकार करने के लिए, इसे उपयोगकर्ता के सामने पेश करना होगा. इसके लिए, आपको लेन-देन का फ़ैसला लेने वाले सीन पर जाना होगा.

लेन-देन के फ़ैसले का सीन बनाएं

  1. सीन टैब से, TransactionDecision नाम के साथ नया सीन जोड़ें.
  2. स्लॉट भरना में जाकर, नया स्लॉट जोड़ने के लिए + पर क्लिक करें.
  3. टाइप चुनें में जाकर, स्लॉट टाइप के तौर पर actions.type.TransactionDecisionValue को चुनें.
  4. स्लॉट के नाम वाले फ़ील्ड में, स्लॉट को TransactionDecision नाम दें.
  5. पसंद के मुताबिक स्लॉट वैल्यू में बदलाव करें चेकबॉक्स को चालू करें. यह डिफ़ॉल्ट रूप से चालू होता है.
  6. स्लॉट कॉन्फ़िगर करें में, ड्रॉपडाउन से सेशन पैरामीटर का इस्तेमाल करें चुनें.
  7. स्लॉट कॉन्फ़िगर करें में जाकर,ऑर्डर को स्टोर करने के लिए इस्तेमाल किए जाने वाले सेशन पैरामीटर का नाम टेक्स्ट फ़ील्ड (जैसे कि $session.params.order) में डालें.
  8. सेव करें पर क्लिक करें.

TransactionDecisionValue स्लॉट भरने की कोशिश में Assistant, पहले से मौजूद अनुभव देती है. इसमें आपके पास किया गया Order सीधे "कार्ट की झलक दिखाने वाले कार्ड" में रेंडर होता है. उपयोगकर्ता "बुकिंग शेड्यूल करो" कह सकते हैं, लेन-देन को अस्वीकार कर सकते हैं या बुकिंग की जानकारी बदलने का अनुरोध कर सकते हैं.

इस समय, उपयोगकर्ता ऑर्डर में बदलाव करने का अनुरोध भी कर सकता है. इस मामले में, आपको यह पक्का करना चाहिए कि कार्ट असेंबली अनुभव पूरा करने के बाद आपका फ़ुलफ़िलमेंट, ऑर्डर में बदलाव के अनुरोधों को हैंडल कर सके.

लेन-देन से जुड़े फ़ैसले के नतीजे को मैनेज करना

TransactionDecisionValue स्लॉट भर जाने पर, लेन-देन के फ़ैसले के लिए उपयोगकर्ता का जवाब, सेशन पैरामीटर में सेव किया जाएगा. इस वैल्यू में ये शामिल हैं:

  • ORDER_ACCEPTED,
  • ORDER_REJECTED,
  • CART_CHANGE_REQUESTED
  • USER_CANNOT_TRANSACT.

लेन-देन से जुड़े फ़ैसले का नतीजा मैनेज करने के लिए:

  1. सीन टैब में जाकर, TransactionDecision का नया सीन चुनें.
  2. स्थिति में, नई शर्त जोड़ने के लिए + पर क्लिक करें.
  3. सफलता की स्थिति की जांच करने के लिए, टेक्स्ट फ़ील्ड में यह कंडिशन सिंटैक्स डालें:

    scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_ACCEPTED"
    
  4. अभी-अभी जोड़ी गई शर्त पर अपना कर्सर घुमाएं और उसे if scene.slots.status == "FINAL" से पहले रखने के लिए, अप ऐरो पर क्लिक करें.

  5. अनुरोध भेजें को चालू करें और एक सूचना देकर, उपयोगकर्ता को यह बताएं कि उसकी बुकिंग पूरी हो गई है:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Transaction completed! Your reservation
                $session.params.TransactionDecision.order.merchantOrderId is all
                set!
    
  6. ट्रांज़िशन में जाकर, बातचीत खत्म करने के लिए, बातचीत खत्म करें को चुनें.

  7. स्थिति में, नई शर्त जोड़ने के लिए + पर क्लिक करें.

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

      scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_REJECTED"
    
  9. अभी-अभी जोड़ी गई शर्त पर अपना कर्सर घुमाएं और उसे if scene.slots.status == "FINAL" से पहले रखने के लिए, अप ऐरो पर क्लिक करें.

  10. प्रॉम्प्ट भेजें चालू करें और उपयोगकर्ता को एक आसान प्रॉम्प्ट देकर बताएं कि ऑर्डर अस्वीकार कर दिया गया है:

    candidates:
      - first_simple:
          variants:
            - speech: Looks like you don't want to set up a reservation. Goodbye.
    
  11. ट्रांज़िशन में जाकर, बातचीत खत्म करने के लिए, बातचीत खत्म करें को चुनें.

  12. शर्त else if scene.slots.status == "FINAL" चुनें.

  13. अनुरोध भेजें को चालू करें और एक आसान सूचना देकर, लोगों को बताएं कि वे लेन-देन नहीं कर सकते:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Transaction failed with status
                $session.params.TransactionDecision.transactionDecision
    
  14. अगर उपयोगकर्ता लेन-देन नहीं कर पा रहा है, तो ट्रांज़िशन में जाकर, बातचीत खत्म करने के लिए बातचीत खत्म करें को चुनें.

बुकिंग की प्रक्रिया पूरी करें और रसीद भेजें

जब TransactionDecisionValue स्लॉट, ORDER_ACCEPTED का नतीजा दिखाता है, तो आपको बुकिंग को शेड्यूल करने के लिए ज़रूरी प्रोसेस तुरंत करनी होगी. जैसे, इसे अपने डेटाबेस में बनाए रखना.

बातचीत जारी रखने के लिए, एक आसान जवाब भेजें. उपयोगकर्ता को आपके जवाब के साथ, "छोटा रसीद कार्ड" भी मिलता है.

ऑर्डर का शुरुआती अपडेट भेजने के लिए:

  1. सीन टैब से, TransactionDecision का अपना सीन चुनें.
  2. स्थिति में, उस शर्त को चुनें जो सही नतीजे की जांच करती है, ORDER_ACCEPTED:

    scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_ACCEPTED"
    
  3. इस शर्त के लिए, अपने वेबहुक को कॉल करें को चालू करें और इंटेंट हैंडलर का नाम दें, जैसे कि update_order.

  4. अपने वेबहुक कोड में, ऑर्डर का शुरुआती अपडेट भेजने के लिए इंटेंट हैंडलर जोड़ें:

    app.handle('update_order', conv => {
      const currentTime = new Date().toISOString();
      let order = conv.session.params.TransactionDecision.order;
      conv.add(new OrderUpdate({
        'updateMask': {
          'paths': [
            'reservation.status',
            'reservation.user_visible_status_label',
            'reservation.confirmation_code'
          ]
        },
        'order': {
          'merchantOrderId': order.merchantOrderId,
          'lastUpdateTime': currentTime,
          'reservation': {
            'status': 'CONFIRMED',
            'userVisibleStatusLabel': 'Reservation confirmed',
            'confirmationCode': '123ABCDEFGXYZ',
          },
        },
        'reason': 'Reason string'
      }));
    });
    

ऑर्डर के अपडेट भेजें

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

ऑर्डर एपीआई के लिए एसिंक्रोनस अनुरोध सेट अप करना

ऑर्डर एपीआई को ऑर्डर अपडेट करने के अनुरोधों को ऐक्सेस टोकन से अनुमति दी जाती है. ऑर्डर अपडेट को ऑर्डर एपीआई में पैच करने के लिए, अपने Actions Console प्रोजेक्ट से जुड़ा JSON सेवा खाता कुंजी डाउनलोड करें. इसके बाद, सेवा खाता कुंजी को एक ऐसे बेयरर टोकन से बदलें जिसे एचटीटीपी अनुरोध के Authorization हेडर में भेजा जा सके.

सेवा खाते की कुंजी को वापस पाने के लिए, यह तरीका अपनाएं:

  1. Google Cloud कंसोल में, मेन्यू ≡ > एपीआई और सेवाएं > क्रेडेंशियल > क्रेडेंशियल बनाएं > सेवा खाता कुंजी पर जाएं.
  2. सेवा खाते में, नया सेवा खाता चुनें.
  3. सेवा खाते को service-account पर सेट करें.
  4. भूमिका को प्रोजेक्ट > मालिक पर सेट करें.
  5. कुंजी के टाइप को JSON पर सेट करें.
  6. बनाएं चुनें.
  7. आपके कंप्यूटर पर एक निजी JSON सेवा खाता कुंजी डाउनलोड हो जाएगी.

अपने ऑर्डर अपडेट कोड में, Google API क्लाइंट लाइब्रेरी और "https://www.googleapis.com/auth/actions.order.developer" स्कोप का इस्तेमाल करके, अपनी सेवा कुंजी को बेयरर टोकन से बदलें. एपीआई क्लाइंट लाइब्रेरी GitHub पेज पर जाकर, इंस्टॉल करने के तरीके और उदाहरण देखे जा सकते हैं.

मुख्य एक्सचेंज के उदाहरण के लिए, हमारे Node.js सैंपल में, order-update.js का रेफ़रंस दें.

ऑर्डर के अपडेट भेजें

अपनी सेवा खाता कुंजी को OAuth बेयर टोकन से बदलने के बाद, ऑर्डर से जुड़े अपडेट, अनुमति वाले PATCH अनुरोधों के तौर पर ऑर्डर एपीआई को भेजें.

ऑर्डर एपीआई यूआरएल: PATCH https://actions.googleapis.com/v3/orders/${orderId}

अपने अनुरोध में ये हेडर दें:

  • "Authorization: Bearer token" को OAuth बेयरर टोकन के साथ बदला गया है. इसके लिए, आपने अपनी सेवा खाता कुंजी का इस्तेमाल किया है.
  • "Content-Type: application/json".

PATCH अनुरोध को JSON फ़ॉर्मैट में इस तरह लिखा जाना चाहिए:

{ "orderUpdate": OrderUpdate }

OrderUpdate ऑब्जेक्ट में, ये टॉप लेवल फ़ील्ड होते हैं:

  • updateMask - ऑर्डर के वे फ़ील्ड जिन्हें अपडेट किया जा रहा है. बुकिंग की स्थिति अपडेट करने के लिए, वैल्यू को reservation.status, reservation.userVisibleStatusLabel पर सेट करें.
  • order - अपडेट का कॉन्टेंट. अगर बुकिंग के कॉन्टेंट अपडेट किए जा रहे हैं, तो अपडेट किए गए Order ऑब्जेक्ट पर वैल्यू सेट करें. अगर बुकिंग की स्थिति अपडेट की जा रही है, जैसे कि "PENDING" से "FULFILLED" में, तो ऑब्जेक्ट में ये फ़ील्ड शामिल होंगे:

    • merchantOrderId - वही आईडी जिसे आपने अपने Order ऑब्जेक्ट में सेट किया है.
    • lastUpdateTime - इस अपडेट का टाइमस्टैंप.
    • purchase - एक ऑब्जेक्ट जिसमें ये चीज़ें शामिल हैं:
      • status - ऑर्डर की स्थिति ReservationStatus के तौर पर, जैसे कि "CONFIRMED" या "CANCELLED".
      • userVisibleStatusLabel - उपयोगकर्ता को दिखने वाला लेबल, जो ऑर्डर की स्थिति के बारे में जानकारी देता है, जैसे कि "आपकी बुकिंग हो गई है".
  • userNotification ऑब्जेक्ट, जो यह अपडेट भेजे जाने के बाद, उपयोगकर्ता के डिवाइस पर दिख सकता है. ध्यान दें कि इस ऑब्जेक्ट को शामिल करने से यह गारंटी नहीं मिलती कि उपयोगकर्ता के डिवाइस पर सूचना दिखेगी.

इस सैंपल कोड में, OrderUpdate का एक उदाहरण दिया गया है. इससे, रिज़र्वेशन ऑर्डर की स्थिति को FULFILLED में अपडेट किया जाता है:

// Import the 'googleapis' module for authorizing the request.
const {google} = require('googleapis');
// Import the 'request-promise' module for sending an HTTP POST request.
const request = require('request-promise');
// Import the OrderUpdate class from the client library.
const {OrderUpdate} = require('@assistant/conversation');

// Import the service account key used to authorize the request.
// Replacing the string path with a path to your service account key.
// i.e. const serviceAccountKey = require('./service-account.json')

// Create a new JWT client for the Actions API using credentials
// from the service account key.
let jwtClient = new google.auth.JWT(
   serviceAccountKey.client_email,
   null,
   serviceAccountKey.private_key,
   ['https://www.googleapis.com/auth/actions.order.developer'],
   null,
);

// Authorize the client
let tokens = await jwtClient.authorize();

// Declare the ID of the order to update.
const orderId = '<UNIQUE_MERCHANT_ORDER_ID>';

// Declare order update
const orderUpdate = new OrderUpdate({
   updateMask: {
     paths: [
       'contents.lineItems.reservation.status',
       'contents.lineItems.reservation.userVisibleStatusLabel'
     ]
   },
   order: {
     merchantOrderId: orderId, // Specify the ID of the order to update
     lastUpdateTime: new Date().toISOString(),
     contents: {
       lineItems: [
         {
           reservation: {
             status: 'FULFILLED',
             userVisibleStatusLabel: 'Reservation fulfilled',
           },
         }
       ]
     },
   },
   reason: 'Reservation status was updated to fulfilled.',
});

// Set up the PATCH request header and body,
// including the authorized token and order update.
let options = {
 method: 'PATCH',
 uri: `https://actions.googleapis.com/v3/orders/${orderId}`,
 auth: {
   bearer: tokens.access_token,
 },
 body: {
   header: {
     isInSandbox: true,
   },
   orderUpdate,
 },
 json: true,
};

// Send the PATCH request to the Orders API.
try {
 await request(options);
} catch (e) {
 console.log(`Error: ${e}`);
}

बुकिंग की स्थिति सेट करना

किसी ऑर्डर के अपडेट के ReservationStatus में, ऑर्डर की मौजूदा स्थिति के बारे में जानकारी होनी चाहिए. अपने अपडेट के order.ReservationStatus फ़ील्ड में, इनमें से किसी एक वैल्यू का इस्तेमाल करें:

  • PENDING - आपकी सेट की गई कार्रवाई ने बुकिंग को "बनाया" है. हालांकि, इसके लिए आपके बैक-एंड पर अतिरिक्त प्रोसेसिंग की ज़रूरत है.
  • CONFIRMED - आपके शेड्यूलिंग बैक-एंड में बुकिंग की पुष्टि हो जाती है.
  • CANCELLED - उपयोगकर्ता ने अपनी बुकिंग रद्द कर दी है.
  • FULFILLED - उपयोगकर्ता की बुकिंग, सेवा के ज़रिए पूरी की गई थी.
  • CHANGE_REQUESTED - उपयोगकर्ता ने बुकिंग में बदलाव का अनुरोध किया था और बदलाव को प्रोसेस किया जा रहा है.
  • REJECTED - अगर बुकिंग को प्रोसेस नहीं किया जा सका या किसी और तरीके से बुकिंग की पुष्टि नहीं की जा सकी, तो

अपनी बुकिंग के हिसाब से हर स्थिति के लिए, ऑर्डर के अपडेट भेजें. उदाहरण के लिए, अगर आपकी बुकिंग का अनुरोध किए जाने के बाद उसकी पुष्टि करने के लिए मैन्युअल तरीके से प्रोसेस करने की ज़रूरत है, तो अतिरिक्त प्रोसेसिंग पूरी होने तक PENDING के ऑर्डर का अपडेट भेजें. हर बुकिंग के लिए, हर स्टेटस वैल्यू की ज़रूरत नहीं होती.

अपने प्रोजेक्ट की जांच करना

अपने प्रोजेक्ट की जांच करते समय, कार्रवाइयां कंसोल में सैंडबॉक्स मोड चालू किया जा सकता है. इससे, पैसे चुकाने के तरीके से पैसे लिए बिना, अपनी सेट की गई कार्रवाई को टेस्ट किया जा सकता है. सैंडबॉक्स मोड चालू करने के लिए, यह तरीका अपनाएं:

  1. Actions कंसोल में, नेविगेशन में मौजूद जांच करें पर क्लिक करें.
  2. सेटिंग पर क्लिक करें.
  3. डेवलपमेंट सैंडबॉक्स विकल्प को चालू करें.

फ़िज़िकल लेन-देन के लिए, अपने सैंपल में isInSandbox फ़ील्ड को true पर भी सेट किया जा सकता है. यह कार्रवाई, Actions कंसोल में सैंडबॉक्स मोड सेटिंग को चालू करने जैसी है. isInSandbox का इस्तेमाल करने वाला कोड स्निपेट देखने के लिए, ऑर्डर के अपडेट भेजें सेक्शन देखें.

समस्या हल करना

अगर आपको जांच के दौरान कोई समस्या आती है, तो लेन-देन से जुड़ी समस्या हल करने का तरीका लेख पढ़ें.