[ 
https://issues.apache.org/jira/browse/CAMEL-12478?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16468569#comment-16468569
 ] 

ASF GitHub Bot commented on CAMEL-12478:
----------------------------------------

oscerd closed pull request #2318: CAMEL-12478: Allow use of custom keyboard
URL: https://github.com/apache/camel/pull/2318
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/components/camel-telegram/src/main/docs/telegram-component.adoc 
b/components/camel-telegram/src/main/docs/telegram-component.adoc
index b90f06c13e8..3ce6891e363 100644
--- a/components/camel-telegram/src/main/docs/telegram-component.adoc
+++ b/components/camel-telegram/src/main/docs/telegram-component.adoc
@@ -310,3 +310,60 @@ 
to("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq
 ---------------------------------------------------------
 
 Note that the corresponding URI parameter is simply `chatId`.
+
+### Customizing keyboard
+
+You can customize the user keyboard instead of asking him to write an option. 
`OutgoingTextMessage` has the property `ReplyKeyboardMarkup` which can be used 
for such thing.
+
+[source,java]
+---------------------------------------------------------
+from("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L")
+    .process(exchange -> {
+
+        OutgoingTextMessage msg = new OutgoingTextMessage();
+        msg.setText("Choose one option!");
+        
+        InlineKeyboardButton buttonOptionOneI = InlineKeyboardButton.builder()
+                .text("Option One - I").build();
+        
+        InlineKeyboardButton buttonOptionOneII = InlineKeyboardButton.builder()
+                .text("Option One - II").build();
+        
+        InlineKeyboardButton buttonOptionTwoI = InlineKeyboardButton.builder()
+                .text("Option Two - I").build();
+        
+        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
+                .keyboard()
+                    .addRow(Arrays.asList(buttonOptionOneI, buttonOptionOneII))
+                    .addRow(Arrays.asList(buttonOptionTwoI))
+                    .close()
+                .oneTimeKeyboard(true)
+                .build();
+        
+        msg.setReplyKeyboardMarkup(replyMarkup);
+
+        exchange.getIn().setBody(msg);
+    })
+    
.to("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L");
+---------------------------------------------------------
+
+If you want to disable it the next message must have the property 
`removeKeyboard` set on `ReplyKeyboardMarkup` object.
+
+[source,java]
+---------------------------------------------------------
+from("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L")
+    .process(exchange -> {
+
+        OutgoingTextMessage msg = new OutgoingTextMessage();
+        msg.setText("Your answer was accepted!");
+        
+        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
+                .removeKeyboard(true)
+                .build();
+        
+        msg.setReplyKeyboardMarkup(replyMarkup);
+
+        exchange.getIn().setBody(msg);
+    })
+    
.to("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L");
+---------------------------------------------------------
\ No newline at end of file
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/InlineKeyboardButton.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/InlineKeyboardButton.java
new file mode 100644
index 00000000000..f3f2b4fa9f9
--- /dev/null
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/InlineKeyboardButton.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.telegram.model;
+
+public class InlineKeyboardButton {
+
+    private String text;
+
+    public InlineKeyboardButton() {
+        
+    }
+    
+    public InlineKeyboardButton(String text) {
+
+        this.text = text;
+    }
+
+    public String getText() {
+        
+        return text;
+    }
+
+    public void setText(String text) {
+        
+        this.text = text;
+    }
+    
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("InlineKeyboardButton{");
+        sb.append("text='").append(text);
+        sb.append('}');
+        return sb.toString();
+    }        
+
+    public static Builder builder() {
+
+        return new Builder();
+    }
+
+    public static class Builder {
+
+        private String text;
+
+        public Builder text(String text) {
+
+            this.text = text;
+            return this;
+        }
+
+        public InlineKeyboardButton build() {
+            return new InlineKeyboardButton(text);
+        }
+    }
+}
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingMessage.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingMessage.java
index 060e40c8cbd..8f525e37df5 100644
--- 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingMessage.java
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingMessage.java
@@ -27,6 +27,7 @@
 
     private static final long serialVersionUID = -5958829164103569292L;
 
+    @JsonProperty("chat_id")
     protected String chatId;
 
     @JsonProperty("disable_notification")
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingTextMessage.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingTextMessage.java
index cbaf1ac39ed..0f8262e12d9 100644
--- 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingTextMessage.java
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/OutgoingTextMessage.java
@@ -32,8 +32,20 @@
 
     @JsonProperty("disable_web_page_preview")
     private Boolean disableWebPagePreview;
