การอัปเดตคำสั่งซื้อแบบไม่พร้อมกัน

หลังจากลูกค้าส่งคำสั่งซื้ออาหารแล้ว คุณจะส่งข้อความอัปเดตคำสั่งซื้อไปที่ บริการสั่งซื้อแบบครบวงจรเพื่อแจ้งให้เราทราบถึงการเปลี่ยนแปลง

สาเหตุที่พบบ่อยบางประการสำหรับการส่งการอัปเดตคำสั่งซื้อมีดังนี้

  • เวลาดำเนินการโดยประมาณสำหรับคำสั่งซื้อจะพร้อมใช้งานหรือมีการเปลี่ยนแปลง
  • สถานะของคำสั่งซื้อมีการเปลี่ยนแปลง
  • ไม่สามารถดำเนินการตามคำสั่งซื้อนี้ได้อีกต่อไป
  • ราคาของรายการในเมนูที่รวมอยู่ในคำสั่งซื้อมีการเปลี่ยนแปลง
  • ลูกค้ามีวิธีใหม่ในการจัดการคำสั่งซื้อ เช่น การสนับสนุนลูกค้า หรือหมายเลขโทรศัพท์ร้านอาหาร
  • เห็นใบเสร็จของคำสั่งซื้อแล้ว

ส่วนถัดไปจะอธิบายรายละเอียดเกี่ยวกับวิธีจัดการกับสถานการณ์ต่างๆ เหล่านี้ โดยใช้การอัปเดตคำสั่งซื้อ

การเปลี่ยนแปลงสถานะคำสั่งซื้อ

คำสั่งซื้อมีสถานะที่เป็นไปได้ 6 สถานะ รัฐเหล่านี้และการเปลี่ยนแปลงที่เป็นไปได้ แสดงอยู่ในแผนภาพต่อไปนี้

การเปลี่ยนสถานะคำสั่งซื้อ

เมื่อลูกค้าส่งคำสั่งซื้อเป็นครั้งแรก คำสั่งซื้อจะเริ่มต้นด้วยสถานะ CREATED, CONFIRMED หรือ REJECTED คุณสามารถส่งข้อความอัปเดตคำสั่งซื้อไปยัง อัปเดตสถานะของคำสั่งซื้อ ตราบใดที่การเปลี่ยนสถานะถูกต้อง CREATED ระบบจะใช้สถานะนี้เมื่อแพลตฟอร์มของพาร์ทเนอร์ยืนยันหรือปฏิเสธคำสั่งซื้อไม่ได้ ทันที ตัวอย่างกรณีการใช้งาน เช่น เมื่อลูกค้าสั่งซื้อผ่านการนำส่ง ผู้รวบรวมข้อมูล ผู้รวบรวมข้อมูลการนำส่งจะได้รับการนำส่งจาก Google และ ผู้รวบรวมข้อมูลจะส่งข้อมูลไปยังร้านอาหาร เมื่อร้านอาหารได้รับ และได้ยืนยันความพร้อมจำหน่ายของคำสั่งซื้อแล้ว ตอนนี้รัฐเป็น CONFIRMED ได้ ไม่เช่นนั้น REJECTED

คำสั่งซื้อในสถานะ CONFIRMED จะย้ายไปที่สถานะ IN_PREPARATION ถัดไป ให้ใช้สถานะ READY_FOR_PICKUP หรือ IN_TRANSIT โดยขึ้นอยู่กับว่าคำสั่งซื้อนั้นเป็นบริการแบบไปรับเองหรือจัดส่งถึงที่ เมื่อมีการจัดส่งหรือไปรับอาหารแล้ว ระบบจะตั้งค่าคำสั่งซื้อเป็นรัฐFULFILLED

หากคุณอนุญาตให้ลูกค้ายกเลิกคำสั่งซื้อ คุณจะใช้สถานะ CANCELLED ได้ คุณยกเลิกคำสั่งซื้อได้ขณะอยู่ในสถานะ CREATED, CONFIRMED, IN_PREPARATION, READY_FOR_PICKUP หรือ IN_TRANSIT บริการสั่งซื้อแบบครบวงจรควรออกเงินคืนโดยขึ้นอยู่กับ นโยบายการยกเลิกและสถานะการชำระเงิน ณ เวลาที่ยกเลิก

บริการสั่งซื้อแบบครบวงจรไม่จำเป็นต้องรองรับทุกสถานะที่มีอยู่ และทรานซิชัน อย่างไรก็ตาม สถานะสุดท้ายของคำสั่งซื้อต้องเป็น FULFILLED REJECTED หรือ CANCELLED

