कारोबारी की ओर से मैनेज किए जाने वाले पेमेंट के साथ, वास्तविक लेन-देन करें

इस गाइड में, ऐसे Actions प्रोजेक्ट को बनाने की प्रोसेस के बारे में बताया गया है जिसमें आपकी साइट से मैनेज किए जाने वाले, पैसे चुकाने के तरीकों का इस्तेमाल करके सामान के लिए किए गए लेन-देन को शामिल किया गया है.

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

जब आपका ऐक्शन प्रोजेक्ट, कारोबारी की ओर से मैनेज किए जाने वाले पेमेंट की मदद से फ़िज़िकल लेन-देन मैनेज करता है, तब यह इस फ़्लो का इस्तेमाल करता है:

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

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

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

सिर्फ़ ऐसी कार्रवाइयों को डिप्लॉय किया जा सकता है जो सामान बेचते हैं. यह सुविधा इन देशों में उपलब्ध है:

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

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

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

प्रोजेक्ट सेटअप

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

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

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

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

पुष्टि करने के लिए, वॉइस यूज़र इंटरफ़ेस डिज़ाइन करें

यह पता करना कि उपयोगकर्ता की पुष्टि हो चुकी है या नहीं और खाता लिंक करने की प्रक्रिया शुरू करें

  1. Actions कंसोल में अपना Actions Builder प्रोजेक्ट खोलें.
  2. अपनी सेट की गई कार्रवाई में खाता लिंक करने की प्रोसेस शुरू करने के लिए, एक नया सीन बनाएं:
    1. सीन पर क्लिक करें.
    2. नया सीन जोड़ने के लिए, जोड़ें (+) आइकॉन पर क्लिक करें.
  3. नए सीन में, शर्तों के लिए, जोड़ें आइकॉन पर क्लिक करें.
  4. एक शर्त जोड़ें जो यह जांच करती है कि बातचीत से जुड़ा उपयोगकर्ता, पुष्टि किया गया उपयोगकर्ता है या नहीं. अगर जांच पूरी नहीं हो पाती, तो आपकी सेट की गई कार्रवाई, बातचीत के दौरान खाता लिंक नहीं कर पाएगी. साथ ही, इसे ऐसे फ़ंक्शन का ऐक्सेस देना होगा जिसके लिए खाता लिंक करने की ज़रूरत नहीं होती.
    1. शर्त वाले Enter new expression फ़ील्ड में, यह लॉजिक डालें: user.verificationStatus != "VERIFIED"
    2. ट्रांज़िशन में, ऐसा सीन चुनें जिसमें खाता लिंक करने की ज़रूरत न हो या कोई ऐसा सीन चुनें जो सिर्फ़ मेहमान के लिए उपलब्ध सुविधा के लिए शुरुआती पॉइंट हो.

  1. शर्तों के लिए, ' जोड़ें' आइकॉन पर क्लिक करें.
  2. अगर उपयोगकर्ता की पहचान से जुड़ी जानकारी नहीं है, तो खाता लिंक करने के फ़्लो को ट्रिगर करने के लिए कोई शर्त जोड़ें.
    1. शर्त वाले Enter new expression फ़ील्ड में, यह लॉजिक डालें: user.verificationStatus == "VERIFIED"
    2. ट्रांज़िशन में जाकर, खाता लिंक करना सिस्टम सीन चुनें.
    3. सेव करें पर क्लिक करें.

सेव करने के बाद, आपके प्रोजेक्ट में खाता लिंक करने वाला <SceneName>_AccountLinking नाम का एक नया सीन जोड़ा जाता है.

खाता लिंक करने के सीन को पसंद के मुताबिक बनाना

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

  1. शर्तें सेक्शन में, अगर उपयोगकर्ता खाता लिंक करने की प्रोसेस पूरी कर लेता है पर क्लिक करें.
  2. अगर उपयोगकर्ता अपने खाते को लिंक करने की सहमति देता है, तो फ़्लो को कॉन्फ़िगर करना. उदाहरण के लिए, ज़रूरी किसी भी कारोबारी लॉजिक को प्रोसेस करने और मूल सीन पर वापस जाने के लिए वेबहुक को कॉल करें.
  3. सेव करें पर क्लिक करें.

  1. शर्तें सेक्शन में, अगर उपयोगकर्ता खाता जोड़ने की प्रोसेस को रद्द करता है या उसे खारिज करता है, तो उस पर क्लिक करें.
  2. अगर उपयोगकर्ता अपने खाते को लिंक करने के लिए सहमत नहीं है, तो फ़्लो कॉन्फ़िगर करें. उदाहरण के लिए, स्वीकार करने वाला मैसेज भेजें और उन सीन पर रीडायरेक्ट करें जिनमें ऐसी सुविधाएं दी गई हों जिनके लिए खाता लिंक करने की ज़रूरत न हो.
  3. सेव करें पर क्लिक करें.

  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: >-
                You are ready to purchase physical goods.
    
  6. ट्रांज़िशन में, कोई दूसरा सीन चुनें. ऐसा करने पर, उपयोगकर्ता बातचीत जारी रख सकेगा और लेन-देन कर सकेगा.

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

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

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

