如何在 PHP Bot Telegram 中创建内联按钮
How to create inline buttons in PHP Bot Telegram
由于公司需要,我必须在 php 中编程...但我是第一次使用 php...这是我第一次使用电报机器人:' (
在某种程度上,以前,当我 运行 命令 /start
和 doWork
一切正常时......
但现在我必须修改机器人,所有命令都 "hidden" 在某些电报按钮后面......这里是我编辑 php 页面的方式:
if(strpos($text, "/start") === 0)
{
$response = "Ciao $firstname, benvenuto!";
$keyboard = [
'inline_keyboard' => [
[
['text' => 'forward me to groups']
]
]
];
$encodedKeyboard = json_encode($keyboard);
$parameters =
array(
'chat_id' => $chatId,
'text' => $response,
'reply_markup' => $encodedKeyboard
);
$parameters["method"] = "sendMessage";
echo json_encode($parameters);
}
使用 BotFather 我 运行 命令 /setinline
也...
所以我想我是如何工作的 parameters
阵列..任何人都可以帮助我吗?
Ps.:(如果有人能给我推荐一个 IDE 我一起工作的请...我现在正在使用记事本++)
谢谢大家
首先你不需要在botFather中使用/setinline
命令。此命令适用于 "inline mode",而您正在使用 inline_keyboard
,这是正常聊天模式下的自定义键盘。
您还需要在键盘数组中为每个按钮提供一个 callback_data
:
$keyboard = [
'inline_keyboard' => [
[
['text' => 'forward me to groups', 'callback_data' => 'someString']
]
]
];
$encodedKeyboard = json_encode($keyboard);
$parameters =
array(
'chat_id' => $chatId,
'text' => $response,
'reply_markup' => $encodedKeyboard
);
send('sendMessage', $parameters); // function description Below
最后你需要通过curl发送。这是我在代码中使用的函数:
function send($method, $data)
{
$url = "https://api.telegram.org/bot<Bot-Token>". "/" . $method;
if (!$curld = curl_init()) {
exit;
}
curl_setopt($curld, CURLOPT_POST, true);
curl_setopt($curld, CURLOPT_POSTFIELDS, $data);
curl_setopt($curld, CURLOPT_URL, $url);
curl_setopt($curld, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curld);
curl_close($curld);
return $output;
}
P.S。我个人使用 PhpStorm,它很好 ;)
我已经使用 https://github.com/irazasyed/telegram-bot-sdk 管理了一些功能,如果您不想管理内联关键字上的行,您可以跳过 foreach 并使用 $inline_keyboard[] = $keyword_data;显示关键字
检查 $keyword_data 数组的图像
public function inlineKeyword($chat_id, $keyword_data, $msg = '') {
if (empty($msg)) {
$msg = "Select";
}
$inline_keyboard = array();
$row = 0;
$prev_value = '';
foreach ($keyword_data as $value) {
if (isset($prev_value['text']) && strlen($prev_value['text']) < 10 && strlen($value['text']) < 10) {
$inline_keyboard[$row - 1][] = $value;
} else {
$inline_keyboard[$row][] = $value;
}
$prev_value = $value;
$row++;
}
// $inline_keyboard[] = $keyword_data;
$reply_markup = $this->telegram->replyKeyboardMarkup([
'inline_keyboard' => $inline_keyboard,
'resize_keyboard' => true
]);
$response = $this->telegram->sendMessage([
'text' => $msg,
'reply_markup' => $reply_markup,
'chat_id' => $chat_id
]);
}
由于公司需要,我必须在 php 中编程...但我是第一次使用 php...这是我第一次使用电报机器人:' (
在某种程度上,以前,当我 运行 命令 /start
和 doWork
一切正常时......
但现在我必须修改机器人,所有命令都 "hidden" 在某些电报按钮后面......这里是我编辑 php 页面的方式:
if(strpos($text, "/start") === 0)
{
$response = "Ciao $firstname, benvenuto!";
$keyboard = [
'inline_keyboard' => [
[
['text' => 'forward me to groups']
]
]
];
$encodedKeyboard = json_encode($keyboard);
$parameters =
array(
'chat_id' => $chatId,
'text' => $response,
'reply_markup' => $encodedKeyboard
);
$parameters["method"] = "sendMessage";
echo json_encode($parameters);
}
使用 BotFather 我 运行 命令 /setinline
也...
所以我想我是如何工作的 parameters
阵列..任何人都可以帮助我吗?
Ps.:(如果有人能给我推荐一个 IDE 我一起工作的请...我现在正在使用记事本++)
谢谢大家
首先你不需要在botFather中使用/setinline
命令。此命令适用于 "inline mode",而您正在使用 inline_keyboard
,这是正常聊天模式下的自定义键盘。
您还需要在键盘数组中为每个按钮提供一个 callback_data
:
$keyboard = [
'inline_keyboard' => [
[
['text' => 'forward me to groups', 'callback_data' => 'someString']
]
]
];
$encodedKeyboard = json_encode($keyboard);
$parameters =
array(
'chat_id' => $chatId,
'text' => $response,
'reply_markup' => $encodedKeyboard
);
send('sendMessage', $parameters); // function description Below
最后你需要通过curl发送。这是我在代码中使用的函数:
function send($method, $data)
{
$url = "https://api.telegram.org/bot<Bot-Token>". "/" . $method;
if (!$curld = curl_init()) {
exit;
}
curl_setopt($curld, CURLOPT_POST, true);
curl_setopt($curld, CURLOPT_POSTFIELDS, $data);
curl_setopt($curld, CURLOPT_URL, $url);
curl_setopt($curld, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curld);
curl_close($curld);
return $output;
}
P.S。我个人使用 PhpStorm,它很好 ;)
我已经使用 https://github.com/irazasyed/telegram-bot-sdk 管理了一些功能,如果您不想管理内联关键字上的行,您可以跳过 foreach 并使用 $inline_keyboard[] = $keyword_data;显示关键字
检查 $keyword_data 数组的图像
public function inlineKeyword($chat_id, $keyword_data, $msg = '') {
if (empty($msg)) {
$msg = "Select";
}
$inline_keyboard = array();
$row = 0;
$prev_value = '';
foreach ($keyword_data as $value) {
if (isset($prev_value['text']) && strlen($prev_value['text']) < 10 && strlen($value['text']) < 10) {
$inline_keyboard[$row - 1][] = $value;
} else {
$inline_keyboard[$row][] = $value;
}
$prev_value = $value;
$row++;
}
// $inline_keyboard[] = $keyword_data;
$reply_markup = $this->telegram->replyKeyboardMarkup([
'inline_keyboard' => $inline_keyboard,
'resize_keyboard' => true
]);
$response = $this->telegram->sendMessage([
'text' => $msg,
'reply_markup' => $reply_markup,
'chat_id' => $chat_id
]);
}