Python
linebot

line-bot-sdk-pythonでLineBotのサンプルを動かす。

More than 1 year has passed since last update.

Linebotのpythonの公式のSDKでLineBotを動かそうと思った時に少しうまくいかなかったので、動かすためにやったことを書きます。

サンプルとしてhttps://github.com/line/line-bot-sdk-python/blob/master/examples/flask-echo/app.pyを使用しました。

サンプルでLINE_CHANNEL_SECRETとLINE_CHANNEL_ACCESS_TOKENは
環境変数として設定し利用しているので、サンプルの通り

$ export LINE_CHANNEL_SECRET=YOUR_LINE_CHANNEL_SECRET
$ export LINE_CHANNEL_ACCESS_TOKEN=YOUR_LINE_CHANNEL_ACCESS_TOKEN

$ pip install -r requirements.txt

を実行します。
環境変数が正しく設定されているかは

$env

で確認できます。そしてapp.pyを実行すると

$ python app.py
 * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)

このようになるので
起動したままターミナルの別ウィンドウで

$ ngrok http 8000

を実行しhttpsの方のURLをLINEdeveloperページのWebhook URLに貼り付けます。この時、そのまま貼り付けるのではなく

https://xxxxxxxx.ngrok.io/callback

のように/callbackをつけます。
しかしこのままVERIFYを押しても

A http status of the response was '500 INTERNAL SERVER ERROR'.

と出てしまい。Success.が出ません。
なので、一度app.pyを落としていただき(ngrokの方はそのまま)
app.pyの69~72行目の

 # line_bot_api.reply_message(
        #     event.reply_token,
        #     TextSendMessage(text=event.message.text)
        # )

この部分を一時的にコメントアウトします。
そしてLineDeveloperページに戻っていただきVERIFYボタンを押すと
Success.の文字が得られます。

一度Success.になれば、先ほどコメントアウトした部分でもエラーが起きなくなり、送られてきた文をオウム返しできるbotになります。
VERIFYをまた押してしまうと先ほどの部分をもう一度コメントアウトして...の作業をやらなくちゃなので押さないようにします!