我正在尝试与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消息。
这甚至可行吗,如果是的话,我在做什么错了?
按照@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;
}
}
答案 0 :(得分:0)
最终设法解决了这个问题(我想)。似乎我将methods
变量误解到了register_rest_route
函数中。
所以我改变了这个:
'methods' => 'GET',
为此:
'methods' => WP_REST_SERVER::CREATABLE,
这样,我可以通过cURL或邮递员as stated in the Telegram wiki将POST请求发送到端点,并获取发送到端点的JSON对象。
非常感谢@NikitaDudarev愿意提供帮助。