mirror of
https://github.com/KevinMidboe/Spotify-Bot.git
synced 2025-10-29 18:00:15 +00:00
Added the files from the tutorial
This commit is contained in:
94
app.py
Normal file
94
app.py
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from flask import Flask, request
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/', methods=['GET'])
|
||||||
|
def verify():
|
||||||
|
# when the endpoint is registered as a webhook, it must echo back
|
||||||
|
# the 'hub.challenge' value it receives in the query arguments
|
||||||
|
if request.args.get("hub.mode") == "subscribe" and request.args.get("hub.challenge"):
|
||||||
|
if not request.args.get("hub.verify_token") == os.environ["VERIFY_TOKEN"]:
|
||||||
|
return "Verification token mismatch", 403
|
||||||
|
return request.args["hub.challenge"], 200
|
||||||
|
|
||||||
|
return "Hello world", 200
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/', methods=['POST'])
|
||||||
|
def webhook():
|
||||||
|
|
||||||
|
# endpoint for processing incoming messaging events
|
||||||
|
|
||||||
|
data = request.get_json()
|
||||||
|
log(data) # you may not want to log every incoming message in production, but it's good for testing
|
||||||
|
|
||||||
|
if data["object"] == "page":
|
||||||
|
|
||||||
|
for entry in data["entry"]:
|
||||||
|
for messaging_event in entry["messaging"]:
|
||||||
|
|
||||||
|
if messaging_event.get("message"): # someone sent us a message
|
||||||
|
|
||||||
|
sender_id = messaging_event["sender"]["id"] # the facebook ID of the person sending you the message
|
||||||
|
recipient_id = messaging_event["recipient"]["id"] # the recipient's ID, which should be your page's facebook ID
|
||||||
|
message_text = messaging_event["message"]["text"] # the message's text
|
||||||
|
|
||||||
|
send_message(sender_id, "roger that!")
|
||||||
|
|
||||||
|
if messaging_event.get("delivery"): # delivery confirmation
|
||||||
|
pass
|
||||||
|
|
||||||
|
if messaging_event.get("optin"): # optin confirmation
|
||||||
|
pass
|
||||||
|
|
||||||
|
if messaging_event.get("postback"): # user clicked/tapped "postback" button in earlier message
|
||||||
|
pass
|
||||||
|
|
||||||
|
return "ok", 200
|
||||||
|
|
||||||
|
|
||||||
|
def send_message(recipient_id, message_text):
|
||||||
|
|
||||||
|
log("sending message to {recipient}: {text}".format(recipient=recipient_id, text=message_text))
|
||||||
|
|
||||||
|
params = {
|
||||||
|
"access_token": os.environ["PAGE_ACCESS_TOKEN"]
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
data = json.dumps({
|
||||||
|
"recipient": {
|
||||||
|
"id": recipient_id
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"text": message_text
|
||||||
|
}
|
||||||
|
})
|
||||||
|
r = requests.post("https://graph.facebook.com/v2.6/me/messages", params=params, headers=headers, data=data)
|
||||||
|
if r.status_code != 200:
|
||||||
|
log(r.status_code)
|
||||||
|
log(r.text)
|
||||||
|
|
||||||
|
|
||||||
|
def log(msg, *args, **kwargs): # simple wrapper for logging to stdout on heroku
|
||||||
|
try:
|
||||||
|
if type(msg) is dict:
|
||||||
|
msg = json.dumps(msg)
|
||||||
|
else:
|
||||||
|
msg = unicode(msg).format(*args, **kwargs)
|
||||||
|
print u"{}: {}".format(datetime.now(), msg)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
pass # squash logging errors in case of non-ascii text
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(debug=True)
|
||||||
16
readme.md
Normal file
16
readme.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Facebook Messenger Bot
|
||||||
|
This is a simple python template that uses Flask to build a webhook for Facebook's Messenger Bot API.
|
||||||
|
|
||||||
|
Read more in my [tutorial that uses this repository](https://blog.hartleybrody.com/fb-messenger-bot/).
|
||||||
|
|
||||||
|
*New:* [Check out my Facebook Messenger Bot Course](https://facebook-messenger-bot.teachable.com/p/facebook-messenger-bot/). It walks you through the process of getting this bot hosted on heroku step-by-step, and also unlocks all the content that's hidden in this repo's branches.
|
||||||
|
|
||||||
|
## "Callback verification failed"
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The #1 error that gets reported in issues is that facebook returns an error message (like above) when trying to add the heroku endpoint to your facebook chat application.
|
||||||
|
|
||||||
|
Our flask application intentionally returns a 403 Forbidden error if the token that facebook sends doesn't match the token you set using the heroku configuration variables.
|
||||||
|
|
||||||
|
If you're getting this error, it likely means that you didn't set your heroku config values properly. Run `heroku config` from the command line within your application and verify that there's a key called `VERIFY_TOKEN` that has been set, and that it's set to the same value as what you've typed into the window on facebook.
|
||||||
9
requirements.txt
Normal file
9
requirements.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Flask==0.11.1
|
||||||
|
Jinja2==2.8
|
||||||
|
MarkupSafe==0.23
|
||||||
|
Werkzeug==0.11.10
|
||||||
|
click==6.6
|
||||||
|
gunicorn==19.6.0
|
||||||
|
itsdangerous==0.24
|
||||||
|
requests==2.10.0
|
||||||
|
wsgiref==0.1.2
|
||||||
1
runtime.txt
Normal file
1
runtime.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
python-2.7.14
|
||||||
Reference in New Issue
Block a user