Error dan pengecualian

Dokumen ini mencantumkan error dan pengecualian yang didukung secara resmi untuk perangkat smart home. Gunakan kode error dan pengecualian yang diberikan ini dalam respons intent, atau dalam notifikasi jika Anda telah menerapkannya, sehingga Asisten Google akan memberi tahu pengguna akhir tentang masalah yang terkait dengan perintah atau status perangkat tertentu. Jika respons berisi format atau errorCode yang salah, Asisten Google akan memberi pengguna pesan error umum, misalnya, "Maaf, perangkat tidak tersedia saat ini".

Error

Anda harus menampilkan kode error saat masalah menyebabkan permintaan eksekusi atau kueri gagal. Misalnya, jika kunci pintu macet dan tidak dapat dikunci atau dibuka, error tentang status ini harus ditampilkan kepada pengguna.

Kode error dapat dilampirkan di tingkat perangkat atau di tingkat global. Misalnya, jika pengguna memiliki banyak lampu dari satu penyedia dan lampu tersebut dikontrol oleh hub, saat pengguna meminta untuk mematikan semua lampu, penyedia dapat menampilkan error tingkat perangkat jika satu lampu offline, atau error tingkat global jika seluruh hub offline dan tidak ada lampu yang dapat dikontrol. Jika semua perangkat offline, tidak ada perbedaan antara menggunakan error tingkat global atau tingkat perangkat.

Saat perangkat offline, Anda harus melaporkan {"online": false} ke Status Laporan dalam waktu 5 menit setelah perilaku perangkat.

Rangkuman:

  • Error tingkat global: semua perangkat dalam respons memiliki error yang sama
  • Error tingkat lokal: respons campuran dengan kasus error dan berhasil

Error tingkat global

Cuplikan JSON berikut menunjukkan cara menampilkan error tingkat global dalam respons QUERY atau EXECUTE.

Contoh error deviceOffline tingkat global karena hub sedang offline:

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "errorCode": "deviceOffline",
    "status" : "ERROR"
  }
}

Contoh error inSoftwareUpdate tingkat global karena hub sedang diupdate:

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "errorCode": "inSoftwareUpdate",
    "status" : "ERROR"
  }
}

Error tingkat perangkat

Respons QUERY

Cuplikan JSON berikut menunjukkan cara menampilkan error tingkat perangkat dalam respons QUERY.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "device-id-1": {
        "errorCode": "deviceOffline",
        "status" : "ERROR"
      },
      "device-id-2": {
        "errorCode": "deviceOffline",
        "status" : "ERROR"
      }
    }
  }
}

Respons EXECUTE

Cuplikan JSON berikut menunjukkan cara menampilkan error tingkat perangkat dalam respons EXECUTE.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "device-id-1"
        ],
        "status": "ERROR",
        "errorCode": "deviceOffline"
      },
      {
        "ids": [
          "device-id-2"
        ],
        "status": "SUCCESS",
        "states": {
          "on": true,
          "online": true
        }
      }
    ]
  }
}

Notifikasi dengan error

Notifikasi proaktif

Cuplikan JSON berikut menunjukkan cara melaporkan error tingkat perangkat dalam notifikasi proaktif.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "agentUserId": "agent-user-id-1",
  "eventId": "unique-event-id-1",
  "payload": {
    "devices": {
      "notifications": {
        "device-id-1": {
          "RunCycle": {
            "priority": 0,
            "status": "FAILURE",
            "errorCode": "deviceDoorOpen"
          }
        }
      }
    }
  }
}

Respons tindak lanjut

Cuplikan JSON berikut menunjukkan cara melaporkan error tingkat perangkat dalam respons lanjutan.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "agentUserId": "agent-user-id-1",
  "eventId": "unique-event-id-1",
  "payload": {
    "devices": {
      "notifications": {
        "device-id-1": {
          "LockUnlock": {
            "priority": 0,
            "followUpResponse": {
              "status": "FAILURE",
              "errorCode": "deviceJammingDetected",
              "followUpToken": "PLACEHOLDER"
            }
          }
        }
      }
    }
  }
}

Daftar kesalahan