การระบุเวลาดำเนินการตามคำสั่งซื้อโดยประมาณ

คุณระบุช่วงเวลาโดยประมาณที่จะสั่งซื้อแก่ผู้ใช้ได้ พร้อมสำหรับการรับสินค้า (หรือจัดส่ง) ใช้ช่อง estimatedFulfillmentTimeIso8601 เป็น FoodOrderUpdateExtension เพื่อระบุช่วงเวลาโดยประมาณเมื่อ คำสั่งซื้อของลูกค้าจะพร้อมสำหรับการรับสินค้าหรือจัดส่ง

ส่ง estimatedFulfillmentTimeIso8601 เวลาต่อไปนี้

  • เมื่อมีเวลาโดยประมาณ ควรเรียงตามลำดับ CREATED หรือ รัฐCONFIRMED
  • เมื่อเวลาโดยประมาณเปลี่ยนไป เช่น อัปเดตเวลาโดยประมาณเป็น แม่นยำยิ่งขึ้นเมื่อคำสั่งซื้อคือ IN_TRANSIT

ในการจัดการความคาดหวังของผู้ใช้อย่างมีประสิทธิภาพ โปรดประเมินตัวเลขอย่างระมัดระวังและ ระบุช่วงวันที่และเวลาแทนที่จะเป็นวันที่และเวลาคงที่ คุณควร พิจารณาในรูปแบบต่างๆ เช่น สภาพการจราจรเมื่อใดก็ตามที่ทำได้ สำหรับ เช่น คุณอาจส่งเวลาโดยประมาณที่ 12:45 น. (ขอบเขตล่าง) ถึง 13:15 น. (ด้านบน) แน่นอน) สำหรับคำสั่งซื้อที่เวลานำส่งโดยประมาณคือ 13:00 น.

ให้บริการการดำเนินการจัดการคำสั่งซื้อ

เมื่อส่งการอัปเดตคำสั่งซื้อ คุณสามารถให้แหล่งข้อมูลแก่ลูกค้าที่ให้ความช่วยเหลือ ธุรกิจจะจัดการคำสั่งซื้อได้ในรูปแบบ OrderManagementAction หลังจาก ลูกค้าสั่งซื้อ โดยพวกเขาอาจต้องติดต่อคุณหรือร้านอาหาร ดำเนินการตามคำสั่งซื้อเพื่อติดตามความคืบหน้า เปลี่ยนแปลง หรือยกเลิกคำสั่งซื้อ

OrderManagementAction ช่วยให้ลูกค้าส่งอีเมล โทร หรือลิงก์ไปยัง URL จากอุปกรณ์ของผู้ใช้โดยตรง ใช้ข้อมูลเดียวกันใน OrderManagementAction ตามการยืนยันคำสั่งซื้อทางอีเมลที่คุณส่งไปยัง ผู้ใช้

การดำเนินการจัดการคำสั่งซื้อประกอบด้วยประเภทต่อไปนี้

  • CUSTOMER_SERVICE: ให้ลูกค้าดำเนินการเพื่อติดต่อลูกค้า service. ต้องระบุประเภทการดำเนินการจัดการนี้สำหรับการอัปเดตคำสั่งซื้อ
  • EMAIL: แจ้งลูกค้าให้ส่งอีเมลไปยัง อีเมล
  • CALL: แจ้งให้ลูกค้าโทรหาหมายเลขโทรศัพท์ที่ระบุไว้
  • VIEW_DETAIL: ให้ลูกค้าดำเนินการเพื่อดูรายละเอียด คำสั่งซื้อ

การอัปเดตคำสั่งซื้อแต่ละรายการต้องมีการดำเนินการจัดการคำสั่งซื้ออย่างน้อย 1 รายการ อย่างไรก็ตาม การดำเนินการจัดการคำสั่งซื้อที่ให้ไว้อาจแตกต่างกันไปตามสถานะของคำสั่งซื้อ เช่น เมื่อคำสั่งซื้ออยู่ในสถานะ CONFIRMED ระบบจะกำหนดค่า CUSTOMER_SERVICE การดำเนินการอาจนำไปสู่หมายเลขโทรศัพท์ฝ่ายบริการลูกค้า เมื่อคำสั่งซื้อดังกล่าวมีสถานะ การอัปเดต IN_TRANSIT การดำเนินการ CUSTOMER_SERVICE สามารถชี้ไปยัง หมายเลขโทรศัพท์ของร้านอาหารเพื่อดำเนินการตามคำสั่งซื้อ

กำลังส่งการอัปเดตคำสั่งซื้อ

