Популярные мессенджеры уже полностью внедрились нашу повседневную жизнь и следовательно все больше внимания привлекают разработчиков. Некоторым людям уже не достаточно собирать заказы с сайта с оповещением на Email адрес – они хотят дублировать его еще и себе в мессенджер.
На данный момент отправка сообщений в мессенджер, в открытом доступе, реализован только у Telegram. Естественно другие мессенджеры Viber и WhatsApp, так же имеют свои API, но доступ к ним предоставлен только крупным компаниям.
Сегодня мы на конкретном примере разберем, как можно отправить результаты заполнения себе в чат Telegram. В качестве подопытной формы будем использовать стандартную форму обратной связи.
Данная форма имеет 4 поля:
- Ваше имя
- Ваш адрес электронной почты
- Тема
- Сообщение
Значения, которых мы и будем дублировать в чат Telegram.
Итак, для возможности получать Telegram наши сообщения нам необходимо создать своего бота.
Создание бота Telegram
Хочу заметить, что я выставляю скриншоты в том виде, которые были созданы в процессе работы с данным ботом. В последствии данный бот был удален, так что не пытайтесь использовать токен и ID чат указанные на скриншотах в данной статье.
Бот создается очень просто, всё, что вам нужно – это найти в поиске бота @BotFather:
Далее ввести команду боту /start или же нажать на кнопку START.
После чего, бот вам покажет список всех возможных команд.
Нас интересует команда /newbot, которая поможет создать бота. Вводим данную команду, после чего он попросит ввести имя бота.
Хочу заметить, что имя бота должно заканчиваться на _bot. В противном случае, он попросит изменить имя для создаваемого бота.
После того, как вы задали правильное имя, в ответном сообщении вам придет текст с поздравлениями и токен для доступа к вашему боту. Данный токен нам понадобится, поэтому сохраните его себе.
Далее нам необходимо получить ID чата, т.е. что бы сообщение приходило именно вам. Для получения ID чата - первоначально напишите любое сообщение вашему созданному боту, тем самым вы инициализируете чат с вашим ботом. После чего необходимо пройти поURL, которое строится по шаблону
https://api.telegram.org/bot<token>/getUpdates
Где:
- <token> - это ваш уникальный токен, который был вам дан при создании бота. (Я просил вас себе его сохранить)
При переходе по указанному URL вы получите ответ в JSON формате, где нас интересует объект chat и в нем объект id
Так же сохраняем его себе. На этом с созданием бота мы закончили, теперь переходим к программной части.
Хочу заметить, что 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.
Далее активируем модуль и смотрим все ли у нас работает:
На этом думаю можно закончить.
Скачать используемый в примере модуле
Комментарии (8)
Спасибо за материал! Полезно.
По Viber уже упростили создание ботов.
отлично !
Подскажите пожалуйста, как таким же образом получать данные со страницы созданного мной типа (на подобии Article), чтобы также их отправлять?
Вау! Очень прошу вас сделайте пожалуйста для Drupal 7 - очень нужно
Подскажите пожалуйста, как таким же образом получать данные со страницы созданного мной типа (на подобии Article), чтобы также их отправлять?
Благодарю за статью!
Поскажите как сделать чтобы вебформа contact тоже отправляла в телеграм?
Пожалуйста, сделайте решение на Drupal 7 !
Поддерживаю. Очень надо.