Webhook Telegram 连续发送多个更新
Webhook Telegram sends several updates in a row
我启用了 webhook 来处理传入的电报更新。我注意到当我向电报机器人写入 1 条消息时,它会同时向 webhook 发送多条消息。为什么会这样?
请解释这是如何工作的。也许我需要明确地 return 一些东西来避免这种情况?现在,当您直接转到 Web 挂钩时,会 returned.
一个状态为 200 的空白页面
问题出在 Content-Encoding
header,或者更确切地说,是压缩方法。服务器使用 Brotli 算法自动压缩响应并 returned Content-Encoding: br
header.
我得出的结论是 Telegram 服务器正在等待 gzip 压缩的响应。我没有机会在服务器上配置压缩算法,所以我不得不手动压缩响应:
function compress($data) {
$supportsGzip = strpos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) !== false;
if ( $supportsGzip ) {
$content = gzencode( trim( preg_replace( '/\s+/', ' ', $data ) ), 9);
header('Content-Encoding: gzip');
} else {
$content = $data;
}
$offset = 60 * 60;
$expire = "expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
header("content-type: text/html; charset: UTF-8");
header("cache-control: must-revalidate");
header( $expire );
header( 'Content-Length: ' . strlen( $content ) );
header('Vary: Accept-Encoding');
echo $content;
}
compress(""); //Compress an empty answer in gzip
本次更新后,他们开始以单人副本的形式出现。
P.S。这是指 text/html
格式。如果 webhook 应该 return application/json
,那么一切都可以在没有压缩的情况下工作。
我启用了 webhook 来处理传入的电报更新。我注意到当我向电报机器人写入 1 条消息时,它会同时向 webhook 发送多条消息。为什么会这样?
请解释这是如何工作的。也许我需要明确地 return 一些东西来避免这种情况?现在,当您直接转到 Web 挂钩时,会 returned.
一个状态为 200 的空白页面问题出在 Content-Encoding
header,或者更确切地说,是压缩方法。服务器使用 Brotli 算法自动压缩响应并 returned Content-Encoding: br
header.
我得出的结论是 Telegram 服务器正在等待 gzip 压缩的响应。我没有机会在服务器上配置压缩算法,所以我不得不手动压缩响应:
function compress($data) {
$supportsGzip = strpos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) !== false;
if ( $supportsGzip ) {
$content = gzencode( trim( preg_replace( '/\s+/', ' ', $data ) ), 9);
header('Content-Encoding: gzip');
} else {
$content = $data;
}
$offset = 60 * 60;
$expire = "expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
header("content-type: text/html; charset: UTF-8");
header("cache-control: must-revalidate");
header( $expire );
header( 'Content-Length: ' . strlen( $content ) );
header('Vary: Accept-Encoding');
echo $content;
}
compress(""); //Compress an empty answer in gzip
本次更新后,他们开始以单人副本的形式出现。
P.S。这是指 text/html
格式。如果 webhook 应该 return application/json
,那么一切都可以在没有压缩的情况下工作。