Более расширенный постинг в Telegram и дополнительные возможности — тут
Задача: в интернет-магазине есть форма заказа товара. Покупатель ее заполняет и отправляет оператору. Эти данные дополнительно приходят в чат телеграма. Форма, естественно, передается методом POST
Для реализации понадобятся: бот, чат, и якобы протокол https://, без которого все прекрасно работает.
Ссылка для примера: http://tg.devarts.pro/send
Тестовый чат: https://t.me/iartsorders
Как создать своего бота: /691-telegram-registraciya-i-nastroyka-bota.html
В статье выше описывается создание бота и чата для него. на основании нее идем дальше. Принимаем условие, что для приема данных в Telegram уже все готово и осталось только настроить обработчик для отправки!
Отправлять уже можно! Используя Telegram API через адресную строку браузера можно присылать сообщения в чат. Заменяете красные значения на свои и переходите через браузер по ссылке. В чат должно прийти сообщение от вашего бота!
https://api.telegram.org/bot273805635:AAGQOuPVadtQyEx0COPrDnq2r-YmUo90xaU/sendMessage?chat_id=@iartsorders&text=my_text
Данная форма создается очень легко и быстро! Самая базовая форма, которую без особых проблем набросать на HTML. Вставил переменную $return, чтобы не перенаправляло на отдельную страницу после отправки.
<div class="block">
<form action="" method="POST">
<p>Форма для заявки</p>
<p><?= $return ?></p>
<input name="name" type="text" placeholder="Введите ваше имя" required>
<input name="phone" type="tel" pattern="^[ 0-9]+$" placeholder="Введите ваш телефон" required>
<input type="submit" value="Отправить">
</form>
</div>
PHP обработчик
Теперь осталось дело за малым. Подкинем сюда обработчик, который, собственно, и будет инициировать отправку.
<?php
//проверяем наличие ПОСТ-параметров
if(!empty($_POST)){
//проверяем наличие параметров нашей формы
if (!empty($_POST['name']) && !empty($_POST['phone'])){
//токен вашего бота
$token = "273805635:AAGQOuPVadtQyEx0COPrDnq2r-YmUo90xaU";
//имя чата, если публичный или id для приватного
$chat = "@iartsorders";
//название вашего товара
$order = rand(0, 1000);
//данные из форм
$name = $_POST['name'];
$phone = $_POST['phone'];
$txt = "New order: $order%0A";
if (
fopen("https://api.telegram.org/bot$token/sendMessage?chat_id=$chat&text=$txt", "") &&
fopen("https://api.telegram.org/bot$token/sendContact?chat_id=$chat&phone_number=$phone&first_name=$name", "")
) {
$return = 'Спасибо, Ваш заказ отправлен оператору!';
} else {
$return = 'Ошибка отправки!';
}
}
}
?>
Для того, чтобы сделать номер кликабельным, сделал две отправки через функцию fopen();. Первая передает текст заказа, а вторая номер и имя, указанные в форме. Результат записываем в переменную $return и выводим сразу под формой.
Демо возвращыет такой результат:
Warning: fopen(): php_network_getaddresses: getaddrinfo failed: Временный сбой в разрешении имен in /home/users/a/artemmian/domains/tg.devarts.pro/send/index.php on line 22
Warning: fopen(https://…@iartsorders&text=New order: 612%0A): failed to open stream: php_network_getaddresses: getaddrinfo failed: Временный сбой в разрешении имен in /home/users/a/artemmian/domains/tg.devarts.pro/send/index.php on line 22
Пробывал у себя на хостинге, тоже самое
Возможно что то изменилось в API телеграма?
Возможно что то изменилось в API телеграма?
Только что все успешно отправилось. Если на вашем хосте тоже не пошло, значит были проблемы на стороне телеграма
есть простой сервис, чтобы на php не писать https://formfor.site/
Совсем простой…
Да, для далекого человека удобно GET через левый домен пускать прямо из формы