【问题标题】:Send Telegram bot messages to a Wordpress REST endpoint?将 Telegram 机器人消息发送到 Wordpress REST 端点?
【发布时间】:2018-10-10 20:35:33
【问题描述】:

我正在尝试在 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 消息。

这是否可行,如果可行,我做错了什么?


编辑 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;
    }
}

【问题讨论】:

  • 我会尽力帮助你,但请回答我这个$get_telegram_message 变量是什么意思?如果你想回调函数get_telegram_message,你需要写'get_telegram_message'
  • 抱歉,打错了。我的意思是“get_telegram_message”——我只是在为 OOP 写这篇文章时把它做空。感谢手册的链接,但我仍然不知道可能是什么问题
  • 好的,能不能写完整代码,比如full class?
  • @NikitaDudarev - 当然,给你。谢谢你:)

标签: wordpress telegram telegram-bot wordpress-rest-api


【解决方案1】:

终于设法解决了(我猜)。似乎我将methods 变量误解为register_rest_route 函数。

所以我改变了这个:

'methods' => 'GET',

为此:

'methods' => WP_REST_SERVER::CREATABLE,

这样我可以通过 cURL 或邮递员 as stated in the Telegram wiki 向端点发送 POST 请求,并获取它发送到端点的 JSON 对象。

非常感谢@NikitaDudarev 愿意提供帮助。

【讨论】:

    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2021-08-19
    • 2017-07-17
    相关资源
    最近更新 更多