डिलीवरी के पते का अनुरोध करें (ज़रूरी नहीं)

अगर आपके लेन-देन के लिए उपयोगकर्ता के डिलीवरी पते की ज़रूरत है, तो आपको उपयोगकर्ता से इसके लिए अनुरोध करना चाहिए. इससे कुल कीमत, डिलीवरी/पिकअप की जगह का पता लगाने या यह पक्का करने में मदद मिल सकती है कि उपयोगकर्ता आपके सेवा देने के इलाके में है. ऐसा करने के लिए, आपको उस सीन पर जाना होगा जहां उपयोगकर्ता से उसके डिलीवरी पते का अनुरोध किया जाता है.

डिलीवरी के पते का सीन बनाएं

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

स्लॉट को कॉन्फ़िगर करते समय, reason दिया जा सकता है. इसकी मदद से, पता स्ट्रिंग के ज़रिए पाने के लिए Assistant के अनुरोध को दिखाया जा सकता है. डिफ़ॉल्ट वजह वाली स्ट्रिंग "यह जानना है कि ऑर्डर कहां भेजना है" है. इसलिए, Assistant उपयोगकर्ता से पूछ सकती है: "ऑर्डर को कहाँ भेजना है, यह जानने के लिए मुझे आपका डिलीवरी का पता लेना होगा".

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

डिलीवरी पते के नतीजे मैनेज करने के लिए, यह तरीका अपनाएं:

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

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

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

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Great! Your order will be delivered to
                $session.params.TransactionDeliveryAddress.location.postalAddress.locality
                $session.params.TransactionDeliveryAddress.location.postalAddress.administrativeArea
                $session.params.TransactionDeliveryAddress.location.postalAddress.regionCode
                $session.params.TransactionDeliveryAddress.location.postalAddress.postalCode
    
  6. ट्रांज़िशन में जाकर, कोई दूसरा सीन चुनें, ताकि उपयोगकर्ता बातचीत जारी रख सके.

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

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

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

ऑर्डर बनाएं

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

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

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

ऑर्डर बनाएं

अपनी पूरी बातचीत के दौरान, आपको उन आइटम को इकट्ठा करना होगा जिन्हें कोई उपयोगकर्ता खरीदना चाहता है और फिर एक Order ऑब्जेक्ट बनाना होगा.

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

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

