Escrito el 10 jul 2010

Como crear un bot en Twitter

Crear un bot en Twitter es una de las tareas más sencillas que hay y cuyos resultados pueden ser muy útiles a los usuarios. Es el típico desarrollo de piloto automático, lo pones a correr y te olvidas (Con el permiso de la API de Twitter), él se encarga de todo.

Hay 2 tipos de bots en Twitter, los que se activan al producirse un evento en el timeline público (un hashtag, una palabra, una mención,…) y los que responden a comandos enviados directamente al bot en forma de mención: @bot comando [parámetros]

En este artículo me voy a referir al segundo tipo, al de comandos, aunque con pequeñas modificaciones podríamos tener también el primero. Ojo con los bots que exploran el timeline y responden a eventos, tienen muchas papeletas para ser marcados como spam y ser eliminados por Twitter. No me voy a referir a ningún lenguaje en concreto, lo más sencillo es usar PHP pero eso es a gusto del consumidor.

Vamos a ver como podríamos crear un bot que responda a un par de peticiones sencilla, que nos diga la hora y que nos diga la fecha en la que estamos. Los usuarios para obtener la información enviarán al bot “@bot hora” y “@bot fecha” respectivamente.

Como ya he dicho antes, el bot que responde a comandos los recibe a través de menciones directas. lo primero que tenemos que hacer es comprobar la lista de menciones que recibe nuestro bot (@bot por ejemplo). Para ellos existe un método de la api que nos da las últimas menciones que recibe una cuenta Twitter: statuses/mentions

Ya tenemos las menciones de nuestro bot, pero nuestro bot no responde a todas las menciones, solo a aquellas que son directas (la mención aparece justo al principio, no en cualquier parte del tweet) y que contienen alguno de los comandos reconocidos. En nuestro ejemplo tendremos 2 comandos HORA y FECHA.

Deberemos pues aplicar 2 filtros y seleccionar solo aquellas menciones que comiencen por “@bot” y después las que a continuación especifican uno de los comandos reconocidos. Esto se consigue con un  simple parseo de las palabras del tweet. En caso de que el comando acepte parámetros también los obtendremos con el parseo usando el espacio ” ” como carácter delimitador.

Una vez tenemos una petición válida, almacenamos el nombre de usuario que envía la petición. Esto nos servirá para responderle con la información que pidió. Después, según el comando hacemos una llamada externa a un procedimiento que nos dará la información necesaria. Tomamos la información y componemos un tweet de respuesta con el siguiente formato:

@usuarioqueenviolapeticion Son las [hora actual]

Imaginemos que @fdelpozo envió “@bot hora”, el tweet de respuesta sería “@fdelpozo son las 9:24″

En el paso anterior he dicho que según el comando se hace una llamada externa que nos de la información. Para el ejemplo de la hora y la fecha al ser tan sencillos no sería necesario, pero imaginaos que nuestro bot envía el artículo más vendido del día de nuestra tienda online. Deberíamos desarrollar un procedimiento para nuestra tienda que al comprobar la fecha actual devuelva el artículo más vendido. El bot recogería este dato y se lo enviaría después al usuario en twitter:

El ejemplo podría ser este:

El usuario envía “@mitiendaonline tophoy”  TOPHOY es el comando del bot para saber el artículo más vendido.

Nuestro bot recoge la mención como ya he explicado y hace una llamada a un método de nuestra tienda online del tipo botmitienda_tophoy(). Este método le devuelve la información: “Super Mario para Nintendo DS http://url.al.articulo/en/cuestion”

El bot solo tiene que componer el tweet de respuesta y enviarlo “@usuario Lo más vendido hoy es Super Mario para Nintendo DS http://url.al.articulo/en/cuestion”

Para enviar el tweet se utiliza el método de la API de Twitter estatuses/update.

Hay algunas cosas a tener en cuenta, el proceso que ejecuta el bot debe ejecutarse a intervalos de 1 minuto como mínimo para asegurarnos de que los usuarios reciben sus respuestas rápido, en tiempo real. Una tarea cron en el servidor y listo.

Sería ideal registrar en base de datos las estadíticas del bot, peticiones realizadas, respondidas con éxito, comandos erróneos, usuarios que realizaron las peticiones, fechas y horas de estas, etc. Que nos ayudarán a conocer el nivel de uso del servicio y a su mejora (puede que los comandos elegidos no sena buena idea y la gente los confunda a menudo).

