12/04/2017: He actualizado el tutorial a la nueva versión de la API.

Si por algo se diferencia Telegram de WhatsApp es por el afán de los creadores de experimentar con nuevas adiciones al programa que lo diferencian no sólo de su competidor más directo, sino también del resto de aplicaciones de mensajería existentes. Y para mí, una de las adiciones que más útiles me han resultado han sido sin duda los bots, estos perfiles especiales llevados por un ordenador y cuyos usos pueden ser infinitos gracias a la poderosa API que han puesto a disposición del público.

Sin embargo, en Bytelix hemos pensado que en lugar de hacer una lista de bots que podéis utilizar, podemos enseñaros directamente cómo hacer vuestro propio bot mostrándoos las bases de cómo funcionan y lo que necesitáis para hacerlos.

Requisitos

Como todo, necesitamos previamente una serie de requisitos para realizar nuestro bot, en este caso se reducen básicamente a tener un ordenador, tablet o móvil con acceso internet, aunque os recomiendo que sea un ordenador, ya que para que nuestro bot funcione tendremos que programar, y creedme que programar sin teclado físico es un tanto engorroso.

Dicho esto, ¡comencemos con lo divertido!

Qué vamos a utilizar

Para programar nuestro bot vamos a utilizar una librería de Python llamada python-telegram-bot. Aquellos que sepan de programación sabrán lo que es Python y lo que es una librería, pero para aquellos que no hayan tocado código en su vida se estarán preguntando qué es cada cosa. Bien, vamos a ello.

¿Qué es Python? Básicamente es un lenguaje de programación. Podría tirarme horas hablando sobre las bondades del lenguaje y sobre cómo es, sin embargo aburriría a más de uno y esto da para más de un artículo. Lo que debéis de saber es que es un lenguaje de programación que vamos a utilizar para indicarle a nuestro bot qué y cómo hacer las cosas. También hay otros lenguajes con los que hacer lo mismo, pero he elegido Python principalmente por la sencillez del lenguaje en sí.

¿Qué es una librería? A la hora de programar siempre nos enfocamos en resolver un problema, en nuestro caso es hacer un bot para Telegram. Una librería nos va a facilitar esto poniendo en nuestra mano una serie de procedimientos para que no nos tengamos que preocupar nosotros de ellos. Por ejemplo, en nuestro pequeño proyecto va a surgir más de una vez el ¿cómo hago para que mi bot esté atento a los comandos que le llegan? Pues esta librería nos permite hacer esto simplemente llamando a un procedimiento que la otra persona ya ha hecho y probado, de modo que sólo nos tendremos que enfocar en hacer lo que nos interesa en lugar de tener que hacer también toda la parte de interactuar con los servidores de Telegram.

Una vez hablada la parte de programación, toca hablar de dónde vamos a tener corriendo nuestro bot, ya que necesitaremos un servidor (un ordenador conectado a la red que maneje las peticiones que se le hagan al bot) donde ejecutarlo. Aquí tenemos dos opciones: podéis instalar Linux en vuestro ordenador y tenerlo encendido las 24h del día (por ejemplo, podéis seguir nuestro tutorial de cómo instalar Ubuntu) o podéis utilizar Cloud9 que nos da uno básico de forma gratuita, y es la solución que más os recomiendo.

Montando nuestro servidor con Cloud9

Primero necesitaremos una cuenta en la página, así que nos dirigimos a c9.io y pulsamos sobre Sign In en la esquina superior derecha y después sobre Sign Up, el botón verde de la esquina superior derecha de nuevo.

Ahora rellenamos los campos que nos piden y pulsamos en Create your free account. También podéis iniciar sesión con GitHub BitBucket si tenéis cuenta en alguna de las dos webs.

Cloud9

Con esto ya tendremos nuestra cuenta en la página y podremos ponernos manos a la obra. Cuando iniciemos sesión nos aparecerá un resumen de los workspaces (espacios de trabajo) que tengamos:

Cloud9

Como nos acabamos de registrar sólo tendremos Demo Project, uno que viene de ejemplo con la página y que no nos interesa, ¡así que vamos a crear el nuestro propio! Pulsamos sobre Create a new workspace, lo cual nos llevará a la página de creación de nuestro espacio de trabajo, el cual vamos a utilizar como servidor propio.

