Я пытаюсь создать псевдо-онлайн чат с ботом-телеграммой на веб-сайте Wordpress.Я новичок с WordPress REST API и Telegram API, но я подумал, что это легко.
Для отображения сообщений, отправленных администратором пользователям, я подумал, что он может использовать конечную точку Wordpress REST.Поэтому я установил webhook в Telegram:
curl -F "url=https://www.example.com/wp-json/mybot/bot" -F "certificate=@/path/to/my/certificate.crt" https://api.telegram.org/bot<my-bot-token>/setWebhook
И создал пользовательскую конечную точку в wordpress:
add_action('rest_api_init', array( $this, 'set_telegram_message_endpoint' ));
function set_telegram_message_endpoint()
{
register_rest_route('mybot', 'bot', array(
'methods' => 'POST',
'callback' => 'get_telegram_message' ),
));
}
Так что я полагаю, что могу отлавливать сообщения, отправленные моему боту в этой конечной точке:
function get_telegram_message( WP_REST_REQUEST $request )
{
print_r( $request->get_body() );
}
Но вместо этого я получаю 'code: rest_no_route' ... 'status: 404' json message.
Это даже выполнимо, и если да, то, что я 'я делаю не так?
Редактировать 1
По просьбе @Nikita Durarev, вот полный класс, который я написал для этого:
class Chat
{
private static $token, $telegram;
public function __construct()
{
self::$token = <TELEGRAM-BOT-TOKEN>;
self::$telegram = "https://api.telegram.org:443/bot" . self::$token;
add_action('rest_api_init', array( $this, 'set_telegram_message_endpoint' ));
add_action('admin_post_chat_form', array( $this, 'chat_telegram' ));
add_action('admin_post_nopriv_chat_form', array( $this, 'chat_telegram' ));
}
public function set_telegram_message_endpoint()
{
register_rest_route('mybot', 'bot', array(
'methods' => 'GET',
'callback' => array( $this, 'get_telegram_message' ),
));
}
public function get_telegram_message( WP_REST_REQUEST $request )
{
print_r( $request->get_body() );
}
public function chat_telegram( $input = null )
{
$mensaje = $input === '' ? $_POST['texto'] : $input;
echo $mensaje;
$query = http_build_query([
'chat_id' => <TELEGRAM-CHAT-ID>,
'text' => $mensaje,
'parse_mode' => "Markdown",
]);
$response = file_get_contents( self::$telegram . '/sendMessage?' . $query );
return $response;
}
}