Telegram 最近添加了一个新的 API 函数来设置反应:
setMessageReaction
使用此方法可以更改对消息的所选反应
...
我已经创建了一个机器人,并将其以管理员身份添加到频道中,现在我想代表其向出版物添加反应。
我尝试过以下 PHP 代码:
function sendToTelegram($token, $method, $response)
{
$ch = curl_init('https://api.telegram.org/bot' . $token . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
$result = sendToTelegram('BOT_KEY', 'setMessageReaction', ['chat_id' => -1001493310237, 'message_id' => 27, 'reaction[]' => "👍"]);
在我得到的回复中:
{"ok":true,"result":true}
但是该出版物没有得到任何反应。
我做错了什么?
您将表情符号作为错误的数据格式传递。
reaction
的
setMessageReaction
参数需要是ReactionType
的数组。因此,您需要类似以下内容,而不是传递
"👍"
作为反应:
[
[ 'type' => 'emoji', 'emoji' => '👍' ]
]
我使用以下 PHP 代码成功设置了反应:
<?php
$token = '859163076:....';
$chat = 1;
$message = 2;
$data = http_build_query([
'chat_id' => $chat,
'message_id' => $message
]);
$reactions = json_encode([
[ 'type' => 'emoji', 'emoji' => '👍' ]
]);
$re = @file_get_contents("https://api.telegram.org/bot$token/setMessageReaction?{$data}&reaction={$reactions}");
var_dump($re);