Le ponemos un nombre, una descripción y nos aseguramos de que marcamos la casilla de Private, de este modo será privado y sólo nosotros podremos acceder al código y al bot en sí. Bajo Choose a template elegimos lo que muestro en la captura, Blank. Y pulsamos sobre Create workspace:

 

Captura de pantalla 2016-05-03 a las 11.45.44

Con esto ya tendremos creado nuestro pequeño servidor y ahora nos aparecerá en la lista anterior, desde donde pulsando en Open podremos ir a nuestra zona de trabajo para empezar a programar nuestro bot.

Cloud9

Preparando la zona de trabajo para el bot

Cloud9

Tal y como lo muestro en la captura de arriba debéis ver vosotros también vuestra zona de trabajo. ¡Ya estamos más cerca!

Ahora necesitamos por un lado poner Python 3 como nuestro intérprete por defecto (podéis utilizar Python 2 también si queréis y sabéis, aunque recomiendo la versión 3), instalar la librería y ponernos a programar nuestro bot.

Así que lo primero que haremos será ejecutar estos dos comandos (uno detrás de otro) en la consola que nos aparece más abajo:

Una vez ejecutados estos comandos comprobamos que efectivamente sea Python 3 ejecutando python –version. Esto debería devolvernos Python 3.4.3 (o cualquiera que sea Python 3.x nos vale):

Cloud9

Ahora pasaremos a instalar la librería que necesitamos con este comando, justo en el mismo lugar donde hemos puesto los anteriores:

Lo cual nos mostrará lo siguiente en pantalla si todo ha salido bien:

Captura de pantalla 2016-05-03 a las 12.38.07

Y con esto ya podemos ponernos a picar código para hacer nuestro bot.

Creando el bot

Ahora que ya tenemos toda nuestra zona de trabajo hecha nos hace falta registrar el bot en los servidores de Telegram para que los usuarios puedan llegar a él e interactuar. Para ello abriremos una conversación con un bot llamado BotFather, que será el encargado de crear, modificar y eliminar los bots que nosotros creemos.

Pulsamos sobre iniciar:

BotFather

Ahora pondremos el comando /newbot para que se lance el asistente de creación de bots. Este nos pedirá una serie de datos básicos sobre nuestro bot, en primer lugar el nombre y después el apodo que queremos asignarle, el cual debe acabar en bot:

BotFather

Una vez que hayamos dado la información que nos pide nos felicitará y nos dará un código de acceso al bot para utilizar con la API. Guardadlo, pues este código lo utilizaremos más adelante para conectar la librería que nos hemos descargado con el bot.

Ahora si pulsamos sobre el link que nos ha dado podemos ver que efectivamente nuestro bot ya aparece en Telegram y que podemos utilizarlo:

Bot

Pero sin embargo no hace absolutamente nada, ¡ni siquiera tiene comandos que podamos poner! Así que vamos a cambiar eso con BotFather. Volvemos a nuestra conversación con el padre de los bots para crear un par de comandos para nuestro bot.

Enviamos el comando /setcommands, el cual nos permite establecer los comandos de nuestro bot para que se muestren en la lista. Nos preguntará el bot al que queremos cambiar los comandos, así que seleccionamos el único que tenemos:

BotFather

Y ahora viene lo divertido: establecer los comandos. Para ello sólo tendremos que mandarle una lista con los comandos que queramos en el formato que nos especifican, el cual es el siguiente:

Por ejemplo, para nuestro bot de ejemplo de Bytelix vamos a poner dos comandos: holamundo, el cual saludará al que esté usando nuestro botlogo, que mandará una foto con el logo de Bytelix:

BotFather

Con esto nuestro bot ya tendrá asignada la lista de comandos que hemos puesto, como podemos comprobar si vamos de nuevo a la conversación con nuestro bot y pulsamos en Iniciar:

Bot

Ojo: A veces en el cliente de escritorio no aparecen al principio la lista de comandos, por eso la captura que he puesto arriba está hecha desde el móvil, porque allí aparecen al instante. Así que comprobadlo mejor desde la versión móvil de Telegram.

