Помощь начинающим веб
разработчикам

Drupal 8 – Отправка результатов заполнения формы в чат Telegram

30.08.2017

Популярные мессенджеры уже полностью внедрились нашу повседневную жизнь и следовательно все больше внимания привлекают разработчиков. Некоторым людям уже не достаточно собирать заказы с сайта с оповещением на Email адрес – они хотят дублировать его еще и себе в мессенджер.

На данный момент отправка сообщений в мессенджер, в открытом доступе, реализован только у Telegram. Естественно другие мессенджеры Viber и WhatsApp, так же имеют свои API, но доступ к ним предоставлен только крупным компаниям.

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

Drupal_8_send_notification_telegram.png

Данная форма имеет 4 поля:

  • Ваше имя
  • Ваш адрес электронной почты
  • Тема
  • Сообщение

Значения, которых мы и будем дублировать в чат Telegram.

Итак, для возможности получать Telegram наши сообщения нам необходимо создать своего бота.

Создание бота Telegram

Хочу заметить, что я выставляю скриншоты в том виде, которые были созданы в процессе работы с данным ботом. В последствии данный бот был удален, так что не пытайтесь использовать токен и ID чат указанные на скриншотах в данной статье.

Бот создается очень просто, всё, что вам нужно – это найти в поиске бота @BotFather:

Drupal_8_send_notification_telegram_1.png

Далее ввести команду боту /start или же нажать на кнопку START.

Drupal_8_send_notification_telegram_2.png

После чего, бот вам покажет список всех возможных команд.

Drupal_8_send_notification_telegram_3.png

Нас интересует команда /newbot, которая поможет создать бота. Вводим данную команду, после чего он попросит ввести имя бота.

Хочу заметить, что имя бота должно заканчиваться на _bot. В противном случае, он попросит изменить имя для создаваемого бота.

Drupal_8_send_notification_telegram_4.png

После того, как вы задали правильное имя, в ответном сообщении вам придет текст с поздравлениями и токен для доступа к вашему боту. Данный токен нам понадобится, поэтому сохраните его себе.

Drupal_8_send_notification_telegram_5.png

Далее нам необходимо получить ID чата, т.е. что бы сообщение приходило именно вам. Для получения ID чата - первоначально напишите любое сообщение вашему созданному боту, тем самым вы инициализируете чат с вашим ботом. После чего необходимо пройти поURL, которое строится по шаблону

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

Где:

  • <token> - это ваш уникальный токен, который был вам дан при создании бота. (Я просил вас себе его сохранить)

При переходе по указанному URL вы получите ответ в JSON формате, где нас интересует объект chat и в нем объект id

Drupal_8_send_notification_telegram_6.png

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

Хочу заметить, что Telegram Bot Api имеет достаточное кол-во методов, с которыми можно ознакомиться на официальном ресурсе

Отправка сообщения из формы в Telegram

Как всегда, все действия будем реализовывать в модуле, в моем случае он будет называться – telegram_notification.

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

Как вы наверное уже поняли, мы будет писать дополнительный callback для кнопки формы «Отправить сообщение».

Файл telegram_notification.module

<?php

/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form
 * Implements hook_form_FORM_ID_alter()
 */
function telegram_notification_form_contact_message_feedback_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id){
  $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['mail'],
      'title'   => '<b>Тема:</b> ' .$data['subject'][0]['value'],
      'message' => '<b>Сообщение:</b> ' .$data['message'][0]['value']
    );

    # 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($send_message){
      drupal_set_message('Сообщение успешно отправлено в Telegram');
    }else{
      drupal_set_message('Сообщение не отправлено в Telegram', 'error');
    }
  }else{
    drupal_set_message('Сообщение не возможно отправить, отсутсвует toke или id_chat', 'error');
  }

}

По коду вы можете видеть что переменные:

  • $telegram_token – содержит токен бота
  • $telegram_id_chat – содержит ID чат

Для того, что бы отправить сообщение боту, достаточно перейти по URL, который строится по шаблону:

https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>&text=<text>

Хочу заметить, что токен должен начинаться со слов bot.

Далее активируем модуль и смотрим все ли у нас работает:

Drupal_8_send_notification_telegram_7.png

На этом думаю можно закончить.

Скачать используемый в примере модуле

Скачать

Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

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

- Оповестить о новом комментарии.
- Все комментарии
- Только мои комментарии