onopon / spotto_league

SPOTTOのリーグ戦システム
0 stars 0 forks source link

line botの上限数が実質28回だった #56

Open onopon opened 3 years ago

onopon commented 3 years ago

LINE botの衝撃の事実 無料で1ヶ月1000回無料で飛ばせると思ってたけど、実は1000回ではなく1000人に周知したら終わる状況だった。 SPOTTOはぽのちゃんを除き35人いるので、1回の通知で35人に周知したことになっていて、実質月に28回しか通知飛ばせない状況でした^q^

image

これの原因は、締め切りの近い練習会を発言しようとしたタイミングで、今月967回周知したことになっていて、

967 + 35 > 1000 となってしまうためプッシュ通知が行われなかった模様^q^

6月からは、 1000 / 35 = 28.57... となるので実質28回push通知送ったら終わりとなってしまう。

ので、リプライで通知するようにするしかなさそう。

onopon commented 3 years ago

ログ

6694 2021-05-29 21:09:26.700516 magu Traceback (most recent call last):
6695   File "/home/users/2/cocotte.jp-pentoile/.local/lib/python3.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
6696     rv = self.dispatch_request()
6697   File "/home/users/2/cocotte.jp-pentoile/.local/lib/python3.7/site-packages/flask/app.py", line 1598, in dispatch_request
6698     return self.view_functions[rule.endpoint](**req.view_args)
6699   File "/home/users/2/cocotte.jp-pentoile/.local/lib/python3.7/site-packages/flask_login/utils.py", line 272, in decorated_view
6700     return func(*args, **kwargs)
6701   File "/home/users/2/cocotte.jp-pentoile/web/spotto_league/application.py", line 188, in admin_league_finish
6702     return PostAdminLeagueFinishController().render(request, league_id=league_id)
6703   File "/home/users/2/cocotte.jp-pentoile/web/spotto_league/spotto_league/controllers/base_controller.py", line 60, in render
6704     return loop.run_until_complete(self.get_layout(request, **kwargs))
6705   File "/usr/local/python/3.7/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
6706     return future.result()
6707   File "/usr/local/python/3.7/lib/python3.7/asyncio/coroutines.py", line 120, in coro
6708     res = func(*args, **kw)
6709   File "/home/users/2/cocotte.jp-pentoile/web/spotto_league/spotto_league/controllers/admin/league/post_league_finish_controller.py", line 70, in get_layout
6710     PonnoBot.push_about_finished_league(self._league.id)
6711   File "/home/users/2/cocotte.jp-pentoile/web/spotto_league/ponno_linebot/ponno_bot.py", line 42, in push_about_finished_league
6712     LineBotApi(settings.LINE_BOT_CHANNEL_ACCESS_TOKEN).push_message(channel, message)
6713   File "/home/users/2/cocotte.jp-pentoile/.local/lib/python3.7/site-packages/linebot/api.py", line 148, in push_message
6714     '/v2/bot/message/push', data=json.dumps(data), timeout=timeout
6715   File "/home/users/2/cocotte.jp-pentoile/.local/lib/python3.7/site-packages/linebot/api.py", line 1269, in _post
6716     self.__check_error(response)
6717   File "/home/users/2/cocotte.jp-pentoile/.local/lib/python3.7/site-packages/linebot/api.py", line 1310, in __check_error
6718     error=Error.new_from_json_dict(response.json)
6719 linebot.exceptions.LineBotApiError: LineBotApiError: status_code=429, request_id=fb57cf23-cb9d-4d17-9901-37da6b556552, error_response={"details": [], "message": "You have reached your monthly limit."     }, headers={'Server': 'openresty', 'Date': 'Sat, 29 May 2021 12:09:26 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'x-line-request-id': 'fb57c     f23-cb9d-4d17-9901-37da6b556552', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'cache-control': 'no-cache, no-store, max-age=0, must-revalidate', 'pragma': 'no-cache', 'e     xpires': '0', 'x-frame-options': 'DENY'}
onopon commented 3 years ago

Line Notify という仕組みを発見。 https://notify-bot.line.me/doc/ja/

AUTH認証にてアクセストークンを取得するまでの手順(メモ)

https://notify-bot.line.me/oauth/authorize?response_type=code&client_id=XXXX&redirect_uri=XXXX&scope=notify&state=XXXX

client_id, redirect_uri, state を入力し、上記のurlにweb上でアクセスし、通知を行いたいグループを選択し進む。

設定したリダイレクトurlにリダイレクトすると

https://redirect_uri/?code=XXXX&state=XXXX

のように、codeを取得できるので、それをメモする。

その後、

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=authorization_code&code=XXXX&redirect_uri=XXXX&client_id=XXXX&client_secret=XXXX' https://notify-bot.line.me/oauth/token

の code, redirect_uri, client_id, client_secret を入力し、curlを叩く。

{"status":200,"message":"access_token is issued","access_token":"XXXX"}

status: 200 であれば、アクセストークンが取得できる。

onopon commented 3 years ago

擬似LINE API ERROR

from linebot.models.error import Error
raise LineBotApiError(429, {}, error = Error(message = "You have reached your monthly limit."))
onopon commented 2 years ago

line notify確認URL(clientIDとか) https://notify-bot.line.me/my/services/