[Yandex Cloud documentation](../../../index.md) > [Yandex API Gateway](../../index.md) > [Step-by-step guides](../index.md) > Creating a trigger > Creating a trigger for Yandex IoT Core > Device

# Creating a trigger that sends messages to WebSocket connections from a Yandex IoT Core registry or device topic

Create a [trigger](../../concepts/trigger/iot-core-trigger.md) for a Yandex IoT Core registry or device topic and send message copies to [WebSocket connections](../../concepts/extensions/websocket.md).

{% note warning %}

The trigger must be in the same cloud as the registry or device from the topic of which it reads messages.

{% endnote %}

## Getting started {#before-begin}

To create a trigger, you will need:

* API gateway. Messages will be sent to WebSocket connections accessing the API gateway at the path specified in the trigger settings. If you do not have an API gateway, [create one](../api-gw-create.md).

    {% note info %}

    The trigger does not call the API gateway when sending messages to WebSocket connections.

    {% endnote %}

* [Service account](../../../iam/concepts/users/service-accounts.md) with the `api-gateway.websocketBroadcaster` role. If you do not have a service account, [create one](../../../iam/operations/sa/create.md).

* [Registry](../../../iot-core/concepts/index.md#registry) or [device](../../../iot-core/concepts/index.md#device) from whose topics the trigger will receive message copies. If you have neither:

    * [Create a registry](../../../iot-core/operations/registry/registry-create.md).
    * [Create a device](../../../iot-core/operations/device/device-create.md).

## Creating a trigger {#trigger-create}

{% note info %}

The trigger is initiated within five minutes after it is created.

{% endnote %}

{% list tabs group=instructions %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), select the folder where you want to create a trigger.

    1. Navigate to **API Gateway**.

    1. In the left-hand panel, select ![image](../../../_assets/console-icons/gear-play.svg) **Triggers**.

    1. Click **Create trigger**.

    1. Under **Basic settings**:

        * Enter a name and description for the trigger.
        * In the **Type** field, select `IoT Core (device)`.
        * In the **Launched resource** field, select `API gateway`.

    1. Under **IoT Core message settings**, specify the registry, device, and MQTT topic to create a trigger for. When creating a trigger for a registry topic, you do not need to specify a device or an MQTT topic. If no MQTT topic is set, the trigger will fire for all registry or device topics.

    1. Under **Batch message settings**, specify:

        * Batch size. The values may range from 1 to 1,000. The default value is 1.
        * Maximum wait time. The values may range from 1 to 60 seconds. The default value is 1 second.

       The trigger groups messages within the specified wait time period and sends them to WebSocket connections. The number of messages cannot exceed the specified batch size.

    1. Under **API gateway settings**:
       * In the **API gateway** field, select the API gateway.
       * In the **Path** field, specify the path in the OpenAPI specification. Messages will be sent through WebSocket connections established using this path.
       * In the **Service account** field, select the [service account](../../../iam/concepts/users/service-accounts.md) to send messages to WebSocket connections.

    1. Click **Create trigger**.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    To create a trigger that sends messages to WebSocket connections, run this command:

    ```bash
    yc serverless trigger create internet-of-things \
      --name <trigger_name> \
      --registry-id <registry_ID> \
      --device-id <device_ID> \
      --mqtt-topic '$devices/<device_ID>/events' \
      --batch-size <message_batch_size> \
      --batch-cutoff <maximum_wait_time> \
      --gateway-id <API_gateway_ID> \
      --gateway-websocket-broadcast-path <path> \
      --gateway-websocket-broadcast-service-account-id <service_account_ID>
    ```

    Where:

    * `--name`: Trigger name.
    * `--registry-id`: [Registry ID](../../../iot-core/operations/registry/registry-list.md).
    * `--device-id`: [Device ID](../../../iot-core/operations/device/device-list.md). If you are creating a trigger for a registry topic, you can omit this parameter.
    * `--mqtt-topic`: MQTT topic you want to create a trigger for. This is an optional setting. If you skip it, the trigger will fire for all registry or device topics.

    * `--batch-size`: Message batch size. This is an optional parameter. The values may range from 1 to 10. The default value is 1.
    * `--batch-cutoff`: Maximum wait time. This is an optional parameter. The values may range from 0 to 20 seconds. The default value is 10 seconds. The trigger groups messages for a period not exceeding `batch-cutoff` and sends them to WebSocket connections. The number of messages cannot exceed `batch-size`.

    * `--gateway-id`: API gateway ID.
    * `--gateway-websocket-broadcast-path`: Path in the OpenAPI specification. Messages will be sent through WebSocket connections established using this path.
    * `--gateway-websocket-broadcast-account-id`: Service account ID with permissions to send messages to WebSocket connections.

    Result:

    ```text
    id: a1s5msktijh2********
    folder_id: b1gmit33hgh2********
    created_at: "2022-10-24T15:19:15.353909857Z"
    name: iot-trigger
    rule:
      iot_message:
        registry_id: arenou2oj4h2********
        device_id: areqjd6un3h2********
        mqtt_topic: $devices/areqjd6unh2********/events
        batch_settings:
          size: "1"
          cutoff: 0s
        gateway_websocket_broadcast:
          gateway_id: d4eofc7n0mh2********
          path: /
          service_account_id: aje3932acdh2********
    status: ACTIVE
    ```

- API {#api}

  To create a trigger for Yandex IoT Core, use the [create](../../triggers/api-ref/Trigger/create.md) REST API method for the [Trigger](../../triggers/api-ref/Trigger/index.md) resource or the [TriggerService/Create](../../triggers/api-ref/grpc/Trigger/create.md) gRPC API call.

{% endlist %}

## Checking the result {#check-result}

Check that the trigger operates correctly. Do it by viewing the [API gateway logs](../api-gw-logs.md) that present information about its incoming requests.

## Useful links {#see-also}

* [Trigger for Yandex IoT Core that sends messages from registry or device topics to a Cloud Functions function](../../../functions/operations/trigger/iot-core-trigger-create.md)
* [Trigger for Yandex IoT Core that sends messages from registry or device topics to a Serverless Containers container](../../../serverless-containers/operations/iot-core-trigger-create.md)