You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell脚本实现Telegram bot接收/start指令后发送内联按钮

Telegram Bot 上下排布Inline按钮Shell实现方案

你原有写法不符合Telegram Bot API的参数规范,inline按钮需要封装为指定格式的JSON结构作为reply_markup参数传入,且不能循环调用sendMessage接口(否则会发送多条独立消息),正确实现如下:

#!/bin/bash
# 请先替换为实际的bot token和触发用户的chat_id
bot_token="你的Bot Token值"
chat_id="触发/start指令的用户chat_id"
array=('google:https://google.com' 'instagram:https://Instagram.com')

# 构建inline_keyboard JSON结构:二维数组,每个子数组对应一行按钮
keyboard_content='{"inline_keyboard": ['
is_first=1
for button in "${array[@]}"; do
    btn_text=$(echo "$button" | cut -d ':' -f1)
    # 用f2-切割避免链接本身携带冒号时截断错误
    btn_url=$(echo "$button" | cut -d ':' -f2-)
    if [ ${is_first} -eq 1 ]; then
        keyboard_content+="[ {\"text\": \"${btn_text}\", \"url\": \"${btn_url}\"} ]"
        is_first=0
    else
        keyboard_content+=", [ {\"text\": \"${btn_text}\", \"url\": \"${btn_url}\"} ]"
    fi
done
keyboard_content+=']}'

# 单次调用接口发送带按钮的消息
curl -s -X POST "https://api.telegram.org/bot${bot_token}/sendMessage" \
  -H "Content-Type: application/json" \
  -d "{
    \"chat_id\": \"${chat_id}\",
    \"text\": \"欢迎使用,请选择要跳转的站点:\",
    \"reply_markup\": ${keyboard_content}
}"

关键说明

  • 上下排布按钮的核心是inline_keyboard的每个按钮单独作为一个子数组,每个子数组对应一行
  • 切割链接时使用cut -d ':' -f2-,避免链接本身的冒号(如https://中的冒号)导致的截断错误
  • 必须指定请求头Content-Type: application/json才能正常解析JSON格式的请求参数

内容的提问来源于stack exchange,提问作者meme246p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:54:03