質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

880閲覧

JavaのLINEbotについて質問

nanachannn

総合スコア10

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/01/15 23:39

編集2022/01/16 00:19

情報系の大学に通う者です。
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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/01/15 23:59

コードは画像ではなくテキストで提示しましょう 質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
nanachannn

2022/01/16 00:20

テキスト掲示の方法を教えてくださりありがとうございます。
guest

回答1

0

自己解決

SearchクラスのButton2メソッドの

Java

1Autowired

Java

1PushMessage pMsg = new PushMessage(userId, msg2); 2BotApiResponse resp = client.pushMessage(pMsg).get(); 3log.info("Sent messages: {}", resp);

を消去することで解決いたしました。

投稿2022/01/16 01:52

nanachannn

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問