Jak wysyłać zgłoszenia z Contact Form 7 do bota Telegram
This article explains how to send form submissions from Contact Form 7 directly to a Telegram Bot, enhancing your team’s efficiency in handling client inquiries. Follow the step-by-step guide to set up your bot and integrate it with your WordPress site.
W tym artykule pokażemy, jak wysyłać dane z formularza Contact Form 7 bezpośrednio do bota Telegram, dzięki czemu osoby odpowiedzialne za obsługę klientów będą mogły szybciej reagować na zapytania przesyłane za pośrednictwem strony internetowej.
Pierwszym krokiem jest utworzenie bota Telegram. W tym celu otwórz aplikację Telegram i znajdź oficjalny kanał @BotFather. Przejdź do @BotFather i postępuj zgodnie z instrukcjami, aby utworzyć nowego bota.
Po skonfigurowaniu bota otrzymasz wiadomość zawierającą token API, który będzie niezbędny do wdrożenia tej funkcjonalności w kodzie.

Po utworzeniu bota przejdź do niego i aktywuj go, wysyłając komendę /start.
Następnie musimy uzyskać identyfikator Chat ID. W tym celu znajdź oficjalnego bota @RawDataBot, otwórz go i kliknij Start.
Otrzymasz odpowiedź w formacie JSON zawierającą dane z Twoim identyfikatorem Chat ID, jak pokazano na zrzucie ekranu.

Przejdźmy teraz do kodu. Pierwszym krokiem będzie zainstalowanie biblioteki GuzzleHttp, której użyjemy do wysyłania danych do Telegrama. Instrukcję instalacji i korzystania z biblioteki znajdziesz tutaj.
Alternatywnie możesz zastąpić GuzzleHttp natywnymi funkcjami WordPressa, takimi jak wp_remote_get() lub wp_remote_post(), albo użyć wbudowanych funkcji cURL w PHP do bezpośredniego wykonywania żądań HTTP.
Opcje te pozwalają wysyłać żądania do API Telegrama bez konieczności korzystania z zewnętrznej biblioteki, dzięki czemu kod pozostaje lekki i dobrze zintegrowany z WordPressem.
Utwórz klasę Main.php i zarejestruj akcję wpcf7_before_send_mail, która zostanie wywołana przed wysłaniem wiadomości e-mail przez formularz.
W tym kodzie najpierw pobieramy instancję formularza, a następnie dane z formularza, które przekażemy do nowej klasy utworzonej specjalnie do wysyłania danych do Telegrama.
<?php
/**
* Main theme class.
*
* @package iwpdev/test-theme
*/
namespace TestTheme;
use WPCF7_ContactForm;
use WPCF7_Submission;
/**
* Main class file.
*/
class Main {
/**
* Main construct.
*/
public function __construct() {
$this->init();
}
/**
* Init actions and filter.
*
* @return void
*/
public function init(): void {
add_action( 'wpcf7_before_send_mail', [ $this, 'mail_send_to_tg' ] );
}
/**
* Mail send to TG.
*
* @param WPCF7_ContactForm $wpcf7 Contact form 7 form instance.
*
* @return void
*/
public function mail_send_to_tg( WPCF7_ContactForm $wpcf7 ) {
// get the form instance.
$submission = WPCF7_Submission::get_instance();
// get data from the form.
$posted_data = $submission->get_posted_data();
// Class that sends data from the form to the telegram bot.
$message_send = TelegramSender::send_to_tg_chanel( $posted_data );
if ( isset( $message_send['error'] ) ) {
$wpcf7->set_properties(
[
'messages' => [
'validation_error' => 'An error occurred while submitting the form. Please check the entered data.',
],
]
);
// Set the error flag.
add_filter(
'wpcf7_validate',
function ( $result ) {
$result->invalidate( null, 'An error occurred while submitting the form.' );
return $result;
}
);
}
}
}
Utwórz klasę odpowiedzialną za wysyłanie danych do Telegrama, w której zdefiniujemy zmienne TELEGRAM_TOKEN (token API otrzymany od @BotFather podczas tworzenia bota) oraz TELEGRAM_CHAT_ID, który uzyskaliśmy za pomocą @RawDataBot jako jeden z parametrów w odpowiedzi JSON.
<?php
/**
* Telegram sender class.
*
* @package iwpdev/test-theme
*/
namespace TestTheme;
use GuzzleHttp\Client;
/**
* TelegramSender class file.
*/
class TelegramSender {
/**
* Telegram token
*/
const TELEGRAM_TOKEN = 'YOUR TELEGRAM TOKEN';
/**
* Telegram chat id.
*/
const TELEGRAM_CHAT_ID = 'YOUR CHAT ID';
/**
* Telegram API base url.
*/
const TELEGRAM_API_BASE_URL = 'https://api.telegram.org';
/**
* Send to tg chanel.
*
* @param array $data From data.
*
* @return array|true[]
*/
public static function send_to_tg_chanel( $data ) {
// Create an http client with base url settings.
$client = new Client(
[
'base_uri' => self::TELEGRAM_API_BASE_URL,
]
);
// A function that will convert form data into Markdown text.
$markdown_data = self::data_markdown_text_by_form_data( $data );
// Sending data to Telegram bot.
$response = $client->request(
'GET',
'/bot' . self::TELEGRAM_TOKEN . '/sendMessage',
[
'query' => [
'chat_id' => self::TELEGRAM_CHAT_ID,
'text' => $markdown_data,
'parse_mode' => 'Markdown',
],
]
);
// Receive a response from the API.
$body = $response->getBody();
$arr_body = json_decode( $body, false, 512, JSON_THROW_ON_ERROR );
// If you get a good answer.
if ( $arr_body->ok ) {
return [ 'success' => true ];
}
// Received an error in response.
return [ 'error' => $arr_body ];
}
/**
* Data markdown text by form data.
*
* @param array $data Form data array.
*
* @return string
*/
private static function data_markdown_text_by_form_data( array $data ): string {
$markdown_text = '';
if ( empty( $data ) ) {
return '';
}
foreach ( $data as $key => $value ) {
switch ( $key ) {
// Input name.
case 'your-name':
$markdown_text .= '* Name:' . $value . '* ' . "\n";
break;
case 'your-email':
$markdown_text .= '* Email:' . $value . '* ' . "\n";
break;
case 'your-subject':
$markdown_text .= '* Email Subject:' . $value . '* ' . "\n";
break;
case 'your-message':
$markdown_text .= '* Message:' . $value . '* ' . "\n";
break;
}
}
return $markdown_text;
}
}
Conclusion:
Mam nadzieję, że ten kod i poradnik pomogą Twojej firmie sprawniej przetwarzać zgłoszenia przesyłane za pośrednictwem formularzy na stronie internetowej. Pełną wersję kodu znajdziesz tutaj.
Gotowy, aby wynieść swój projekt
na wyższy poziom?
Wprowadźmy Twoją wizję w życie dzięki profesjonalnemu tworzeniu stron i dedykowanym rozwiązaniom.
Skontaktuj się z nami już teraz i rozpocznijmy pracę nad przekształceniem Twoich pomysłów w rzeczywistość!