情報系の大学に通う者です。
JavaのLINEbotについて質問があります。
大学の仕様例に基づいてソースコードを作成しております🙇🏻♀️
実現したいこと:Callbackクラスのcase:"検索2"が呼び出された場合にのみ、SearchクラスのButton2クラスを呼び出したい。
問題点:LinebotApplicationを実行すると、何も文字を入力しなくても、実行するだけでButton2クラスが呼び出されてしまう。
何か解決法分かりましたら教えていただきたいです🙏😭
コメントアウトが多く見づらいかもしれません。すみません🙇🏻♀️
LineBotApplicationクラス
Java
1package com.example.linebot; 2 3import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; 4import org.springframework.boot.SpringApplication; 5import org.springframework.boot.autoconfigure.SpringBootApplication; 6 7@SpringBootApplication 8@LineMessageHandler 9public class LinebotApplication { 10 11 public static void main(String[] args) { 12 SpringApplication.run(LinebotApplication.class, args); 13 } 14}
Answerクラス
Java
1package com.example.linebot.replier; 2 3import com.linecorp.bot.model.event.PostbackEvent; 4import com.linecorp.bot.model.message.Message; 5import com.linecorp.bot.model.message.TextMessage; 6 7public class Answer implements Replier { 8 9 private PostbackEvent event; 10 11 public Answer(PostbackEvent event) { 12 this.event = event; 13 } 14 15 @Override 16 public Message reply() { 17 String actionLabel = this.event.getPostbackContent().getData(); 18 switch (actionLabel) { 19 case "CS": 20 return new TextMessage("以下のような検索サイトがあります"); 21 } 22 return new TextMessage("?"); 23 } 24}
Callbackクラス
Java
1package com.example.linebot; 2 3import com.example.linebot.replier.*; 4import com.linecorp.bot.client.LineBlobClient; 5import com.linecorp.bot.model.event.FollowEvent; 6import com.linecorp.bot.model.event.PostbackEvent; 7import com.linecorp.bot.model.message.Message; 8import com.linecorp.bot.spring.boot.annotation.EventMapping; 9import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; 10import org.slf4j.Logger; 11import org.slf4j.LoggerFactory; 12 13import com.linecorp.bot.model.event.message.TextMessageContent; 14import com.linecorp.bot.model.event.MessageEvent; 15 16import org.springframework.beans.factory.annotation.Autowired; 17 18@LineMessageHandler 19public class Callback { 20 21 private static final Logger log = 22 LoggerFactory.getLogger(Callback.class); 23 private LineBlobClient client; //追加3 24 25 @Autowired 26 public Callback(LineBlobClient client) { 27 this.client = client; 28 } //追加3 29 30 // フォローイベントに対応する 31 @EventMapping 32 public Message handleFollow(FollowEvent event) { 33 // 実際はこのタイミングでフォロワーのユーザIDをデータベースに格納しておくなど 34 Follow follow = new Follow(event); 35 return follow.reply(); 36 } 37 38 // 文章で話しかけられたとき(テキストメッセージのイベント)に対応する 39 @EventMapping 40 public Message handleMessage(MessageEvent<TextMessageContent> event) { 41 TextMessageContent tmc = event.getMessage(); 42 String text = tmc.getText(); 43switch (text) { 44 case "検索": 45 Search search = new Search(); 46 return search.Button(); 47 case "検索2": 48 Search search2 = new Search(); 49 return search2.Button2(); 50 default: 51 Parrot parrot = new Parrot(event); 52 return parrot.reply(); 53 } 54 } 55 56 // PostBackEventに対応する 57 @EventMapping 58 public Message handlePostBack(PostbackEvent event) { 59 Answer answer = new Answer(event); 60 return answer.reply(); 61 } 62}
Searchクラス
Java
1package com.example.linebot.replier; 2 3import com.linecorp.bot.client.LineMessagingClient; 4import com.linecorp.bot.model.PushMessage; 5import com.linecorp.bot.model.action.PostbackAction; 6import com.linecorp.bot.model.message.Message; 7import com.linecorp.bot.model.message.TemplateMessage; 8import com.linecorp.bot.model.message.TextMessage; 9import com.linecorp.bot.model.message.template.ConfirmTemplate; 10import com.linecorp.bot.model.response.BotApiResponse; 11import org.slf4j.Logger; 12import org.slf4j.LoggerFactory; 13import org.springframework.beans.factory.annotation.Autowired; 14import org.springframework.web.bind.annotation.RestController; 15 16import java.net.URI; 17 18import com.linecorp.bot.model.action.URIAction; 19 20@RestController 21public class Search { 22 23 private static final Logger log = LoggerFactory.getLogger(Search.class); 24 25 // push先のユーザID(本来は、友達登録をした瞬間にDBなどに格納しておく) 26 private String userId = "U7804359fb24710b6c35746d6c5dfca0d"; 27 28 private LineMessagingClient client; 29 30 @Autowired 31 public void Search(LineMessagingClient lineMessagingClient) { 32 this.client = lineMessagingClient; 33 } 34 35 //検索エンジンの選択ボタン 36 public Message Button() { 37 try { 38 Message msg = new TemplateMessage("検索エンジン", 39 new ConfirmTemplate("あなたが検索したいサイトは?", 40 new URIAction("Google", URI.create("https://www.google.co.jp/"), 41 new URIAction.AltUri(URI.create("https://www.google.co.jp/"))), 42 new URIAction("Yahoo!", URI.create("https://www.yahoo.co.jp/"), 43 new URIAction.AltUri(URI.create("https://www.yahoo.co.jp/"))) 44 )); 45 return msg; 46 } catch (Exception e) { 47 return new TextMessage("問題が発生しました"); 48 } 49 } 50 51 @Autowired 52 public Message Button2() { 53 try { 54 Message msg2 = new TemplateMessage("検索エンジン", 55 new ConfirmTemplate("あなたが検索したいサイトは?", 56 new URIAction("Bing", URI.create("https://www.bing.co.jp/"), 57 new URIAction.AltUri(URI.create("https://www.bing.co.jp/"))), 58 new PostbackAction("その他", "CS"))); 59 60 PushMessage pMsg = new PushMessage(userId, msg2); 61 BotApiResponse resp = client.pushMessage(pMsg).get(); 62 log.info("Sent messages: {}", resp); 63 64 return msg2; 65 } catch(Exception e) { 66 return new TextMessage("問題が発生しました"); 67 } 68 } 69}
回答1件
あなたの回答
tips
プレビュー