Chatbot en ambitos académicos

Chatbot en ambitos académicos

Resumen — El presente artículo describe el desarrollo e implementación de un asistente virtual (programa conversacional) para la Sede Santa Tecla del proyecto Universidad en línea de la Universidad de El Salvador, utilizando los servicios de inteligencia artificial de Google para el reconocimiento del lenguaje natural, se busca proveer a los estudiantes canales de comunicación automatizados que faciliten el acceso a información académica, incorporando la asistencia a la cuenta oficial de la sede en la red social facebook. 

Palabras clave; inteligencia artificial, chatbot, procesamiento del lenguaje natural, entidad conversacional.

Introducción

 Tener una conversación es la forma natural de las personas para obtener información, es una actividad que realizamos a diario y ahora con el uso de tecnologías las conversaciones también se han trasladado a las plataformas de mensajería instantánea y no solo para el intercambio de ideas a nivel personal sino también en ambientes más formales como oficinas de trabajo, instituciones gubernamental o  instituciones académicas, convirtiendo a las tecnologías de mensajería como un canal importante para facilitar información.

En los últimos años la implementación de sistemas que incluyan componentes de inteligencia artificial ha ido en aumento implementando en muchos ámbitos, uno de ellos el reconocimiento del lenguaje natural, que no es más que la capacidad de entender y ejecutar acciones a través de la comprensión de palabras o frases como si de una conversación persona a persona se tratase, de esto han surgido soluciones de asistencia virtual por medio de chats (programas conversacionales) completamente autónomos capaces de responder e interactuar con personas facilitando todo tipo de información según el ámbito.

En el presente artículo se describe el desarrollo e implementación de un asistente virtual (Chatbot) para el fortalecimiento de la asistencia académica para la sede Santa Tecla del proyecto Universidad en línea UES, con el objetivo de facilitar información sobre las consultas frecuentes realizadas por los estudiantes o aspirantes y mejorar el proceso de información.

Métodos

Metodología

La metodología seguida para la construcción del asistente virtual es la siguiente:

  • Identificación de las necesidades de información
  • Selección de tecnologías
  • Diseño de esquema general de la solución
  • Desarrollo 
  • Pruebas y entrenamiento
  • Despliegue y seguimiento

Identificación de las necesidades de información

En esta etapa se realizó una entrevista a la coordinadora de al Sede Santa Tecla donde se definieron las solicitudes de información o consultas más frecuentes basados en la experiencia de años previos. Cómo segunda herramienta se realizó una pequeña encuesta a estudiantes de la facultad de ingeniería y arquitectura donde se consultaba sobre los trámites realizados en el último años en la administración académica de la facultad.

Como resultado de este proceso se establecieron los temas prioritarios:

  • Nuevo Ingreso
  • Reingreso
  • Cambios de carreras
  • Inscripción de asignaturas
  • Retiro de asignaturas
  • Horarios y contactos
  • Información de Carreras

Selección de tecnologías

La selección de tecnologías se basó en los criterios:

  • Servicios consumibles de Inteligencia Artificial para reconocimiento del lenguaje
  • Facilidad para integrar con redes sociales
  • Con posibilidades de escalabilidad
  • Manejable desde servicios en la nube

Cumpliendo con estos criterios especificados el servicio de Google DialogFlow, el lenguaje de programación JavaScript, servicios Cloud Functions de Google, Herramientas de desarrollo de Facebook.

DialogFlow, es un servicio de Google que ofrece la capacidad de entendimiento del lenguaje natural, utilizando inteligencia artificial ayuda a identificar patrones del lenguaje y los traduce en acciones preestablecidas llamadas intentenciones.

Se muestra el esquema funcional “Fig. 1”

Figura 1. Esquema funcional de Dialog Flow

 

 

Esquema general de la solución

Una vez seleccionadas las tecnologías se define un esquema general de cómo se relacionan “ Fig. 2”

Figura 2. Esquema general de la solución

