MotoJapan's Tech-Memo

技術めも

【Messaging API #2】reply_messageで「request body has 1 error」が起きる (python)

herokuにdeployしていた下のコード。
ちゃんと動いていたはずのreply_messageがいつからかErrorを吐いて終了していたので覚書。

変な文字列でも入れたのかと切り分けを進めたが、結果的には、contentsの文字列が長すぎた模様。

line_bot_api.reply_message(
    event.reply_token,
    TextSendMessage(text=contents)
)

大体、マルチバイト含んで2000文字近く送ろうとした時に落ちてる。

OK NG
len(contents) 1709 2008
len(contents.encode(utf-8)) 2401 3092

headerとかもろもろのオーバーヘッドがあるので、具体的によくわかないけど目安がてら。


対策は下記2つ。

1. contentを分けて、reply_messageを細かく送信

予想はしていましたが、結果としてもダメでした。
event.reply_tokenは、①30秒以内に、②1度のみ送信できるルールでした。

2. contentを分けて、push_messageを細かく送信

これは成功しました。

(例)

for content in contents.split('\n')
    try:
        line_bot_api.push_message(user_id, TextSendMessage(text=content))
    except LineBotApiError as e:
        print(e)

めでたしめでたし。