【发布时间】: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