Donde se define a Facebook Messenger y Facebook App como un canal de comunicación conectado a la Interfaz de Aplicación del servicio DialogFlow que dará soporte al reconocimiento del lenguaje natural y las Cloud function como el motor para la lógica de las respuestas.

Desarrollo

La línea de desarrollo sigue una secuencia de pasos para todos los elementos de información que se lista a continuación:

  1. Definición de una intención
  2. Definición de contexto
  3. Definición de palabras o frases de entrenamiento
  4. Mapeo con función de respuesta
  5. Definición de información para respuesta
  6. Desarrollo de Canal 
  7. Facebook App
  8. Conexión y publicación de Facebook Messenger con FB App y DialogFlow

 

Definición de intenciones

En el contexto de desarrollo en DialogFlow definir una intención es crear una instancia que responderá a una pregunta o solicitud de información individual, dentro de esta se define un contexto que hace referencia al contexto conversacional de la solicitud o intención y de igual forma se definen las primeras palabras o frases que servirán para el entrenamiento inicial de la inteligencia artificial.

Una intención sigue el flujo como en la “Fig. 3”

Figura 3. Diagrama de flujo funcional para intenciones DialogFlow

Un ejemplo en nuestro proyecto de una intención:

Intención: “Ingreso por Excelencia Académica”

Contexto: “nuevoIngreso”

Frases de entrenamiento: “Excelencia académica”, “ingreso por buenas calificaciones”

Con lo anterior definimos la intención a las consultas de temas nuevo ingreso para los ingresos por buenas calificaciones.

Mapeo de funciones y respuestas

En el contexto de desarrollo en DialogFlow definir una intención es crear una instancia que responderá a una pregunta o solicitud de información individual, dentro de esta se define un 

El mapeo consiste en relacionar una intención con su función de respuesta, estas funciones utilizan javascript y se apoyan de paquetes proporcionados por DialogFlow utilizando una opción al webhook integrada, según la siguiente definición:

Asociación entre intención y función correspondiente “Fig. 4”

Figura 4. Mapeo para relación intención/ función

Función que ejecuta la respuesta para la intención “ Fig. 5”

Figura 5. Función respuesta

DialogFlow provee de un editor en línea (Fulfillment) capaz de ejecutar el código de las funciones sin necesidad de implementar en otra infraestructura, es acá donde haremos el despliegue del mapeo y las funciones “Fig. 6”.

  Figura 6. Editor en línea

Desarrollo del canal

Para este proyecto se estableció como canal la pagina de la red social Facebook administrada por la Sede Santa Tecla, para esto es necesario desarrollar una app intermedia con privilegios de conexión con el servicio DialogFlow lo que permite el envío y recepción de mensajes, utilizando una cuenta de desarrollo en la plataforma facebook.

Pruebas y entrenamiento

Las pruebas y entrenamiento consiste en interactuar con el asistente virtual con las posibles consultas y ajustando las respuestas hasta que estas se apeguen a lo deseado, para esto se agregan o corrigen frases, palabras o contextos.

Despliegue

El despliegue consiste en la publicación de la Facebook App y configuración de respuesta automática lo que posibilita el acceso a cualquier usuario con una cuenta en dicha red social.

 

Resultados

El resultado del proyecto es la implementación del asistente virtual funcional y accesible desde el canal Facebook, incorporando los temas relevantes según los requerimientos definidos para la Sede Santa Tecla del proyecto Universidad en línea UES.

Para cubrir las necesidades de información se desarrollaron 38 intenciones con igual número de funciones que dan respuesta a cada solicitud.


Figura 7. Vista del asistente virtual en facebook messenger

 

El proyecto Asistente Virtual tiene la capacidad de ser replicado, si bien se ha realizado pensando en las necesidades específicas de la Sede Santa Tecla del proyecto Universidad en línea UES, este se pueden replicar en otras sedes del proyecto, con las consideraciones de estandarizar la información para los procesos o en su defecto ajustarlos a cada asistente virtual.

Acerca de los canales, para el caso de este proyecto se utilizó Facebook, dado el volumen de interacción de los estudiantes con la página Oficial de la Sede Santa Tecla, cabe aclarar que este es el caso particular de la Sede Santa Tecla y podría no ser el mismo para otras sedes.

