


Блог IT-шника
Блог IT-шника
Привіт:) В одному WordPress проекті мені потрібно було зробити, щоб після відправлення форми дані з неї автоматично пересилалися в особистий чат Telegram. Використовував безкоштовну версію плагіну WPForms.
Розгляну 2 способи.
Щоб перевірити чи надсилаються дані, вгорі натисніть кнопку Send test messages. У чаті вашого бота повинне з'явитися відповідне повідомлення:
Наступний код працює лише для Contact Form 7. Розмістіть його у файлі функцій своєї теми або створіть окремий плагін. У коді значення констант TELEGRAM_BOT_TOKEN
та TELEGRAM_RECEIVERS
замініть на токен власного Telegram боту та Telegram ID відповідно.
/**
* CF7 to Telegram
*
* https://t.me/mihdan_vent/3734
*
*/
const TELEGRAM_BOT_TOKEN = '6256497441:AAGv_5_iMSwLGGBih59l4GTNmB0CvaOpsF4';
const TELEGRAM_RECEIVERS = '278845427';
class MP_CF7_To_Telegram {
private $args;
public function __construct() {
$this->args = [
'bot_token' => TELEGRAM_BOT_TOKEN,
'receivers' => [
TELEGRAM_RECEIVERS,
],
];
}
public function mp_init_hooks() {
add_filter( 'wpcf7_mail_components', [ $this, 'mp_to_tlg_action' ], 10, 3 );
}
public function mp_to_tlg_send_message( $message, $receiver ) {
$params['text'] = wp_strip_all_tags( $message );
$params['chat_id'] = (int) $receiver;
$apiUrl = sprintf(
'https://api.telegram.org/bot%s/sendMessage?%s',
$this->args['bot_token'],
http_build_query( $params )
);
$response = wp_remote_get( $apiUrl );
if ( is_wp_error( $response ) ) {
error_log( 'Error in CF7 to Telegram: ' . $response );
} else {
$responseBody = json_decode( wp_remote_retrieve_body( $response ), true );
if ( ! $responseBody['ok'] ) {
error_log( 'Error in CF7 to Telegram: ' . json_encode( $responseBody ) );
}
}
}
public function mp_to_tlg_action( $components, $form, $instance ) {
foreach ( $this->args['receivers'] as $receiver ) {
$this->mp_to_tlg_send_message( $components['body'], $receiver );
}
return $components;
}
}
( new MP_CF7_To_Telegram() )->mp_init_hooks();