如何用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
相关产品推荐
相关产品推荐

