Четверг, 12.08.2021 09:22

Пишем бота для обратной связи с сайта. Часть 2. Отправка сообщения в группу

Пишем бота для обратной связи с сайта. Часть 2. Отправка сообщения в группу

В прошлой части мы настроили среду разработки и создали наш первый простой Телеграм-бот. Сегодня мы расширим функционал бота заставив его отправлять сообщения в группу.

Удаление Веб-хука

Так как мы используем бесплатный план сервиса ngrok.com в процессе разработки на часто нужно будет менять адрес Вебхука.

Удалим старый адрес, чтобы добавить новый.

Запустим:

curl https://api.telegram.org/bot1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/deleteWebhook?url=https://bc8ab1191806.ngrok.io/d2549d33-255a-40a6-8cce-36c8f7efe780/6a98fbdb-9fc1-4681-878a-4e4292b79332.php

{"ok":true,"result":true,"description":"Webhook was deleted"}

Таким образом мы удалили старый Вебхук.

Теперь мы можем заново запустить ngrok и добавить новый вебхук, как это сделать описано в предыдущей статье!

Получение chatid группы

Чтобы отправить сообщение в группу нам нужно выяснить её chatid!

Сначала отправим в группу, в которую бот должен отправлять сообщение строку:

test

Затем запустим:

curl  https://api.telegram.org/bot1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/getUpdates

Получим приблизительно такой результат

{"ok":true,"result":[  {"update_id":751702982,  "message":{"message_id":14,"from":{"id":123456789,"is_bot":false,"first_name":"Vasiliy","last_name":"Altunin","username":"username","language_code":"ru"},"chat":{"id":-517371153,"title":"altuninvv-dev","type":"group","all_members_are_administrators":false},"date":1628735066,"text":"test"}}

Это данные нашей группы. 

Число

-517371153

И есть chatid нашей группы.

Отправляем сообщение в группу

Внесем изменения в код нашего бота: 

<?php
include('vendor/autoload.php');

$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ";
use Telegram\Bot\Api;

$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();

$chat_id = -517371153;

$r = "Hello user!";
    
$telegram->sendMessage(['chat_id' => $chat_id, 'text' => $r]);

Запустим несколько раз, открыв в веб-браузере страницу с ботом:

https://aacf63998e59.ngrok.io/d2549d33-255a-40a6-8cce-36c8f7efe780/6a98fbdb-9fc1-4681-878a-4e4292b79332.php

2021-08-12_13-35-25.png

Каждый раз при запуске php-скрипта бот отправляет в группу сообщение.

Но он так же отправляет сообщение каждый раз, когда кто-то пишет сообщение в группу, изменим код, чтобы обрабатывать эту ситуацию:

<?php
include('vendor/autoload.php');

$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ";
use Telegram\Bot\Api;

$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();

$chat_id = -517371153;
$text = $result["message"]["text"];

if(is_null($text)){
    $r = "Hello user!";
    
    $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $r]);
}

Запустим отправку еще несколько раз.

Бот не реагирует на отправку текста!

Отправляем сообщения с сайта

На самом деле, совершенно необязательно устанавливать Вебхук, если всё что вам нужно это отправлять сообщение в группу!

Тем не менее мы рассматривали механизм Вебхуков, так как будем его использовать в будущих частях!

Создадим в папке с ботом файл index.php

touch /var/phpbots/landing-bot/index.php

Скопируем в него код нашего бота:

<?php
include('vendor/autoload.php');

$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ";
use Telegram\Bot\Api;

$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();

$chat_id = -517371153;
$text = $result["message"]["text"];

if(is_null($text)){
    $r = "Hello user!";
    
    $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $r]);
   echo "Сообщение в группу отправлено!";

}

И откроем в браузере.

Сообщение в группу отправлено!

В группе появилось новое сообщение.

Создаем форму для отправки сообщения

Переименуем файл index.php в send.php

mv index.php send.php

Создадим пустой файл index.php 

touch /var/phpbots/landing-bot/index.php

С содержимым: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Telegram-bot sender</title>
</head>
<body>

<form action="send.php">    
    <label for="fio">Имя</label><input type="text" name="fio"><p>
    <label for="phone">Телефон</label><input type="text" name="phone"><p>
    <label for="email">Email</label><input type="text" name="email"><p>
    <label for="msg">Сообщение</label><textarea name="msg" rows="3"></textarea><p>
    <input type="submit" name="submit" value="Отправить">
</form>

</body>
</html>

Вот такая у нас получилась страшненькая форма, для наших целей вполне сойдет:

2021-08-12_14-40-52.png

Заполним форму и нажмем отправить, у нас откроется страница с адресом: 

https://aacf63998e59.ngrok.io/d2549d33-255a-40a6-8cce-36c8f7efe780/send.php?fio=Василий&phone=%2B79123456780&email=send%40mail.ti&msg=Message&submit=Отправить

В будущем, естественно, вы будете использовать POST для отправки сообщений, но для отладки нам и эта сойдет!

Обратите внимание, что существуют множество тонкостей и способов, чтобы защитить ваши скрипты от спама, предотвратить использование их ботами и защитить от DDoS! Но их описание выходит за рамки рассматриваемой темы, поэтому вам придется дополнительно озаботиться безопасностью формы и защитой её при помощи captcha!

Внесем изменения в файл send.php

<?php
include('vendor/autoload.php');

$token = "1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ";
use Telegram\Bot\Api;

$telegram = new Api($token);
$result = $telegram->getWebhookUpdates();

$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);

$text = null;
$chat_id = -517371153;

$r = sprintf("Новое обращение через форму на вашем лэндинге!\nИмя:\n%s\nТелефон:\n%s\nEmail:\n%s\nСообщение:\n%s", 
             $_GET['fio'], $_GET['phone'],  $_GET['email'],  $_GET['msg']); 

$telegram->sendMessage(['chat_id' => $chat_id, 'text' => $r]);

echo "Сообщение в группу отправлено!";

Перезагрузим страницу с нашей ссылкой:

2021-08-12_20-15-29.png 

Всё работает, как и задумано!

Заключение

Сегодня мы доработали наш Телеграмм-бот таким образом, чтобы он мог отправлять сообщения в группу по нашему выбору.

Рассмотрели процесс удаления Вебхука.

Разобрались как получить chatid группы.

Переписали бот для отправки сообщения в группу.

Создали примитивную форму для отправки сообщений.

Создали скрипт для отправки минимально форматированного текста в группу.

В следующей части мы рассмотрим форматирование текста с помощью HTML и Markdown.

Категория PHP
Теги PHP Telegram

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

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

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