ایجاد رزرو

این راهنما شما را در فرایند توسعه پروژه «کنش‌ها» که از Orders API برای ثبت رزرو استفاده می‌کند راهنمایی می‌کند.

جریان تراکنش

وقتی پروژه «کنش‌های» شما رزروها را مدیریت می‌کند، از جریان زیر استفاده می‌کند:

  1. اعتبارسنجی الزامات تراکنش (اختیاری) - از کمک‌کننده الزامات تراکنش‌ها در شروع مکالمه استفاده کنید تا مطمئن شوید کاربر قادر به انجام تراکنش است.
  2. ایجاد سفارش - کاربر را در فرایند «مونتاژ سبد خرید» راهنمایی کنید تا جزئیات رزرو خود را ایجاد کند.
  3. پیشنهاد سفارش - وقتی «سبد خرید» تکمیل شد، «سفارش» رزرو را به کاربر پیشنهاد دهید تا بتواند درست بودن آن را تأیید کند. اگر رزرو تأیید شود، پاسخی با جزئیات رزرو دریافت می‌کنید.
  4. نهایی کردن سفارش و ارسال رسید - با تأیید سفارش، سیستم رزرو خود را به‌روز کنید و رسیدی برای کاربر ارسال کنید.
  5. ارسال به‌روزرسانی‌های سفارش - درطول دوره عمر رزرو، با ارسال درخواست‌های PATCH به Orders API، به‌روزرسانی‌های وضعیت رزرو را به کاربر ارائه دهید.

محدودیت‌ها و دستورالعمل‌های مرور

به‌خاطر داشته باشید که خط‌مشی‌های دیگری برای «کنش‌هایی» که از تراکنش‌ها و Orders API استفاده می‌کنند اعمال می‌شود. بررسی «کنش‌ها» با تراکنش‌ها ممکن است تا شش هفته طول بکشد، بنابراین این زمان را هنگام برنامه‌ریزی زمان‌بندی انتشار خود درنظر بگیرید. برای تسهیل فرایند بازبینی، مطمئن شوید که پیش‌از ارسال «کنش» برای بازبینی، از خط‌مشی‌ها و دستورالعمل‌های تراکنش پیروی می‌کنید.

فقط در کشورهای زیر می‌توانید «کنش‌هایی» را که از Orders API استفاده می‌کنند مستقر کنید:

استرالیا
برزیل
کانادا
اندونزی
ژاپن
مکزیک
قطر
روسیه
سنگاپور
سوئیس
تایلند
ترکیه
پادشاهی متحد (UK)
ایالات متحده

ساختن پروژه

برای نمونه‌ای گسترده از مکالمه‌های تراکنشی، نمونه تراکنش‌ها در Node.js را مشاهده کنید.

راه‌اندازی

هنگام ایجاد «کنش»، باید مشخص کنید که می‌خواهید تراکنش‌ها را در کنسول Actions انجام دهید.

برای راه‌اندازی پروژه و تحقق، کارهای زیر را انجام دهید:

  1. پروژه جدیدی ایجاد کنید یا پروژه موجودی را وارد کنید.
  2. به استقرار > اطلاعات دایرکتوری بروید.
  3. در بخش اطلاعات بیشتر > تراکنش‌ها > چارگوش کنار «آیا «کنش‌های» شما از Transactions API برای انجام تراکنش‌های کالاهای فیزیکی استفاده می‌کند؟» را علامت بزنید.

اعتبارسنجی الزامات تراکنش (اختیاری)

به‌محض اینکه کاربر نشان داد که می‌خواهد رزرو را راه‌اندازی کند، باید بررسی کنید که آیا می‌تواند درخواست رزرو کند یا نه. برای مثال، وقتی «کنش» شما فراخوانده می‌شود، ممکن است بپرسد: «آیا می‌خواهید صندلی رزرو کنید؟» اگر کاربر بگوید «بله»، باید مطمئن شوید که می‌تواند ادامه دهد و به او فرصت دهید تا تنظیماتی را که مانع ادامه تراکنش می‌شود اصلاح کند. برای انجام این کار، باید به صحنه‌ای بروید که بررسی الزامات تراکنش را انجام می‌دهد.

ایجاد صحنه «بررسی الزامات تراکنش»

  1. از برگه صحنه‌ها، صحنه جدیدی با نام TransactionRequirementsCheck اضافه کنید.
  2. در بخش پر کردن جایگاه، روی + کلیک کنید تا جایگاه جدیدی اضافه شود.
  3. در بخش انتخاب نوع، actions.type.TransactionRequirementsCheckResult را به‌عنوان نوع جایگاه انتخاب کنید.
  4. در فیلد نام جایگاه، نام TransactionRequirementsCheck را به جایگاه بدهید.
  5. چارگوش انتخاب سفارشی‌سازی بازنویسی مقدار جایگاه را فعال کنید (به‌طور پیش‌فرض فعال است).
  6. روی ذخیره کلیک کنید.

