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

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

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

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

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

Python 3.x

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

Q&A

解決済

2回答

1380閲覧

LINE@ボットが適切にreplyしない問題について

switch0805

総合スコア25

LINE Messaging API

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

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

Python 3.x

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

0グッド

0クリップ

投稿2018/06/13 05:05

編集2018/06/13 16:33

djangoを用いてLINE@ボットをheroku上で動かしています。期待する動作はなにかテキストでメッセージを送ったら同じメッセージを返すというものです。しかしそれがちゃんと動作しません。以下確認した症状などです。

1.オウム返しをそもそもしない

2.ログを見る限りテキスト自体はheroku上のbotに届いており処理はしている

3.webhookの接続確認の際Webhookが無効なHTTPステータスコードを返しました(期待されるステータスコードは200です)が帰ってくる。ログを確認したところ500番を返している模様。

以下ソースとログです。

Python

1//Djnago views.py 2 3from django.shortcuts import render 4from django.http.response import HttpResponse 5import os 6import json 7import random 8import requests 9from django.http import JsonResponse 10from django.views.generic import View 11import urllib 12REPLY_ENDPOINT = 'https://api.line.me/v2/bot/message/reply' 13 14header = { 15 "Content-Type": "application/json", 16 "Authorization": (大変恐縮ですが伏せさせていただきます) 17 } 18 19def dispose(events): 20 global header 21 print('This is dispose request') 22 for event in events: 23 reply_token = event['replyToken'] 24 event_type = event['type'] 25 user_id = event['source']['userId'] 26 response_to_talk(reply_token, event) 27 28def response_to_talk(reply_token, event): 29 global header 30 print("enter response to talk") 31 payload = { 32 "replyToken":reply_token, 33 "messages": 34 { 35 "type":"text", 36 "text": event['message']['text'] 37 } 38 39 } 40 print(payload) 41 req = requests.post(REPLY_ENDPOINT, headers=header, data=json.dumps(payload)) 42 43 44 45class ViewSet(View): 46 global header 47 http_method_names = ['get', 'post'] 48 49 def get(self, *args, **kwargs): 50 return JsonResponse({'Successfully': 'Connected!'}) 51 52 def post(self, request, *args, **kwargs): 53 dispose(json.loads(request.body.decode("utf-8"))['events']) 54 return JsonResponse({'': ''})
//heroku log --tailでとれたもの 2018-06-13T04:53:10.741071+00:00 app[web.1]: 10.41.206.209 - - [13/Jun/2018:04:53:10 +0000] "POST /callback HTTP/1.1" 200 8 "-" "LineBotWebhook/1.0" 2018-06-13T04:53:10.391842+00:00 app[web.1]: This is dispose request 2018-06-13T04:53:10.391864+00:00 app[web.1]: enter response to talk 2018-06-13T04:53:10.391873+00:00 app[web.1]: {'replyToken': 'e47767136fcd4afa82b3d52a736eb3b5', 'messages': {'type': 'text', 'text': 'ほほj'}} 2018-06-13T04:53:13.881517+00:00 app[web.1]: This is dispose request 2018-06-13T04:53:13.881529+00:00 app[web.1]: enter response to talk 2018-06-13T04:53:13.881544+00:00 app[web.1]: {'replyToken': '82bf4aa40cf145798da1aa66f20817cb', 'messages': {'type': 'text', 'text': 'cうckgkjpxycお'}} 2018-06-13T04:53:14.120924+00:00 app[web.1]: 10.41.206.209 - - [13/Jun/2018:04:53:14 +0000] "POST /callback HTTP/1.1" 200 8 "-" "LineBotWebhook/1.0" 2018-06-13T04:53:14.121747+00:00 heroku[router]: at=info method=POST path="/callback" host=metabots.herokuapp.com request_id=2526f5f1-8db7-46e6-99f2-ce938303078e fwd="203.104.146.152" dyno=web.1 connect=1ms service=241ms status=200 bytes=188 protocol=https 2018-06-13T04:54:17.320200+00:00 app[web.1]: This is dispose request 2018-06-13T04:54:17.320220+00:00 app[web.1]: enter response to talk 2018-06-13T04:54:17.320224+00:00 app[web.1]: {'replyToken': '00000000000000000000000000000000', 'messages': {'type': 'text', 'text': 'Hello, world'}} 2018-06-13T04:54:17.546120+00:00 app[web.1]: enter response to talk 2018-06-13T04:54:17.597216+00:00 heroku[router]: at=info method=POST path="/callback" host=metabots.herokuapp.com request_id=6665a3a6-e24b-4d46-b6b6-7b7ef76606b8 fwd="203.104.156.73" dyno=web.1 connect=1ms service=277ms status=500 bytes=234 protocol=https 2018-06-13T04:54:17.595865+00:00 app[web.1]: 10.136.186.78 - - [13/Jun/2018:04:54:17 +0000] "POST /callback HTTP/1.1" 500 27 "-" "LINE-Developers/0.1" 2018-06-13T05:00:02.322179+00:00 heroku[router]: at=info method=POST path="/callback" host=metabots.herokuapp.com request_id=099bf773-08e5-45f4-9c5b-ea4803fb2528 fwd="203.104.156.74" dyno=web.1 connect=0ms service=307ms status=500 bytes=234 protocol=https

足りない情報などあれば大変恐縮ですが、ご指摘いただければ幸いです。以上よろしくお願いいたします。

追記

症状の一つにrequests.post実行後の返り値が<Response 400>でした

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

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

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

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

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

guest

回答2

0

自己解決

自己解決いたしました。400番エラーというだけありPOSTするデータ形式を間違えていました。正確には

'''
payload = {
"replyToken":reply_token,
"messages":
{
"type":"text",
"text": event['message']['text']
}

}

'''

'''
payload = {
"replyToken":reply_token,
"messages":[ //変更点
{
"type":"text",
"text": event['message']['text']
}] //変更点

}

'''

に変えないとまずかったようです。

投稿2018/06/13 16:45

switch0805

総合スコア25

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

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

0

私も以前動いていたプログラムが動かなくなり困っています。

最初はLet's Encryptの証明書の期限切れかと思いましたが・・・

つい先ほど見つけたのですが、Let's Encryptによる証明書が使えなくなった可能性があります。
https://teratail.com/questions/130079

ただ、私の状況はプログラムもリクエストを受け取っていない様なので、原因が違うかも知れませんが、参考になれば幸いです。

投稿2018/06/13 16:03

sakkuntea

総合スコア8

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

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

switch0805

2018/06/13 16:20

ありがとうございます。let’s encryptは私も最初自宅環境のapacheサーバー使って実装を試みていました。 しかしそれだとLINEから弾かれるという記述があり(https://osa030.hatenablog.com/entry/2016/04/08/214939)自宅環境での実装を諦めた経緯があります(笑) herokuも内部でlet’s encrypt使っているようならそもそもLINEからJSONを貰えないかと思います。そのため多分ここではないのだろうと思う次第ですね。
sakkuntea

2018/06/18 13:55

もう解決したようですが、私の回答の追記としてもう一度回答です。 lets encryptの証明書はまだ使用できるようです。 複数立てていたサーバーを全て確認した所まだ動いている物がありましたので、 私の場合も lets encrypt が原因ではないということがわかりました。 まだlets encryot由来の証明書は使用できるようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問