Reputation: 41
I try to create Telegram bot, i'am using:
Here is my code:
API_TOKEN = 'My_Token'
WEBHOOK_HOST = 'My_ip'
WEBHOOK_PORT = 8443 # 443, 80, 88 or 8443 (port need to be 'open')
WEBHOOK_LISTEN = '0.0.0.0' # In some VPS you may need to put here the IP addr
WEBHOOK_SSL_CERT = './webhook_cert.pem' # Path to the ssl certificate
WEBHOOK_SSL_PRIV = './webhook_pkey.pem' # Path to the ssl private key
WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % (API_TOKEN)
logger = telebot.logger
telebot.logger.setLevel(logging.INFO)
bot = telebot.TeleBot(API_TOKEN)
apihelper.proxy = {'https': 'socks5://login:password@ip:port'}
app = flask.Flask(__name__)
# Empty webserver index, return nothing, just http 200
@app.route('/', methods=['GET', 'HEAD'])
def index():
return ''
# Process webhook calls
@app.route(WEBHOOK_URL_PATH, methods=['GET', 'POST'])
def webhook():
print(flask.request.headers)
if flask.request.headers.get('content-type') == 'application/json':
json_string = flask.request.get_data().decode('utf-8')
update = telebot.types.Update.de_json(json_string)
bot.process_new_updates([update])
return ''
else:
print('You NOT made it!')
flask.abort(403)
# Handle '/start' and '/help'
@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
bot.reply_to(message,
("Hi there, I am EchoBot.\n"
"I am here to echo your kind words back to you."))
# Handle all other messages
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo_message(message):
bot.reply_to(message, message.text)
# Remove webhook, it fails sometimes the set if there is a previous webhook
bot.remove_webhook()
time.sleep(0.1)
# Set webhook
bot.set_webhook(url=WEBHOOK_URL_BASE+WEBHOOK_URL_PATH,
certificate=open(WEBHOOK_SSL_CERT, 'r'))
# Start flask server
app.run(host=WEBHOOK_LISTEN,
port=WEBHOOK_PORT,
ssl_context=(WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV),
debug=True)
My program starts well, but nothing happens if i send messages via bot.
Output of the program:
* Serving Flask app "bot" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on https://0.0.0.0:8443/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 284-565-338
If i try go to https://0.0.0.0:8443/, python sends me this, and i know that it's ok:
127.0.0.1 - - [15/Jun/2018 17:12:17] "GET / HTTP/1.1" 200
But if i try go to https://my_ip/my_token/, python sends me this:
my_ip - - [15/Jun/2018 17:13:00] "GET /my_token/ HTTP/1.1" 403 -
I've created self-signed certificates. Maybe the reason of the problem is proxy using?
I took an example from https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/webhook_examples/webhook_flask_echo_bot.py
Thank you for your help!
Upvotes: 1
Views: 5737
Reputation: 73
You are sending a GET request. This can be seen in the response header GET /my_token/ HTTP/1.1
.
Try sending a POST request to https://my_ip/my_token/ with some json payload and the content-type header correctly set to application/json.
Upvotes: 1