Daniel Carpio Robles
Para los que tienen problema de identación, es porque en la parte inferior de VSC tiene espacios: [ numero de espacios], cambienle a 2 o 4, eso les ayuda. En este caso la Carli tienen Espacios:12 por eso le deja mucha identación
En la era digital en la que vivimos, la automatización de tareas y la interacción con usuarios a través de bots se ha convertido en una práctica cada vez más común. El desarrollo de estos asistentes virtuales requiere no solo de conocimientos en programación, sino también de una integración con tecnologías de inteligencia artificial. Hoy nos adentraremos en el fascinante mundo de la creación de PlatziBot, un bot capaz de conectarse con la plataforma de inteligencia artificial OpenAI. Este proyecto, desarrollado en Python, es un ejemplo claro de cómo podemos potenciar las interacciones en aplicaciones de mensajería como Telegram. Sin más preámbulos, exploremos este emocionante proceso paso a paso.
Creación del archivo principal en Visual Studio
Antes de sumergirnos en las complejidades del código, es esencial comprender la importancia de organizar nuestro entorno de desarrollo. Visual Studio Code se destaca como una herramienta poderosa para los desarrolladores. Por lo tanto, el primer paso para construir PlatziBot es crear un nuevo archivo principal de Python, que será el corazón de nuestra aplicación de bot.
¿Cómo definir la estructura del archivo principal?
Al crear nuestro archivo en Python, empezamos con una función básica conocida como main. Esta será nuestra función principal y no recibirá parámetros. Dentro de la función main, estableceremos la base para que nuestro bot comience a operar y esté listo para recibir mensajes.
starting bot, que nos permite saber que el bot está listo.offset con un valor inicial de cero.¿Qué papel juega el bucle principal?
El bucle principal de nuestro bot radial se crea con un while true. Esto significa que el bot estará en constante ejecución, a la espera de recibir nuevos mensajes.
getUpdates, previamente definida, para consultar la información que necesitamos del usuario y del mensaje.for, iteramos sobre las actualizaciones y ajustamos el offset para obtener el update_id.Manejo de mensajes de chat
El procesamiento de los mensajes es crucial en la interacción del bot. Aquí definimos cómo PlatziBot capta y responde a los mensajes entrantes de los usuarios en Telegram.
¿Cómo capturar y responder mensajes?
Una vez que tenemos el ID de chat y el mensaje del usuario, procedemos a realizar las siguientes acciones:
Interacción con GPT de OpenAI
Tras capturar el mensaje del usuario, la siguiente fase es la conexión con OpenAI.
GPT la respuesta de la función getOpenAIResponse, pasándole como argumento el mensaje del usuario.sendMessage para enviar al usuario la respuesta generada por GPT (el modelo de OpenAI).Importancia de las librerías y llamadas a funciones
Para que nuestro bot funcione, es indispensable importar y utilizar librerías específicas.
main para ejecutar todo el proceso descrito.Crear un bot como PlatziBot puede parecer una tarea abrumadora al principio. Sin embargo, siguiendo los pasos mencionados y con el debido entendimiento de Python y las librerías implicadas, es posible desarrollar una herramienta interactuativa sumamente efectiva y personalizada. Continuemos aprendiendo juntos, y veamos cómo esta base puede evolucionar para ofrecer aún más funciones y una mejor experiencia de usuario. ¡Te espero en la siguiente clase para seguir dándole vida a nuestro PlatziBot!
Apuntes de clase
def main(): print('Starting bot..') # Imprime en la consola el mensaje "Starting bot..". offset = 0 # Inicializa una variable llamada offset con el valor 0. while True: # Inicia un bucle infinito. # Llama a nuestra función actualizadora. updates = get_updates(offset) # Llama a la función get_updates() para obtener actualizaciones de mensajes. if updates: # Verifica si hay actualizaciones de mensajes disponibles. for update in updates: # Itera sobre cada actualización de mensaje recibida. offset = update['update_id'] + 1 # Actualiza el valor de offset para evitar procesar la misma actualización nuevamente. chat_id = update["message"]["chat"]["id"] # Obtiene el identificador de chat de la actualización de mensaje actual. user_message = update["message"]["text"] # Obtiene el texto del mensaje enviado por el usuario. print(f"Received message: {user_message}") # Imprime en la consola el mensaje recibido del usuario. GPT = get_openai_response(user_message) # Llama a la función get_openai_response() para obtener una respuesta de OpenAI. send_message(chat_id, GPT) # Llama a la función send_message() para enviar la respuesta al usuario. time.sleep(1) # Pausa la ejecución del programa durante 1 segundo. if __name__ == '__main__': main() # Llama a la función main() para iniciar la ejecución del programa.
Quiero darte un pequeño tip, que quizá en este instante no sea el mejor para ti, pero verás como conforme te mueves en este mundo verás que es una buena idea.
Por más que estos sean apuntes y sea una buena intención de tu parte comentar con las líneas de código, probablemente para mayor comprensión tuya en un futuro.
Te recomiendo que NO lo hagas de esta manera. Es una "mala" práctica comentar línea a línea todo lo que haces, porque en realidad dificulta la lectura del código.
Y genera redundancia explicar lo que se puede leer con claridad.
print("hola") # Imprime hola
Pues sí efectivamente, puedo leer que imprime hola con o sin el comentario.
edad = 18 # asigna 18 a la variable edad
Mmm, es cierto, pero eso no necesita un comentario para poder entenderse.
En general, sé que esto es algo muy común que ocurre cuando estamos aprendiendo, pero si puedo darte un tip que mejore tu código y la forma en la que lo entiendes, es que leeas acerca de
Docstrings en python: https://www.programiz.com/python-programming/docstrings
def add_binary(a, b): ''' Returns the sum of two decimal numbers in binary digits. Parameters: a (int): A decimal integer b (int): Another decimal integer Returns: binary_sum (str): Binary string of the sum of a and b ''' binary_sum = bin(a+b)[2:] return binary_sum print(add_binary.__doc__)
Y créeme como desarrollador leer un código con Docstrings es la gloria.
Ventajas: te dice el tipo de dato de cada input de una función, te habla brevemente de la lógica de la función, te dice la respuesta que va a regresar e incluso te puede dar posibles errores o códigos de error.
Y un tremendo datazo, cuando estas programando y pasas el cursos sobre el nombre de la instancia de la función te da la documentación. Y créeme eso es increíble y sumamente útil.
De nuevo, espero mi mensaje no haya sido tomado de una forma ofensiva, sino por el otro lado, constructiva y esta pequeña idea te sirve de algo. Saludos :D
Daniel Carpio Robles
Para los que tienen problema de identación, es porque en la parte inferior de VSC tiene espacios: [ numero de espacios], cambienle a 2 o 4, eso les ayuda. En este caso la Carli tienen Espacios:12 por eso le deja mucha identación
Arístides Pérez Hernández
¿Cuándo debo usar la librería time aquí?
Debes implementar time.sleep() justo al final de cada iteración de tu bucle principal para crear una pausa artificial.
Si dejas que un bucle while True corra a la máxima velocidad de tu procesador, harás miles de peticiones por segundo a los servidores de Telegram. Esto provocará que su sistema de seguridad te bloquee temporalmente por exceder los límites de peticiones (Rate Limiting). Al agregar una pausa de un segundo, le das un respiro a la red, reduces drásticamente el consumo de CPU de tu servidor y mantienes una frecuencia de actualización que es lo suficientemente rápida para que el usuario sienta que el bot responde en tiempo real, pero lo suficientemente lenta para ser considerada tráfico seguro y legítimo.
Arístides Pérez Hernández
¿Qué pasa si no actualizo el offset?
Si omites la actualización del offset, tu bot entrará en un ciclo infinito de respuestas repetidas. El offset funciona como un marcador de lectura; le indica a la API de Telegram: "Ya leí hasta el mensaje X, solo envíame del X+1 en adelante".
Cuando extraes el update_id del último mensaje recibido y lo configuras para el siguiente ciclo, estás confirmando la recepción. Si este valor se queda en cero o no se actualiza, Telegram asumirá que nunca procesaste los mensajes anteriores y te los volverá a enviar en la siguiente petición. Esto no solo genera spam masivo para el usuario, sino que también agotará rápidamente tu cuota de uso en la API de OpenAI al procesar el mismo prompt cientos de veces por minuto.
Arístides Pérez Hernández
¿Cuál es la mejor forma de enviar respuestas?
La estrategia más efectiva es encapsular la lógica de envío en una función dedicada que reciba exactamente dos parámetros vitales: el chat_id y el texto de la respuesta generada por la IA.
El chat_id es como la dirección postal del usuario; sin él, Telegram no sabría a qué conversación específica entregar el mensaje. Al separar esta acción en su propia función, mantienes tu bloque principal limpio y fácil de leer. Simplemente tomas el resultado que te devolvió la API de OpenAI y se lo pasas a esta función de envío. Esta modularidad también te permite escalar el proyecto fácilmente; si mañana decides agregar botones interactivos o enviar imágenes en lugar de solo texto, solo tendrás que modificar esa función específica sin alterar el flujo principal de tu bot.
Alexander Gabriel Ruiz Unda
Se le puede enviar audio a Openai ?
Jorge Blanco
si a Wisper aunque ya es open source y puedes descargar el codigo y jugar con el