ขอการซิงค์

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

เรียก 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 เพื่อสร้าง Stub ของไคลเอ็นต์สำหรับภาษาที่รองรับภาษาใดภาษาหนึ่ง
  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 เป็น "จริง"