En la etapa de seguimiento se ha observado que la mayoría de las consultas se responden con las intenciones definidas lo que valida a su vez la importancia del proyecto y habilita la posibilidad de expansión, dado que está concebido para tener crecimiento se podrán ir incorporando nuevas intenciones a medida surjan las necesidades y enriquecer  las habilidades de respuesta del asistente virtual.

Estadísticas de uso en la primer semana de implementación

TABLA I Estadísticos de uso primer semana

Intención / temas Cantidad
Bienvenida 87
Inscripción de asignaturas 31
Nuevo Ingreso 28
SA Universidad a distancia 9
Ingreso General 9
Reingreso 8
Horarios y contactos 7
Constancias 7
Cambio de carrera 7

 

 

Discusión

Sin duda la implementación de asistentes virtuales facilita la obtención de información y para el caso de la Universidad de El Salvador puede convertirse en una herramienta muy útil para proporcionar acceso oportuno a la información académica.

El proyecto actual es una muestra del potencial de la integración de elementos de inteligencia artificial para resolver asuntos académicos, este se podría conectar con los sistemas internos y así mejorar el acceso a información entre el estudiante y los asuntos académicos.

Algunos de los temas en los que se podría aplicar, no solo informativos si no de procesos son los siguientes:

  • Consulta de estado trámites en expediente en línea
  • Consulta de notas
  • Consulta de pagos
  • Solicitud de constancias
  • Cuestionarios de estudios

Para esto el esquema propuesto se presenta en la «Fig 8.»

Este contempla la integración de nuevos canales de comunicación y conexión los sistemas interno

Figura. 8 Esquema de solución con integración de servicios internos

 

Agradecimientos

Agradecimientos a la Administradora de Sede Santa Tecla, MAE Delmy Callejas por facilitar realización del proyecto apoyando la implementación de nuevas tecnologías para mejorar los servicios de información para los estudiantes del proyecto Universidad en Línea

Referencias Bibliográficas

  1. IA Observatorio (2019) ‘QuizBot’ de la Universidad de Stanford. [Online]. Available: https://observatorio-ia.com
  2. Leeds Beckett University (2017) Chatbot to help prospective students find the right course through Clearing. [Online]. Available: https://www.leedsbeckett.ac.uk
  3. Universitat Politécnica de Valencia (2019) Pau chatbot [Online]. Available: http://www.upv.es/

 

Como implementar una Central Telefónica VoIP con Raspberry PI

Como implementar una Central Telefónica VoIP con Raspberry PI

Esto más que un post es una serie de notas que tomamos cuando implementamos un proyecto de central telefónica utilizando una Raspberry pi con FreePBX

Una Centralita Telefónica permite gestionar llamadas telefónicas internas en una empresa, y compartir las líneas de acceso a la red pública entre varios usuarios, para permitir que estos realicen y reciban llamadas desde y hacia el exterior de la empresa, trabaja internamente con el protocolo IP y utiliza la infraestructura de comunicaciones de datos (WAN y LAN).

Los elementos utilizados son:

  • Raspberry Pi 3 B ($75.99 kit de desarrollo)
  • Módem 3G – Huawei E153-u ($30)
  • Softphone: Liphone y Zoiper
  • Teléfono IP Grandstream  ($112)
  • Asterisk
  • Freepbx
  • Raspbx

COSTO TOTAL:  $221.99

 

A continuación, se detallan los pasos a seguir:

Instalación de Asterisk y FreePBX.

Versión utilizada: 13.

Los comandos utilizados aquí deben ejecutarse con privilegios root.

  1. Habilitar los inicios de sesión como root por medio de ssh:

sed -i ‘s/PermitRootLogin without-password/PermitRootLogin yes/’ /etc/ssh/sshd_config

service sshd restart

  1. Actualizar el sistema:

apt-get update && apt-get upgrade -y

  1. Instalar dependencias:

apt-get install -y build-essential linux-headers-`uname -r` openssh-server apache2 mysql-server\

