如何在SendMessage中正确使用MessageEntity实现点击文本跳转URL
Telegram Bot使用MessageEntity实现可点击跳转链接失效问题
问题说明
希望通过MessageEntity实现用户点击消息文本后跳转到指定URL的效果,运行代码后仅向聊天窗口发送了「Some text」,没有出现预期可点击的「Link」文本。
错误代码示例
MessageEntity messageEntity = new MessageEntity(); messageEntity.setType("text_link"); messageEntity.setUrl("https://google.com"); messageEntity.setText("Link"); messageEntity.setOffset(0); messageEntity.setLength(0); List<MessageEntity> entities = new ArrayList<>(); entities.add(messageEntity); SendMessage message = new SendMessage(); message.setChatId(String.valueOf(textChat_id)); message.setEntities(entities); message.setText("Some text"); try { execute(message); } catch (TelegramApiException e) { e.printStackTrace(); }
问题原因与修正点
messageEntity.setText("Link")为冗余配置,text_link类型的MessageEntity不需要单独设置文本,链接关联的文本直接取自SendMessage设置的消息正文- 将
message.setText("Some text")替换为message.setText("Link"),保证发送的消息正文中存在要设置为链接的文本 setOffset(0)表示链接实体的起始位置为文本「Link」的开头,需与待标记为链接的文本在正文中的实际起始位置匹配setLength(4)表示链接实体覆盖的字符长度为「Link」的长度,原代码错误设置为0会导致实体不生效
修正后代码示例
MessageEntity messageEntity = new MessageEntity(); messageEntity.setType("text_link"); messageEntity.setUrl("https://google.com"); //messageEntity.setText("Link"); messageEntity.setOffset(0); messageEntity.setLength(4); List<MessageEntity> entities = new ArrayList<>(); entities.add(messageEntity); SendMessage message = new SendMessage(); message.setChatId(String.valueOf(textChat_id)); message.setEntities(entities); message.setText("Link"); try { execute(message); } catch (TelegramApiException e) { e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Alexander Fox
相关产品推荐
相关产品推荐