+    
+    @JsonProperty("reply_markup")
+    private ReplyKeyboardMarkup replyKeyboardMarkup;
 
     public OutgoingTextMessage() {
+        
+    }
+
+    public OutgoingTextMessage(String text, String parseMode, Boolean 
disableWebPagePreview, ReplyKeyboardMarkup replyKeyboardMarkup) {
+        
+        this.text = text;
+        this.parseMode = parseMode;
+        this.disableWebPagePreview = disableWebPagePreview;
+        this.replyKeyboardMarkup = replyKeyboardMarkup;
     }
 
     public String getText() {
@@ -60,12 +72,63 @@ public void setDisableWebPagePreview(Boolean 
disableWebPagePreview) {
         this.disableWebPagePreview = disableWebPagePreview;
     }
 
+    public ReplyKeyboardMarkup getReplyKeyboardMarkup() {
+        return replyKeyboardMarkup;
+    }
+
+    public void setReplyKeyboardMarkup(ReplyKeyboardMarkup 
replyKeyboardMarkup) {
+        this.replyKeyboardMarkup = replyKeyboardMarkup;
+    }
+    
+    public static Builder builder() {
+
+        return new Builder();
+    }
+
+    public static class Builder {
+
+        private String text;
+        private String parseMode;
+        private Boolean disableWebPagePreview;
+        private ReplyKeyboardMarkup replyKeyboardMarkup;
+
+        public Builder text(String text) {
+
+            this.text = text;
+            return this;
+        }
+        
+        public Builder parseMode(String parseMode) {
+
+            this.parseMode = parseMode;
+            return this;
+        }
+        
+        public Builder disableWebPagePreview(Boolean disableWebPagePreview) {
+
+            this.disableWebPagePreview = disableWebPagePreview;
+            return this;
+        }
+        
+        public Builder replyKeyboardMarkup(ReplyKeyboardMarkup 
replyKeyboardMarkup) {
+
+            this.replyKeyboardMarkup = replyKeyboardMarkup;
+            return this;
+        }        
+
+        public OutgoingTextMessage build() {
+            
+            return new OutgoingTextMessage(text, parseMode, 
disableWebPagePreview, replyKeyboardMarkup);
+        }
+    }    
+
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder("OutgoingTextMessage{");
         sb.append("text='").append(text).append('\'');
         sb.append(", parseMode='").append(parseMode).append('\'');
-        sb.append(", disableWebPagePreview=").append(disableWebPagePreview);
+        sb.append(", 
disableWebPagePreview=").append(disableWebPagePreview).append('\'');
+        sb.append(", replyKeyboardMarkup=").append(replyKeyboardMarkup);
         sb.append('}');
         sb.append(' ');
         sb.append(super.toString());
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/ReplyKeyboardMarkup.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/ReplyKeyboardMarkup.java
new file mode 100644
index 00000000000..db669848ed3
--- /dev/null
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/ReplyKeyboardMarkup.java
@@ -0,0 +1,149 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.telegram.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ReplyKeyboardMarkup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonProperty("one_time_keyboard")
+    private Boolean oneTimeKeyboard;
+    
+    @JsonProperty("remove_keyboard")
+    private Boolean removeKeyboard;
+    
+    private List<List<InlineKeyboardButton>> keyboard;
+    
+    public ReplyKeyboardMarkup() {
+        
+    }
+    
+    public ReplyKeyboardMarkup(Boolean oneTimeKeyboard, Boolean 
removeKeyboard, List<List<InlineKeyboardButton>> keyboard) {
+        this.oneTimeKeyboard = oneTimeKeyboard;
+        this.removeKeyboard = removeKeyboard;
+        this.keyboard = keyboard;
+    }
+    
+    public Boolean getOneTimeKeyboard() {
+        return oneTimeKeyboard;
+    }
+
+    public void setOneTimeKeyboard(Boolean oneTimeKeyboard) {
+        this.oneTimeKeyboard = oneTimeKeyboard;
+    }
+
+    public Boolean getRemoveKeyboard() {
+        return removeKeyboard;
+    }
+
+    public void setRemoveKeyboard(Boolean removeKeyboard) {
+        this.removeKeyboard = removeKeyboard;
+    }
+
+    public List<List<InlineKeyboardButton>> getKeyboard() {
+        return keyboard;
+    }
+
+    public void setKeyboard(List<List<InlineKeyboardButton>> keyboard) {
+        this.keyboard = keyboard;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("ReplyKeyboardMarkup{");
+        sb.append("oneTimeKeyboard='").append(oneTimeKeyboard).append('\'');
+        sb.append(", keyboard='").append(keyboard);
+        sb.append('}');
+        return sb.toString();
+    }    
+
+    public static Builder builder() {
+
+        return new Builder();
+    }
+
+    public static class Builder {
+
+        private Boolean oneTimeKeyboard;        
+        private Boolean removeKeyboard;
+        private List<List<InlineKeyboardButton>> keyboard;
+
+        public Builder oneTimeKeyboard(Boolean oneTimeKeyboard) {
+
+            this.oneTimeKeyboard = oneTimeKeyboard;
+            return this;
+        }
+        
+        public Builder removeKeyboard(Boolean removeKeyboard) {
+            
+            this.removeKeyboard = removeKeyboard;
+            return this;
+        }
+
+        public ReplyKeyboardMarkup build() {
+            
+            return new ReplyKeyboardMarkup(oneTimeKeyboard, removeKeyboard, 
keyboard);
+        }
+
+        public KeyboardBuilder keyboard() {
+            
+            return new KeyboardBuilder(this);
+        }
+        
+        public static class KeyboardBuilder {
+            
+            private Builder builder;
+            private List<List<InlineKeyboardButton>> keyboard;
+            
+            public KeyboardBuilder(Builder builder) {
+                
+                this.builder = builder;
+                this.keyboard = new ArrayList<>();
+            }
+
+            public KeyboardBuilder addRow(List<InlineKeyboardButton> 
InlineKeyboardButtons) {
+
+                keyboard.add(InlineKeyboardButtons);
+                return this;
+            }
+            
+            public KeyboardBuilder 
addOneRowByEachButton(List<InlineKeyboardButton> InlineKeyboardButtons) {
+                
+                for (Iterator<InlineKeyboardButton> iterator = 
InlineKeyboardButtons.iterator(); iterator.hasNext();) {
+                    
+                    keyboard.add(Arrays.asList(iterator.next()));
+                }
+
+                return this;
+            }
+
+            public Builder close() {
+
+                builder.keyboard = keyboard;
+                return builder;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
index 99f3ab38917..93642cf18e0 100644
--- 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
@@ -17,8 +17,8 @@
 package org.apache.camel.component.telegram.service;
 
 import java.util.List;
+
 import javax.ws.rs.Consumes;
-import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -27,6 +27,7 @@
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
+import org.apache.camel.component.telegram.model.OutgoingTextMessage;
 import org.apache.camel.component.telegram.model.UpdateResult;
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 
@@ -50,15 +51,11 @@ UpdateResult getUpdates(
 
     @POST
     @Path("/bot{authorizationToken}/sendMessage")
-    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
     void sendMessage(
             @PathParam("authorizationToken") String authorizationToken,
-            @FormParam("chat_id") String chatId,
-            @FormParam("text") String text,
-            @FormParam("parse_mode") String parseMode,
-            @FormParam("disable_web_page_preview") Boolean 
disableWebPagePreview,
-            @FormParam("disable_notification") Boolean disableNotification,
-            @FormParam("reply_to_message_id") Long replyToMessageId);
+            OutgoingTextMessage message);
 
 
     @POST
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
index 98fd0e80264..7e6e7c9701c 100644
--- 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
@@ -20,11 +20,10 @@
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
 import org.apache.camel.component.telegram.TelegramService;
 import org.apache.camel.component.telegram.model.OutgoingAudioMessage;
 import org.apache.camel.component.telegram.model.OutgoingDocumentMessage;
@@ -38,6 +37,10 @@
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
 
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
 /**
  * Adapts the {@code RestBotAPI} to the {@code TelegramService} interface.
  */
@@ -46,7 +49,7 @@
     private RestBotAPI api;
 
     public TelegramServiceRestBotAPIAdapter() {
-        this.api = JAXRSClientFactory.create(RestBotAPI.BOT_API_DEFAULT_URL, 
RestBotAPI.class, Collections.singletonList(new JacksonJsonProvider()));
+        this.api = JAXRSClientFactory.create(RestBotAPI.BOT_API_DEFAULT_URL, 
RestBotAPI.class, Collections.singletonList(providerByCustomObjectMapper()));
         
WebClient.getConfig(this.api).getHttpConduit().getClient().setAllowChunking(false);
     }
 
@@ -74,8 +77,7 @@ public void sendMessage(String authorizationToken, 
OutgoingMessage message) {
 
 
     private void sendMessage(String authorizationToken, OutgoingTextMessage 
message) {
-        api.sendMessage(authorizationToken, message.getChatId(), 
message.getText(), message.getParseMode(), message.getDisableWebPagePreview(), 
message.getDisableNotification(), message
-                .getReplyToMessageId());
+        api.sendMessage(authorizationToken, message);
     }
 
 
@@ -175,4 +177,10 @@ private Attachment buildMediaPart(String name, String 
fileNameWithExtension, byt
     private String escapeMimeName(String name) {
         return name.replace("\"", "");
     }
-}
+    
+    private JacksonJsonProvider providerByCustomObjectMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setSerializationInclusion(Include.NON_NULL);
+        return new JacksonJsonProvider(mapper);
+    }    
+}
\ No newline at end of file
diff --git 
a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java
 
b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java
index 5084e9d94f6..c7e5d9bb27a 100644
--- 
a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java
+++ 
b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramProducerMediaTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.telegram;
 
+import static org.mockito.ArgumentMatchers.eq;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -32,8 +34,6 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 
-import static org.mockito.ArgumentMatchers.eq;
-
 /**
  * Tests a producer that sends media information.
  */
@@ -170,6 +170,30 @@ public void testRouteWithText() throws Exception {
         assertEquals("Hello", captor.getValue().getText());
         assertNull(captor.getValue().getParseMode());
     }
+    
+    @Test
+    public void testRouteWithTextAndCustomKeyBoard() throws Exception {
+
+        TelegramService service = mockTelegramService();
+
+        Exchange ex = endpoint.createExchange();
+
+        OutgoingTextMessage msg = new 
OutgoingTextMessage.Builder().text("Hello").build();
+        withInlineKeyboardContainingTwoRows(msg);
+        
+        ex.getIn().setBody(msg);
+
+        context().createProducerTemplate().send(endpoint, ex);
+
+        ArgumentCaptor<OutgoingTextMessage> captor = 
ArgumentCaptor.forClass(OutgoingTextMessage.class);
+
+        Mockito.verify(service).sendMessage(eq("mock-token"), 
captor.capture());
+        assertEquals("my-id", captor.getValue().getChatId());
+        assertEquals("Hello", captor.getValue().getText());
+        assertEquals(2, 
captor.getValue().getReplyKeyboardMarkup().getKeyboard().size());
+        assertEquals(true, 
captor.getValue().getReplyKeyboardMarkup().getOneTimeKeyboard());
+        assertNull(captor.getValue().getParseMode());
+    }    
 
     @Test
     public void testRouteWithTextHtml() throws Exception {
diff --git 
a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/integration/TelegramServiceTest.java
 
b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/integration/TelegramServiceTest.java
index 9209cb5b2c2..fcd4e43cc4f 100644
--- 
a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/integration/TelegramServiceTest.java
+++ 
b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/integration/TelegramServiceTest.java
@@ -17,15 +17,18 @@
 package org.apache.camel.component.telegram.integration;
 
 import java.io.IOException;
+import java.util.Arrays;
 
 import org.apache.camel.component.telegram.TelegramParseMode;
 import org.apache.camel.component.telegram.TelegramService;
 import org.apache.camel.component.telegram.TelegramServiceProvider;
+import org.apache.camel.component.telegram.model.InlineKeyboardButton;
 import org.apache.camel.component.telegram.model.OutgoingAudioMessage;
 import org.apache.camel.component.telegram.model.OutgoingDocumentMessage;
 import org.apache.camel.component.telegram.model.OutgoingPhotoMessage;
 import org.apache.camel.component.telegram.model.OutgoingTextMessage;
 import org.apache.camel.component.telegram.model.OutgoingVideoMessage;
+import org.apache.camel.component.telegram.model.ReplyKeyboardMarkup;
 import org.apache.camel.component.telegram.model.UpdateResult;
 import org.apache.camel.component.telegram.util.TelegramTestUtil;
 import org.junit.Assert;
@@ -91,6 +94,60 @@ public void testSendMessageMarkdown() {
 
         service.sendMessage(authorizationToken, msg);
     }
+    
+    @Test
+    public void testSendMessageWithKeyboard() {
+        TelegramService service = TelegramServiceProvider.get().getService();
+        
+        OutgoingTextMessage msg = new OutgoingTextMessage();
+        msg.setChatId(chatId);
+        msg.setText("Choose one option!");
+        
+        InlineKeyboardButton buttonOptionOneI = InlineKeyboardButton.builder()
+                .text("Option One - I").build();
+        
+        InlineKeyboardButton buttonOptionOneII = InlineKeyboardButton.builder()
+                .text("Option One - II").build();
+        
+        InlineKeyboardButton buttonOptionTwoI = InlineKeyboardButton.builder()
+                .text("Option Two - I").build();
+        
+        InlineKeyboardButton buttonOptionThreeI = 
InlineKeyboardButton.builder()
+                .text("Option Three - I").build();
+        
+        InlineKeyboardButton buttonOptionThreeII = 
InlineKeyboardButton.builder()
+                .text("Option Three - II").build();
+        
+        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
+                .keyboard()
+                    .addRow(Arrays.asList(buttonOptionOneI, buttonOptionOneII))
+                    .addRow(Arrays.asList(buttonOptionTwoI))
+                    .addRow(Arrays.asList(buttonOptionThreeI, 
buttonOptionThreeII))
+                    .close()
+                .oneTimeKeyboard(true)
+                .build();
+        
+        msg.setReplyKeyboardMarkup(replyMarkup);
+        
+        service.sendMessage(authorizationToken, msg);        
+    }
+    
+    @Test
+    public void testSendMessageDisablingCustomKeyboard() {
+        TelegramService service = TelegramServiceProvider.get().getService();
+        
+        OutgoingTextMessage msg = new OutgoingTextMessage();
+        msg.setChatId(chatId);
+        msg.setText("Your answer was accepted!");
+        
+        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
+                .removeKeyboard(true)
+                .build();
+        
+        msg.setReplyKeyboardMarkup(replyMarkup);
+        
+        service.sendMessage(authorizationToken, msg);        
+    }    
 
     @Test
     public void testSendFull() {
diff --git 
a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/util/TelegramTestSupport.java
 
b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/util/TelegramTestSupport.java
index 23db461d25d..b751a5f4740 100644
--- 
a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/util/TelegramTestSupport.java
+++ 
b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/util/TelegramTestSupport.java
@@ -18,15 +18,19 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.Arrays;
 
 import org.apache.camel.component.telegram.TelegramService;
 import org.apache.camel.component.telegram.TelegramServiceProvider;
+import org.apache.camel.component.telegram.model.InlineKeyboardButton;
+import org.apache.camel.component.telegram.model.OutgoingTextMessage;
+import org.apache.camel.component.telegram.model.ReplyKeyboardMarkup;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.After;
 import org.mockito.Mockito;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 /**
  * A support test class for Telegram tests.
  */
@@ -60,6 +64,35 @@ public TelegramService mockTelegramService() {
 
         return mockService;
     }
+    
+    /**
+     * Construct an inline keyboard sample to be used with an 
OutgoingTextMessage.
+     * 
+     * @param message OutgoingTextMessage previously created
+     * @return OutgoingTextMessage set with an inline keyboard
+     */
+    public OutgoingTextMessage 
withInlineKeyboardContainingTwoRows(OutgoingTextMessage message) {
+        
+        InlineKeyboardButton buttonOptionOneI = InlineKeyboardButton.builder()
+                .text("Option One - I").build();
+        
+        InlineKeyboardButton buttonOptionOneII = InlineKeyboardButton.builder()
+                .text("Option One - II").build();
+        
+        InlineKeyboardButton buttonOptionTwoI = InlineKeyboardButton.builder()
+                .text("Option Two - I").build();
+        
+        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
+                .keyboard()
+                    .addRow(Arrays.asList(buttonOptionOneI, buttonOptionOneII))
+                    .addRow(Arrays.asList(buttonOptionTwoI))
+                    .close()
+                .oneTimeKeyboard(true)
+                .build();        
+        message.setReplyKeyboardMarkup(replyMarkup);        
+        
+        return message;
+    }
 
     /**
      * Retrieves the currently mocked {@code TelegramService}.


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> camel-telegram - Allow use of custom keyboard
> ---------------------------------------------
>
>                 Key: CAMEL-12478
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12478
>             Project: Camel
>          Issue Type: New Feature
>          Components: camel-telegram
>            Reporter: Willian Antunes
>            Assignee: Andrea Cosentino
>            Priority: Major
>              Labels: features
>             Fix For: 2.22.0
>
>         Attachments: SNAG-0180.jpg
>
>
> The component as we have nowadays does not support configuration of custom 
> keyboard, it only makes use of the standard one.
> The method [sendMessage|https://core.telegram.org/bots/api#sendmessage] has 
> the field _reply_markup_ which allow the use of 
> [ReplyKeyboardMarkup|https://core.telegram.org/bots/api#replykeyboardmarkup] 
> to customize the standard keyboard.
> Acceptance Criteria:
>  * Send message with custom keyboard to interact with the bot using its 
> buttons.
>  * Disable custom keyboard when is required during chat conversation.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to