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

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

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

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

Java

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

Spring Boot

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

解決済

JavaのLINEbotについて質問

nanachannn
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プロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1回答

0評価

0クリップ

398閲覧

投稿2022/01/15 23:39

編集2022/01/16 10:52

情報系の大学に通う者です。
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("問題が発生しました"); } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2022/01/15 23:59

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

2022/01/16 00:20

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

LINE Messaging API

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

Java

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

Spring Boot

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