質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

3630閲覧

herokuでオウム返しするアプリを作ろうとするがエラーが発生する

yado

総合スコア24

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/08/11 07:29

以下等を大いに参考にさせて頂き、
LINEBOTを作成中です。
Python を使ってオウム返し「LINE ボット」を作ってみる

しかし、heroku側がLINE APIの環境設定を取得できないため、
ご教授願います。

Python

1# -*- coding: utf-8 -*- 2 3# Licensed under the Apache License, Version 2.0 (the "License"); you may 4# not use this file except in compliance with the License. You may obtain 5# a copy of the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations 13# under the License. 14 15import os 16import sys 17from argparse import ArgumentParser 18 19from flask import Flask, request, abort 20from linebot import ( 21 LineBotApi, WebhookHandler 22) 23from linebot.exceptions import ( 24 InvalidSignatureError 25) 26from linebot.models import ( 27 MessageEvent, TextMessage, TextSendMessage, 28) 29 30app = Flask(__name__) 31 32# get channel_secret and channel_access_token from your environment variable 33# 加工済 34channel_secret = os.getenv('channel_secret', None) 35channel_access_token = os.getenv('channel_access_token', None) 36if channel_access_token is None: 37 print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.') 38 sys.exit(1) 39if channel_secret is None: 40 print('Specify LINE_CHANNEL_SECRET as environment variable.') 41 sys.exit(1) 42 43line_bot_api = LineBotApi(channel_access_token) 44handler = WebhookHandler(channel_secret) 45 46 47@app.route("/callback", methods=['POST']) 48def callback(): 49 # get X-Line-Signature header value 50 signature = request.headers['X-Line-Signature'] 51 52 # get request body as text 53 body = request.get_data(as_text=True) 54 app.logger.info("Request body: " + body) 55 56 # handle webhook body 57 try: 58 handler.handle(body, signature) 59 except InvalidSignatureError: 60 abort(400) 61 62 return 'OK' 63 64 65@handler.add(MessageEvent, message=TextMessage) 66def message_text(event): 67 line_bot_api.reply_message( 68 event.reply_token, 69 TextSendMessage(text=event.message.text) 70 ) 71 72 73if __name__ == "__main__": 74 port = int(os.getenv('PORT', 5000)) 75 app.run(debug=True, host='0.0.0.0', port=port) 76

Procfile

1web: python app.py

runtimetxt

1python-3.6.5

requirementstxt

1Flask==1.0.2 2line-bot-sdk==1.8.0

以下、実行ログです。

log

12018-08-11T07:09:10.827984+00:00 app[api]: Scaled to web@0:Free by user user@gmail.com 22018-08-11T07:09:19.944704+00:00 app[api]: Scaled to web@1:Free by user user@gmail.com 32018-08-11T07:09:24.352115+00:00 heroku[web.1]: Starting process with command `python app.py` 42018-08-11T07:09:27.351649+00:00 heroku[web.1]: Process exited with status 1 52018-08-11T07:09:27.380863+00:00 heroku[web.1]: State changed from starting to crashed 62018-08-11T07:09:27.382379+00:00 heroku[web.1]: State changed from crashed to starting 72018-08-11T07:09:27.212414+00:00 app[web.1]: Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable. 82018-08-11T07:09:36.227684+00:00 heroku[web.1]: Starting process with command `python app.py` 92018-08-11T07:09:39.964362+00:00 heroku[web.1]: Process exited with status 1 102018-08-11T07:09:40.046458+00:00 heroku[web.1]: State changed from starting to crashed 112018-08-11T07:09:39.841881+00:00 app[web.1]: Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.

環境
Windows10
VMware
ubuntu-18.04
python 3.6.5
Flask 1.0.2
line-bot-sdk 1.8.0
git 2.17.1

どのようにすれば、channel_secret、channel_access_tokenを取得出来るようになるのでしょうか。
コードはあまり関係無いかもしれません。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

w2-yamaguchi

2018/08/11 07:39

確認ですが、参考にされている記事(Python を使ってオウム返し「LINE ボット」を作ってみる)の章「Heroku へアプリケーションをデプロイする」にある、「heroku config:set LINE_CHANNEL_SECRET=*****」などは実施済みでしょうか?
yado

2018/08/11 07:43

そのあたりはやっています。herokuのWebサイトを見る限り、Setされているのではないかと。
yado

2018/08/11 07:47

ここで10時間以上悩んでいます。認証がうまくいっていないのではないかと、herokuアプリを再度立ち上げたり、LINE APIを再発行したりしましたが、変わらず、です。
guest

回答2

0

先のコメントをもとに自分はこれだけ変更して、おうむ返しできました。

channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)

投稿2019/05/25 14:10

giro1975

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

仮設1

環境変数がセットできていない
heroku cliから確認してみましょう

$ heroku config:get LINE_CHANNEL_SECRET $ heroku config:get LINE_CHANNEL_ACCESS_TOKEN

仮設2

Pythonの言語仕様に詳しくないのであれですが
サイトだとchannel_secretが全て大文字になっているので
完全に一致してないと取得できない?
大文字にして確認してみてください

channel_secret = os.getenv('channel_secret', None) channel_access_token = os.getenv('channel_access_token', None)

投稿2018/08/13 07:57

shoya.shiraki

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yado

2018/08/14 16:41

ありがとうございます。 仮説1の方、設定出来ているみたいです。 認証が通るかどうかまでは保証していないと思いますが。 仮説2の方、第一引数は実際のchannel_secret、channel_access_tokenの値をハードコードするので 隠しております。紛らわしく、申し訳ありません。
giro1975

2019/05/25 14:08

仮説1と仮説2でずれているのではないでしょうか。 仮説1でLINE_CHANNEL_SECRET、 LINE_CHANNEL_ACCESS_TOKEN が設定されているなら、仮説2もLINE_CHANNEL_SECRET、 LINE_CHANNEL_ACCESS_TOKENで設定しないといけないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問