คุณใช้ข้อความประเภท AsyncOrderUpdateRequestMessage ในการส่งคำสั่งซื้อ อัปเดตเป็นบริการสั่งซื้อแบบครบวงจร Google จะตอบกลับด้วย AsyncOrderUpdateResponseMessage เช่น ถ้าต้องการแจ้งข้อมูล ว่าคำสั่งซื้อของลูกค้านั้นถูกต้องและได้รับการยอมรับแล้ว คุณสามารถส่ง AsyncOrderUpdateRequestMessage เพื่อเปลี่ยนสถานะของคำสั่งซื้อเป็น CONFIRMED ที่มีป้ายกำกับว่า Accepted by restaurant

แผนภาพการอัปเดตคำสั่งซื้อ

กำลังตั้งค่าข้อความอัปเดตคำสั่งซื้อ

เมื่อส่ง AsyncOrderUpdateRequestMessage ไปยัง Google คุณต้องระบุสิ่งต่อไปนี้ ข้อมูลเกี่ยวกับสถานะของคำสั่งซื้อโดยใช้ฟิลด์ OrderUpdate

ตัวอย่างต่อไปนี้แสดงตัวอย่าง AsyncOrderUpdateRequestMessage สำหรับ สถานะการสั่งซื้อแต่ละสถานะ:

ยืนยันแล้ว

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ คำสั่งซื้อได้รับการยืนยันด้วยใบเสร็จและการจัดส่งโดยประมาณ

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "CONFIRMED",
        "label": "Provider confirmed"
      },
      "receipt": {
        "userVisibleOrderId": "userVisibleId1234"
      },
      "updateTime": "2017-07-17T12:00:00Z",
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ],
      "infoExtension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
        "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
      }
    }
  }
}
    

ถูกปฏิเสธ

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ ว่าคำสั่งซื้อถูกปฏิเสธโดยมีเหตุผลการปฏิเสธ

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "REJECTED",
        "label": "Order rejected"
      },
      "updateTime": "2017-05-10T02:30:00.000Z",
      "rejectionInfo": {
        "type": "UNKNOWN",
        "reason": "Sorry, the restaurant cannot take your order right now."
      },
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ],
      "infoExtension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
      "foodOrderErrors": [
        {
        "error": "NO_CAPACITY",
        "description": "Sorry, the restaurant cannot take your order right now."
        }
      ]
      }
    }
  }
}
    

ยกเลิกแล้ว

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ ว่าคำสั่งซื้อถูกยกเลิกพร้อมเหตุผลการยกเลิก

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "CANCELLED",
        "label": "Order cancelled"
      },
      "updateTime": "2017-05-10T02:30:00.000Z",
      "cancellationInfo": {
        "reason": "Customer requested"
      },
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ]
    }
  }
}
    

IN_PREPARATION

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ ที่มีการเตรียมอาหารไว้

{
  "isInSandbox":true,
  "customPushMessage":{
    "orderUpdate":{
      "actionOrderId":"sample_action_order_id",
      "orderState":{
        "state":"IN_PREPARATION",
        "label":"Order is being prepared"
      },
      "receipt": {
        "userVisibleOrderId": "userVisibleId1234"
      },
      "updateTime":"2018-04-15T11:30:00Z",
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ],
      "infoExtension":{
        "@type":"type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
        "estimatedFulfillmentTimeIso8601":"PT20M"
      }
    }
  }
}
    

READY_FOR_PICKUP

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ ว่ามีอาหารพร้อมให้ไปรับแล้ว

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "READY_FOR_PICKUP",
        "label": "Order is ready for pickup"
      },
      "receipt": {
        "userVisibleOrderId": "userVisibleId1234"
      },
      "updateTime": "2018-04-15T12:00:00Z",
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ],
      "infoExtension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
        "estimatedFulfillmentTimeIso8601": "PT20M"
      }
    }
  }
}
    

IN_TRANSIT

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ ว่าคำสั่งซื้ออยู่ระหว่างการขนส่งโดยมีเวลานำส่งโดยประมาณ

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "IN_TRANSIT",
        "label": "Order is on the way"
      },
      "inTransitInfo": {
        "updatedTime": "2017-07-17T12:00:00Z"
      },
      "updateTime": "2017-07-17T12:00:00Z",
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ],
      "infoExtension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
        "estimatedFulfillmentTimeIso8601": "PT20M"
      }
    }
  }
}
  

เสร็จสมบูรณ์แล้ว

