RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1608255
Accepted
steep
steep
Asked:2025-03-06 22:36:35 +0000 UTC2025-03-06 22:36:35 +0000 UTC 2025-03-06 22:36:35 +0000 UTC

如何在电报中制作按钮?

  • 772

电报机器人现在有 3 个按钮,单击后,它们会在聊天中写入简单的文本。如何制作 4 个按钮,但将它们排列成一行中的 2 个?点击第一个按钮/help,会显示另外 4 个按钮,就像一个多级菜单。

在此处输入图片描述

$data = file_get_contents('php://input');
$data = json_decode($data, true);
 
if (empty($data['message']['chat']['id'])) {
    exit();
}
 
define('TOKEN', '7444555:AAHomfgjN0mM');
 
// Функция вызова методов API.
function sendTelegram($method, $response)
{
    $ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);  
    curl_setopt($ch, CURLOPT_POST, 1);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $res = curl_exec($ch);
    curl_close($ch); 
    return $res;
}
 
// Ответ на текстовые сообщения.
if (!empty($data['message']['text'])) {
    $text = $data['message']['text'];


$keyboard = [
    [ "/start" ],
    [ "/help" ],
    [ "Кнопка 3" ]
];

$reply_markup = json_encode([
    "keyboard"=>$keyboard,
    "resize_keyboard"=>true
]);


// Команда /start.
    if (mb_stripos($text, '/start') !== false) {
        sendTelegram(
            'sendMessage', 
            array(
                'chat_id' => $data['message']['chat']['id'],
                'text'=>'Добро пожаловать в бота! /help /photo',
                'reply_markup'=>$reply_markup
        
            )
        ); 
        exit(); 
    } 
 
    if (mb_stripos($text, '/help') !== false) {
        sendTelegram(
            'sendMessage', 
            array(
                'chat_id' => $data['message']['chat']['id'],
                'text' => 'Помощь!'
            )
        );
        exit(); 
    } 
 
    // Отправка фото.
    if (mb_stripos($text, '/photo') !== false) {
        sendTelegram(
            'sendPhoto', 
            array(
                'chat_id' => $data['message']['chat']['id'],
                'photo' => curl_file_create(__DIR__ . '/img/edem.jpg'),
                'caption' => "Подпись к изображению",
                'parse_mode' => 'HTML',
            )
        );      
        exit(); 
    }
 
}
php
  • 1 1 个回答
  • 34 Views

1 个回答

  • Voted
  1. Best Answer
    Арсен
    2025-03-06T23:04:06Z2025-03-06T23:04:06Z

    您需要使用inline_keyboard:

    $keyboard = [];
    $keyboard[] = [['text' =>'Название кнопки', 'callback_data' => 'button_1']];
    

    text- 按钮名称

    callback_data- 当您点击时将发送给您的密钥(或/command- 将被执行)

    要水平放置按钮,您可以执行以下操作:

    $keyboard[] = [['text' =>'Название кнопки', 'callback_data' => 'button_1'],['text' =>'Название кнопки 2', 'callback_data' => 'button_2']];
    
    
    $replyMarkup = [
        'inline_keyboard' => $keyboard
    ];
    

    当点击时,/help您需要处理此操作并将第二个准备好的集合返回给用户。inline_keyboard

    该请求本身只是一个例子。

    sendTelegram('sendMessage', [
        'chat_id' => 'your_chat_id',
        'text' => 'Сообщение',
        'reply_markup' => json_encode($replyMarkup),
        'parse_mode' => 'HTML'
    ]);
    

    更新型多巴胺

    要向‘页脚’添加按钮,您可以执行以下操作:

    $keyboard = [
        'keyboard' => [
            [['text' => 'Кнопка 1'], ['text' => 'Кнопка 2']],
            [['text' => 'Кнопка 3'], ['text' => 'Кнопка 4']]
        ],
        'resize_keyboard' => true, // Изменяем размер под количество кнопок
        'one_time_keyboard' => false // Оставляем клавиатуру после нажатия
    ];
    
    $data = [
        'chat_id' => $chat_id,
        'text' => 'Выберите действие:',
        'reply_markup' => json_encode($keyboard)
    ];
    
    • 2

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5