Я столкнулся с проблемой при попытке использовать встроенную клавиатуру телеграммы при использовании html-тега в URL.
$var = urlencode("https://api.telegram.org/bot/sendMessage?chat_id=@channel&parse_mode=html&text=\xF0\x9F\x8C\x8D+<b>Hello</b>");
$text = "Hi";
$keyboard = [
'inline_keyboard'=>[
[
['text'=>'Click','url'=>$var]
]
]
];
$keyboard = json_encode($keyboard);
$url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=MY_ID&parse_mode=html&reply_markup=".$keyboard."&text=".$text;
Я получаю ошибку BUTTON_URL_INVALID.
Но все нормально после удаления <b>Hello</b>
Не совсем уверен, что причина этого, но кажется html
не может быть использован как parse_mode
в этой ситуации.
Попробуйте использовать Markdown
вместо этого и изменить <b>Hello</b>
в *Hello*
,
Таким образом, ваша первая строка изменится на:
$var = urlencode("https://api.telegram.org/bot/sendMessage?chat_id=@channel&parse_mode=Markdown&text=\xF0\x9F\x8C\x8D+*Hello*");
Вам необходимо отправить URL в кодировке JSON, так что просто используйте "....&reply_markup=" . json_encode($keyboard) . "&text=..."
Вы можете доказать это самостоятельно, var_dump($keyboard)
а также var_dump("to string: $keyboard")
,