[Документация Yandex Cloud](../../../index.md) > [Yandex Cloud Functions](../../index.md) > [Пошаговые инструкции](../index.md) > Создание триггера > Создать триггер для Telegram

# Создать триггер для Telegram, который вызывает функцию Cloud Functions

Создайте [триггер для Telegram](../../concepts/trigger/telegram-trigger.md), который будет вызывать [функцию](../../concepts/function.md) Cloud Functions, когда Telegram-бот получает новое обновление.

## Перед началом работы {#before-you-begin}

Для создания триггера вам понадобятся:

* Telegram-бот и его токен. Если у вас нет бота, создайте его через [@BotFather](https://core.telegram.org/bots/features#botfather) и скопируйте выданный токен.

* Функция, которую триггер будет вызывать. Если у вас нет функции:

    * [Создайте функцию](../function/function-create.md).
    * [Создайте версию функции](../function/version-manage.md).

* (Опционально) Очередь [Dead Letter Queue](../../concepts/dlq.md), куда будут перенаправляться сообщения, которые не смогла обработать функция. Если у вас нет очереди, [создайте ее](../../../message-queue/operations/message-queue-new-queue.md).

* [Сервисные аккаунты](../../../iam/concepts/users/service-accounts.md) с правами:

    * на вызов функции;
    * (опционально) на запись в очередь Dead Letter Queue.

    Вы можете использовать один и тот же сервисный аккаунт или разные. Если у вас нет сервисного аккаунта, [создайте его](../../../iam/operations/sa/create.md).

## Создать триггер {#trigger-create}

{% note info %}

Триггер начинает работать в течение 5 минут после создания.

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://console.yandex.cloud) перейдите в каталог, в котором хотите создать триггер.

    1. [Перейдите](https://console.yandex.cloud/link/functions) в сервис **Cloud Functions**.

    1. На панели слева выберите ![image](../../../_assets/console-icons/gear-play.svg) **Триггеры**.

    1. Нажмите кнопку **Создать триггер**.

    1. В блоке **Базовые параметры**:

        * (Опционально) Введите имя и описание триггера.

        * В поле **Метки** нажмите кнопку **Добавить метку** и укажите метки в формате `ключ: значение`.

        * В поле **Тип** выберите `Telegram`.

    1. В блоке **Настройки Telegram** укажите токен Telegram-бота, полученный от [@BotFather](https://core.telegram.org/bots/features#botfather).

    1. В блоке **Настройки группирования сообщений** укажите:

        * **Время ожидания, с**. Допустимые значения от 1 до 60 секунд, значение по умолчанию — 1 секунда.
        * **Размер группы**. Допустимые значения от 1 до 100, значение по умолчанию — 1.

        Триггер группирует сообщения не дольше указанного времени ожидания и отправляет их в функцию. Число сообщений при этом не превышает указанный размер группы.

    1. В блоке **Приёмники**:

        1. В поле **Тип приёмника** выберите `Функция`.

        1. В блоке **Настройки функции** выберите функцию и укажите:

            * [Тег версии функции](../../concepts/function.md#tag).
            * [Сервисный аккаунт](../../../iam/concepts/users/service-accounts.md), от имени которого будет вызываться функция.

        1. (Опционально) В блоке **Настройки повторных запросов**:

            * В поле **Интервал** укажите время, через которое будет сделан повторный вызов функции, если текущий завершился неуспешно. Допустимые значения — от 10 до 60 секунд, значение по умолчанию — 10 секунд.
            * В поле **Количество попыток** укажите количество повторных вызовов функции, которые будут сделаны, прежде чем триггер отправит сообщение в Dead Letter Queue. Допустимые значения — от 1 до 5, значение по умолчанию — 1.

        1. (Опционально) В блоке **Настройки Dead Letter Queue** выберите очередь Dead Letter Queue и сервисный аккаунт с правами на запись в нее.

        1. (Опционально) В поле **Фильтр** укажите jq-шаблон для фильтрации событий, передаваемых в приемник. Если фильтр не указан, в приемник передаются все события.

        1. (Опционально) В поле **Шаблон преобразования** укажите jq-шаблон для преобразования событий перед отправкой в приемник. Если шаблон не указан, события не преобразуются.

    1. Нажмите кнопку **Создать триггер**.

- Terraform {#tf}

    [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
    
    Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
    
    Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../../terraform/index.md).

    Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
    
    
    Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

    Чтобы создать триггер для Telegram, который вызывает функцию:

    1. Опишите в конфигурационном файле параметры триггера:

       ```hcl
       resource "yandex_serverless_triggers" "my_trigger" {
         name = "<имя_триггера>"
         source {
           telegram_message {
             bot_token       = "<токен_Telegram-бота>"
             allowed_updates = [ "<тип_обновления>", "<тип_обновления>" ]
             force           = true
           }
         }
         action {
           invoke_function {
             function_id        = "<идентификатор_функции>"
             function_tag       = "<тег_версии_функции>"
             service_account_id = "<идентификатор_сервисного_аккаунта>"
           }
           filter {
             jq = ".message.text | startswith(\"/\")"
           }
           transformer {
             jq = ".message"
           }
           retry_policy {
             retry_attempts = "<количество_повторных_отправок>"
             interval       = "<интервал_между_повторными_отправками>"
           }
           dead_letter {
             dead_letter_queue {
               queue_arn          = "<ARN_очереди_Dead_Letter_Queue>"
               service_account_id = "<идентификатор_сервисного_аккаунта>"
             }
           }
         }
       }
       ```

       Где:

       * `name` — имя триггера. Формат имени:
       
           * длина — от 3 до 63 символов;
           * может содержать строчные буквы латинского алфавита, цифры и дефисы;
           * первый символ — буква, последний — не дефис.
       
       * `description` — описание триггера. Необязательный параметр.
       * `labels` — метки триггера в формате `ключ:значение`. Необязательный параметр.

       * `source` — параметры источника событий:

         * `telegram_message` — параметры Telegram-бота:

           * `bot_token` — токен Telegram-бота, полученный от [@BotFather](https://core.telegram.org/bots/features#botfather). Значение передается только при создании и изменении триггера и не возвращается в выводе Terraform. При изменении токена вебхук регистрируется заново.
           * `allowed_updates` — список типов [обновлений Telegram](https://core.telegram.org/bots/api#update), на которые подписывается бот. Необязательный параметр, значение по умолчанию — `[ "message" ]`.
           * `force` — переустановка вебхука, если для бота уже настроен вебхук на другой URL. Без этого параметра создание триггера завершится ошибкой. Если вебхук уже указывает на этот триггер, параметр ничего не меняет. Необязательный параметр.

       * `action` — параметры приемника. Блок можно указать несколько раз, чтобы триггер вызывал несколько ресурсов, в том числе разных типов. Максимальное количество ресурсов ограничено [лимитами](../../concepts/limits.md#functions-limits).
       
           * `invoke_function` — параметры функции:
       
               * `function_id` — идентификатор функции.
               * `function_tag` — тег версии функции. Необязательный параметр. Если параметр не указан, вызывается последняя версия функции.
               * `service_account_id` — идентификатор сервисного аккаунта с правами на вызов функции.
       
           * `filter` — фильтрация событий перед отправкой в приемник. Необязательный блок.
           
               * `jq` — [jq-шаблон](https://jqlang.github.io/jq/manual/) для фильтрации событий, передаваемых в приемник. Если не указан, в приемник передаются все события.
           
           * `transformer` — преобразование событий перед отправкой в приемник. Необязательный блок.
           
               * `jq` — jq-шаблон для преобразования событий перед отправкой в приемник. Если не указан, события не преобразуются.
           
           * `retry_policy` — параметры повторных запросов. Необязательный блок.
           
               * `interval` — время, через которое будет сделана повторная отправка события, если текущая завершилась неуспешно.
               * `retry_attempts` — количество повторных отправок, которые будут сделаны, прежде чем триггер отправит событие в Dead Letter Queue.
           
           * `dead_letter` — параметры очереди сообщений Dead Letter Queue. Необязательный блок.
           
               * `dead_letter_queue` — параметры очереди:
           
                   * `queue_arn` — ARN очереди.
                   * `service_account_id` — идентификатор сервисного аккаунта с правами на запись в очередь.
                   * `message_attributes` — атрибуты, которые будут добавлены к каждому сообщению в очереди, в формате `ключ:значение`. Необязательный параметр.

       Подробнее о параметрах ресурса `yandex_serverless_triggers` в [документации провайдера](../../../terraform/resources/serverless_triggers.md).

    1. Создайте ресурсы:

        1. В терминале перейдите в директорию с конфигурационным файлом.
        1. Проверьте корректность конфигурации с помощью команды:
        
           ```bash
           terraform validate
           ```
        
           Если конфигурация является корректной, появится сообщение:
        
           ```bash
           Success! The configuration is valid.
           ```
        
        1. Выполните команду:
        
           ```bash
           terraform plan
           ```
        
           В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
        1. Примените изменения конфигурации:
        
           ```bash
           terraform apply
           ```
        
        1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

        Terraform создаст все требуемые ресурсы. Проверить появление ресурсов можно в [консоли управления](https://console.yandex.cloud) или с помощью команды [CLI](../../../cli/quickstart.md):

        ```bash
        yc serverless trigger list
        ```

{% endlist %}

## Проверить результат {#check-result}

Проверьте, что триггер работает корректно. Для этого посмотрите [логи функции](../function/function-logs.md), в них отображается информация о вызовах.

#### Полезные ссылки {#see-also}

* [Создать триггер для Telegram, который вызывает контейнер Serverless Containers](../../../serverless-containers/operations/telegram-trigger-create.md)
* [Создать триггер для Telegram, который отправляет сообщения в WebSocket-соединения](../../../api-gateway/operations/trigger/telegram-trigger-create.md)