ตัวอย่างนี้แสดงตัวอย่างคำขออัปเดตคำสั่งซื้อที่แจ้งให้ผู้ใช้ทราบ มีการไปรับหรือนำส่งสินค้าที่สั่งซื้อ

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
      "state": "FULFILLED",
      "label": "Order delivered"
      },
      "updateTime": "2017-05-10T02:30:00.000Z",
      "fulfillmentInfo": {
        "deliveryTime": "2017-05-10T02:30:00.000Z"
      },
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        },
        {
          "type": "CALL_DRIVER",
          "button": {
            "title": "Call driver",
            "openUrlAction": {
              "url": "tel:+16505554681"
            }
          }
        }
      ]
    }
  }
}
    

สำหรับตัวอย่างเพิ่มเติมของคำขออัปเดตคำสั่งซื้อในกรณีการใช้งานต่างๆ โปรดอ่าน ใช้การอัปเดตคำสั่งซื้อขั้นสูง

สร้างโทเค็นการให้สิทธิ์และส่งข้อความ

การอัปเดตคำสั่งซื้อต้องมีโทเค็นการให้สิทธิ์เพื่อให้การสั่งซื้อแบบครบวงจร สามารถตรวจสอบว่าข้อความมาจากบริการเว็บแบบครบวงจรของการสั่งซื้อ

หากต้องการใช้การอัปเดตคำสั่งซื้อสำหรับโปรเจ็กต์ของคุณ ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างโทเค็นการให้สิทธิ์โดยทำตามขั้นตอนต่อไปนี้
    1. ใช้ไลบรารีการตรวจสอบสิทธิ์ของ Google เพื่ออ่านข้อมูลเข้าสู่ระบบจากบริการของคุณ ไฟล์ของบัญชี
    2. ขอโทเค็นโดยใช้ขอบเขต API ต่อไปนี้ https://www.googleapis.com/auth/actions.fulfillment.conversation
  2. ใช้โทเค็นนี้เพื่อส่งคำขอ HTTP POST ที่ผ่านการตรวจสอบสิทธิ์ไปยัง ปลายทางต่อไปนี้: https://actions.googleapis.com/v2/conversations:send
  3. ตั้งค่าส่วนหัว Content-Type เป็น application/json ในคำขอ

ตัวอย่างต่อไปนี้สาธิตวิธีใช้การอัปเดตคำสั่งซื้อ

Node.js

โค้ดนี้ใช้ไลบรารีการตรวจสอบสิทธิ์ของ Google สำหรับ Node.js

const {auth} = require('google-auth-library')
const request = require('request');
// The service account client secret file downloaded from the Google Cloud Console
const serviceAccountJson = require('./service-account.json')
// order-update.json is a file that contains the payload
const jsonBody = require('./order-update.json')

/**
 * Get the authorization token using a service account.
 */
async function getAuthToken() {
  let client = auth.fromJSON(serviceAccountJson)
  client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation']
  const tokens = await client.authorize()
  return tokens.access_token;
}

/**
 * Send an order update request
 */
async function sendOrderUpdate() {
  const token = await getAuthToken()
  request.post({
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    url: 'https://actions.googleapis.com/v2/conversations:send',
    body: jsonBody,
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}
    

Python

โค้ดนี้ใช้ไลบรารีการตรวจสอบสิทธิ์ของ Google สำหรับ Python

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
import json

# service-account.json is the service account client secret file downloaded from the
# Google Cloud Console
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json')

scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/actions.fulfillment.conversation'])

authed_session = AuthorizedSession(scoped_credentials)

# order-update.json is a file that contains the payload
json_payload=json.load(open('order-update.json'))

response = authed_session.post(
    'https://actions.googleapis.com/v2/conversations:send',
    json=json_payload)
    

Java

โค้ดนี้ใช้ไลบรารีการตรวจสอบสิทธิ์ของ Google สำหรับ Java

/**
 * Get the authorization token using a service account.
 */
private static String getAuthToken() {
  InputStream serviceAccountFile = Example.class.getClassLoader().getResourceAsStream("service-account.json");
  ServiceAccountCredentials.Builder credentialsSimpleBuilder =
      ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder();
  credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/actions.fulfillment.conversation"));
  AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken();
  return accessToken.getTokenValue();
}

/**
 * Send an order update request
 */
public void sendOrderUpdate() {
  String authToken = getAuthToken();
  // Execute POST request
  executePostRequest("https://actions.googleapis.com/v2/conversations:send",
      authToken, "update_order_example.json",);
}
    

Google จะส่งคืนการตอบกลับ HTTP 200 เพื่อให้อัปเดตคำสั่งซื้อได้สำเร็จโดยไม่มีข้อผิดพลาด ด้วยเพย์โหลดที่ว่างเปล่า หากมีปัญหา เช่น การอัปเดต Google แสดงข้อผิดพลาดในรูปแบบที่ไม่ถูกต้อง