Integra el ChatGPT de OpenAI en Programmable Voice y Functions de Twilio.
Tiempo de lectura: 13 minutos
![T-800 de la película](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Terminator_2.gif)
El uso de ChatGPT para potenciar un chatbot interactivo de voz no es solo una novedad, sino que puede ser una manera de obtener información útil de inteligencia empresarial mientras se reservan los agentes humanos dedicados, costosos y que se enfocan en un solo subproceso para conversaciones con las que solo los seres humanos pueden ayudar. En estos días, las personas hablan, escuchan y colaboran con robots todo el tiempo, pero ¿sabes qué es mejor que interactuar con un robot? ¡Interactuar con tres!
En esta publicación, te mostraremos cómo utilizar el reconocimiento de voz nativo de Twilio y las capacidades de texto a voz neuronales de Amazon Polly con ChatGPT para crear un chatbot activado por voz, todo alojado completamente en el entorno de Functions sin servidor de Twilio. También utilizarás la API de eventos de llamada para analizar qué preguntas están realizando y ver las respuestas del bot, lo que nos permite desbloquear los datos propios enriquecidos captados en estas interacciones y enviarlos a plataformas de interacción con el cliente, como Segment, donde puedes utilizarlos para crear perfiles de clientes, comprender sus preferencias y crear las experiencias personalizadas que ellos esperan.
¿Quieres probar la demostración antes de sumergirte en ella? Llama al 1-989-4OPENAI (467-3624) para probarla.
Robot n.°º1: Decodificación de voz humana mediante el reconocimiento de voz
El reconocimiento de voz de Twilio utilizando el verbo <Gather> (Recopilar) de TwiML es una poderosa herramienta que convierte las palabras emitidas en una llamada telefónica en texto. Ofrece una excelente precisión, baja latencia y compatibilidad con numerosos idiomas y dialectos. Históricamente, los desarrolladores de Twilio han utilizado el reconocimiento de voz como una manera de navegar por la respuesta de voz interactiva (IVR) y otros flujos de trabajo de automatización de autoservicio, pero con el lanzamiento de nuevos modelos experimentales de voz, el único límite es ✨tu imaginación ✨.
Robot n.°º2: Dale voz a tu robot con las voces neuronales de Amazon Polly
Con el verbo <Say> (Decir) de TwiML, Twilio proporciona una función de texto a voz (TTS) que utiliza las voces de Amazon Polly que aprovechan el aprendizaje profundo para sintetizar el habla similar a la humana. Las voces neuronales de Polly ofrecen un sonido más natural y realista, lo que proporciona una experiencia de audio atractiva para los usuarios. Gracias a la compatibilidad con varios idiomas, una amplia gama de voces y SSML, la conversión de texto a voz de Twilio te permite personalizar la voz de tu chatbot para que coincida con la identidad de tu marca.
Robot n.°º3: ChatGPT, el compañero conversacional de OpenAI
ChatGPT es un modelo de idioma avanzado desarrollado por OpenAI, capaz de generar texto similar al humano en función de una entrada dada. Puede comprender el contexto, proporcionar respuestas relevantes e incluso participar en tareas creativas, como escribir historias o poemas. Al aprovechar la API de OpenAI, los desarrolladores pueden integrar esta IA directamente en sus aplicaciones, lo que ofrece a los usuarios una experiencia más interactiva e interesante.
La salsa secreta: Twilio Functions
¿Cómo obtendrás estos tres robots para que hablen entre ellos y con tus agentes de llamada? Usando Twilio Functions. Más allá de simplemente darte la capacidad de obtener una prueba de concepto y ejecutarla sin necesidad de utilizar un servidor propio, Functions proporciona capacidades de escalamiento automático, seguridad mejorada y latencia reducida cuando se ejecuta el código dentro de Twilio. Por supuesto, si tienes tu propio servidor en algún lugar, puedes realizar un par de ediciones pequeñas en Javascript y se ejecutará en el entorno Node.js sin ninguna dificultad.
Ahora que tienes los ingredientes, veamos la receta en dos sabores: CLI y GUI.
![Robots bailando y Herbie Hancock cantando en el video musical de la canción Rockit.](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Rockit.gif)
Prepara tu mente antes de que te derrumbes
Antes de sumergirse en el proceso de integración, necesitarás lo siguiente:
-
Una cuenta de Twilio (regístrate gratis en este enlace y recibe USD 10 en crédito cuando actualices tu cuenta);
-
Un número de teléfono de Twilio (haz clic aquí para ver cómo obtener tu primer número de Twilio con tu cuenta de prueba);
-
Una clave de API de OpenAI en un plan prémium o con créditos disponibles;
-
CLI de Twilio con el Kit de herramientas sin servidor instalado.
Función para el día siguiente
En primer lugar, pongamos nuestras actividades en segundo plano en orden. Comenzarás creando un nuevo proyecto sin servidor. Ya que instalaste el increíble Kit de herramientas sin servidor de código abierto, puedes hacerlo en una línea pasando el comando a tu terminal:
Reemplaza <project-name>
con el nombre de tu preferencia; yo denominé al mío three-robot-rhumba.
![Ventana de terminal mostrando la inicialización de un proyecto sin servidor de Twilio.](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Screen_Shot_2023-03-22_at_12.05.48_AM.png)
Ingresa el cd
al directorio de tu proyecto y actualicemos el archivo .env para proporcionar tu token de autenticación de Twilio como AUTH_TOKEN
y tu clave de API de OpenAI como OPENAI_API_KEY
. El SID de tu cuenta de Twilio se debería completar automáticamente. Asegúrate de que tu archivo .env se vea así (con los marcadores de posición XXXXX
reemplazados con sus respectivas claves):
Ya que Twilio Functions sin servidor está formado solo por aplicaciones de Node.js, puedes agregar dependencias usando cualquier administrador de paquetes que escriba en package.json
. Estoy usando npm
porque soy básico. Vuelve a tu terminal e ingresa lo siguiente para instalar el paquete de NPM de OpenAI:
Con el conjunto de variables de entorno y las dependencias agregadas, puedes comenzar a trabajar. Crearás dos funciones: una función /transcribe
que utiliza el reconocimiento de voz de Twilio para convertir tus palabras habladas en un texto que ChatGPT puede entender usando el verbo <Gather> (Recopilar) de TwiML y una función /respond
que toma el texto generado por el reconocimiento de voz, lo envía a la API de OpenAI y pasa la respuesta al motor de texto a voz neuronal de Amazon Polly de Twilio utilizando el verbo<Say> (Decir) de TwiML.
Para crear una nueva función, abre la carpeta Functions (Funciones) en el directorio de proyecto y crea un archivo JavaScript. Crea las funciones /transcribe
y /respond
creando un archivo transcribe.js y respond.js en la carpeta.
Perdido en la transcripción
Ahora, abramos transcribe.js y agreguemos el siguiente código:
Si eres nuevo en Functions, permíteme explicarte lo que sucede aquí. La función /transcribe
crea una respuesta de voz que genera TwiML basada en la biblioteca auxiliar Node.js de Twilio, inicia una conversación si no existe, escucha la entrada del usuario y pasa esa entrada junto con el historial de la conversación al punto final /respond
para su posterior procesamiento.
En la línea 6, la aplicación comprueba si existe una cookie llamada convo
. Si no lo hace, o si lo hace, pero está vacía, puedes interpretarlo como que la conversación aún no ha comenzado, por lo que lanzarás un saludo inicial utilizando el verbo <Say>
(Decir) de TwiML.
A continuación, el método twiml.gather
se utiliza para capturar la entrada del usuario. Los parámetros para la recopilación son:
speechTimeout: 'auto'
: Determina automáticamente cuándo el usuario dejó de hablar, se puede establecer en un número entero positivo, pero la opción automática es la mejor opción para este caso de uso.speechModel: "experimental_conversations":
Utiliza un modelo de reconocimiento de voz optimizado para casos de uso conversacional.input: 'speech'
: Establece el tipo de entrada en voz e ignora cualquier pulsación de tecla (DTMF).action: '/respond'
: Pasa la entrada de voz del usuario junto con el historial de conversaciones al punto final/respond
.
Ahora, debes crear una forma de crear la cookie convo para que la función /respond
tenga un lugar para almacenar el historial de conversación que pasará entre la API de OpenAI y nuestros mensajes de voz neuronales de Polly, lo que significa que la app necesita inicializar un objeto Twilio.Response();
y lo hace en la línea 25.
No puedes pasar tanto Twilio.twiml.VoiceResponse();
y Twilio.Response();
de nuevo por el controlador, por lo que deberás usar la respuesta que acabas de crear para agregar un encabezado a nuestras solicitudes y establecer el TwiML que generaste con <Gather>
(Recopilar) por el cuerpo en las líneas 28 y 31 respectivamente.
Una vez que lo hayas hecho, puedes configurar la cookie response.setCookie();
en la línea 35 antes de pasar la respuesta al controlador para que la ejecute nuestra infraestructura sin servidor en la línea 39. Ahora sí, guarda este archivo y cierra la aplicación.
Llamada y respuesta
A continuación, abramos Respond.js y agreguemos el siguiente código:
Al igual que con lo anterior, aquí hay un recorrido guiado para saber exactamente lo que está pasando en este código. Comienza importando los módulos requeridos (línea 2) y definiendo la función principal para manejar las solicitudes (línea 5).
Las líneas 7 y 8 establecen la API de OpenAI con la clave de API, mientras que la línea 11 crea el objeto Twilio Voice Response que generará TwiML para convertir las respuestas de ChatGPT en voz para los agentes de llamada. La línea 14 inicia el objeto Twilio Response para actualizar la cookie del historial de conversación y establecer los encabezados y el cuerpo para que se pase TwiML en la respuesta.
Las líneas de la 17 a la 20 analizan el valor de la cookie si esta existe y la línea 23 recupera la entrada de voz del usuario del evento SpeechResult
recibido con la función /transcribe
. Las líneas 26 y 27 crean una variable de conversación para almacenar el diálogo y agregar la entrada del usuario al historial de conversación.
La línea 30 genera la respuesta de la IA según el historial de conversaciones, y la línea 33 limpia la respuesta de la IA eliminando cualquier nombre de rol innecesario (asistente, Joanna, usuario). La línea agrega la respuesta limpia de la IA al historial de conversaciones.
Las líneas de la 39 a la 41 limitan el historial de conversaciones a los últimos 10 mensajes para mejorar el desempeño y mantener un tamaño razonable de la cookie. Al mismo tiempo, proporcionan al chatbot un contexto suficiente para proporcionar respuestas útiles. Puedes aumentar (o disminuir) esto si lo deseas, pero recuerda que el historial almacenado se transfiere a la API de OpenAI con cada solicitud, de modo que, cuanto más grande sea, más tokens consumirá tu aplicación. Las líneas de la 44 a la 48 generan el verbo <Say>
(Decir) de TwiML mediante la respuesta limpia de la IA, y las líneas de la 51 a la 55 redireccionan la llamada a la función /transcribe
en la que el verbo <Gather>
(Recopilar) captura el discurso del agente de llamada.
Al igual que con /transcribe
, nosotros debemos utilizar la respuesta para entregar el TwiML, y las líneas 58 y 59 establecen el encabezado adecuado y devuelven el TwiML en el cuerpo de la respuesta. Las líneas de la 62 a la 67 actualizan la cookie del historial de conversación con la respuesta de la API de OpenAI, y la línea 70 devuelve la respuesta al controlador.
La función generateAIResponse
(líneas de la 73 a la 76) formatea la conversación y crea una finalización de chat con la API de OpenAI. La función createChatCompletion
(líneas de la 81 a la 88) envía una solicitud a la API de OpenAI para generar una respuesta mediante el modelo GPT-3.5-turbo y los parámetros especificados. Si obtenemos un 500 de la API de OpenAI, no queremos simplemente concluir la conversación, por lo que manejaremos un error de la API con <Say>
(Decir) y una redirección de la conversación a la función /transcribe
en las líneas 90 a la 107.
También es posible que el tiempo de espera de la solicitud a OpenAI simplemente se agote, por lo que se ha agregado un bloque entre las líneas 109 y 131 para manejar los tiempos de espera con elegancia y redirigir la solicitud a la función /transcribe
para intentarlo nuevamente.
Por último, la función formatConversation
(líneas de la 136 a la 158) formatea el historial de conversaciones en un formato que la API de OpenAI puede comprender alternando entre los roles assistant
y user
.
Ahora tu código está actualizado y el conjunto de dependencias y las variables de entorno están configuradas, por lo que ya está todo preparado para la implementación. Con Twilio sin servidor, no podría ser más fácil… ¡es solo un comando!
Una vez que la implementación finalice, puedes utilizar las funciones que creaste para capturar la entrada de voz de un agente de llamada, convertirla en texto que se envía a la API de ChatGPT y reproducir la respuesta al agente de llamada en forma de voz generada por IA. ¡Tres robots trabajando juntos, solo para ti!
![La banda de música electrónica Kraftwerk actuando en vivo](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Kraftwerk.gif)
El modelo
El ejemplo anterior utiliza el modelo gpt-3.5-turbo de OpenAI. Es un modelo bueno (¡y barato!) para fines de desarrollo y prueba de conceptos, pero puede que otros modelos sean mejores para casos de uso específicos. GPT-4 acaba de lanzarse en versión beta limitada, e incluso aquí en Twilio aún no hemos tenido la oportunidad de probarlo, pero, basado en la transmisión en vivo del desarrollador publicada con el anuncio, parece ser una actualización significativa de la versión 3.5 que ha estado impresionando a las personas durante los últimos meses.
Una consideración adicional: GPT-3 es reemplazada por 3.5 (y naturalmente 4), pero los modelos de GPT-3 exponen capacidades de ajuste fino que los modelos más avanzados carecen al momento de la redacción. Por ejemplo, aunque los datos de capacitación sean antiguos, puedes obtener respuestas más rápidas mediante el uso de CURIE y puedes emplear cosas como análisis de opinión y estilos de respuesta. Elige tu propia aventura.
Rikki, no pierdas ese número
Con la función lista e implementada, puedes probarla haciendo una llamada, pero, primero, deberás configurar un número de teléfono para utilizar las funciones que acabas de crear. La CLI proporciona una manera rápida y fácil de hacerlo. Escribe lo siguiente en tu terminal para enumerar los números de teléfono en tu cuenta (suponemos que seguiste el requisito previo y adquiriste un número con anticipación).
Recibirás una lista con los números de teléfono, sus SID y los nombres descriptivos de tu cuenta. Puedes utilizar el SID o el número de teléfono completo con formato E.164 para tu solicitud:
![OBI-wan Kenobi de la película La guerra de las galaxias dice que nunca ha utilizado una interfaz de línea de comandos y R2-D2 responde con pitidos tristes.](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Obi-wan.gif)
Si las CLI no pasan la comprobación de VIBE, puedes hacer todas las cosas que describimos anteriormente directamente en la consola de Twilio. En primer lugar, en la navegación de la izquierda en la pestaña Develop (Desarrollar), ve a la sección Functions and Assets (Funciones y activos) y haz clic en Services (Servicios). Haz clic en Create Service (Crear servicio).
![Servicio de creación de demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Create_Service.png)
Dale un nombre a tu Servicio, yo llamaré al mío voice-chatgpt-demo y haz clic en Next (Siguiente).
![Servicio de nombre de demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Name_Service.png)
Ahora verás la vista Console (Consola) para tu Servicio, con Funciones, Activos, Variables de Entorno y Dependencias en la navegación de la izquierda, y un editor de texto y una consola para editar tu código y monitorear los registros. Lo primero que querrás hacer es configurar tus variables de entorno, así que haz clic en Environment Variables (Variables de entorno) en la esquina inferior derecha.
![Configuración del servicio de demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Service_Config.png)
El SID y el token de autenticación de tu cuenta de Twilio se completan previamente como variables de entorno, por lo que todo lo que necesitas es agregar tu clave de API de OpenAI. El código de ejemplo se referirá a la clave como OPENAI_API_KEY
, por lo que, si buscas una experiencia de edición de copia/pegado de cero, asegúrate de nombrarla de la misma manera. Haz clic en Add (Agregar) cuando hayas terminado.
![Agregar variables de entorno a la demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Add_Environment_Variables.png)
A continuación, deberás actualizar nuestras dependencias para incluir el módulo de NPM de OpenAI, de modo que puedas realizar solicitudes a la API de OpenAPI. Haz clic en Dependencies (Dependencias), e ingresa openai
en el cuadro de texto Module (Módulo) y 3.3.0
en el cuadro de texto Version (Versión). No olvides hacer clic en Add (Agregar).
Ahora puedes empezar a crear las funciones. Vas a crear dos: /transcribe que hará todo el trabajo pesado desde una perspectiva de reconocimiento de voz y /respond que pasará el texto transcrito a la API de ChatGPT y leerá la respuesta al agente de llamada utilizando una voz de texto a voz neuronal de Amazon Polly.
Haz clic en el botón Add (Agregar) y selecciona Add Function (Agregar función) en el menú desplegable para crear una nueva función y nombrarla /transcribe.
![Agregar función a la demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Add_Function.png)
Reemplaza el contenido de la nueva función con el fragmento de código que se encuentra aquí y presiona Save (Guardar). La nueva función de fábrica debe verse así cuando termine:
![Función de transcripción de la demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Transcribe_Function.png)
A continuación, crea otra función y llámala /respond. Reemplaza el contenido de esta nueva función con el fragmento de código que se encuentra aquí y presiona Save (Guardar) nuevamente. Si deseas obtener un recorrido guiado de lo que sucede con precisión en estos ejemplos, consulta la sección de la CLI de esta publicación en la que revisamos el código con mayor detalle.
A continuación, haz clic en el botón Deploy (Implementar). Se implementarán tus funciones guardadas y ahora se pueden utilizar en la configuración del número de teléfono entrante. Haz clic en los tres puntos verticales al lado de /transcribe para seleccionar Copy URL (Copiar URL). Lo necesitaremos en un segundo.
![Configuración del número de teléfono de la demostración de ChatGPT de Twilio Voice](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Twilio_Voice_ChatGPT_Demo_Phone_Number_Setup.png)
En la pestaña Develop (Desarrollar), ve a la sección Phone Numbers (Números de teléfono), luego a Manage (Administrar) y selecciona Active Numbers (Números activos). Una vez que hayas encontrado un número que desees utilizar, desplázate hacia abajo hasta la sección Voice & Fax (Voz y fax) y, en A call comes in (Llamada entrante) selecciona Function (Función). Para Service (Servicio), selecciona el servicio de la función que acabas de crear, que denominamos voice-chatgpt-demo. A continuación, elige la IU para Environment (Entorno) y, por último, selecciona /transcribe para la Function Path (Ruta de la función), ya que aquí es donde tu llamada telefónica debería enrutarse primero.
Ahora, llama al número de teléfono que acabas de configurar para probar todo.
No desmontar
![Johnny Five de la película Short Circuit diciendo](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/No_disassemble.gif)
Una cosa particularmente genial sobre esta integración es que tanto las entradas como las respuestas están disponibles para ti como desarrollador; el texto de reconocimiento de voz de la persona en forma de parámetro SpeechResult
que pasa a la función /respond
y las respuestas derivadas de ChatGPT en forma de verbo <Say> (Decir) de TwiML que se ejecuta en las llamadas. Esto significa que estas conversaciones no son cuadros cerrados de inteligencia empresarial y, aunque estas funciones se estén ejecutando en el entorno sin servidor de Twilio, aún puedes echar mano al contenido de la conversación mediante la API de eventos de llamada. A continuación, se explica cómo obtener los detalles mediante la CLI de Twilio:
Mediante esta API, puedes recuperar las solicitudes, las respuestas y los parámetros asociados e introducirlos directamente en tus sistemas internos para hacer cosas como informar a los agentes sobre lo que el agente de llamada ha estado preguntando antes de conectarse o utilizar los datos para decorar los perfiles de tus clientes en una plataforma de datos de clientes como Segment.
Roca robótica
![Daft Punk tocando la guitarra eléctrica y la batería en el video musical de la canción Get Lucky.](/content/dam/twilio-com/global/en/blog/legacy/2023/integrate-openai-chatgpt-twilio-programmable-voice-functions/Daft_Punk.gif)
Publicaciones como McKinsey y Forbes ya están opinando sobre cómo las tecnologías de IA generativa como ChatGPT se pueden utilizar para resolver problemas empresariales, así que ahora que tienes tres robots trabajando para ti, ¿qué puedes hacer con una integración como esta? ¿Qué tal obtener un agente de soporte de escritorio de TI de primera línea? Haz que ChatGPT haga búsquedas en Google para que tu costoso Departamento de TI no tenga que hacerlo y, en caso de que el agente de llamada y ChatGPT no puedan averiguarlo, conecta la llamada a tus agentes. ¿Tienes tiempos de espera prolongados para tus especialistas en servicios de salud? En lugar de ofrecer música de jazz suave a los agentes de llamada, ofréceles la sabiduría de ChatGPT sobre enfermedades comunes no graves mientras esperan.
Resumen
Ahí lo tienes: con la ayuda del reconocimiento de voz de Twilio, Twilio Functions, las voces neuronales de Amazon Polly y la API de OpenAI, ahora has creado tu propio chatbot de voz interactivo. Sin duda, mantente atento a esta área y a los avances en la IA conversacional y las capacidades de chatbot que puedes aprovechar con Twilio.
Michael Carpenter (alias MC) lleva toda su carrera trabajando con la API de telecomunicaciones que lleva haciendo sonar los teléfonos con software desde 2001. Como administrador de productos para Programmable Voice en Twilio, el diagrama de Venn de sus intereses es la intersección de API, SIP, WebRTC y SDK móviles. También sabe mucho sobre Depeche Mode. Comunícate con él mediante mc@twilio.com o LinkedIn.
Una enorme deuda de gratitud a la publicación positiva de Dhruv Patel sobre Cómo llamar a un amigo de la IA usando GPT-3 con Voice y Functions de Twilio. Dhruv también proporcionó una revisión técnica del código en esta publicación. Dhruv Patel es desarrollador en el equipo Developer Voices de Twilio y se lo puede encontrar trabajando en una cafetería con un vaso de cerveza fría, o te puedes comunicar con él mediante dhrpatel@twilio.com o LinkedIn.
Publicaciones relacionadas
Recursos relacionados
Twilio Docs
Desde API hasta SDK y aplicaciones de muestra
Documentación de referencia de API, SDK, bibliotecas auxiliares, inicios rápidos y tutoriales para su idioma y plataforma.
Centro de Recursos
Los últimos libros electrónicos, informes de la industria y seminarios web
Aprenda de los expertos en participación del cliente para mejorar su propia comunicación.
Ahoy
Centro de la comunidad de desarrolladores de Twilio
Mejores prácticas, ejemplos de códigos e inspiración para crear comunicaciones y experiencias de participación digital.