ขอการซิงค์

Cloud-to-cloud

Request Sync จะทริกเกอร์คำขอ SYNC ไปยังการดำเนินการตามคำขอสำหรับผู้ใช้ Google ทุกคน ที่ใช้อุปกรณ์ซึ่งมี agentUserId เชื่อมโยงอยู่ (ซึ่งคุณ ส่งในคำขอ SYNC เดิม) การดำเนินการนี้ช่วยให้คุณอัปเดตอุปกรณ์ของผู้ใช้ได้โดยไม่ต้องยกเลิกการลิงก์และลิงก์บัญชีของผู้ใช้ใหม่ ผู้ใช้ทั้งหมดที่ลิงก์กับตัวระบุนี้จะได้รับคำขอ SYNC

คุณต้องทริกเกอร์คำขอ SYNC ในกรณีต่อไปนี้

  • เมื่อผู้ใช้เพิ่มอุปกรณ์ใหม่
  • เมื่อผู้ใช้นำอุปกรณ์ที่มีอยู่ออก
  • เมื่อผู้ใช้เปลี่ยนชื่ออุปกรณ์ที่มีอยู่
  • เมื่อคุณใช้ประเภทอุปกรณ์ ลักษณะ หรือเพิ่มฟีเจอร์ใหม่ของอุปกรณ์

เริ่มต้นใช้งาน

หากต้องการใช้ Request Sync ให้ทำตามขั้นตอนต่อไปนี้

เปิดใช้ Google HomeGraph API

  1. ใน Google Cloud Console ให้ไปที่หน้า HomeGraph API

    ไปที่หน้า HomeGraph API
  2. เลือกโปรเจ็กต์ที่ตรงกับรหัสโปรเจ็กต์ smart home
  3. คลิกเปิดใช้

สร้างคีย์บัญชีบริการ

ทำตามวิธีการต่อไปนี้เพื่อสร้างคีย์บัญชีบริการจาก Google Cloud Console

หมายเหตุ: ตรวจสอบว่าคุณใช้โปรเจ็กต์ GCP ที่ถูกต้องเมื่อทำตาม ขั้นตอนเหล่านี้ ซึ่งเป็นโปรเจ็กต์ที่ตรงกับรหัสโปรเจ็กต์ smart home
  1. ใน Google Cloud Console ให้ไปที่หน้าบัญชีบริการ

    ไปที่หน้าบัญชีบริการ

    คุณอาจต้องเลือกโปรเจ็กต์ก่อนที่จะไปที่หน้าบัญชีบริการ

  2. คลิก สร้างบัญชีบริการ

  3. ป้อนชื่อในช่องชื่อบัญชีบริการ

  4. ป้อนรหัสในช่องรหัสบัญชีบริการ

  5. ป้อนคำอธิบายในช่องคำอธิบายบัญชีบริการ

  6. คลิกสร้างและต่อไป

  7. จากเมนูแบบเลื่อนลงบทบาท ให้เลือกบัญชีบริการ > ผู้สร้างโทเค็นรหัสประจำตัว OpenID Connect ของบัญชีบริการ

  8. คลิกต่อไป

  9. คลิกเสร็จสิ้น

  10. เลือกบัญชีบริการที่คุณเพิ่งสร้างจากรายการบัญชีบริการ และ เลือก จัดการคีย์ จากเมนู การดำเนินการ

  11. เลือกเพิ่มคีย์ > สร้างคีย์ใหม่

  12. สำหรับประเภทคีย์ ให้เลือกตัวเลือก JSON

  13. คลิกสร้าง ระบบจะดาวน์โหลดไฟล์ JSON ที่มีคีย์ ลงในคอมพิวเตอร์

ดูวิธีการและข้อมูลโดยละเอียดเกี่ยวกับการสร้างคีย์บัญชีบริการได้ที่ หัวข้อ สร้าง และลบคีย์บัญชีบริการ ในเว็บไซต์ความช่วยเหลือของ Google Cloud Console

เรียก API

HTTP

