前提・実現したいこと
いろんなウェブページを見ながらLINEbotの作り方を調べて、上記のサービスを利用しながらまずは簡単なサンプルコードを動作させるべく環境構築を行なっております。
エラーコードが出て詰まっています…。
以下のエラーコードは、Herokuへデプロイを行った時に生じたものです。
なお、エラーメッセージやソースコードの#KEYには実際には設定されたキーが書いてあります。
発生している問題・エラーメッセージ
2019-03-16T13:22:12.766718+00:00 heroku[web.1]: State changed from crashed to starting 2019-03-16T13:22:15.842395+00:00 heroku[web.1]: Starting process with command `python main.py` 2019-03-16T13:22:18.506780+00:00 heroku[web.1]: State changed from starting to crashed 2019-03-16T13:22:18.404630+00:00 app[web.1]: Traceback (most recent call last): 2019-03-16T13:22:18.404685+00:00 app[web.1]: File "main.py", line 23, in <module> 2019-03-16T13:22:18.404835+00:00 app[web.1]: channel_secret = os.environ['264b57c401f98ec9c16f5fd36ffe4869'] 2019-03-16T13:22:18.404838+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/os.py", line 669, in __getitem__ 2019-03-16T13:22:18.405130+00:00 app[web.1]: raise KeyError(key) from None 2019-03-16T13:22:18.405136+00:00 app[web.1]: KeyError: '#KEY' 2019-03-16T13:22:18.486627+00:00 heroku[web.1]: Process exited with status 1 2019-03-16T13:22:19.000000+00:00 app[api]: Build succeeded 2019-03-16T13:24:47.313407+00:00 heroku[web.1]: State changed from crashed to starting 2019-03-16T13:24:50.984575+00:00 heroku[web.1]: Starting process with command `python main.py` 2019-03-16T13:24:54.060273+00:00 heroku[web.1]: Process exited with status 1 2019-03-16T13:24:54.085032+00:00 heroku[web.1]: State changed from starting to crashed 2019-03-16T13:24:53.968851+00:00 app[web.1]: Traceback (most recent call last): 2019-03-16T13:24:53.968917+00:00 app[web.1]: File "main.py", line 23, in <module> 2019-03-16T13:24:53.969087+00:00 app[web.1]: channel_secret = os.environ['#KEY'] 2019-03-16T13:24:53.969135+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/os.py", line 669, in __getitem__ 2019-03-16T13:24:53.969711+00:00 app[web.1]: raise KeyError(key) from None 2019-03-16T13:24:53.969767+00:00 app[web.1]: KeyError: '#KEY'
該当のソースコード
Python
1# -*- coding: utf-8 -*- 2import os 3import logging 4import sys 5from account_response import Response 6from flask import Flask, request, abort 7from linebot import ( 8 LineBotApi, WebhookHandler 9) 10from linebot.exceptions import ( 11 InvalidSignatureError 12) 13from linebot.models import ( 14 MessageEvent, TextMessage, TextSendMessage, 15) 16 17app = Flask(__name__) 18 19#インスタンス生成 20res=Response() 21 22#Herokuの変数からトークンなどを取得 23channel_secret = os.environ['#KEY'] 24channel_access_token = os.environ['#KEY'] 25if channel_secret is None: 26 print('Specify LINE_CHANNEL_SECRET as environment variable.') 27 sys.exit(1) 28if channel_access_token is None: 29 print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.') 30 sys.exit(1) 31 32line_bot_api = LineBotApi(channel_access_token) 33handler = WebhookHandler(channel_secret) 34 35#LINEからのWebhook 36@app.route("/callback", methods=['POST']) 37def callback(): 38 # リクエストヘッダーから署名検証のための値を取得 39 signature = request.headers['X-Line-Signature'] 40 41 # リクエストボディを取得 42 body = request.get_data(as_text=True) 43 app.logger.info("Request body: " + body) 44 45 # 署名を検証し、問題なければhandleに定義されている関数を呼び出す。 46 try: 47 handler.handle(body, signature) 48 except InvalidSignatureError: 49 abort(400) 50 return 'OK' 51 52#LINEでMessageEvent(普通のメッセージを送信された場合)が起こった場合 53#reply_messageの第一引数のevent.reply_tokenは、イベントの応答に用いるトークンです。 54#第二引数には、linebot.modelsに定義されている返信用のTextSendMessageオブジェクトを渡しています。 55@handler.add(MessageEvent, message=TextMessage) 56def handle_message(event): 57 #入力された内容(event.message.text)に応じて返信する 58 line_bot_api.reply_message( 59 event.reply_token, 60 TextSendMessage(text=os.environ[res.getResponse(event.message.text)]) 61 ) 62 63if __name__ == "__main__": 64 app.run(host="0.0.0.0", port=int(os.getenv("PORT", 5000))) 65
試したこと
エラーメッセージから、channel_secretキーに問題があるのかと思いLINE Developerで確認したり、ウェブページで他の人のキーの書き方などを見ましたが、直し方がわかりませんでした。
補足情報(FW/ツールのバージョンなど)
Python 3.6.8
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/19 05:48