mysql-client bison flex php5 php5-curl php5-cli php5-mysql php-pear php5-gd curl sox\

libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3\

libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev\

libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev\

libspandsp-dev sudo libmyodbc subversion

Nota: No establecer contraseña en mysql

  1. Reiniciar el servidor

reboot

  1. Instalar los requisitos Legacy Pear:

 

pear install Console_Getopt

 

  1. Descargar los archivos fuente de Asterisk:

 

cd /usr/src

wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz

wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz

wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2

 

  1. Compilar e instala pjproject:

cd /usr/src

tar -xjvf pjproject-2.4.tar.bz2

rm -f pjproject-2.4.tar.bz2

cd pjproject-2.4

CFLAGS=’-DPJ_HAS_IPV6=1′ ./configure –enable-shared –disable-sound –disable-resample –disable-video –disable-opencore-amr

make dep

make

make install

  1. Compilar e instala jansson

cd /usr/src

tar vxfz jansson.tar.gz

rm -f jansson.tar.gz

cd jansson-*

autoreconf -i

./configure

make

make install

 

  1. Compilar e instala Asterisk

cd /usr/src

tar xvfz asterisk-13-current.tar.gz

rm -f asterisk-13-current.tar.gz

cd asterisk-*

contrib/scripts/get_mp3_source.sh

contrib/scripts/install_prereq install

./configure

make menuselect

 

Se le pedirá en el punto que elija qué módulos crear. La mayoría de ellos ya estarán habilitados, pero si desea tener soporte para MP3 (por ejemplo, para Música en espera), debe activar manualmente ‘format_mp3’ en la primera página.

debian-2.png

Después de seleccionar ‘Guardar y salir’, puede continuar.

 

  1. El siguiente comando instala un archivo de sonido base de baja calidad de forma predeterminada. Esto es adecuado si se encuentra en un sistema pequeño y poco potente (como un Rasberry Pi)

make

make install

make config

ldconfig

update-rc.d -f asterisk remove

 

  1. Crea el usuario de Asterisk y establece los permisos del archivo base:

useradd -m asterisk

chown asterisk. /var/run/asterisk

chown -R asterisk. /etc/asterisk

chown -R asterisk. /var/{lib,log,spool}/asterisk

chown -R asterisk. /usr/lib/asterisk

rm -rf /var/www/html

 

  1. Hacer modificaciones a Apache.

sed -i ‘s/\(^upload_max_filesize = \).*/\120M/’ /etc/php5/apache2/php.ini

cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig

sed -i ‘s/^\(User\|Group\).*/\1 asterisk/’ /etc/apache2/apache2.conf

sed -i ‘s/AllowOverride None/AllowOverride All/’ /etc/apache2/apache2.conf

a2enmod rewrite

service apache2 restart

 

  1. Configurar ODBC:

Edite /etc/odbcinst.ini y agregue lo siguiente. Tenga en cuenta que este comando supone que está instalando en una máquina nueva y que el archivo está vacío. Si no se trata de una máquina recién instalada, verifique manualmente el contenido del archivo, en lugar de simplemente copiar y pegar las líneas a continuación. El ‘EOF’ no entra en el archivo, simplemente señala al comando ‘cat’ que ha terminado de pegar.

cat >> /etc/odbcinst.ini << EOF

[MySQL]

Description = ODBC for MySQL

Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so

Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so

FileUsage = 1

EOF

 

Es posible que deba verificar estas rutas, si no está en una máquina x86_64. Puede usar el comando `find / -name libmyodbc.so` para verificar la ubicación

Edite o cree /etc/odbc.ini y agregue la siguiente sección. Tenga en cuenta que, de nuevo, este comando supone que está instalando en una máquina nueva, y el archivo está vacío. Verifique manualmente el contenido de los archivos si este no es el caso.

cat >> /etc/odbc.ini << EOF

[MySQL-asteriskcdrdb]

Description=MySQL connection to ‘asteriskcdrdb’ database

driver=MySQL

server=localhost

database=asteriskcdrdb

Port=3306

