Популярные мессенджеры уже полностью внедрились нашу повседневную жизнь и следовательно все больше внимания привлекают разработчиков. Некоторым людям уже не достаточно собирать заказы с сайта с оповещением на 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.
Далее активируем модуль и смотрим все ли у нас работает:
На этом думаю можно закончить.
Скачать используемый в примере модуле
Комментарии (5)
Спасибо за материал! Полезно.
По Viber уже упростили создание ботов.
отлично !
Подскажите пожалуйста, как таким же образом получать данные со страницы созданного мной типа (на подобии Article), чтобы также их отправлять?
Вау! Очень прошу вас сделайте пожалуйста для Drupal 7 - очень нужно
Подскажите пожалуйста, как таким же образом получать данные со страницы созданного мной типа (на подобии Article), чтобы также их отправлять?