Con esto ya tenemos la lista de comandos del bot actualizada y todo listo para ponernos a programarlo, sin embargo nos hace falta un pequeño detalle: todavía no le hemos puesto ninguna foto al bot ni una descripción, así que lo cambiamos desde BotFather. En primer lugar pondremos la nueva foto con el comando /setuserpic, seleccionando nuestro bot y después enviándole la foto que queramos poner. Para la descripción basta con poner /setabouttext, seleccionar nuestro bot y después enviarle el texto que queremos que aparezca como descripción.

Y con esto ya tendremos nuestro bot listo:

Bot

Y ahora sí, ¡vamos manos a la obra con la programación!

Programando el bot

Ahora es donde empieza la parte realmente complicada de todo el tutorial, ya que tenemos que ponernos a programar el bot utilizando Python y la librería que os he indicado antes. Como hacer una introducción a la programación ahora sería una locura, pues el tutorial se nos haría eterno, voy a explicar en el propio código mediante comentarios algunas cosas básicas de cómo funciona cada línea que escribo, de modo que aquellos que no sepan mucho de programación pero tengan nociones básicas puedan seguir el tutorial. Pero sin embargo aquellos que no tengan siquiera nociones básicas no os preocupéis, podréis copiar el código tal cual os lo pongo y modificarlo para que funcione con vuestro bot, sin embargo no seréis capaces de llevarlo mucho más allá.

Si de verdad os interesa el mundillo y queréis aprender programación tras esto: ¡felicidades! Hay miles de libros, páginas web y recursos por dónde aprender. Si os interesa en especial Python podéis utilizar este tutorial interactivo online que han desarrollado los chicos de Codecademy que os explicará lo básico de la programación y de Python de una forma muy entretenida.

Dicho esto, ¡vamos manos a la obra! Vamos a crear el archivo donde pondremos el código de nuestro bot en Cloud9, para ello haremos click derecho sobre el nombre de nuestro workspace en la columna de la izquierda y pulsaremos sobre New file:

Cloud9

Le ponemos un nombre acabado en .py (en mi caso bot.py), pulsamos intro y damos doble click sobre él, lo cual nos abrirá un editor de código a la derecha vacío donde podremos empezar a escribir nuestro código.

Dentro pegaremos el siguiente código, el cual tengo explicado dentro del mismo:

Este código que os he puesto más arriba no hace nada para el usuario (aún), pero sin embargo nos servirá para comprobar que el bot funciona de forma correcta, ya que ahora cuando lo encendamos cada vez que reciba un mensaje, imprimirá en la consola de Cloud9 (la misma que hemos utilizado para instalar la librería antes) el ID del chat junto con el texto que haya enviado el usuario que interactúa con el bot, así que vamos a ponerlo a prueba.

En la barra superior dentro de Cloud9 pulsamos en Run para que comience la ejecución del Bot:

Bot

Se abrirá una nueva ventana de ejecución en la cual se registrarán los mensajes de los que os hablaba. Así que probad a abrir una conversación con vuestro bot y mandadle mensajes, veréis que todo lo que le enviéis se registra en la consola de la página. ¡Todo funciona correctamente!

Bot

Así que vamos a comenzar a añadirle acciones a los comandos que definimos anteriormente. Primero pulsad sobre Stop para parar la ejecución del bot y así poder modificarlo.

Vamos a empezar añadiendo una acción para el comando holamundo que definimos anteriormente, para ello añadiremos este trozo de código justo después del listener que hemos definido anteriormente:

Y además registramos el comando holamundo en el main, justo debajo del listener:

Con este sencillo código cada vez que el usuario de nuestro bot mande el comando holamundo nuestro bot le responderá con un ¡Hola, lector de Bytelix! De modo que si iniciamos de nuevo nuestro bot y probamos a mandarle el comando funciona perfectamente:

Bot

Sin embargo nuestro comando logo aún no funciona, ¡así que vamos a solucionarlo! Para ello primero tendremos que subir la foto que queramos enviar a nuestro workspace, pulsando en File y después en Upload Local Files…

