Отправить сообщения бота Telegram на конечную точку Wordpress REST? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать псевдо-онлайн чат с ботом-телеграммой на веб-сайте 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;
    }
}

1 Ответ

0 голосов
/ 11 октября 2018

Наконец-то удалось ее решить (наверное).Кажется, я неправильно понял переменную methods в функции register_rest_route.

Итак, я изменил это:

'methods' => 'GET',

Для этого:

'methods' => WP_REST_SERVER::CREATABLE,

Таким образом, яможет отправлять POST-запросы в конечную точку через cURL или почтальона, , как указано в вики Telegram , и получать объект JSON, который был отправлен в конечную точку.

Большое спасибо @NikitaDudarev за его /она готова помочь.

...