अपना कार्ट बनाने के लिए, 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: 'Pizza',
        description: 'A four cheese pizza.',
        priceAttributes: [
          {
            type: 'REGULAR',
            name: 'Item Price',
            state: 'ACTUAL',
            amount: {
              currencyCode: 'USD',
              amountInMicros: 8990000,
            },
            taxIncluded: true,
          },
          {
            type: 'TOTAL',
            name: 'Total Price',
            state: 'ACTUAL',
            amount: {
              currencyCode: 'USD',
              amountInMicros: 9990000,
            },
            taxIncluded: true,
          },
        ],
        notes: [
          'Extra cheese.',
        ],
        purchase: {
          quantity: 1,
          unitMeasure: {
            measure: 1,
            unit: 'POUND',
          },
          itemOptions: [
            {
              id: 'ITEM_OPTION_ID',
              name: 'Pepperoni',
              prices: [
                {
                  type: 'REGULAR',
                  state: 'ACTUAL',
                  name: 'Item Price',
                  amount: {
                    currencyCode: 'USD',
                    amountInMicros: 1000000,
                  },
                  taxIncluded: true,
                },
                {
                  type: 'TOTAL',
                  name: 'Total Price',
                  state: 'ACTUAL',
                  amount: {
                    currencyCode: 'USD',
                    amountInMicros: 1000000,
                  },
                  taxIncluded: true,
                },
              ],
              note: 'Extra pepperoni',
              quantity: 1,
              subOptions: [],
            },
          ],
        },
      },
    ],
  },
  buyerInfo: {
    email: 'janedoe@gmail.com',
    firstName: 'Jane',
    lastName: 'Doe',
    displayName: 'Jane Doe',
  },
  priceAttributes: [
    {
      type: 'SUBTOTAL',
      name: 'Subtotal',
      state: 'ESTIMATE',
      amount: {
        currencyCode: 'USD',
        amountInMicros: 9990000,
      },
      taxIncluded: true,
    },
    {
      type: 'DELIVERY',
      name: 'Delivery',
      state: 'ACTUAL',
      amount: {
        currencyCode: 'USD',
        amountInMicros: 2000000,
      },
      taxIncluded: true,
    },
    {
      type: 'TAX',
      name: 'Tax',
      state: 'ESTIMATE',
      amount: {
        currencyCode: 'USD',
        amountInMicros: 3780000,
      },
      taxIncluded: true,
    },
    {
      type: 'TOTAL',
      name: 'Total Price',
      state: 'ESTIMATE',
      amount: {
        currencyCode: 'USD',
        amountInMicros: 15770000,
      },
      taxIncluded: true,
    },
  ],
  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',
  note: 'Sale event',
  promotions: [
    {
      coupon: 'COUPON_CODE',
    },
  ],
  purchase: {
    status: 'CREATED',
    userVisibleStatusLabel: 'CREATED',
    type: 'FOOD',
    returnsInfo: {
      isReturnable: false,
      daysToReturn: 1,
      policyUrl: 'http://www.example.com',
    },
    fulfillmentInfo: {
      id: 'FULFILLMENT_SERVICE_ID',
      fulfillmentType: 'DELIVERY',
      expectedFulfillmentTime: {
        timeIso8601: '2019-09-25T18:00:00.877Z',
      },
      location: location,
      price: {
        type: 'REGULAR',
        name: 'Delivery Price',
        state: 'ACTUAL',
        amount: {
          currencyCode: 'USD',
          amountInMicros: 2000000,
        },
        taxIncluded: true,
      },
      fulfillmentContact: {
        email: 'johnjohnson@gmail.com',
        firstName: 'John',
        lastName: 'Johnson',
        displayName: 'John Johnson',
      },
    },
    purchaseLocationType: 'ONLINE_PURCHASE',
  },
};

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

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

नीचे ऐसा ऑर्डर देने के लिए ऑर्डर और प्रज़ेंटेशन के विकल्प दिए गए हैं जिसके लिए डिलीवरी का पता ज़रूरी है. इसमें ऑर्डर की पुष्टि करने वाले कार्ड में उपयोगकर्ता का ईमेल भी शामिल है:

const orderOptions = {
      'requestDeliveryAddress': true,
      'userInfoOptions': {
        'userInfoProperties': ['EMAIL']
      }
    };

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

पेमेंट पैरामीटर बनाएं

आपके paymentParameters ऑब्जेक्ट में एक merchantPaymentOption शामिल है. इस फ़ील्ड में ऑर्डर के लिए, उपयोगकर्ता के पैसे चुकाने का तरीका बताया गया है. नीचे Visa क्रेडिट कार्ड का इस्तेमाल करके, पेमेंट पैरामीटर का एक उदाहरण दिया गया है:

const paymentParamenters = {
      'merchantPaymentOption': {
        'defaultMerchantPaymentMethodId': '12345678',
        'managePaymentMethodUrl': 'https://example.com/managePayment',
        'merchantPaymentMethod': [{
          'paymentMethodDisplayInfo': {
            'paymentMethodDisplayName': 'VISA **** 1234',
            'paymentType': 'PAYMENT_CARD'
          },
          'paymentMethodGroup': 'Payment method group',
          'paymentMethodId': '12345678',
          'paymentMethodStatus': {
            'status': 'STATUS_OK',
            'statusMessage': 'Status message'
          }
        }]
      }
    };

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

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

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

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

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

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

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

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

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

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

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

  • ORDER_ACCEPTED,
  • ORDER_REJECTED,
  • DELIVERY_ADDRESS_UPDATED,
  • 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 order
                $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: Look like you don't want to order anything. 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 का नतीजा दिखाता है, तो आपको ऑर्डर की "पुष्टि" करने के लिए ज़रूरी प्रोसेसिंग तुरंत करनी होगी. जैसे, उसे अपने डेटाबेस में बनाए रखना और उपयोगकर्ता से शुल्क लेना.

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

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