Cloud9

Pulsamos en Select Files y seleccionamos el archivo que queramos subir o directamente lo arrastramos al hueco que nos dan y comenzará a subirse. En cuanto termine, aparecerá en nuestro proyecto y ya estaremos listos para utilizarlo:

Cloud9

Ahora sólo queda definir el código que, de forma muy similar a lo último que hemos añadido, se encargará de responder al comando logo con una imagen, en nuestro caso el logo de Bytelix. Para ello os basta con añadir este código justo debajo del que hemos añadido antes:

Y al igual que antes, registramos nuestro nuevo comando al bot:

Y ahora si ejecutamos de nuevo el bot y le mandamos el comando logo, ¡magia!

Bot

Y ya tenemos nuestro bot funcionando

Ya tenéis la segunda parte disponible aquí.

Lo bueno de alojar el bot en Cloud9 es que, mientras no paremos la ejecución a mano, el bot se seguirá ejecutando aunque cerremos el navegador e incluso si apagamos nuestro ordenador, ya que todo se está ejecutando en los servidores de Cloud9.

Con esto ya tenéis una base de cómo funcionan los bots por dentro, pero por supuesto la cosa no se queda aquí, hay miles de cosas que podéis hacer, las cuales tenéis detalladas, en inglés eso sí, en la página de la librería que hemos utilizado. Podría explicarlas aquí, pero el tutorial se haría excesivamente largo y esto da para mucho más que un artículo.

¿Os animáis ahora a crear vuestro propio bot? ¿Queréis que sigamos expandiendo el tutorial? ¡Dejadnos vuestra opinión y cualquier duda en los comentarios!

Código completo del bot

Artículos relacionados

