Por Alberto Fernández Valiente
Servicio de mensajería nacido en 2013. A mediados de 2015 habilitan el uso de chatbots mediante una API Rest.
Librería que permite construir aplicaciones con la API de chatbots de Telegram. Compatible con Python 2.7 y 3+.
Plataforma para el despliegue de servicios serverless de AWS introducida a finales de 2014. A finales de 2015 añaden soporte para Python.
Framework para Python que permite crear servicios serverless. Lanzado en enero de 2016.
$ pip install zappa
$ zappa init
$ zappa deploy dev
{
"dev": {
"aws_region": "eu-west-1",
"memory_size": 128,
"http_methods": ["GET", "POST"],
"parameter_depth": "1",
"integration_response_codes": [200],
"method_response_codes": [200],
"project_name": "<NOMBRE>",
"log_level": "INFO",
"s3_bucket": "<BUCKET>",
"app_function": "bot.app",
"remote_env_bucket": "<BUCKET>",
"remote_env_file": "config.json"
}
}
import os
import telepot
from flask import Flask, request
app = Flask(__name__)
bot = telepot.Bot(os.getenv('TELEGRAM_TOKEN'))
@app.route("/", methods=['GET', 'POST'])
def webhook():
msg = request.json
if msg:
key = telepot._find_first_key(msg, TELEGRAM_MSG_TYPES)
process_msg(msg[key])
return 'OK' # allways ack telegram msg
def process_msg(msg):
flavor = telepot.flavor(msg)
if flavor == 'callback_query':
process_callback(msg)
elif flavor == 'chat' and is_start_cmd(msg):
chat_id = msg['chat']['id']
kb = get_days_keyboard()
bot.sendMessage(chat_id, START_MSG, reply_markup=kb)
def process_callback(msg):
bot.answerCallbackQuery(msg['id']) # ack callback
chat_id = msg['from']['id']
data = msg['data'].split()
if data[0] == 'days':
kb = get_days_keyboard()
bot.sendMessage(chat_id, DAYS_MSG, reply_markup=kb)
elif data[0] == 'schedules':
process_schedules(chat_id, data[1])
elif data[0] == 'slots':
process_slots(chat_id, data[1], data[2])
Código disponible en Github