2017-05-24 9 views
0

メッセージを送信するたびに返信されるMessengerで簡単なボットを構築しようとしました。Messengerコールバック - Python /フラスコからデータをフェッチするとき、PythonはKeyErrorを保持します:

メッセージは、これまで正常に送信されますが、ログには、それがエラーを表示し続けるされています

message_id = data['entry'][0]['messaging'][0]['message']['mid'] 
KeyError: 'message' 

私はそれが起こる理由は分からない、これは論理演算です:

import requests 
import traceback 
from flask import request 

from ...config.default import VERIFY_TOKEN, ACCESS_TOKEN 

ROOT_URL = "https://graph.facebook.com/v2.6/me/messages?access_token=" 

def reply(user_id, page_id, msg): 
    data = { 
     "sender": {"id": page_id}, 
     "recipient": {"id": user_id}, 
     "message": {"text": msg} 
    } 
    requests.post(ROOT_URL + ACCESS_TOKEN, json=data) 


def verification_handler(): 
    if request.args['hub.verify_token'] == VERIFY_TOKEN: 
     return request.args['hub.challenge'], 200 
    return "Invalid verification token" 


def handle_incoming_messages(data): 
    try: 
     # Get all data from Messenger callback - Text 
     recipient_id = data['entry'][0]['messaging'][0]['recipient']['id'] 
     sender_id = data['entry'][0]['messaging'][0]['sender']['id'] 
     timestamp = data['entry'][0]['messaging'][0]['timestamp'] 

     message_id = data['entry'][0]['messaging'][0]['message']['mid'] 
     text = data['entry'][0]['messaging'][0]['message']['text'] 

     reply(sender_id, recipient_id, text) 
    except KeyError: 
     print(traceback.format_exc()) 

    return '' 

このルートは:

from flask import Blueprint, request 

from .ops import verification_handler, handle_incoming_messages 


mod = Blueprint('messenger', __name__) 


# Route: /messenger/ 
@mod.route('/', methods=['GET']) 
def verify(): 
    """Facebook will GET request to this endpoint for verification.""" 
    return verification_handler() 


# Route: /messenger/ 
@mod.route('/', methods=['POST']) 
def handle(): 
    data = request.json 
    handle_incoming_messages(data) 

    return '' 


# Route: /messenger/hello 
@mod.route('/hello') 
def hello(): 
    return 'hello there' 
+0

情報を抽出するために、これを行いますか? –

答えて

0

私はこんにちはuは同様にウェブフック要求を投稿することができます

if keys_exist(event, ['body']): 
      event_entry=json.loads(event['body']) 
      if ((len(event_entry['entry'])>0) & (keys_exist(event_entry['entry'][0],['messaging']))): 
       messaging_event = event_entry['entry'][0]['messaging'][0] 
       if (keys_exist(messaging_event,['message'])): 
        msg_txt = messaging_event['message']['text'] 
        sender_id = messaging_event['sender']['id'] 
0

コメントを残すほどの評判がないので、ここに投稿する必要があります。 Python Wiki

Python raises a KeyError whenever a dict() object is requested (using the format a = adict[key]) and the key is not in the dictionary.

から

は、あなたの鍵 'というメッセージが' 存在していますか?

+0

メッセージが正常に送信されたために存在しなければなりません。つまり、 'text = data ['entry'] [0] ['messaging'] [0] ['message'] ['text']'また、メッセンジャーのドキュメントを参照してください:[https://developers.facebook.com](https://developers.facebook.com/docs/messenger-platform/webhook-reference/message) – rizkiaditya24

関連する問題