بررسی الزامات تراکنش به یکی از نتایج زیر منجر می‌شود:

  • اگر الزامات برآورده شود، پارامتر جلسه با شرط موفقیت تنظیم می‌شود و می‌توانید به ساختن سفارش کاربر ادامه دهید.
  • اگر یک یا چند مورد از الزامات برآورده نشود، پارامتر جلسه با شرایط ناموفق تنظیم می‌شود. در این مورد، باید مکالمه را از تجربه تراکنشی دور کنید یا مکالمه را پایان دهید.
    • اگر هرگونه خطایی که منجر به حالت ناموفق شده است توسط کاربر قابل‌رفع باشد، از او خواسته می‌شود آن مشکلات را در دستگاهش برطرف کند. اگر مکالمه در سطحی فقط صوتی انجام شود، انتقال به تلفن کاربر آغاز خواهد شد.

Handle Transaction Requirements Check result

  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، «دستیار» تجربه‌ای داخلی را آغاز می‌کند که در آن Order که ارسال کرده‌اید مستقیماً در «کارت پیش‌نمایش سبد خرید» ارائه می‌شود. کاربر می‌تواند بگوید «زمان‌بندی رزرو»، تراکنش را رد کند، یا درخواست کند جزئیات رزرو تغییر کند.

کاربر ممکن است در این مرحله درخواست تغییر در سفارش را نیز داشته باشد. در این حالت، باید مطمئن شوید که پس‌از اتمام تجربه مونتاژ سبد خرید، فراورسان شما می‌تواند درخواست‌های تغییر سفارش را مدیریت کند.

نتیجه تصمیم‌گیری درباره تراکنش Handle

وقتی جایگاه 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'
      }));
    });
    

ارسال به‌روزرسانی‌های سفارش

وضعیت رزرو درطول عمر آن تغییر می‌کند. به‌روزرسانی‌های سفارش رزرو را با درخواست‌های HTTP PATCH به Orders API که حاوی وضعیت و جزئیات سفارش است برای کاربر ارسال کنید.

راه‌اندازی درخواست‌های ناهمگام به Orders API

درخواست‌های به‌روزرسانی سفارش به Orders API با کد دسترسی مجاز می‌شوند. برای PATCH کردن به‌روزرسانی سفارش در Orders API، کلید حساب سرویس JSON مرتبط با پروژه «کنسول Actions» را بارگیری کنید، سپس کلید حساب سرویس را با رمزیاب دارنده که می‌تواند به سرصفحه Authorization درخواست HTTP منتقل شود مبادله کنید.

برای بازیابی کلید حساب سرویس، مراحل زیر را انجام دهید:

  1. در کنسول Google Cloud، به منو ☰ > میاناهای برنامه‌سازی کاربردی و سرویس‌ها > اطلاعات اعتباری > ایجاد اطلاعات اعتباری > کلید حساب سرویس بروید.
  2. در بخش حساب سرویس، حساب سرویس جدید را انتخاب کنید.
  3. حساب سرویس را روی service-account تنظیم کنید.
  4. نقش را روی پروژه > مالک تنظیم کنید.
  5. نوع کلید را روی JSON تنظیم کنید.
  6. ساختن را انتخاب کنید.
  7. کلید حساب سرویس JSON خصوصی در دستگاه محلی شما بارگیری خواهد شد.

در کد به‌روزرسانی‌های سفارش، کلید سرویس خود را بااستفاده از کتابخانه کارخواه Google APIs و محدوده "https://www.googleapis.com/auth/actions.order.developer" با یک رمزیاب دارنده مبادله کنید. می‌توانید مراحل نصب و نمونه‌ها را در صفحه GitHub کتابخانه کارخواه API پیدا کنید.

برای نمونه‌ای از تبادل کلید، به order-update.js در نمونه Node.js ما مراجعه کنید.

ارسال به‌روزرسانی‌های سفارش

پس‌از اینکه کلید حساب سرویس خود را با یک رمزیاب دارنده OAuth مبادله کردید، به‌روزرسانی‌های سفارش را به‌عنوان درخواست‌های PATCH مجاز به Orders API ارسال کنید.

نشانی وب Orders API: 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 (اختیاری) - شیء 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 را ارسال کنید. همه رزروها به همه مقادیر وضعیت نیاز ندارند.

آزمایش کردن پروژه

هنگام آزمایش پروژه‌تان، می‌توانید حالت جعبه امن را در کنسول Actions فعال کنید تا «کنش» خود را بدون کسر هزینه از روش پرداخت آزمایش کنید. برای فعال کردن حالت جعبه امن، این مراحل را دنبال کنید:

  1. در کنسول Actions، روی آزمایش در پیمایش کلیک کنید.
  2. روی تنظیمات کلیک کنید.
  3. گزینه جعبه شنی توسعه را فعال کنید.

برای تراکنش‌های فیزیکی، می‌توانید فیلد isInSandbox را روی true در نمونه‌تان تنظیم کنید. این کنش معادل فعال کردن تنظیم حالت جعبه امن در کنسول Actions است. برای دیدن تکه‌کدی که از isInSandbox استفاده می‌کند، به بخش ارسال به‌روزرسانی‌های سفارش مراجعه کنید.

عیب‌یابی

اگر درطول آزمایش با مشکلی مواجه شدید، مراحل عیب‌یابی ما را برای تراکنش‌ها بخوانید.