Перебирая закладки браузера наткнулся на сайт drupalfly.ru, где просматривал статьи по друпалу и нашел статью как результаты вебформ сбрасывать телеграмм чат. 

В начале, через @BotFather, создаем бота, прописываем название, описание, ставим изображение, получаем апи-ключ. Теперь получаем айди чата, куда будут сбрасываться наши сообщения. Для этого в адресную строку вводим адрес

https://api.telegram.org/bot<token>/getUpdates

где <token> это наш токен, который нам дается при создании бота. Этот токен, в случае чего, можно заново сгенерировать в botfather.

После ввода адреса у нас откроется страница с данными чата, где нас интересует строка chat: id:

telegram

Это айди чата, куда будет отправлять результаты форм наш бот.

Теперь создаем модуль в на сайте, создаем в modules папку custom и в ней папку telegram_notification. Внутри этой папки создаем два файла - telegram_notification.info.yml и telegram_notification.module.

В инфо файле добавляем инфо-данные нашего модуля

name: Telegram Notification
description: Пример отправки результата заполнения формы в чат Telegram
core: 8.x
type: module

В случае, если модуль будет использоваться на Drupal 9 нужно добавить после кора 

core_version_requirement: ^8 || ^9

что бы система увидела совместимость с девятой версией ядра.

Во второй файл добавляем следующее содержимое

<?php

/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form
 * Implements hook_form_FORM_ID_alter()
 */

function telegram_notification_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {

    if($form['#id'] == 'webform-submission-price-add-form'){
        $form['actions']['submit']['#submit'][] = '_telegram_notification_form_submit';
    }
}

/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * Callback telegram_notification
 */
function _telegram_notification_form_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {

    # Telegram data
    $telegram_token = 'bot'; // Ваш токен, который строится по шаблону bot+token
    $telegram_id_chat = '';  // ID чата

    if (!empty($telegram_token) && !empty($telegram_id_chat)) {
        # Form data
        $data = $form_state->getValues();
        $data_result = array(
            'name' => '<b>Имя:</b> ' . $data['name'],
            'email' => '<b>Email:</b> ' . $data['email'],
            'phone' => '<b>Телефон:</b> ' . $data['phone']
        );
        # Send message
        $message = implode($data_result, '%0A');
        $send_message = fopen("https://api.telegram.org/{$telegram_token}/sendMessage?chat_id={$telegram_id_chat}&parse_mode=html&text={$message}", "r");
    }
}

Здесь, в строке 

if($form['#id'] == 'webform-submission-price-add-form'){

мы задаем условие, результаты какой именно формы мы будем пересылать боту. Указывается айди нашей формы.

Ниже мы добавляем токен бота и айди чата, куда будут отправляться результаты.

После строки 

$data_result = array(

у нас идет перечисление наших полей формы и данных которые будут передаваться.

Если нам нужно передать к примеру статичное наименование формы, в самой форме добавляем скрытое поле со значение по-умолчанию, которое будет равно тому, которое нам нужно выводить.

После чистим кеш и пробуем отправлять форму, результаты которой должны прийти нашему боту.

В случае, если нам нужно работать с нексколькими формами, можно делать несколько условий на айди-формы и указывать различные функции, которые ниже просто копируем и задаем свои именами и вывод своих полей.

Помимо этого, может возникнуть необходимость отправки результатов нескольким пользователем. Проблема в том, что данное апи подразумевает отправку только по одному айди чата. Как возможный вариант решения - добавить бота в группу, дать ему права админа. После чего опять выполняем запрос на получение айдишника. На первый взгляд айдишник сильно может отличаться и иметь даже минус в начале айди, всё равно копируем и вставляем в $telegram_id_chat = '';.

После всех манипуляций у нас должен получиться бот, который отправляет сообщения в от всех указанных форм в группу телеграм.

Возможно прийдется еще в настройках бота, через botfather, изменить значение Group Privacy / Privacy mode и выставить его в disabled, после чего по-новой добавить в группу и назначить админом.

Добавить комментарий

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.