diff --git a/examples/serverless/azure_functions b/examples/serverless/azure_functions new file mode 100644 index 0000000..df90e6c --- /dev/null +++ b/examples/serverless/azure_functions @@ -0,0 +1,69 @@ +# Using Azure Functions for serverless bots. +# (Thanks to twitter.com/masyan for the idea) + +# By default the Azure Functions url is https://.../api/HttpTrigger for HttpTrigger type. +# In this example we will use clear webhook url without /api/ -> https://.../HttpTrigger. +# Also we set "authLevel": "anonymous". + +# For HttpTrigger type set "route" and "authLevel" in functions.json +# { +# "bindings": [ +# ... +# "authLevel": "anonymous" +# "route": "HttpTrigger" +# ] +# } + +# To avoid using /api/ in url set "routePrefix":"" in host.json +# { +# ... +# "extensions": { +# "http": { +# "routePrefix": "" +# } +# } +# } + +import logging + +import azure.functions as func +import telebot +from telebot import apihelper, types + +logger = telebot.logger +telebot.logger.setLevel(logging.DEBUG) + +# Set bot token +TOKEN = '' + +# Uncomment this for using proxy for request +# PROXY = '' +# apihelper.proxy = {'https': PROXY} + +# Set WEBHOOK as your Azure Functions url (https://...azurewebsites.net/HttpTrigger) +WEBHOOK = '' + +bot = telebot.TeleBot(TOKEN) + +@bot.message_handler(commands=['start']) +def start(message): + bot.reply_to(message, 'Hello, ' + message.from_user.first_name) + +@bot.message_handler(func=lambda message: True, content_types=['text']) +def echo_message(message): + bot.reply_to(message, message.text) + +# To avoid "error 429 too many request" set webhook only once. Or use time.sleep(1). +def main(req: func.HttpRequest) -> func.HttpResponse: + bot.set_webhook(url=WEBHOOK) + request_body_dict = req.get_json() + update = telebot.types.Update.de_json(request_body_dict) + bot.process_new_messages([update.message]) + return func.HttpResponse(body='', status_code=200) + +# Sometimes "requests" version is important. +# azure-functions==1.0.4 +# PySocks==1.7.1 +# pyTelegramBotAPI==3.6.6 +# requests==2.10.0 +