У меня возникают проблемы, когда я не могу понять, как именно использовать Facebook Graph Api
и Webhooks
. Я пытаюсь отправлять и читать сообщения из группового чата, частью которого я являюсь, на Facebook. Я выполнил шаги по созданию приложения на Developers.Facebook.com и прошел проверку приложения на pages_messages
. Я сгенерировал Page_access_token
и подписал свое приложение на мою страницу fb. Я предполагаю, что мне нужно дать Facebook фактические page_access_token
и app_secret
где-то в моем коде, но учебник, который я использовал, ничего не говорит об этом. Я использую django и следующий код для получения веб-крючка из Facebook с помощью учебника, который я нашел в Интернете:
class botView(generic.View):
def get(self, request, *args, **kwargs):
if self.request.GET['hub.verify_token'] == VERIFY_TOKEN:
print(self.request.GET['hub.challenge'])
return HttpResponse(self.request.GET['hub.challenge'], 200)
else:
return HttpResponse('Error, invalid token')
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return generic.View.dispatch(self, request, *args, **kwargs)
# Post function to handle Facebook messages
def post(self, request, *args, **kwargs):
# Converts the text payload into a python dictionary
incoming_message = json.loads(self.request.body.decode('utf-8'))
print(incoming_message)
# Facebook recommends going through every entry since they might send
# multiple messages in a single call during high load
for entry in incoming_message['entry']:
for message in entry:
pass
# Check to make sure the received call is a message call
# This might be delivery, optin, postback for other events
if 'message' in message:
# Print the message to the terminal
pprint(message)
# Assuming the sender only sends text. Non-text messages like stickers, audio, pictures
# are sent as attachments and must be handled accordingly.
#post_facebook_message(message['sender']['id'], message['message']['text'])
return HttpResponse("ok", 200)
Вот ссылка на учебник
https://abhaykashyap.com/blog/post/tutorial-how-build-facebook-messenger-bot-using-django-ngrok
Я могу отправлять тесты с веб-крючков на мой сервер и получать ответы, подобные следующим:
{'entry': [{'time': 1535460973, 'id': '0', 'changed_fields': ['message_sends'], 'uid': '0'}], 'object': 'user'
Но тот же самый ответ, который выдает webhook, выглядит так:
{
"field": "message_sends",
"value": {
"id": "mid.86753098675309:uuddlrlrbas",
"message": "I'm changing jobs for the next 4+ years. Wanna be CEO?",
"from": {
"id": 44444444,
"name": "Lizard Zuckerman",
"email": "zuck@tehfacebook.com"
},
"to": {
"data": [
{
"id": 20061985,
"name": "Bobbert Cruz",
"email": "bobbert@tehfacebook.com"
}
]
}
}
}
Ngrok действительно показывает, что было успешное соединение, когда я получаю тесты, но я ничего не получаю, когда я получаю сообщения на своей странице, даже если я на него подписан.