Hataları ve istisnaları işleme

Cihazlar veya istekler beklendiği gibi çalışmadığında kullanıcılarınızın ne olduğunu ve mümkün olduğunda nasıl düzeltileceklerini anlamalarına yardımcı olacak iyi bir hata giderme ve iletişim hizmeti sağlamak önemlidir. Olası hata senaryolarını ve cihazınızın nasıl tepki vereceğini düşündüğünüzden emin olun: Kullanıcı devam eden bir görevi yarıda keserse ne olur? Kullanıcı çevrimdışı olan bir cihazdan işlem istediğinde ne olur? Bu sorunlar için plan yapmak ve kullanıcınızın bunlardan kurtulmasına yardımcı olmak, kullanıcıların hayal kırıklığına uğramasını önleyerek cihazlarınız için daha kaliteli bir deneyim oluşturur.

Bu kılavuzda, hataları işleyen intent yanıtlarına bazı örnekler verilmiştir. Hata ve istisnalar için geçerli errorCode değerlerini incelemek üzere Hatalar ve istisnalar'a bakın.

1. Örnek: EXECUTE amacı için hata yanıtı

Bir son kullanıcının oturma odasında iki akıllı ışığı var. Kullanıcı, "oturma odasının ışıklarını aç" komutu verir ve Google, sipariş karşılama URL'nize bir EXECUTE niyeti gönderdi. Kullanıcının cihazlarının internete bağlı olmadığını ve kontrol edilemez olduğunu tespit ettiniz. Bu nedenle, istek karşılama işleminiz status ERROR ve errorCode deviceOffline ile bir EXECUTE yanıtı döndürdü.

Bu örnekte, daha önce açıklandığı gibi hafif bir cihazdan errorCode içeren bir EXECUTE yanıtının nasıl döndürüleceği gösterilmektedir:

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

Yanıtı aldıktan sonra Google Assistant, kullanıcıdan "cihaz şu anda kullanılamıyor" mesajıyla karşılaşır. EXECUTE yanıtında errorCode deviceOffline gönderdikten sonra rapor durumundaki cihazlar için çevrimdışı durumu göndermeniz gerektiğini unutmayın.

2. örnek: EXECUTE amacı için engellemeyen istisna

Bir kullanıcı, Assistant kullanarak cihazı kullanarak ön kapıda akıllı kilidini kilitlemeye çalışıyor. Cihazların kilidini başarıyla kontrol edebilirsiniz ancak cihazın pilinin düşük olduğunu görürsünüz. Bu nedenle, siparişiniz status SUCCESS ve exceptionCode lowBattery ile EXECUTE yanıtı döndürüyor.

Bu örnekte, daha önce açıklandığı gibi kilit cihazından exceptionCode ile nasıl EXECUTE yanıtı gönderileceği gösterilmektedir:

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

Assistant, yanıtı aldıktan sonra kullanıcıya "cihazın pil seviyesi düşük" mesajıyla ulaşır.

3. Örnek: Proaktif hata bildirimleri

Bazı durumlarda, özellikle de kullanıcıların otomatik olarak tamamlamayı beklediği işlevlerde kullanıcıları bir hata konusunda uyarmak faydalı olabilir. Proaktif bildirimleri destekleyen özellikler için, smart home proaktif bildirimleri uyguladıysanız hata meydana gelirken kullanıcıyı proaktif olarak bilgilendirebilirsiniz.

Akıllı bir kurutma makinesi çalışıyor ve döngü bitmeden birisi kapıyı açıyor. errorCode ile proaktif bildirim göndermek için Google Home Graph API reportStateAndNotifications yöntemini çağırabilirsiniz:

Bu örnekte, daha önce açıklandığı gibi bir kurutucu cihazdan errorCode ile nasıl proaktif bildirim gönderileceği gösterilmektedir:

POST https://homegraph.googleapis.com/v1/devices:reportStateAndNotification

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

Assistant, bildirimi aldıktan sonra kullanıcıya "cihaz kapısı açıldı" mesajıyla ulaşır. İlgili cihaz durumlarını, aynı yükteki bildirimlerle birlikte gönderebilirsiniz.

4. Örnek: Takip bildirimi

smart home Takip bildirimlerini uyguladıysanız, takip bildirimlerini destekleyen özellik komutlarında, hata veya istisna meydana geldiğinde kullanıcıya takip bildirimi gönderebilirsiniz.

Bir kullanıcı, garaj kapısını kapatmak için bir komut verir ama kapı kapanırken sıkıştı. errorCode ile takip bildirimi gönderebilirsiniz:

POST https://homegraph.googleapis.com/v1/devices:reportStateAndNotification

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

Assistant, bildirimi aldıktan sonra kullanıcıya "cihaz sıkıştı" mesajıyla ulaşır. İlgili cihaz durumlarını, aynı yükte bildirimlerle birlikte gönderebilirsiniz.

Daha fazla bilgi ve ayrıntılı errorCodes için Hatalar ve istisnalar referans belgelerine bakın.