Home Graph API มีปลายทาง HTTP

  1. ใช้ไฟล์ JSON ของบัญชีบริการที่ดาวน์โหลดเพื่อสร้าง JSON Web Token (JWT) ดูข้อมูลเพิ่มเติมได้ที่ หัวข้อการตรวจสอบสิทธิ์โดยใช้บัญชีบริการ
  2. รับโทเค็นเพื่อการเข้าถึง OAuth 2.0 ที่มีขอบเขต https://www.googleapis.com/auth/homegraph โดยใช้ oauth2l ดังนี้
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. สร้างคำขอ JSON ด้วย agentUserId ต่อไปนี้คือตัวอย่างคำขอ JSON สำหรับ Request Sync
  5. {
      "agentUserId": "user-123"
    }
  6. รวม JSON ของ Request Sync และโทเค็นในคำขอ HTTP POST ไปยังปลายทาง Google Home Graph ต่อไปนี้คือตัวอย่างวิธี ส่งคำขอในบรรทัดคำสั่งโดยใช้ curl เพื่อทดสอบ
  7. curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d @request-body.json \
      "https://homegraph.googleapis.com/v1/devices:requestSync"
    

gRPC

Home Graph API มีปลายทาง gRPC

  1. รับคำจำกัดความของบริการบัฟเฟอร์โปรโตคอลสำหรับ Home Graph API
  2. ทำตามเอกสารประกอบสำหรับนักพัฒนาแอป gRPC เพื่อสร้างสแต็บไคลเอ็นต์สำหรับภาษาที่รองรับภาษาใดภาษาหนึ่ง
  3. เรียกเมธอด RequestSync

Node.js

Google APIs Node.js Client มีการผูกข้อมูลสำหรับ Home Graph API

  1. เริ่มต้นบริการ google.homegraph โดยใช้ ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน
  2. เรียกเมธอด requestSync ด้วย RequestSyncDevicesRequest ซึ่งจะแสดงผล Promise ที่มี RequestSyncDevicesResponse ที่ว่างเปล่า
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.requestSync({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    async: false
  }
});
    

Java

ไลบรารีของไคลเอ็นต์ HomeGraph API สำหรับ Java มีการผูกข้อมูลสำหรับ Home Graph API

  1. เริ่มต้น HomeGraphApiService โดยใช้ ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน
  2. เรียกเมธอด requestSync ด้วย RequestSyncDevicesRequest ซึ่งจะแสดงผล ReportStateAndNotificationResponse ที่ว่างเปล่า
// Get Application Default credentials.
GoogleCredentials credentials =
    GoogleCredentials.getApplicationDefault()
        .createScoped(List.of("https://www.googleapis.com/auth/homegraph"));

// Create Home Graph service client.
HomeGraphService homegraphService =
    new HomeGraphService.Builder(
            GoogleNetHttpTransport.newTrustedTransport(),
            GsonFactory.getDefaultInstance(),
            new HttpCredentialsAdapter(credentials))
        .setApplicationName("HomeGraphExample/1.0")
        .build();

// Request sync.
RequestSyncDevicesRequest request =
    new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false);
homegraphService.devices().requestSync(request);
    

การตอบกลับข้อผิดพลาด

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

  • 400 Bad Request - เซิร์ฟเวอร์ประมวลผล คำขอที่ไคลเอ็นต์ส่งมาไม่ได้เนื่องจาก ไวยากรณ์ไม่ถูกต้อง สาเหตุที่พบบ่อย ได้แก่ JSON มีรูปแบบไม่ถูกต้องหรือใช้ null แทน "" สำหรับค่าสตริง
  • 403 Forbidden - เซิร์ฟเวอร์ประมวลผล คำขอสำหรับ agentUserId ที่ระบุไม่ได้เนื่องจากเกิดข้อผิดพลาดขณะ รีเฟรชโทเค็น ตรวจสอบว่าปลายทาง OAuth ตอบสนองต่อคำขอโทเค็นการรีเฟรชอย่างถูกต้องและตรวจสอบสถานะการลิงก์บัญชีของผู้ใช้
  • 404 Not Found - ไม่พบทรัพยากรที่ขอ แต่อาจพร้อมใช้งานในอนาคต โดยปกติแล้วข้อผิดพลาดนี้หมายความว่าบัญชีผู้ใช้ไม่ได้ลิงก์กับ Google หรือเราได้รับ agentUserId ที่ไม่ถูกต้อง ตรวจสอบว่า agentUserId ตรงกับค่าที่ระบุในการตอบกลับ SYNC ของคุณ และคุณจัดการ Intent DISCONNECT อย่างถูกต้อง
  • 429 Too Many Requests - จำนวนคำขอซิงค์พร้อมกันสูงสุดเกินขีดจำกัดสำหรับ agentUserId ที่ระบุ ผู้เรียกจะส่งคำขอซิงค์พร้อมกันได้เพียงรายการเดียวเท่านั้น เว้นแต่จะตั้งค่าแฟล็ก async เป็น "จริง"