Телеграм-бот для HTML форм

fetch(remoteUrl, {
    method: 'POST',
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    body: data
}).then( result => result.json() ).then(...)

Електронна пошта — традиційний і зручний спосіб доставки даних з форми на вашому сайті. Але електронне повідомлення долає складний шлях до адресата і часом втрачається в мережевих спам-фільтрах. Недавно приятель з'ясував, що в певний період до 40% звернень не доходили до скриньки.

Системи миттєвих повідомлень, зазвичай, позбавлені цього недоліку. Також зараз триває період мобільного розквіту і мессенджери займають тут чільне місце з огляду на простоту, безпеку і надійність. Тож у приятеля проблему було вирішено телеграм-ботом.

Стаття пояснює як вам надсилати повідомлення з форми на сайті в приватний чат і в групу Телеграм.

Створюємо бота

Знайдіть в Телеграмі @BotFather

Батько ботів

Пошук видає більше одного варіанта — будьте пильними.

У діалозі з @BotFather введіть команду /newbot і виконайте прості інструкції.

По закінченні ви побачите подібне до наступного повідомлення:

Повідомлення про успішне створення ботів

Тепер ваш бот готовий до справ. Збережіть жетон (token) доступу до HTTP API, що бачите на екрані. Він вам скоро знадобиться. Отримати до нього доступ зможете і наступним чином: у тому ж вікні діалогу з @BotFather виконайте команду /mybots і з показаного переліку ботів оберіть потрібного. Отримаєте меню, з якого зможете не лише дізнатися жетон:

Меню бота

ID чатів

Щоб телеграм міг знати, кому бот має відправляти повідомлення, кожен чат має унікальний номер. Чи це приватний чат чи група. Розпочніть чат із ботом. Далі, щоб довідатись номер приватного чату, відкрийте сформований наступним чином URI:

https://api.telegram.org/bot719952928:AAEeL6OL2wtBjNaOAv5S9PN3etRv_FiLsh0/getUpdates

Зверніть увагу: після https://api.telegram.org/bot вставляєте жетон бота, в кінці додаєте/getUpdates. У відповідь ви отримаєте JSON, в якому треба знайти chat: id. Приклад:

JSON із chat id

Для з'ясування АйДі групи наступний спосіб здається найпростішим: відкрийте інформацію про групу і увійдіть у керування групою. Ось так:

керування групою

Тепер відкрийте у браузері посилання-запрошення:

Посилання-запрошення

Не відкривайте його у програмі (JOIN GROUP). Відкрийте натомість у браузері (OPEN IN WEB):

Відкрийте у браузері

Вас буде переспрямовано на іншу адресу, подібну до наступної:

https://web.telegram.org/#/im?p=g246586972

Символи після знака = це і є ID групи. Лишень замініть g на - (мінус). В нашому випадку -246586972

Тепер ви готові перевірити, як бот транслює повідомлення в чати і групи. Сформуйте свої посилання за прикладом:

· send message to a group:
https://api.telegram.org/bot719952928:AAEeL6OL2wtBjNaOAv5S9PN3etRv_FiLsh0/sendMessage?chat_id=-246586972&text=Hi%20buddy
· to a private chat:
https://api.telegram.org/bot719952928:AAEeL6OL2wtBjNaOAv5S9PN3etRv_FiLsh0/sendMessage?chat_id=97804534&text=Hi%20buddy

Або протестуйте бота за допомогою форми в кінці.

Отримали повідомлення? Якщо ні, переконайтеся, що всі кроки зробили правильно. На момент написання все працює.

Далі простий відправник повідомлень PHP.

HTML-форма

Навіть не зачіпаю тут HTML, бо здається, що той, хто дійшов до подібних експериментів не потребує в цьому порад. Лише наведу зразок використання fetch для надсилання вмісту форми:

fetch(remoteUrl, {
    method: 'POST',
    cache: 'no-cache',
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    body: data
}).then( result => result.json() ).then(...)

PHP-обробник форми

Суть PHP-відправника повідомлення зводиться до формування URI до API ботів Telegram. Тому все дуже просто. Ось приклад для описаного вище fetch:

<?php
function sendMessage($token, $chatid, $message) {
    $url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chatid}&text=";
    $url .= urlencode($message);
    $ch = curl_init();
    $options = array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}
$token = 'xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$chatid = 'xxxxxxxxxxx';
$message = $_POST['message'] || 'ваш спосіб дістати повідомлення від форми';
$response;
// тепер, власне, виконання:
$result = json_decode(sendMessage($token, $chatid, $message));
if(isset($result->ok) && $result->ok) {
    $response['body'] = 'Ваше повідомлення надіслано';
} elseif (!$result->ok) {
    $response['error'] = true;
    $response['body'] = $result->error_code . ': ' . $result->description;
} else {
    $response['error'] = true;
    $response['body'] = 'Невідома помилка. Перепрошую :(';
};
printf(json_encode($response));

Протестуйте бота

Торкніться для
перевірки свого бота

Далі буде

На черзі Viber і Messenger.

Джерела і посилання:

Official Telegram API docs Відправник PHP базується на відповіді з сайту stackoverflow. Сором — не можу знайти той пост 😳