본문 바로가기
Develop/텔레그램봇

[Telegram] 텔레그램 챗봇 만들기 - 인라인키보드 (Kotlin)

by 알려 2022. 3. 21.
728x90
반응형

텔레그램 챗봇 만들기 두 번째는 인라인 키보드 만들기로 정했다.

 

챗봇은 Python이 대세지만 Kotlin으로 하는 이유는 python은 자료가 많다. 그래서 나는 코틀린으로 해보겠다고 1편에서 작성했다.

참고 바랍니다.

 

인라인키보드가 명칭만 봤을 때는 뭔지 난 몰랐다. 아마도 공식 홈페이지를 대충 봐서 그런 듯

일단 간단하게 그림으로 설명하면 아래와 같이 원래 키보드가 아닌 버튼 모양의 키보드를 말한다.

출처: 쿠팡 가격변동 알리미 챗봇 화면

일단 최초에 챗봇과 대화를 시작하게 되면 /start가 전달되게 되고 그 메시지를 받게 되면 인라인키보드로 대답하도록 하였다.

코드는 대충 짰으니 이렇게 하면 된다 정도로만 봐주면 될것 같다. 

InlineKeyboardButton을 생성하고 text를 입력해주고  text는 필수 항목이다. 

url 또는 callbackData등을 입력하여 버튼을 눌렀을때 행동을 입력해 주면된다. 그외에 행동들도 있지만 새벽이고 너무 늦어서 2개만 해보고 시간날때 추가 포스팅 하겠다. 

private fun start(message: Message) {
    val sendMessage = SendMessage()
    sendMessage.chatId = "${message?.chatId}"
    sendMessage.text = "reply ${message?.text.toString()}"
    val key1 = InlineKeyboardButton()
    key1.text = "내블로그 \uD83D\uDE03"
    key1.url = "https://normalblog.tistory.com"
    val key2 = InlineKeyboardButton()
    key2.text = "구글로가자"
    key2.url = "https://google.com"
    val key3 = InlineKeyboardButton()
    key3.text = "뭐냐?"
    key3.callbackData = "뭘까?"
    val list = listOf(key1,key2, key3)
    sendMessage.replyMarkup =  InlineKeyboardMarkup.builder().keyboard(listOf(list)).build()
    execute(sendMessage)
}

url을 셋팅한 버튼은 해당 url로 이동하게 되고 callbackData를 입력한 버튼은 callbackQuery타입으로 updateRecevied에 전달된다.

callbackData로 설정한 버튼이 여러개라면 전달되는 callbackQuery.data로 해당 본인이 입력한 callbackData가 전달되므로 이 변수를 가지고 분기 처리를 하면된다.

 override fun onUpdateReceived(update: Update?) {
    if(hasCallbackQuery()){
        callback(update.callbackQuery)
    }
 }
 
 private fun callback(callbackQuery: CallbackQuery?) {

    val sendMessage = SendMessage()
    sendMessage.chatId = "${callbackQuery!!.message.chatId}"
    sendMessage.text = "callback 입니다."

    execute(sendMessage)
}

 

내가 만든 대충 해본 인라인키보드는 하기와 같다

 

간단한 동작화면을 한번 찍어보았다!

 

728x90
반응형

댓글