Error berikut akan menghasilkan TTS terkait di perangkat.

  • aboveMaximumLightEffectsDuration : Durasi lebih dari 1 jam. Coba lagi.
  • aboveMaximumTimerDuration : Saya hanya dapat menyetel <device> hingga <time period>
  • actionNotAvailable : Maaf, sepertinya saat ini saya tidak bisa melakukannya.
  • actionUnavailableWhileRunning : <device(s)> <is/are> sedang berjalan, jadi saya tidak dapat melakukan perubahan apa pun.
  • alreadyArmed : <device(s)> <is/are> already armed.
  • alreadyAtMax : <device(s)> <is/are> sudah disetel ke suhu maksimum.
  • alreadyAtMin : <device(s)> <is/are> sudah disetel ke suhu minimum.
  • alreadyClosed : <device(s)> <is/are> already closed.
  • alreadyDisarmed : <device(s)> <is/are> already disarmed.
  • alreadyDocked : <device(s)> <is/are> already docked.
  • alreadyInState : <device(s)> <is/are> sudah dalam status tersebut.
  • alreadyLocked : <device(s)> <is/are> already locked.
  • alreadyOff : <device(s)> <is/are> already off.
  • alreadyOn : <device(s)> <is/are> sudah aktif.
  • alreadyOpen : <device(s)> <is/are> sudah terbuka.
  • alreadyPaused : <device(s)> <is/are> already paused.
  • alreadyStarted : <device(s)> <is/are> sudah dimulai.
  • alreadyStopped : <device(s)> <is/are> already stopped.
  • alreadyUnlocked : <device(s)> <is/are> already unlocked.
  • ambiguousZoneName : Maaf, <device(s)> tidak dapat mengidentifikasi zona yang Anda maksud. Pastikan zona Anda memiliki nama yang unik, lalu coba lagi.
  • amountAboveLimit : Jumlah ini lebih besar dari yang dapat didukung <device>.
  • appLaunchFailed : Maaf, gagal meluncurkan <nama aplikasi> di <perangkat>.
  • armFailure : <device(s)> tidak dapat diaktifkan.
  • armLevelNeeded : Saya tidak yakin harus menyetel <device(s)> ke level yang mana. Coba ucapkan "Setel <perangkat> ke <keamanan rendah>" atau "Setel <perangkat> ke <keamanan tinggi>"
  • authFailure : Sepertinya saya tidak dapat menjangkau <device>. Coba periksa aplikasi untuk memastikan <device> Anda <is/are> sudah disiapkan sepenuhnya.
  • bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
  • belowMinimumLightEffectsDuration : Durasi video kurang dari 5 menit. Coba lagi.
  • belowMinimumTimerDuration : Saya tidak dapat menyetel <device> untuk waktu yang sesingkat itu. Coba lagi.
  • binFull : <device> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Maaf, saya tidak dapat membatalkan pengaktifan <perangkat>.
  • cancelTooLate : Maaf, sudah terlambat untuk membatalkan. Sebagai gantinya, gunakan <device(s)> atau aplikasi.
  • channelSwitchFailed : Maaf, gagal beralih ke channel <channel name>. Harap coba lagi nanti.
  • chargerIssue : Maaf, sepertinya <device> <has/have> <a charger issue/charger issues>.
  • commandInsertFailed : Tidak dapat memproses perintah untuk <device(s)>.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange : Derajat yang diminta berada di luar rentang untuk <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <has/have> an active alert and <need(s)> your assistance.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceBusy : Maaf, sepertinya <device(s)> sudah melakukan sesuatu saat ini.
  • deviceCharging : Maaf, sepertinya <device(s)> tidak dapat melakukannya karena (ha_shared.ItsTheyre size=$item.devices.total_device_count) sedang mengisi daya.
  • deviceClogged : Maaf, sepertinya <device(s)> tersumbat.
  • deviceCurrentlyDispensing : <device(s)> sudah mengeluarkan sesuatu saat ini.
  • deviceDoorOpen : Pintu terbuka di <perangkat>. Tutup dan coba lagi.
  • deviceHandleClosed : Handle ditutup di <device(s)>. Buka dan coba lagi.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceLidOpen : Penutup <perangkat> terbuka. Tutup dan coba lagi.
  • deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Hubungi dealer servis lokal Anda.
  • deviceNotDocked : Maaf, sepertinya <device(s)> <isn't/aren't> docked. Pasang <perangkat> ke dok lalu coba lagi.
  • deviceNotFound : <device(s)> <is/are>n't available. Sebaiknya coba siapkan <it/them> lagi.
  • deviceNotMounted : Maaf, sepertinya <device> tidak dapat melakukannya karena <it/they> <is/are>n't mounted.
  • deviceNotReady : <device(s)> <is/are>n't ready.
  • deviceStuck : <device(s)> <is/are> stuck and needs your help.
  • deviceTampered : <device(s)> <has/have> been tampered with.
  • deviceThermalShutdown : Maaf, sepertinya <perangkat> mati karena suhu ekstrem.
  • directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
  • disarmFailure : <device(s)> tidak dapat dinonaktifkan.
  • discreteOnlyOpenClose : Maaf, <device(s)> hanya dapat dibuka atau ditutup total.
  • dispenseAmountAboveLimit : <device(s)> tidak dapat mengeluarkan jumlah sebanyak itu.
  • dispenseAmountBelowLimit : <device(s)> tidak dapat mengeluarkan jumlah sesedikit itu.
  • dispenseAmountRemainingExceeded : <device(s)> tidak memiliki cukup <dispense item> untuk melakukannya.
  • dispenseFractionalAmountNotSupported : <device> tidak dapat mengeluarkan pecahan <dispense item>.
  • dispenseFractionalUnitNotSupported : <device(s)> tidak mendukung pecahan unit tersebut untuk <dispense item>.
  • dispenseUnitNotSupported : <device(s)> tidak mendukung unit tersebut untuk <dispense item>.
  • doorClosedTooLong : Pintu di <device> sudah lama tidak dibuka. Silakan buka pintunya, pastikan ada sesuatu di dalamnya, lalu coba lagi.
  • emergencyHeatOn : <device(s)> <is/are> in Emergency Heat Mode, so <it/they>'ll have to be adjusted by hand.
  • faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
  • floorUnreachable : <device(s)> tidak dapat menjangkau ruangan tersebut. Pindahkan <perangkat> ke lantai yang benar, lalu coba lagi.
  • functionNotSupported : Sebenarnya, <device(s)> <doesn't/don't> mendukung fungsi tersebut.
  • genericDispenseNotSupported : Saya perlu tahu apa yang ingin Anda keluarkan. Coba lagi dengan nama item.
  • hardError : Maaf, terjadi error dan saya tidak dapat mengontrol perangkat smart home Anda.
  • hardError : Maaf, terjadi error dan saya tidak dapat mengontrol perangkat smart home Anda.
  • inAutoMode : <device(s)> <is/are> currently set to auto mode. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inAwayMode : <device(s)> <is/are> currently set to away mode. Untuk mengontrol termostat, Anda perlu mengalihkannya ke mode rumah secara manual menggunakan aplikasi Nest di ponsel, tablet, atau komputer.
  • inDryMode : <device(s)> <is/are> currently set to dry mode. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inEcoMode : <device(s)> <is/are> currently set to eco mode. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inFanOnlyMode : <device(s)> <is/are> currently set to fan-only mode. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
  • inHumidifierMode : <device(s)> <is/are> saat ini disetel ke mode pelembap udara. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inOffMode : <device(s)> <is/are> currently off. To change the temperature, you'll need to switch <it/them> to a different mode.
  • inPurifierMode : <device(s)> <is/are> currently set to purifier mode. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inSleepMode : <device(s)> <is/are> dalam mode tidur. Coba lagi nanti.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • lockFailure : <device(s)> tidak dapat dikunci.
  • lockedState : <device(s)> <is/are> currently locked.
  • lockedToRange : Suhu tersebut berada di luar rentang yang dikunci di <device(s)>.
  • lowBattery : <device(s)> <has/have> low battery.
  • maxSettingReached : <device(s)> <is/are> sudah disetel ke setelan tertinggi.
  • maxSpeedReached : <device(s)> <is/are> sudah disetel ke kecepatan maksimum.
  • minSettingReached : <device(s)> <is/are> sudah disetel ke setelan terendah.
  • minSpeedReached : <device(s)> <is/are> sudah disetel ke kecepatan minimum.
  • monitoringServiceConnectionLost : <device> <has/have> lost <its/their> connection to the monitoring service.
  • needsAttachment : Maaf, sepertinya <device(s)> <is/are> tidak memiliki lampiran yang diperlukan. Ganti dan coba lagi.
  • needsBin : Maaf, sepertinya <device(s)> <is/are> tidak memiliki tempat sampah. Ganti dan coba lagi.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> update software.
  • needsWater : <device(s)> <need(s)> water.
  • networkProfileNotRecognized : Maaf, saya tidak mengenali "<network profile>" di <device(s)>.
  • networkSpeedTestInProgress : Saya sudah menguji <network> <speed/speeds>>.
  • noAvailableApp : Maaf, sepertinya <nama aplikasi> tidak tersedia.
  • noAvailableChannel : Maaf, sepertinya channel <channel name> tidak tersedia.
  • noChannelSubscription : Maaf, saat ini Anda belum berlangganan ke channel <channel name>.
  • noTimerExists : Maaf, sepertinya tidak ada timer yang disetel di <device(s)>.
  • notSupported : Maaf, mode tersebut tidak tersedia untuk <perangkat>.
  • obstructionDetected : <device(s)> mendeteksi penghalang.
  • offline , deviceOffline : Maaf, sepertinya <device(s)> <is/are>n't available right now.
  • onRequiresMode : Tentukan mode yang ingin Anda aktifkan.
  • passphraseIncorrect : Maaf, sepertinya PIN yang dimasukkan salah.
  • percentOutOfRange : Maaf, saya tidak dapat menetapkan <device(s)> ke <percent>.
  • pinIncorrect : (passphraseIncorrect)
  • rainDetected : Saya tidak membuka <device(s)> karena hujan terdeteksi.
  • rangeTooClose : Rentang suhu tersebut terlalu dekat untuk <device>. Pilih suhu yang rentangnya lebih jauh.
  • relinkRequired : Maaf, sepertinya ada masalah dengan akun Anda. Gunakan Aplikasi Google Home atau Asisten untuk menautkan kembali <perangkat>.
  • remoteSetDisabled :
    • Parameter opsional errorCodeReason
    • currentlyArmed - Maaf, karena keamanan sudah aktif, Anda harus menggunakan <perangkat> atau aplikasi untuk melakukan perubahan apa pun.
    • remoteUnlockNotAllowed - Maaf, saya tidak dapat membuka kunci <perangkat> dari jarak jauh.
    • remoteControlOff - Tindakan tersebut saat ini dinonaktifkan. Aktifkan remote control di <perangkat>, lalu coba lagi.
    • childSafetyModeActive - Tindakan tersebut dinonaktifkan untuk <perangkat> saat mode keselamatan anak aktif.
  • roomsOnDifferentFloors : <device(s)> tidak dapat menjangkau ruangan tersebut karena berada di lantai yang berbeda.
  • safetyShutOff : <device(s)> <is/are> in Safety Shut-Off Mode, so <it/they>'ll have to be adjusted by hand.
  • sceneCannotBeApplied : Maaf, <device(s)> tidak dapat diterapkan.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • softwareUpdateNotAvailable : Maaf, tidak ada update software yang tersedia di <perangkat>.
  • startRequiresTime : Untuk melakukannya, Anda perlu memberi tahu saya berapa lama Anda ingin menjalankan <device(s)>.
  • stillCoolingDown : <device(s)> <is/are> masih mendingin.
  • stillWarmingUp : <device(s)> <is/are> masih melakukan pemanasan.
  • streamUnavailable : Maaf, sepertinya streaming dari <device(s)> tidak tersedia saat ini.
  • streamUnplayable : Maaf, saya tidak dapat memutar streaming dari <perangkat> saat ini.
  • tankEmpty : <device> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • targetAlreadyReached : Maaf, sepertinya suhu yang diminta sama dengan suhu saat ini.
  • timerValueOutOfRange : <device(s)> tidak dapat disetel untuk durasi tersebut.
  • tooManyFailedAttempts : Maaf, terlalu banyak upaya yang gagal. Buka aplikasi perangkat Anda untuk menyelesaikan tindakan tersebut.
  • transientError : Maaf, terjadi error saat mengontrol <device(s)>. Coba lagi.
  • turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
  • unableToLocateDevice : Saya tidak dapat menemukan <device(s)>.
  • unknownFoodPreset : <device(s)> tidak mendukung preset makanan tersebut.
  • unlockFailure : <device(s)> tidak dapat dibuka kuncinya.
  • unpausableState : <device(s)> tidak dapat dijeda saat ini.
  • userCancelled : ok
  • valueOutOfRange : <device(s)> tidak dapat disetel ke suhu tersebut.