Comentarios

  • Pip

    Hola. Estoy en ese grupo de personas que tienen unas nociones de programación (de hace muchos años y no de Python) y tu tutorial me ha venido muy bien porque si no habría tardado mucho más en iniciarme o habría abandonado. No obstante, tengo muchas dudas sobre este lenguaje, la interacción con la API, etc. Ojalá continúes haciendo tutoriales como este porque, además, no se pueden encontrar en nuestro idioma por ahí. Muchas gracias y un saludo.

    • mig77angel

      Da error en mi c9:

      Traceback (most recent call last):
      File “/home/ubuntu/workspace/bot.py”, line 51, in
      main()
      File “/home/ubuntu/workspace/bot.py”, line 37, in main
      listener_handler = MessageHandler(Filters.text, listener)
      NameError: name ‘MessageHandler’ is not defined

      Que es lo que esta mal? he seguido todos los pasos…

  • Mario Zambaiti

    Hola
    Soy estudiante de ingeniería industrial y tengo nociones sobretodo de matlab y otros softwares de programación, pero en particular PYTHON no lo había usado nunca.
    Mi problema es que en uno de los primeros pasos de PYTHON (donde se declara el bot y ponemos el token) enseguida me da error de SYNTAX (foto).
    He pensado que igual como acabo de instalar PHYTON puede ser eso, otra opción es que la frase de info de mi bot tiene el simbolo $ pero me parecería raro.

    Gracias si me puedes ayudar y cuanto antes.

    Mario

    • ¡Hola! ¿Podrías ponerme una captura o al menos el error concreto en la línea donde te lo da? Es muy raro que te de Syntax Error ya que todo lo que he puesto lo comprobé antes de ponerlo en el artículo.

      ¡Saludos!

      • julian avaca

        del codigo completo sería la linea 35 porque en el mio le agregue dos linea mas

        #!/usr/bin/env python
        # -*- coding: utf-8 -*-

        y una varaible TOKEN = ’32d32d…’ mi token

        • Hola, mira lo que le he contestado a @bay122:disqus, ya que es el mismo error. Como digo, actualizaré el tutorial en los próximos días.

      • Bay122

        me ocurre el mismo error:
        Traceback (most recent call last):
        File “/home/ubuntu/workspace/bot.py”, line 28, in
        main()
        File “/home/ubuntu/workspace/bot.py”, line 20, in main
        dispatcher.addTelegramMessageHandler(listener)
        AttributeError: ‘Dispatcher’ object has no attribute ‘addTelegramMessageHandler’

        Copie el codigo directo de git y aun ocurre. La instalacion de la libreria se hizo correctamente. Así como los links simbolicos, que tambien quedaron correctamente
        Alguna idea de lo que puede estar probocandolo?

        • Hola, hace cosa de una semana cambiaron totalmente la API y el método addTelegramMessageHandler (como te indica el error) ya no está disponible, sino que ahora hay que hacer un paso extra para añadir un handler, que sería así:

          dispatcher.add_handler(CommandHandler(“start”, start_handler))

          (Por ejemplo)

          Tengo que actualizar el tutorial, que lo haré en los próximos días.

      • Bay122

        ya logre solucionarlo utilizando la forma que ejemplifican en la documentación
        primero, importo:
        from telegram.ext import MessageHandler, Filters

        defino el metodo:
        def holaMundo(bot, update, args):
        id = update.message.chat_id
        mensaje = update.message.text
        print(“ID: ” + str(id) + ” MENSAJE: ” + mensaje)
        text_caps = ‘ ‘.join(args).upper()
        bot.sendMessage(chat_id=update.message.chat_id, text=text_caps)

        y en vez de usar dispatcher.addTelegramMessageHandler(listener), coloco:

        holaMundo_handler = CommandHandler(‘holamundo’, holaMundo, pass_args=True)
        dispatcher.add_handler(holaMundo_handler)

        esto ultimo antes del:
        updater.start_polling()

        con eso funciona perfecto!

  • Manolo Pozo Blanco

    Tengo un problema con el código que has pasado. Me da un Syntax Error de la forma siguiente:

    File “/home/ubuntu/workspace/mibot.py”, line 1
    SyntaxError: Non-ASCII character ‘xc3’ in file /home/ubuntu/workspace/mibot.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

    Process exited with code: 1

    • ¡Hola! Ese error se debe a que estás ejecutando la versión 2.7 de Python en lugar de la 3. El por qué lo sé es sencillo: Python 2.7 (y versiones anteriores, por supuesto) requieren que especifiques la codificación del archivo en la parte superior de este, sin embargo Python 3 y versiones posteriores no.

      La solución es sencilla: actualiza a Python 3 tal y como digo en el post o especifica la codificación del archivo colocando esto en la primera línea antes de cualquier cosa:
      # -*- coding: UTF-8 -*-

      Cualquiera de las dos soluciones te valdrá, aunque te recomiendo actualizar a Python 3 ya que es la versión más actualizada. ¡Saludos!

      • Manolo Pozo Blanco

        Curiosamente hice lo que dijiste en el post y me marca la versión 3.4.3 de Python, por lo que no debería haber problemas. De todos modos ahora me aparece esto:

        Traceback (most recent call last):
        File “/home/ubuntu/workspace/mibot.py”, line 2, in
        import telebot # Importamos la librería
        ImportError: No module named ‘telebot’

        Process exited with code: 1

        Si tengo la versión actualizada de Python y he instalado la librería pyTelegramBotAPI correctamente, ya no entiendo que puede estar fallando.

        • Cuando instalaste pyTelegramBotAPI por medio de pip, ¿lo hiciste con pip o con pip3? Si lo hiciste con pip a secas se te instaló sólo para Python 2.7 y versiones anteriores mientras que con pip3 para Python 3 y superiores. Comprueba instalando de nuevo la librería on pip3, a ver si así no te da el problema.

          • Manolo Pozo Blanco

            Instale la librería con pip3 pero el fallo me lo sigue dando. La librería he comprobado que me aparece con pip3 list | grep pyTelegramBotAPI y me devuelve pyTelegramBotAPI (1.4.2). Todo lo de tu tutorial lo he seguido al pie de la letra y ya no sé que puede estar fallando.

          • La verdad es que es realmente raro porque debería funcionar perfectamente. Sigo pensando que debe haber algún error con las versiones de Python instaladas. ¿Si haces un python –version qué te devuelve?

          • Manolo Pozo Blanco

            Me devuelve Python 3.4.3, la librería pyTelegramBotAPI está instalada con pip3 y el código está copiado tal cual el tuyo solo que con mi token. Por todo eso no debería fallar ya que lo he revisado unas pocas veces, por lo que no sé qué más podría fallar

          • Manolo Pozo Blanco

            Ya está resuelto, era un simple error de sintaxis. Gracias por la ayuda y me disculpo por los quebraderos de cabeza que haya podido causar.

          • a gusto

            Hola Manolo,
            Podrías indicarme cuál era el error de sintaxis, por favor.
            No doy con él, gracias.

          • Tengo exactamente el mismo problema y no veo ningún error de sintaxis. ¿Podrías explicar cómo lo solucionaste?

          • ¡Hola! Ten en cuenta que justo ayer actualicé el tutorial a una nueva API y probablemente Manolo sólo haya hecho el de la anterior. Podrías decirme a mí el error e intentaría ayudarte.

          • El código lo he copiado hoy mismo desde esta web, así que no debería ser un problema de versiones. Pero allá vamos.

            Primero me daba el error: SyntaxError: Non-ASCII character ‘xc3’. Simplemente borré los comentarios y problema solucionado.

            Pero ahora me da este otro error:

            Traceback (most recent call last):
            File “/home/ubuntu/workspace/bot.py”, line 1, in
            from telegram.ext import Updater
            File “/usr/local/lib/python3.4/dist-packages/telegram/ext/__init__.py”, line 22, in
            from .dispatcher import Dispatcher
            File “/usr/local/lib/python3.4/dist-packages/telegram/ext/dispatcher.py”, line 27, in
            from queue import Empty
            ImportError: No module named queue

            Tengo Python 3.4.3 y, aunque en este post no pone nada, como me fallaba, también instalé pyTelegramBotAPI (2.0.5). Todo con pip3 por supuesto.

            ¿Se te ocurre qué puede estar pasando?

            PD: ¡Y muchas gracias!

          • Hola, me refería a Manolo, ya que el comentario es antiguo y actualicé ayer mismo el post, por tanto el código de Manolo ya no te serviría a ti y viceversa.

            El segundo error es porque no has instalado la nueva librería con la que sigo el tutorial nuevo. Necesitas ejecutar esto:

            sudo pip3 install python-telegram-bot

            Tal y como indico en el tutorial. Entonces ya no te dará errores al importar. ¡Un saludo!

          • Hola de nuevo, efectivamente ya hice eso tal y como pone en el post y sigo con el error.

  • Miquel Ginés Borràs

    Buenas! EN caso de que quisieran mandar una URL, pero oculta tras un otra palabra como link, cómo sería? Tipo en HTML link, sería posible que el bot realizara esa acción?

    • ¡Hola! Perdona la tardanza. Me parece que no es posible, ya que el encargado de resaltar los links es el propio cliente de Telegram y no funciona mediante etiquetas HTML o nada parecido. Aunque como te digo, no estoy seguro, puede ser que me equivoque.

      • Miquel Ginés Borràs

        Buenas de nuevo! Tras un poco de busqueda acabé encontrando la forma de hacerlo, así que sí es posible, se debe hacer de la siguiente forma:

        bot.send_message(cid, ‘[TEXTO A MOSTRAR](URL)’, parse_mode=’Markdown’)

        Siendo cid la variable que almacena la ID del chat en mi código, el texto entre [] es el quese mostrará como link, y el texto entre () la URL a la que apuntará.

        También es posible mostrarlo mediante formato HTML, variando el parse_mode (esto lo he leído, pero no probado), quedaría como se ve a continuación:

        bot.send_message(cid, ‘TEXTO‘, parse_mode=’HTML’)

        A todo esto se podría añadir el parámtro disable_web_page_preview=’true’ al final para deshabilitar el thumbnail de previsualización de la página web si nos interesa.

        Saludos!!

        • Vaya, pues no tenía ni idea de que la API llegaba a ser tan potente. ¡Impresionante!

          Muchas gracias por el apunte, voy a desarrollar la segunda parte del tutorial y sería interesante tener esto también 🙂

          ¡Saludos!

  • Kay Sagaragi

    a mi me da este error y no se que puede ser

    Traceback (most recent call last):

    File “/usr/lib/python3/dist-packages/urllib3/util.py”, line 144, in _validate_timeout

    float(value)

    TypeError: float() argument must be a string or a number, not ‘tuple’

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File “/home/ubuntu/workspace/Bot.py”, line 21, in

    bot.polling(none_stop=True) # E iniciamos nuestro bot para que esté atento a los mensajes

    File “/usr/local/lib/python3.4/dist-packages/telebot/__init__.py”, line 183, in polling

    self.__threaded_polling(none_stop, interval, timeout)

    File “/usr/local/lib/python3.4/dist-packages/telebot/__init__.py”, line 206, in __threaded_polling

    polling_thread.raise_exceptions()

    File “/usr/local/lib/python3.4/dist-packages/telebot/util.py”, line 72, in raise_exceptions

    six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])

    File “/usr/lib/python3/dist-packages/six.py”, line 536, in reraise

    raise value

    File “/usr/local/lib/python3.4/dist-packages/telebot/util.py”, line 53, in run

    task(*args, **kwargs)

    File “/usr/local/lib/python3.4/dist-packages/telebot/__init__.py”, line 121, in __retrieve_updates

    updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout)

    File “/usr/local/lib/python3.4/dist-packages/telebot/__init__.py”, line 91, in get_updates

    json_updates = apihelper.get_updates(self.token, offset, limit, timeout)

    File “/usr/local/lib/python3.4/dist-packages/telebot/apihelper.py”, line 137, in get_updates

    return _make_request(token, method_url, params=payload)

    File “/usr/local/lib/python3.4/dist-packages/telebot/apihelper.py”, line 32, in _make_request

    result = requests.request(method, request_url, params=params, files=files, timeout=(CONNECT_TIMEOUT, read_timeout))

    File “/usr/lib/python3/dist-packages/requests/api.py”, line 44, in request

    return session.request(method=method, url=url, **kwargs)

    File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 455, in request

    resp = self.send(prep, **send_kwargs)

    File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 558, in send

    r = adapter.send(request, **kwargs)

    File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 316, in send

    timeout = TimeoutSauce(connect=timeout, read=timeout)

    File “/usr/lib/python3/dist-packages/urllib3/util.py”, line 116, in __init__

    self._connect = self._validate_timeout(connect, ‘connect’)

    File “/usr/lib/python3/dist-packages/urllib3/util.py”, line 147, in _validate_timeout

    “int or float.” % (name, value))

    ValueError: Timeout value connect was (3.5, 30), but it must be an int or float.

    ————————————————————————-
    igual y si no se instalo de lo telebot

    solo salio esto

    kaysagaragi:~/workspace $ sudo pip3 install pyTelegramBotAPI

    Downloading/unpacking pyTelegramBotAPI

    Downloading pyTelegramBotAPI-2.0.1.tar.gz

    Running setup.py (path:/tmp/pip_build_root/pyTelegramBotAPI/setup.py) egg_info for package pyTelegramBotAPI

    Requirement already satisfied (use –upgrade to upgrade): requests in /usr/lib/python3/dist-packages (from pyTelegramBotAPI)

    Requirement already satisfied (use –upgrade to upgrade): six in /usr/lib/python3/dist-packages (from pyTelegramBotAPI)

    Installing collected packages: pyTelegramBotAPI

    Running setup.py install for pyTelegramBotAPI

    Successfully installed pyTelegramBotAPI

    Cleaning up…

    ——————————————————————————–
    si me podrías ayudar por favor

    • a gusto

      a mi me está dando el mismo error que a Kay con runner python 3, y que a Manolo Pozo si uso Puthon 2 runner.
      Por favor, help!!

  • Kay Sagaragi

    pregunta sabes como hacer para que en el c9.io se quede corriendo el bot si cierro la pagina se apaga el bot, se supongia que no pasaba eso o tengo que volverlo publico?

    • ¡Hola! Por defecto Cloud9 queda tu bot corriendo. No recuerdo si era durante 5 días y luego se suspendía y tenías que volver a entrar, pero era algo así. Al menos esa era el comportamiento cuando escribí el tutorial, hace tiempo que no entro de todos modos.

  • julian avaca

    Hola excelente tutorial, tengo un problema cuando lo ejecuto, estoy usando ubuntu 14.04, python 3.4.3, me dice el siguiente ERROR:

    Traceback (most recent call last):

    File “miBot.py”, line 50, in

    main()

    File “miBot.py”, line 37, in main

    dispatcher.addTelegramMessageHandler(listener)

    AttributeError: ‘Dispatcher’ object has no attribute ‘addTelegramMessageHandler’

    ¿alguien me podria audar?

    • Hola, tal y como le he contestado a @bay122 y a @julianavaca:disqus han cambiado la API así que tendré que actualizar el tutorial en los próximos días.

  • EnriqueB

    Hola, Estoy haciendo un grado superior en desarrollo de aplicaciones multiplataforma y durante este curso he aprendido ha programar en java. He querido aprovechar el tiempo libre que te da las vacaciones de verano y ponerme a hacer un bot de Telegram. El caso es que de python aun no se mucho y después de mezclar la explicación de este blog con la de bay122 tengo este codigo.

    from telegram.ext import MessageHandler, Filters, Updater, CommandHandler

    def start(bot, update):
    id = update.message.chat_id
    mensaje = update.message.text
    print(“ID: ” + str(id) + “MENSAJE: ” + mensaje)
    bot.sendMessage(chat_id=update.message.chat_id, text=’Bienvenido a calendarioDAM’)

    def crear(bot, update):
    id = update.message.chat_id
    mensaje = update.message.text
    print(“ID: ” + str(id) + “MENSAJE: ” + mensaje)
    bot.sendMessage(chat_id=update.message.chat_id, text=’Creando el bot’)

    def main():
    updater = Updater(TOKEN)

    dispatcher = updater.dispatcher

    start_handler = CommandHandler(‘start’, start, pass_args=True)
    dispatcher.add_handler(start_handler)

    crear_handler = CommandHandler(‘crear’, crear, pass_args=True)
    dispatcher.add_handler(crear_handler)

    updater.start_polling()
    updater.idle()

    if __name__ == ‘__main__’:
    main()

    Pero cuando lo intento ejecutar para ver si los mensajes que le envió al bot salen en la consola me da un error que es el siguiente:

    Traceback (most recent call last):
    File “/home/ubuntu/workspace/botCalendario.py”, line 1, in
    from telegram.ext import MessageHandler, Filters, Updater, CommandHandler
    File “/usr/local/lib/python3.4/dist-packages/telegram/ext/__init__.py”, line 21, in
    from .dispatcher import Dispatcher
    File “/usr/local/lib/python3.4/dist-packages/telegram/ext/dispatcher.py”, line 26, in
    from queue import Empty
    ImportError: No module named queue

    y no tengo ni idea de porque sale si creo que he seguido los pasos adecuadamente. Asi que si alguien que sepa algo mas que yo me puede echar una mano lo agradeceria 🙂
    un saludo!

  • Evans Momo

    he intentado varias veces crear mi cuenta de cloud9 pero siempre me bota la tarjeta, no me la acepta. sabes por qué hace eso?

    • ¡Hola! ¿En qué momento requieres de la tarjeta para crear tu cuenta? ¡No deberían pedírtela!

      • Albertaro

        despues de confirmas los datos aportados sale que debes colocar los datos de tu tarjeta de credito y si no colocas eso no puedes crearte la cuenta, estoy atascado pro que no me puedo crear una cuenta en esa pagina

  • Jhon Billy Caminero

    Hola Bro, …al copiar y pegar el script tal cuál, me pide declarar el tipo de texto (pep-0263) cómo lo hago? alguna otra solución?

    https://uploads.disquscdn.com/images/81ae30327f4402e7d256cc6ac5aef235ee2c77521815026de3c4d1f463f01eb7.png

  • Carlos Daniel Trejos Angulo

    Tengo una pregunta… A como existe un add_handler(Handler(“palabra”, funcion)), debería existir un remove_handler(Handler(“palabra”, funcion)), de ser así ¿Cómo se usa? Lo he intentado implementar en un código que tengo, pero no funciona 🙁

    ¡Saludos!