1 (изменено: Lencore228, 2020-05-26 23:17:45)

Тема: AHK: Проблема с созданием кнопок для Telegram-бота

Привет. Я начал делать ботов для Telegram, с обычными командами в принципе всё ок, но проблемы начались, когда понадобились более сложные функции, как, например, заливка изображений. Но это уже было описано на просторах интернета, и решение нашлось.

Теперь проблема такая: как заставить бота показать кнопки после отправки сообщений? В документации по АПИ приводятся только описания функций, а примеров не показано. Более того, я нигде не смог найти адекватное применение с помощью обычного URL, только намёки.

Итак, для отправки юзеру клавиатуры нужно указать "массив массивов кнопок" в параметре reply_markup. Написано, что это должен быть JSON, я его сделал, но всё равно посылается обычный текст.

Вот так выглядит отправка обычного сообщения, всё окей:

UrlDownloadToFile, https://api.telegram.org/botTOKEN/sendmessage?chat_id=%id%&text=%text%&reply_to_message_id=%reply%, %A_ScriptDir%\check.rups

А вот так должна выглядеть отправка сообщения с последующей отправки клавиатуры:

UrlDownloadToFile, https://api.telegram.org/botTOKEN/sendmessage?chat_id=%id%&text=%text%&reply_markup={"ReplyKeyboardMarkup":{"keyboard":[[{"KeyboardButton":{"text":"test"}}]]}}, %A_ScriptDir%\check.rups

Но код посылает также одну кнопку. Чтобы было понятнее, вот отдельно JSON:

{
  "ReplyKeyboardMarkup": {
    "keyboard": [
      [
        {
          "KeyboardButton": {
            "text": "test"
          }
        }
      ]
    ]
  }
}

ВОПРОС: как правильно оформить отправку запроса АПИ, чтобы юзеру показывалась нужная кнопка? Хочу делать это удобно и просто. На других языках есть готовые либы, а тут нужно как-то все сделать всё на коленке.

2

Re: AHK: Проблема с созданием кнопок для Telegram-бота

Решено.


keyboard =
( 
  {"keyboard":[ ["Command 1", "Command 2"], ["Command 3", "Command 4"] ], "resize_keyboard" : true } 
)

SendMessageWithButton(text, chat_id, keyboard)
{
	BotToken = ; token
	url := "https://api.telegram.org/bot" . BotToken . "/sendMessage?text=" . text . "&chat_id=" . chat_id . "&reply_markup=" . Keyboard
	json_message := URLDownloadToVar(url)
	msgbox % json_message ; для проверки
	return
}

URLDownloadToVar(url,ByRef variable="")
{      
	try
	{  
		hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
		hObject.Open("GET",url)
		hObject.Send()
		variable:=hObject.ResponseText
		return variable
	}
}