Pengecualian

Anda harus menampilkan pengecualian saat ada masalah atau pemberitahuan yang terkait dengan perintah. Perintah ini dapat berhasil atau gagal.

Jika perintah berhasil (status = "SUCCESS"), laporkan pengecualian menggunakan sifat StatusReport (untuk perangkat selain target), atau dengan menampilkan exceptionCode yang sesuai (untuk perangkat target).

Misalnya, jika saringan lint pengering penuh, pengguna masih dapat memulai pengering, tetapi Anda mungkin ingin memperingatkan mereka tentang status ini. Demikian pula, saat baterai perangkat lemah tetapi tidak kosong, Anda masih dapat menjalankan perintah tetapi harus memberi tahu mereka bahwa baterai perangkat lemah.

Jika perintah gagal karena pengecualian, statusnya harus "EXCEPTIONS", dan pengecualian harus dilaporkan menggunakan karakteristik StatusReport.

Pengecualian non-pemblokiran (BERHASIL) tentang perangkat target

Contoh ini untuk mengunci pintu:

Daya baterai smart lock pintu depan lemah. Mengunci pintu depan.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["device-id-1"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true,
        "isLocked": true,
        "isJammed": false,
        "exceptionCode": "lowBattery"
      }
    }]
  }
}

Pengecualian non-pemblokiran (BERHASIL) tentang perangkat lain yang menggunakan StatusReport