Socket=/var/run/mysqld/mysqld.sock

option=3

EOF

 

  1. Descargue e instale FreePBX.

cd /usr/src

wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz

tar vxfz freepbx-13.0-latest.tgz

rm -f freepbx-13.0-latest.tgz

cd freepbx

./start_asterisk start

./install -n

Configuración de FreePBX.

 

Para acceder a la configuración de FreePBX, abrimos el navegador y digitamos la ip asignada al raspberry pi. Si es la primera ves que accedemos debemos establecer un usuario y una contraseña para proteger la administración. Al terminar, visualizaremos la página de inicio similar a esta:

 

Agregar una extensión SIP.

  1. Seleccionar del menú «Applications» la opción «Extensions».

  1. Hacer click en «Add New Chain_SIP Extension».

  1. Completar los campos de la pestaña «General»: User Extension, Display Name y Secret.
  • User Name: Es el número de extensión que se asignará.
  • Display Name: Es el nombre que se mostrará  al hacer una llamada, en este caso aparecerá «Administración».
  • Secret: Es la contraseña asignada al dispositivo para la cuenta SIP.

 

  1. Guardar los cambios dando click en «Submit». Se pueden crear las cuestas SIP que sean necesarias siguiendo el mismo proceso.

Para las cuentas IAX se añaden las extensiones forma similar.

Conectar servidores a través de una troncal SIP.

Tomando en cuenta como ejemplo la siguiente estructura se ha configurado la conexión entre troncales:

Central 2.
  1. Seleccionamos del menú el botón «Connectivity» y luego la opción «Trunks».
  2. Seleccionamos «Add SIP (chan_sip) Trunk»:

 

  1.  Asignar nombre a la troncal «Trunk Name» en la pestaña «General».

  1. En la pestaña «SIP Settings» se agregar lo siguiente:

La dirección de «host» se refiere a la ip del servidor de la otra central, es decir, la central 1.

  1. Establecer una ruta de salida desde «Connectivity» seleccionando «Outbound Routes».
  2. Añadir una nueva ruta y asignarle un nombre en «Route Name». Seleccionar la troncal ya creada (cip2) en el campo «Trunk Sequence for Matched Routes».

 

  1. Establecer los patrones de marcado desde la pestaña «Dial Patterns», en el ejemplo sería de la siguiente manera:

 

Lo anterior significa que cuando alguna extensión de la central 1 marque el número como 8000-8999 y los números comienzan con 56, la llamada se desviará a la central 1 a través de la troncal SIP cip2.

  1. La configuración de la central 1 es similar según los datos de la estructura inicial.

Configuración de módem 3G para salida de llamadas a la PSTN.

Nota: Para conectar el módem a la raspberry se debe utilizar un concentrador USB con alimentación externa ya que consume mucha energía lo que podría afectar el rendimiento de la placa si se conecta directamente a uno sus puertos.

  1. En primer lugar debemos estar seguros que el módem esté desbloqueado para cualquier red (en nuestro caso se uso un módem Huawei E153-u) y tenga habilitada la opción para hacer llamadas, para saber si tiene habilitada las llamadas de voz se puede usar el siguiente programa:

https://www.dc-unlocker.com/downloads/DC_unlocker_software.

  1. A continuación ejecutar en consola el comando: install-dongle
  2. En la instalación se requerirá datos relacionados al número de asignado al chip utilizado.
  3. Cuando termine la instalación, conectar el módem al concentrador  y ejecutar el comando:

asterisk –rx “dongle show devices”

Esto mostrará la información del dispositivo conectado, similar a esto:

raspbx-status-dongle

  1. Una vez reconocido el módem, se debe crear una nueva troncal en FreePBX. Esta vez crear una  «Custom Trunk» desde Connectivity/Trunks. Añadir un nombre a la troncal:

  1. En la pestaña «custom setting» en «Custom Dial String» escribir:

dongle/dongle0/$OUTNUM$

  1. Después se debe configurar una nueva ruta de salida.

  1. También se deben establecer los patrones de marcado, dependerá del formato del país en el que se encuentra:

Enviar los cambios al servidor y aplicar cambios para guardar las configuraciones.

Configurar softphone y videollamadas.

En este post se ha utilizado y configurado el software Linphone para hacer llamadas dentro de la red con dispositivos móviles, en nuestro caso con dispositivos Android,  y computadoras.

  1. Descargar Linphone de Google Play:

  1. Agregamos una nueva cuenta SIP:

  1. Configuramos según el servidor, en este caso:
  • Nombre de usuario: Es la extensión que ocupará el dispositivo.
  • Contraseña: es el campo «Secret» configurado en FreePBX.
  • Dminio*: Es la ip al servidor, en este post es la ip de la raspberry y el puerto 5160
  • Transporte: Protocolo a usar para las llamadas.

 

  1. Si todo va bien, el dispositivo se registrará y estará listo para hacer llamadas:

 

  1. Para habilitar las videollamadas, seleccionar Configuración y en la opción Vídeo:

  1. Habilitar la opción «Iniciar Videollamadas» y seleccionar el códec VP8:

  1. En FreePBX realizar los siguientes cambios en «Settings/Asterisk SIP Settings» y en la pestaña «Chain SIP Settings»:

Solución de videovigilancia de bajo costo

Solución de videovigilancia de bajo costo

Esta ocasión les traemos una solución practica para sistemas de videovigilancia «Casero», hacerlo toma menos de 30 minutos y lo único que necesitamos es un móvil que ya no usemos, de preferencia con sistema operativo Android y una conexión de red.

Vamos a dividir la solución en 2 niveles, el primero es para videovigilancia en circuito cerrado y el segundo para poder acceder a la cámara desde cualquier lugar.

Nivel 1

  1. Lo primero que tenemos que hacer es preparar el teléfono móvil, este lo utilizaremos como una camara IP, por lo que es recomendable des instalar todas las aplicaciones innecesarias y debe conectarse a la red wifi.
  2. ahora debemos instalar una aplicación que nos ayude a usar el teléfono como cámara IP para lo cual recomendamos la siguiente aplicación IP webcam
  3. Una vez instalada, la ejecutamos y estará lista para transmitir en circuito cerrado atravez de un servicio http accecible desde un navegador web
  1.      
  2. Por seguridad es bueno configurar la retransmisión local definiendo un usuario y contraseña, también puede modificar el puerto de salida, en caso de ser una cámara publicar en el circuito obviar este paso.
  3. Al iniciar la aplicación nos brindara la url (IP+PUERTO) con la que podremos acceder a la cámara desde otro dispositivo.

 

Nivel 2

Si lo que necesitamos es acceder desde cualquier lugar  tendremos que  apoyarnos con un servicio de retransmisión en la nube.

  1. Después de terminar los pasos del Nivel  1, lo siguiente es crear una cuenta con el servicio Ivideon, el cual es un servicio diseñado para soportar servicios de videovigilancia y almacenaje en la nube. (Nota: este servicio tiene su versión de paga la cual puedes evaluar según tu necesidad), para crear la cuenta basta con acceder desde la aplicación que descargamos en el movil en la opcion Retranmision Nube-> cuenta Ivideon o acceder desde un navegador a la siguiente dirección https://www.ivideon.com/ 
  2. Una  vez creada la cuenta, lo siguiente es acceder desde el la aplicacion IPWebcam opcion Retransmision Nube->Cuenta Ivideon-> Entrar, con esto ya tendremos acceso a la cámara desde el servicio de Ivideon.
  3. Con esto ya tenemos listo el teléfono y solo falta buscar una buena ubicación para la cámara considerando una fuente de alimentación para la carga.

Si quieres acceder desde otro movil te recomendamos instalar la app movil de Ivideon, que entre otras cosas nos da la posibilidad de alertas de movimiento y sonido, en la version gratuita son clips de 10 segundos que estaran accesibles por 24 horas.

    

 

Si te gusto el articulo, comparte para que otros también implementen esta sencilla solución de igual forma si tienes dudas te invitamos a dejarnos tus comentarios.