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 dikontrol oleh hub, saat pengguna meminta untuk mematikan semua lampu, penyedia dapat menampilkan error tingkat perangkat jika satu lampu sedang 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 error dan kasus 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 tindak lanjut.

{
  "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 : Itu lebih dari durasi maksimum 1 jam. Coba lagi.
  • aboveMaximumTimerDuration : Saya hanya dapat menyetel <device(s)> hingga <time period>
  • actionNotAvailable : Maaf, sepertinya saya tidak dapat melakukannya saat ini.
  • 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> sudah ditutup.
  • 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.
  • weatherZoneName : Maaf, <device(s)> tidak dapat mengidentifikasi zona mana yang Anda maksud. Pastikan zona Anda memiliki nama yang unik, lalu coba lagi.
  • jumlahAboveLimit : Itu lebih dari yang dapat didukung <device(s)>.
  • 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/devices> 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. Harap coba lagi.
  • belowMinimumTimerDuration : Saya tidak dapat menyetel <device(s)> untuk waktu yang sesingkat itu. Harap 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(s)> <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 <perangkat>.
  • 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 : Tutup perangkat <device>. 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(s)> tidak dapat melakukannya karena <it/they> <is/are>n't mounted.
  • deviceNotReady : <device(s)> <is/are>n't ready.
  • deviceStuck : <device(s)> <is/are> macet dan memerlukan bantuan Anda.
  • 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 sepenuhnya.
  • dispenseAmountAboveLimit : <device(s)> tidak dapat mengeluarkan jumlah sebesar itu.
  • dispenseAmountBelowLimit : <device(s)> tidak dapat mengeluarkan jumlah sesedikit itu.
  • dispenseAmountRemaining Exceeded : <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 bisa mengontrol perangkat smart home Anda.
  • inAutoMode : <device(s)> <is/are> currently set to auto mode. Untuk mengubah suhu, Anda harus mengalihkan <it/mereka> 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> saat ini disetel ke mode hemat energi. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inFanOnlyMode : <device(s)> <is/are> saat ini disetel ke mode khusus kipas. Untuk mengubah suhu, Anda harus mengubah <nya> ke mode lain.
  • inHeatOrCool : <device(s)> <is/are>tidak dalam mode hangat/sejuk.
  • 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> saat ini nonaktif. Untuk mengubah suhu, Anda harus mengalihkan <it/them> ke mode lain.
  • 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> saat ini sedang mengupdate software.
  • lockFailure : <device(s)> tidak dapat dikunci.
  • lockState : <device(s)> <is/are> saat ini terkunci.
  • lockedToRange : Suhu tersebut berada di luar rentang yang dikunci di <device>.
  • lowBattery : <device(s)> <has/have> baterai lemah.
  • 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. Harap ganti dan coba lagi.
  • needsBin : Maaf, sepertinya <device(s)> <is/are> tidak memiliki tempat sampah. Harap ganti dan coba lagi.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> update software.
  • needWater : <device(s)> <need(s)> air.
  • networkProfileNotRecognized : Maaf, saya tidak mengenali "<network profile>" di <device(s)>.
  • networkSpeedTestInProgress : Saya sudah menguji <network> <speed/speeds>>.
  • noAvailableApp : Maaf, sepertinya <app name> 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>.
  • blockionDetected : <device(s)> mendeteksi gangguan.
  • 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>.
  • pinSalah : (frasa sandiSalah)
  • 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 <device(s)>.
  • remoteSetDisabled :
    • Parameter opsional errorCodeReason
    • currentlyArmed - Maaf, karena keamanan sudah diaktifkan, Anda perlu menggunakan <device(s)> atau aplikasi untuk melakukan perubahan.
    • 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> pembatasan keamanan.
  • softwareUpdateNotAvailable : Maaf, tidak ada update software yang tersedia di <device(s)>.
  • 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 dalam proses 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.
  • manyFailedFaileds : 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 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, jika perangkat memiliki daya baterai rendah yang tidak kosong, Anda tetap dapat menjalankan perintah tetapi harus memberi tahu 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 kunci 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"
        }]
      }
    }]
  }
}

Memblokir pengecualian 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(s)> <has/have> <a full bin/full bins>.
  • carbonMonoksidaDetected : Karbon monoksida telah terdeteksi di <nama rumah>.
  • deviceAtExtremeTemperature : <device(s)> <is/are> pada <an ekstrem temperature/extreme temperatures>.
  • deviceJammingDetected : <device(s)> <is/are> macet.
  • deviceMoved : <device(s)> <was/were> moved.
  • deviceOpen : <device(s)> <is/are> open.
  • perangkatDirusak : <device(s)> <has/telah> dirusak.
  • deviceUnplugged : <device(s)> <is/are> dicabut.
  • floorUnreachable : <device(s)> tidak dapat menjangkau ruangan tersebut. Pindahkan <it/them> ke lantai yang benar dan coba lagi.
  • hardwareFailure : <device(s)> <has/have> a hardware problem.
  • inSoftwareUpdate : <device(s)> <is/are> saat ini sedang mengupdate software.
  • 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(s)> <has/have> <an empty tank/empty Tans>. Isi <it/them> dan coba lagi.
  • usingCellularBackup : <device(s)> <is/are> using cellular backup.
  • waterLeakDetected : <device(s)> <detect(s)> kebocoran air.