Contoh ini adalah untuk mengaktifkan sistem keamanan: Ok, mengaktifkan sistem keamanan. Jendela depan terbuka.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["device-id-1"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true,
        "isArmed": true,
        "currentArmLevel": "L2",
        "currentStatusReport": [{
          "blocking": false,
          "deviceTarget": "sensor_id1",
          "priority": 0,
          "statusCode": "deviceOpen"
        }]
      }
    }]
  }
}

Mengecualikan pemblokiran tentang perangkat lain menggunakan StatusReport

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "device-id-1": {
        "on": true,
        "online": true,
        "status": "EXCEPTIONS",
        "currentStatusReport": [{
            "blocking": true,
            "deviceTarget": "device-id-1",
            "priority": 0,
            "statusCode": "lowBattery"
          },
          {
            "blocking": true,
            "deviceTarget": "front_window_id",
            "priority": 1,
            "statusCode": "deviceOpen"
          },
          {
            "blocking": true,
            "deviceTarget": "back_window_id",
            "priority": 1,
            "statusCode": "deviceOpen"
          }
        ]
      }
    }
  }
}

Daftar pengecualian

Pengecualian berikut akan menghasilkan TTS terkait di perangkat.

  • bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
  • binFull : <device> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : Karbon monoksida telah terdeteksi di <nama rumah>.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceMoved : <device(s)> <was/were> moved.
  • deviceOpen : <device(s)> <is/are> open.
  • deviceTampered : <device(s)> <has/have> been tampered with.
  • deviceUnplugged : <device(s)> <is/are> unplugged.
  • floorUnreachable : <device(s)> tidak dapat menjangkau ruangan tersebut. Pindahkan <perangkat> ke lantai yang benar, lalu coba lagi.
  • hardwareFailure : <device(s)> <has/have> a hardware problem.
  • inSoftwareUpdate : <device> <is/are> currently in a software update.
  • isBypassed : <device(s)> <is/are> currently bypassed.
  • lowBattery : <device(s)> <has/have> low battery.
  • motionDetected : <device(s)> <detect(s)> motion.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> update software.
  • needsWater : <device(s)> <need(s)> water.
  • networkJammingDetected : koneksi jaringan rumah ke <perangkat> tidak berfungsi dengan benar.
  • noIssuesReported : <device(s)> tidak melaporkan masalah apa pun.
  • roomsOnDifferentFloors : <device(s)> tidak dapat menjangkau ruangan tersebut karena berada di lantai yang berbeda.
  • runCycleFinished : <device(s)> <has/have> finished running.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • smokeDetected : Asap telah terdeteksi di <house name>.
  • tankEmpty : <device> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • usingCellularBackup : <device(s)> <is/are> using cellular backup.
  • waterLeakDetected : <device(s)> <detect(s)> kebocoran air.