Alexa.ContactSensor Interface

Implement the Alexa.ContactSensor capability interface for endpoints that detect contact between two surfaces. For example, a contact sensor can report whether a door or window is open or closed.

If your contact sensors are components of a larger security system, your skill can also implement the Alexa.SecurityPanelController interface for a unified customer experience.

For the list of locales that are supported for the ContactSensor interface, see List of Capability Interfaces and Supported Locales.

Utterances

When you use the Alexa.ContactSensor interface, the voice interaction model is already built for you. The following examples show some customer utterances:

Alexa, is the bedroom window open?

After the customer says one of these utterances, Alexa sends a corresponding state report request to your skill.

Overview

A contact sensor typically has two components; a main component and a magnet component. When the components are in contact with each other, the sensor is closed. When they lose contact, the sensor is open.

The following image shows the open and closed states of a contact sensor on a window.

Properties

The Alexa.ContactSensor interface uses detectionState as the primary property. You can use the following values for detectionState.

Value Description
DETECTED The sensor is open and the two pieces of the sensor are not in contact with each other. For example, after a window has been opened.
NOT_DETECTED The sensor is closed and the two pieces of the sensor are in contact with each other.

Discovery

You describe endpoints that support Alexa.ContactSensor using the standard discovery mechanism described in Alexa.Discovery.

Set retrievable to true for the properties that you report when Alexa sends your skill a state report request. Set proactivelyReported to true for the properties that you proactively report to Alexa in a change report.

Use CONTACT_SENSOR for the display category. For the full list of display categories, see display categories.

Discover response example

The following example shows a Discover.Response message for an endpoint that supports the Alexa.ContactSensor interface.

{
  "event": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover.Response",
      "payloadVersion": "3",
      "messageId": "<message id>"
    },
    "payload": {
      "endpoints": [
        {
          "endpointId": "<unique ID of the endpoint>",
          "manufacturerName": "<the manufacturer name of the endpoint>",
          "description": "Smart Sensor by Sensor Maker",
          "friendlyName": "Bedroom window",
          "displayCategories": ["CONTACT_SENSOR"],
          "cookie": {},
          "capabilities": [
            {
              "type": "AlexaInterface",
              "interface": "Alexa.ContactSensor",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "detectionState"
                  }
                ],
                "proactivelyReported": true,
                "retrievable": true
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa",
              "version": "3"
            }
          ]
        }
      ]
    }
  }
}

State reporting

Support the ReportState directive so that customers can ask about the state of their contact sensors.

The following examples show user utterances:

Alexa, is the bedroom window open?

Alexa sends a ReportState directive to request information about the state of an endpoint. When Alexa sends a ReportState directive, you send a StateReport event in response. The response contains the current state of all retrievable properties in the context object. You identify your retrievable properties in your discovery response. For more information about state reports, see Understand State Reporting.

StateReport response event example

{
  "event": {
    "header": {
      "namespace": "Alexa",
      "name": "StateReport",
      "messageId": "<message id>",
      "correlationToken": "<an opaque correlation token>",
      "payloadVersion": "3"
    },
    "endpoint": {
      "endpointId": "<endpoint id>"
    },
    "payload": {}
  },
  "context": {
    "properties": [
      {
        "namespace": "Alexa.ContactSensor",
        "name": "detectionState",
        "value": "NOT_DETECTED",
        "timeOfSample": "2017-02-03T16:20:50.52Z",
        "uncertaintyInMilliseconds": 0
      }
    ]
  }
}

Change reporting

You send a ChangeReport event to proactively report changes in the state of an endpoint. You identify the properties that you proactively report in your discovery response. For more information about change reports, see Understand State Reporting.

ChangeReport event example

{  
  "event": {
    "header": {
      "namespace": "Alexa",
      "name": "ChangeReport",
      "messageId": "<message id>",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "BearerToken",
        "token": "<an OAuth2 bearer token>"
      },
      "endpointId": "<endpoint id>"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.ContactSensor",
            "name": "detectionState",
            "value": "DETECTED",
            "timeOfSample": "2018-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  },
  "context": {}
}