Hi n8n community,
I’m struggling to get Telegram inline keyboards working through the native Telegram node. Despite trying all suggested approaches, the buttons only appear when sending a raw HTTP POST request to the Telegram API - which isn’t an ideal workflow.
What I’ve Tried:
Function Node returning proper inline_keyboard structure
javascript
return [{
json: {
inline_keyboard: [[{text: "Test", callback_data: "test"}]]
}
}];
→ Buttons don’t appear, though Debug shows correct output
Direct JSON input in Reply Markup field:
json
{{ { "inline_keyboard": [[{"text":"Test","callback_data":"test"}]] } }}
→ Same result
Multiple syntax variations (.first(), stringify, different bracket styles)
What DOES Work:
Manual HTTP POST request to api.telegram.org with:
json
{
"chat_id": 123,
"text": "Test",
"reply_markup": {
"inline_keyboard": [[{"text":"Test","callback_data":"test"}]]
}
}
Environment:
n8n v1.18.2 (self-hosted)
Telegram Bot API
Debug Node confirms correct JSON structure
Has anyone encountered this? The HTTP workaround proves the bot has permissions and the API works - something in the Telegram node’s reply_markup handling seems to interfere. Any insight would be greatly appreciated!