OrderUpdate ऑब्जेक्ट के कुछ हिस्से में फ़ॉलो-अप ऐक्शन ऑब्जेक्ट होना चाहिए. यह ऑर्डर की जानकारी के सबसे नीचे यूआरएल बटन के तौर पर दिखता है. उपयोगकर्ता को यह जानकारी Assistant के ऑर्डर के इतिहास में मिल सकती है.

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

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

  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': [
            'purchase.status',
            'purchase.user_visible_status_label'
          ]
        },
        'order': {
          'merchantOrderId': order.merchantOrderId,
          'lastUpdateTime': currentTime,
          'purchase': {
            'status': 'CONFIRMED',
            'userVisibleStatusLabel': 'Order confirmed'
          },
        },
        'reason': 'Reason string
      }));
    });
    

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

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

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

ऑर्डर एपीआई को ऑर्डर अपडेट करने के अनुरोधों को ऐक्सेस टोकन से अनुमति दी जाती है. ऑर्डर अपडेट को ऑर्डर एपीआई में पैच करने के लिए, अपने 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 - ऑर्डर के वे फ़ील्ड जिन्हें अपडेट किया जा रहा है. ऑर्डर की स्थिति अपडेट करने के लिए, वैल्यू को purchase.status, purchase.userVisibleStatusLabel पर सेट करें.
  • order - अपडेट का कॉन्टेंट. अगर ऑर्डर के कॉन्टेंट अपडेट किए जा रहे हैं, तो अपडेट किए गए Order ऑब्जेक्ट पर वैल्यू सेट करें. अगर ऑर्डर की स्थिति अपडेट की जा रही है (उदाहरण के लिए, "CONFIRMED" से "SHIPPED" में), तो ऑब्जेक्ट में ये फ़ील्ड शामिल होंगे:

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

यह सैंपल कोड एक उदाहरण OrderUpdate दिखाता है, जो ऑर्डर की स्थिति को DELIVERED में अपडेट करता है:

// 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 order update
const orderUpdate = new OrderUpdate({
    updateMask: {
      paths: [
        'purchase.status',
        'purchase.user_visible_status_label'
      ]
    },
    order: {
      merchantOrderId: orderId, // Specify the ID of the order to update
      lastUpdateTime: new Date().toISOString(),
      purchase: {
        status: 'DELIVERED',
        userVisibleStatusLabel: 'Order delivered',
      },
    },
    reason: 'Order status updated to delivered.',
});

// 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}`);
}
खरीदारी की स्थिति सेट करना

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

  • CREATED - उपयोगकर्ता ने ऑर्डर स्वीकार कर लिया है और आपकी सेट की गई कार्रवाई के हिसाब से उसे "बनाया" गया है. हालांकि, इसके लिए आपके बैक-एंड पर मैन्युअल प्रोसेसिंग की ज़रूरत होती है.
  • CONFIRMED - ऑर्डर चालू है और उसे पूरा करने के लिए प्रोसेस किया जा रहा है.
  • IN_PREPARATION - ऑर्डर को शिपमेंट/डिलीवरी के लिए तैयार किया जा रहा है. जैसे कि खाना पकाया जा रहा है या कोई आइटम पैक किया जा रहा है.
  • READY_FOR_PICKUP - पाने वाला व्यक्ति ऑर्डर ले सकता है.
  • DELIVERED - ऑर्डर पाने वाले व्यक्ति को डिलीवर कर दिया गया है
  • OUT_OF_STOCK - ऑर्डर में मौजूद एक या उससे ज़्यादा सामान, स्टॉक में नहीं हैं.
  • CHANGE_REQUESTED - उपयोगकर्ता ने ऑर्डर में बदलाव का अनुरोध किया है और बदलाव प्रोसेस किया जा रहा है.
  • RETURNED - डिलीवरी के बाद, उपयोगकर्ता ने ऑर्डर वापस किया.
  • REJECTED - अगर ऑर्डर को प्रोसेस, चार्ज या किसी और तरीके से "चालू" नहीं किया जा सका, तो
  • CANCELLED - उपयोगकर्ता ने ऑर्डर रद्द कर दिया था.

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

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

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

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

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

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

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