¿Qué te parecería poder ejectuar tus propios webhooks contra los servicios que utilizas habitualmente sin tener que contratar un hosting y/o publicar (vía NAT) algún servidor interno (estoy pensando en la NAS que tengo todo el día en «modo on» 😉 )?
Entiendo que este artículo es un poco más «hard» de lo habitual pero como se lo había prometido al amigo @rafa_vidal_rs y me va a venir bien como «chuleta» la próxima vez que lo necesite, aquí que dejo explicado cómo responder a los «callbacks» de GitHub utilizando única y exclusivamente un script en Google Drive ¿Alguien da más? 😉
Si te has atrevido a entrar en este artículo es porque eres programador (o un curioso irredento al que le va la marcha y no le importa aprender 😉 ) por lo que entiendo que obvia explicar que son los webhooks o ‘callbacks HTTP‘ ¿verdad? (dejo enlace para refrescar la memoria por si hiciese falta)
Vamos al «turrón»…
Se me planteaba la necesidad de implementar algún mecanismo para hacer un seguimiento de posibles «aberraciones» que pudiesen hacer mis alumnos con las tareas que tenemos creadas en GitHub en clase de Informática y se me ocurrió (era la excusa ideal para utilizar los webhooks de una vez) utilizar la posibilidad que brindaba GitHub de notificar (vía webhook) cualquier cambio que se produjese (en lugar de programar una tarea cron que estuviese continua e innecesariamente, estresando al servidor de forma innecesaria para no obtener nada.
Las primeras dudas no se hicieron esperar:
- ¿en qué lenguaje de programación lo voy a implementar?
- ¿dónde voy a alojar el servicio para que esté disponible las 24h?
Podría haber contratado cualquier alojamiento gratuito en Internet (estoy especialmente contento con los chicos de Wesped; por cierto, también le debo un artículo al amigo Manuel por el buen servicio que ofrece peeerrooo… lo dejaré para mejor ocasión) pero he optado por resolverlo utilizando los servicios de Google que son buenos, bonitos y baratos.
Creando el script…
Aunque se puede crear directamente en Google Drive
Para no alargarlo mucho, os comparto una plantilla básica (pero totalmente funcional) de código en el siguiente enlace.
Comparto directamente en Google para que sólo necesites hacer una copia y modificar a tu gusto (te recomiendo probarla tal cual está y luego tendrás tiempo de investigar y adaptarla a tus necesidades… la idea es que te asegures que tienes todo bien configurado despreocupándote del script en si).
Debes asegurarte que está publicada como «Aplicación web».
En el código destacaría:
- En la línea 2 debes indicar la dirección de correo en la que recibirás las notificaciones cada vez que GitHub invoque el webhook (en mi caso utilizo mi dirección de correo de profe de la asignatura)
- Las líneas 6-8 implementan el doPost() que será invocado por el webhook (no cambies el nombre a la función, debe llamarse así). He optado por delegar en handleResponse() la lógica de generar el mensaje y enviarlo por correo electrónico.
Poniéndolo en «producción»
Guardamos el proyecto (usa el icono del disquete habitual) y seleccionamos la opción de publicar como página web el script
De vital importancia es que des permiso de acceso a cualquiera que tenga el enlace
Google te pedirá autorización (debido al envío de correos electrónicos) que te recomiendo conceder
Una vez concedidos los permisos, te avisará que el script ha sido configurado correctamente y te ofrecerá el enlace que deberás utilizar en GitHub (o cualquier otro servicio que disponga de la opción de webhooks).
Te recomiendo copiar el enlace pues nos hará falta más adelante.
Usando nuestro script
Los pasos aquí descritos son específicos de GitHUB por lo que deberás buscar documentación sobre cómo usar webhooks en otros servicios (Moodle, WordPress, …)
Para definir un webhook en GitHub, debe accederse al repositorio concreto que nos interese «vigilar» y acceder a su configuración
Solicitamos añadir el webhook
Y lo configuramos convenientemente
NOTA: en nuestro caso:
- Hemos utilizado la url obtenida en Google Drive al publicar el script como servicio web
- Solicitamos que se nos envíe la información en formato JSON (que es el esperado por el script que os he compartido; en el poco probable caso de no soportar dicho formato el servicio para el que estáis definiendo el webHook, deberéis cambiar cómo se procesan los datos que recibe el script)
El resultado
Cada vez que se produce algún cambio (creación de tarea, cambio de etiquetas de una tarea, asignación de una tarea, …) en alguna de las tareas del repositorio que comparto con mis alumnos, recibo un correo informándome
Evidentemente, la cantidad de información puede llegar a ser brutal: os he compartido una versión básica; en vuestra mano queda filtrar qué os interesa recibir y qué hacer con dicha información (igual preferís anotar el evento en una hoja de cálculo de Google Drive en lugar de enviar «molestos» correos electrónicos)
Conclusión
Interesante (y económica) opción la de utilizar los scripts de Google Drive para responder a los eventos producidos en aquellos servicios (GitHUB en nuestro caso pero bien me lo podría llevar a Moodle ¿verdad Rafa? 😉 ) que ofrecen la posibilidad de utilizar webHooks (acá HTTP callbacks)
A la potencia de los webhooks se une
- Contar con alojamiento gratuito en Drive
- La potencia de los scripts de Google (podemos acceder a cualquiera de los servicios que nos ofrece la compañía de Mountain View)
Como siempre: las herramientas están ahí, el límite está en tu imaginación 😉
Gracias por el artículo y por la mención,no se le puede pedir más. Y respecto a la Moodle… ya hablaremos, necesitaré sugerencias.
Me gustaMe gusta
Al «César» lo que es del César, amigo Rafa
Tú pide, pide… que ya veremos qué se puede (y/o quiero) hacer 😉
Me gustaMe gusta
Siento dejar el típico comentario talibán, pero que conste que lo hago con espíritu constructivo/informativo: creo que la conjugación correcta de «producir» es «produjera» o «produjese», no «produciese», en el primer párrafo del apartado «Vamos al turrón…»
Por lo demás, el artículo es excelente, como siempre.
Un saludo,
Me gustaMe gusta
No te disculpes… me ha dolido hasta a mi cuando lo he visto.
¡Gracias Xavi!
Me gustaMe gusta
Me supera completamente!!! ES un tema que me interesa pero veo que no tengo nivel para explotarlo.
Me gustaMe gusta
No creas, es más fácil de lo que parece…
Abro encuesta ¿Creéis interesante dedicar algunos artículos a los WebHooks y sus posibles aplicaciones? 😉
Me gustaLe gusta a 1 persona
Totalmente necesario.
Rafa y cuatro firmas más.
Me gustaLe gusta a 1 persona
Se puede utilizar con los webhooks de facebook?
Me gustaMe gusta
Por supuesto Carlos… es válido con cualquier webhook.
Suena a proyecto interesante, ¿en qué está pensando? (igual me animo y publicamos algo sobre la integración que plantea 😉)
Me gustaMe gusta
Necesito probar los POST que hace Facebook sobre el Endpoint pero nc como validar el web server con los parámetros que pasa Facebook para justamente validar el sever
Me gustaMe gusta
Interesante Carlos…¿Podrías enviarme la documentación del webhook que deseas usar para echarle un vistazo?
Me gustaMe gusta
Developers.facebook.com/docs/graph.api/webhooks/
Me gustaMe gusta
Gracias Carlos, intentaré hacerle un hueco este fin de semana aunque, siendo las evaluaciones la próxima semana, no garantizo nada 😅
Procuraré verlo tan pronto sea posible 👍🏻
Me gustaMe gusta
se podria hacer un webhook para integrarlo con un bot de telegram? al cual se encargaria de tomar una encuesta sencilla
Me gustaMe gusta
Técnicamente sí y, personalmente, me parece una muy buena idea: una forma sencilla de anotar las respuestas 👍🏻
Me gustaMe gusta
me estoy iniciando en el mundo de los bots, estoy tratando de crear el formulario que se guarde un una sencilla base de datos (que según he leído podría integrarse al google sheet), para llenar una tabla de datos muy sencilla, en la cual capturo un codigo (en mi caso vendedor), id_cliente y un codigo que me indica que compro y que cantidad. Pero no se como hacer la integracion en google script, he estado leyendo que se utiliza java para crear los codigo, pero ni idea como hacer comunicar telegram con el codigo de «hola mundo» que tengo creado
Cualquier orientacion que puedan darme estaria sumamente agradecido
Me gustaMe gusta
Técnicamente sólo tendrías que hacer un GET (o un POST) desde tu bot al webhook para que la «magia» surta efecto.
Encontrarás multitud de ejemplos de cómo hacerlo para Android, Jose
Me gustaMe gusta