Q&A

pythonのLinebotApiを用いたブロードキャストメッセージ送信ができない

前提・実現したいこと

herokuで動かすlinebotを作成しています. 言語はpythonです. フレームワークはflaskです. LineBotApiライブラリを使用していますが, そのなかのbroadcastのみ正常に動作しません. 他のreply_messageやpush_messageは正常に動作します.

発生している問題・エラーメッセージ

プログラムの該当箇所はこのようになっています.

@app.route("/interval")
def getSchedule():
    line_bot_api.broadcast(TextSendMessage(text = "OK"))

herokuから返ってきたエラーは以下の通りです.

app[web.1]: File "/app/main.py", line 33, in interval
app[web.1]: line_bot_api.broadcast(TextSendMessage(text = "OK"))
app[web.1]: AttributeError: 'LineBotApi' object has no attribute 'broadcast'

試したこと

試しに以下のプログラムをVScode上で実行してみたら通常通り動作しました.

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage
)

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
line_bot_api.broadcast(TextSendMessage(text = "OK"))

補足情報(FW/ツールのバージョンなど)

flask=2.0.1 line-bot-sdk=1.8.0 python=3.9.1

  • 0
  • 5
  • 381
  • twitter facebook

line_bot_apiの変数は定義されていますが、その定義内容が怪しい気がします。 知らない間に他のコードで変数の中身が書き換えられている可能性がありますので一度ソースコードを見直してみてはいかがでしょうか?

  • 0

回答ありがとうございます。 同じ場所でreply_messageやpush_messageといった関数は使えるので原因がわからないんですよね。 多分書き換えられてたらそれらも使えないと思うので...

  • 0

同じ場所でreply_messageやpush_messageといった関数は使えるので原因がわからないんですよね

これって問題の起きたソースコードではどうやって検証しましたか? そもそもAttributeErrorというのは指定したオブジェクトに存在しないメソッドを呼び出そうとしてエラーになっているわけです。一度以下の記事を見ながら確認してみてはいかがでしょうか?

https://qiita.com/VDiUZnM1hUIzKvb/items/4d18ca1d781ed6ff2b2f

それでも解決しないなら、可能な限りで問題のあるソースコードを見せてほしいです

  • 0

返信遅れてすみません。 検証方法としては、

line_bot_api.broadcast(TextSendMessage(text = "OK"))

line_bot_api.push_message(userid, TextSendMessage(text = "OK"))

と置き換えました。この場合後者は正常に動作します。

attributeerrorはggって理解してはいたのですが, broadcast()が存在しないとエラーが出る理由がわからず...

しかし、line-bot-sdkではなく. apiリファレンスを見てrequestを使ってPOSTすれば同じ動作が実現できました。 なので今後同じことで悩んでいる方はあきらめてrequestでやってもいいかも。(できる人がいたらコメントで教えてほしい)

回答していただいたKokiさんありがとうございます。

  • 0

line-bot-sdkのflaskサンプルを動かしただけですが、broadcastできました。

  • 0
Are you sure? question.vm