Es buena idea el programar un comando genérico llamado “HELP” que envíe una pequeña ayuda o un enlace al usuario con nuestra lista de comandos y una pequeña explicación sobre su funcionamiento. Este mismo mensaje se puede enviar cuando el usuario comete un error con los comandos o sus parámetros.

Elige comandos cortos, sencillos y fáciles de recordar. Te aconsejo no pedir más de 1 parámetro, esto es Twitter no un terminal Linux.

He dejado el bot del ejemplo funcionando en la cuenta @spotifm.

Para pedir la hora enviad “@spotifm time” os devolverá la hora de España.

Para pedir la fecha enviad “@spotifm date” os devolverá la fecha actual.

Para pedir ayuda sobre su funcionamiento enviad “@spotifm help“.

También podéis probar el bot @topusers que programé hace días de la misma forma que he comentado en este post. El bot envía

información extraída de My Twitter Cloud sobre nuestro usuario Twitter o bien nos envía rankings de usuarios para un término

determinado. No garantizo su funcionamiento ya que el servidor donde está alojado pasa más tiempo caído que online.

Los comandos son:

@topusers top [término] Ejem: @topusers top seo /Envía los 3 usuarios más relevantes para un término y un enlace para ver el resto.

@topusers tags [usuario Twitter sin @] /Envía los tags más relevantes para un usuario en concreto, para saber las nuestras usad “@topusers tags me” Ejem: @topusers tags fdelpozo

Otro bot para que probéis es @weather_info que nos envía la información del tiempo (de momento del mismo día) de una ciudad en concreto. El comando es:

@weather_info TODAY ciudad,país

Nos devolverá en un tweet las temperaturas y las condiciones de la zona.

6 Comments

  • [...] This post was mentioned on Twitter by Fernando del Pozo, aqua2webs. aqua2webs said: RT @fdelpozo: Como crear un #bot en #Twitter http://www.fernandodelpozo.com/2010/07/10/como-crear-un-bot-en-twitter/ #SEO [...]

  • Buen post!

    Me gusta la idea de añadir el comando HELP a los bots. Es más, todos los bots deberían contar con este comando.

  • Hola!
    Está genial el artículo, bastante claro y práctico.
    Igual que a Juan, me parece estupenda la idea de incluir el comando help al bot, si en ésta respuesta además añadimos un link a nuestro sitio con mas información, la aplicación queda muy completa.
    Pero con ésto me surje una duda. Si queremos crear una aplicación que base parte de su funcionamiento en ‘escuchar’ las menciones y aparte a responder con información, se genera un número bastante grande de peticiones a la api, y podemos sobrepasar pronto el límite disponible.
    ¿Qué opináis sobre tener varias cuentas para éstos propósitos?

    Me refiero por ejemplo a crear una aplicación sólo para escuchar menciones de una determinada dirección y otra sólo para responder.

    Saludos.

  • Fernando dice:

    El escuchar el timeline no tiene mayor problema. Llamada a la api de búsqueda cada minuto con lo que buscas escuchar y procesas uno a uno todos los resultados, esto son 60 llamadas por hora y el límite de una cuenta normal creo que ronda las 250 peticiones, fijate si tienes llamadas de sobra para enviar tweets y lo que quieras.

  • Richard Artiguas dice:

    Hola Fernando, encantado de conocerte. He leído por allí algunos artículos tuyos en algunos foros y disculpame que este no sea el lugar para planteartelo pero en realidad como no sé nada de computación, esta fué la única manera que conseguí de ponerme en contacto con voz. El hecho es si quieres y puedes ayudarme, que estoy tratando de hacer un sitio web donde pueda regalar algún reporte o ebook a cambio de que el visitante me deje su nombre y email para construirme una lista, pero no tengo la más mínima idea de cómo hacerle. Si puedes ayudarme te lo agradecería infinitamente hermano.
    Saludos y Felicitaciones por tus posts, que son muy educativos.
    Exito

  • Abril dice:

    Hay algún lugar donde explique cómo programar los que se activan al producirse un evento en el timeline público sin que tengan que mencionar mi user directamente? No es para hacer spam, sólo para dar información sin que sea obligatorio el mencionarme. Por favor NECESITO AYUDA! Mandame un tweet con la respuesta en lo posible :D