Как научить бота telegram подключаться к api rest моего приложения + Java + SpringBoot? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть работающее приложение с базой данных. У меня есть API отдыха, к которому я подключаюсь и получаю данные или редактирую. Я создал бот-телеграмму, но он может отвечать только на сообщения.

@Component
public class Bot extends TelegramLongPollingBot {

    Logger logger = LoggerFactory.getLogger(Bot.class);

    private static String ERR_MESS_SEND = "Failed to send a message: ";

    private static String ERR_MESS_SEND_USER ="Failed to send a message form method sendTextMessaged(): ";


    @Value("${bot.username}")
    String botUsername;


    @Value("${bot.token}")
    String botToken;

    final private GreetingSendService greetingSendService;

    private ManageCommands manageCommands;

    private ButtonService buttonService;

    @Autowired
    public Bot(GreetingSendService greetingSendService,
               ManageCommands manageCommands,
               ButtonService buttonService) {
        this.greetingSendService = greetingSendService;
        this.manageCommands = manageCommands;
        this.buttonService = buttonService;
    }


    /**
     * For receiving messages.
     * the method is processing messages that was received.
     * isValidMessage - the check :  is a message and is it a text?
     * inMessage - is getting an object of input message
     * outMessage - is making an object of output message
     * outMessage.setChatId(chatIdFromInMess) - Set the chat ID, where you want
     * to send a message-this is the chat, where this message came from
     *
     * @param update - It is a message from user.
     */
    @Override
    public void onUpdateReceived(Update update) {

      //  parseReceivedMessage(update);

        sendMess(update);

    }
..............

Здесь вы можете передавать слова, но только без пробелов. в ответ я получаю JSON. Этого недостаточно.

   /*Here is obtained the stream data that was gotten from rest-api*/
    private String obtainStreamDataFromResponse(String message){
        // URL url = new URL("http://api.openweathermap.org/data/2.5/weather?q=" + message + "&units=metric&appid=6fff53a641b9b9a799cfd6b079f5cd4e");
        URL url = null;

        try {
            url = new URL("http://localhost:8080/api/city/" + message);
        } catch (MalformedURLException e) {
            logger.info(ERR_GET_API, e);

        }

        Scanner in = null;
        try {

            in = new Scanner((InputStream) url.getContent());
        } catch (IOException e) {

            logger.info( ERR_PARSE_RESPONSE, e);
        }

        StringBuilder result = new StringBuilder();

        while (in.hasNext()) {
            result.append(in.nextLine());
        }


        return result.toString();
    }

вот остальные api


  @GetMapping("name/{town:[A-Za-z-.]+]}")
    public NameDto getDataAboutName(@PathVariable String name) {
        return targetReadService.readEntry(name);

    }

  @PostMapping("create")
    public ResponseEntity<Object> create(@RequestBody NameDto dto) {

        this.createTargetService.createEntry(dto);

        return ResponseEntity.ok(HttpStatus.OK);
    }

И как я могу настроить свое приложение так, чтобы оно позволяло боту не только запрашивать данные, но и удалятьи редактировать, подключив к RSET api?

...