情報系の大学に通う者です。
JavaのLINEbotについて質問があります。
大学の仕様例に基づいてソースコードを作成しております🙇🏻♀️
実現したいこと:Callbackクラスのcase:"検索2"が呼び出された場合にのみ、SearchクラスのButton2クラスを呼び出したい。
問題点:LinebotApplicationを実行すると、何も文字を入力しなくても、実行するだけでButton2クラスが呼び出されてしまう。
何か解決法分かりましたら教えていただきたいです🙏😭
コメントアウトが多く見づらいかもしれません。すみません🙇🏻♀️
LineBotApplicationクラス
Java
package com.example.linebot; import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @LineMessageHandler public class LinebotApplication { public static void main(String[] args) { SpringApplication.run(LinebotApplication.class, args); } }
Answerクラス
Java
package com.example.linebot.replier; import com.linecorp.bot.model.event.PostbackEvent; import com.linecorp.bot.model.message.Message; import com.linecorp.bot.model.message.TextMessage; public class Answer implements Replier { private PostbackEvent event; public Answer(PostbackEvent event) { this.event = event; } @Override public Message reply() { String actionLabel = this.event.getPostbackContent().getData(); switch (actionLabel) { case "CS": return new TextMessage("以下のような検索サイトがあります"); } return new TextMessage("?"); } }
Callbackクラス
Java
package com.example.linebot; import com.example.linebot.replier.*; import com.linecorp.bot.client.LineBlobClient; import com.linecorp.bot.model.event.FollowEvent; import com.linecorp.bot.model.event.PostbackEvent; import com.linecorp.bot.model.message.Message; import com.linecorp.bot.spring.boot.annotation.EventMapping; import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.linecorp.bot.model.event.message.TextMessageContent; import com.linecorp.bot.model.event.MessageEvent; import org.springframework.beans.factory.annotation.Autowired; @LineMessageHandler public class Callback { private static final Logger log = LoggerFactory.getLogger(Callback.class); private LineBlobClient client; //追加3 @Autowired public Callback(LineBlobClient client) { this.client = client; } //追加3 // フォローイベントに対応する @EventMapping public Message handleFollow(FollowEvent event) { // 実際はこのタイミングでフォロワーのユーザIDをデータベースに格納しておくなど Follow follow = new Follow(event); return follow.reply(); } // 文章で話しかけられたとき(テキストメッセージのイベント)に対応する @EventMapping public Message handleMessage(MessageEvent<TextMessageContent> event) { TextMessageContent tmc = event.getMessage(); String text = tmc.getText(); switch (text) { case "検索": Search search = new Search(); return search.Button(); case "検索2": Search search2 = new Search(); return search2.Button2(); default: Parrot parrot = new Parrot(event); return parrot.reply(); } } // PostBackEventに対応する @EventMapping public Message handlePostBack(PostbackEvent event) { Answer answer = new Answer(event); return answer.reply(); } }
Searchクラス
Java
package com.example.linebot.replier; import com.linecorp.bot.client.LineMessagingClient; import com.linecorp.bot.model.PushMessage; import com.linecorp.bot.model.action.PostbackAction; import com.linecorp.bot.model.message.Message; import com.linecorp.bot.model.message.TemplateMessage; import com.linecorp.bot.model.message.TextMessage; import com.linecorp.bot.model.message.template.ConfirmTemplate; import com.linecorp.bot.model.response.BotApiResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import java.net.URI; import com.linecorp.bot.model.action.URIAction; @RestController public class Search { private static final Logger log = LoggerFactory.getLogger(Search.class); // push先のユーザID(本来は、友達登録をした瞬間にDBなどに格納しておく) private String userId = "U7804359fb24710b6c35746d6c5dfca0d"; private LineMessagingClient client; @Autowired public void Search(LineMessagingClient lineMessagingClient) { this.client = lineMessagingClient; } //検索エンジンの選択ボタン public Message Button() { try { Message msg = new TemplateMessage("検索エンジン", new ConfirmTemplate("あなたが検索したいサイトは?", new URIAction("Google", URI.create("https://www.google.co.jp/"), new URIAction.AltUri(URI.create("https://www.google.co.jp/"))), new URIAction("Yahoo!", URI.create("https://www.yahoo.co.jp/"), new URIAction.AltUri(URI.create("https://www.yahoo.co.jp/"))) )); return msg; } catch (Exception e) { return new TextMessage("問題が発生しました"); } } @Autowired public Message Button2() { try { Message msg2 = new TemplateMessage("検索エンジン", new ConfirmTemplate("あなたが検索したいサイトは?", new URIAction("Bing", URI.create("https://www.bing.co.jp/"), new URIAction.AltUri(URI.create("https://www.bing.co.jp/"))), new PostbackAction("その他", "CS"))); PushMessage pMsg = new PushMessage(userId, msg2); BotApiResponse resp = client.pushMessage(pMsg).get(); log.info("Sent messages: {}", resp); return msg2; } catch(Exception e) { return new TextMessage("問題が発生しました"); } } }
まだ回答がついていません
会員登録して回答してみよう