Diferencia entre revisiones de «Manual de operación de vFlow»

De VIVAitwiki
Ir a la navegaciónIr a la búsqueda
 
(No se muestran 38 ediciones intermedias del mismo usuario)
Línea 60: Línea 60:
  
 
<br>
 
<br>
<div style="background-color: #fef6e7; border: 1px solid #fbd68a; padding: 1em; border-radius: 4px;max-width: 1000px">
+
<div style="background-color: #fef6e7; border: 1px solid #fbd68a; padding: 1em; border-radius: 4px;max-width: 1000px; margin-left: 50px">
 
'''⚠️ ATENCION !!'''
 
'''⚠️ ATENCION !!'''
 
'''Los cambios en tablas de configuración de BBDD de vFlow (orquestadores, plataformas, agentes) requieren reinicio del servicio vFlowProxy'''
 
'''Los cambios en tablas de configuración de BBDD de vFlow (orquestadores, plataformas, agentes) requieren reinicio del servicio vFlowProxy'''
Línea 67: Línea 67:
 
<br>
 
<br>
  
<div style="background-color: #f6f8fa; border: 3px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', 'Monaco', 'Courier New', monospace;">
+
<div style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', 'Monaco', 'Courier New', monospace;">
 
/etc/init.d/vFlowProxy.service status
 
/etc/init.d/vFlowProxy.service status
 
/etc/init.d/vFlowProxy.service stop
 
/etc/init.d/vFlowProxy.service stop
Línea 84: Línea 84:
 
<br>
 
<br>
 
Se adjunta imagen a modo de ejemplo
 
Se adjunta imagen a modo de ejemplo
[[Archivo:Alta loader vflow.png|800px|miniaturadeimagen|no|alta loader vFlow]]
+
[[Archivo:Alta loader vflow.png|800px|miniaturadeimagen|no|alta loader vFlow|link=]]
 
<br>
 
<br>
  
 
== Diagnósticos ==
 
== Diagnósticos ==
tail -f /var/log/vFlowProxy/vFlowProxy.log
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
tail -f /var/log/vFlowProxy/vFlowProxy.log
 +
</pre>
 +
 
 
::En nodo vFlowProxy
 
::En nodo vFlowProxy
 
::para cualquier canal
 
::para cualquier canal
 
<br>
 
<br>
  
<div style="background-color: #f6f8fa; border: 3px solid #d1d5da; padding: 1em; border-radius: 4px; margin-left: 50px; display: in-block; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap; "><nowiki>
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 
nc localhost 1131
 
nc localhost 1131
</nowiki>
+
</pre>
</div>
 
  
nc localhost 1131
 
 
::En nodo vFlowProxy
 
::En nodo vFlowProxy
 
::Monitoriza estado del proceso vflowProxy
 
::Monitoriza estado del proceso vflowProxy
 
<br>
 
<br>
<div style="background-color: #f6f8fa; border: 3px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', 'Monaco', 'Courier New', monospace; white-space: pre-wrap;">
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
<nowiki>
 
 
  {
 
  {
 
   "proceso": {
 
   "proceso": {
Línea 141: Línea 141:
 
   "alarmas": []
 
   "alarmas": []
 
  }
 
  }
</nowiki>
+
</pre>
</div>
 
  
 
Es relevante la monitorización de sesiones  <code>"wsi_cad": "sesiones=0/200"</code> (usadas/máximas)
 
Es relevante la monitorización de sesiones  <code>"wsi_cad": "sesiones=0/200"</code> (usadas/máximas)
 
<br>
 
<br>
 
<br>
 
<br>
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
asterisk -rv | grep callsquare_name
+
asterisk -rv | grep callsquare_name
 +
</pre>
 
::en nodo Omnisuite
 
::en nodo Omnisuite
 
::para canal voz
 
::para canal voz
 
<br>
 
<br>
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
tail -f /var/log/xcally/agi-combined.yyyy-mm-dd.log
+
tail -f /var/log/xcally/agi-combined.yyyy-mm-dd.log
 +
</pre>
 
::en nodo Omnisuite
 
::en nodo Omnisuite
 
::para canal voz
 
::para canal voz
 
<br>
 
<br>
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
tail -f /var/log/xcally/routing-combined.yyyy-mm-dd.log
+
tail -f /var/log/xcally/routing-combined.yyyy-mm-dd.log
 +
</pre>
 
::para canal voz
 
::para canal voz
  
Línea 166: Línea 168:
  
 
Es útil comenzar con
 
Es útil comenzar con
/home/sat/vFlowProxy/vFlowGetInfo.sh
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
/home/sat/vFlowProxy/vFlowGetInfo.sh
 +
</pre>
 
que sin parámetros adicionales confirma el correcto estado de vFlowProxy
 
que sin parámetros adicionales confirma el correcto estado de vFlowProxy
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
        {
+
{
          "errorNum": 0,
+
  "errorNum": 0,
          "errorStr": "OK",
+
  "errorStr": "OK",
          "app": "vFlowProxy",
+
  "app": "vFlowProxy",
          "version": "00.00.01",
+
  "version": "00.00.01",
          "sessions_opened": 0,
+
  "sessions_opened": 0,
          "sessions_limit": 200,
+
  "sessions_limit": 200,
          "sessions_sleep_timeout_s": 3600,
+
  "sessions_sleep_timeout_s": 3600,
          "alarms": 8
+
  "alarms": 8
        }
+
}
 +
</pre>
  
 
== Integración de vFlow desde Omnisuite ==
 
== Integración de vFlow desde Omnisuite ==
Línea 185: Línea 190:
 
=== Descripción general ===
 
=== Descripción general ===
 
En Omnisuite, la integración con vFlow, se realiza con el programa vFlowOmnisuite, que podrá ser invocado como ejecutable (más rápido, para debian), o como Python (más universal)
 
En Omnisuite, la integración con vFlow, se realiza con el programa vFlowOmnisuite, que podrá ser invocado como ejecutable (más rápido, para debian), o como Python (más universal)
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 
     /usr/local/sbin/vFlowOmnisuite (OPCIÓN PREFERENTE)
 
     /usr/local/sbin/vFlowOmnisuite (OPCIÓN PREFERENTE)
 
     /usr/local/sbin/vFlowOmnisuite.py (LEGACY)
 
     /usr/local/sbin/vFlowOmnisuite.py (LEGACY)
 +
</pre>
  
 
Asociado al programa existen los siguientes ficheros de configuración (.ini):
 
Asociado al programa existen los siguientes ficheros de configuración (.ini):
  
Un '''".ini" de plataforma''' Omnisuite en vFlow --> Solo contiene uuid de la plataforma; se entrega un ".ini" a modo de ejemplo en /etc/MDtel/vFlow/platform.ini
+
Un '''".ini" de plataforma''' Omnisuite en vFlow --> Solo contiene uuid de la plataforma; se entrega un ".ini" a modo de ejemplo en <code>/etc/MDtel/vFlow/platform.ini</code>
EJEMPLO ".INI" DE PLATAFORMA
 
    [uuids]
 
    platform=1d111530-e22d-11f0-b0f2-5254008bef96
 
  
 +
EJEMPLO ".INI" DE PLATAFORMA
 +
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
  [uuids]
 +
  platform=1d111530-e22d-11f0-b0f2-5254008bef96
 +
</pre>
  
Un '''".ini" por agente''' en vFlow --> Solo contiene uuid del agente según su identificación en vFlow ('''NO''' en un orquestador, por ejemplo flowise); se entrega un ".ini" asociado a un agente "loop" existente en Flowise /etc/MDtel/vFlow/agent_loop_01.ini
+
Un '''".ini" por agente''' en vFlow --> Solo contiene uuid del agente según su identificación en vFlow ('''NO''' en un orquestador, por ejemplo flowise); se entrega un ".ini" asociado a un agente "loop" existente en Flowise <code>/etc/MDtel/vFlow/agent_loop_01.ini</code>
EJEMPLO ".INI" DE AGENTE
 
    [uuids]
 
    agent=1a3a1020-ea1d-11f0-b4a5-5254008bef96
 
  
 +
EJEMPLO ".INI" DE AGENTE
 +
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
  [uuids]
 +
  agent=1a3a1020-ea1d-11f0-b4a5-5254008bef96
 +
</pre>
  
Un '''".ini" por servicio''' --> Configuración de cada servicio en Omnisuite; se entrega un ".ini" a modo de ejemplo en /etc/MDtel/vFlow/service.ini
+
Un '''".ini" por servicio''' --> Configuración de cada servicio en Omnisuite; se entrega un ".ini" a modo de ejemplo en <code>/etc/MDtel/vFlow/service.ini</code>
 
En cada fichero de servicio configuraremos
 
En cada fichero de servicio configuraremos
 
::* Donde está Vflow
 
::* Donde está Vflow
Línea 211: Línea 221:
 
::* channel_text_type --> IMPORTANTE si el servicio es de texto que esté bien (vacio solo si el servicio es de texto, NO COMENTARLO)
 
::* channel_text_type --> IMPORTANTE si el servicio es de texto que esté bien (vacio solo si el servicio es de texto, NO COMENTARLO)
 
::* environment --> production, staging, test
 
::* environment --> production, staging, test
 +
EJEMPLO ".INI" DE SERVICIO
 +
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
  [arch_uuids]
 +
  agent=/etc/MDtel/vFlow/agent_loop_01.ini
 +
  platform=/etc/MDtel/vFlow/platform.ini
  
EJEMPLO ".INI" DE SERVICIO
+
  [vflow]
  [arch_uuids]
+
  host_port=172.25.129.242:7900
  agent=/etc/MDtel/vFlow/agent_loop_01.ini
+
  timeout_s=20
  platform=/etc/MDtel/vFlow/platform.ini
+
  # channel_type=[voice|chat|email]
+
  channel_type=chat
  [vflow]
+
  # environment=[production|staging|test]
  host_port=172.25.129.242:7900
+
  environment=production
  timeout_s=20
+
  language=es
  # channel_type=[voice|chat|email]
+
 
  channel_type=chat
+
  [omnisuite]
  # environment=[production|staging|test]
+
  # channel_text_type=[chat|mail|sms|whatsup]
  environment=production
+
  channel_text_type=chat
  language=es
+
  service_id=vflow_service_id
+
  service_name=vflow_service_name
  [omnisuite]
+
</pre>
  # channel_text_type=[chat|mail|sms|whatsup]
 
  channel_text_type=chat
 
  service_id=vflow_service_id
 
  service_name=vflow_service_name
 
 
<br>
 
<br>
  
Línea 243: Línea 254:
  
 
Para canales de texto en Omnisuite existe un único Comando de invocación "omnisuiteText"
 
Para canales de texto en Omnisuite existe un único Comando de invocación "omnisuiteText"
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 1500px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
/usr/local/sbin/vFlowOmnisuite <config_arch> omnisuiteText <omnisuite_id> <omnisuite_websiteId> <omnisuite_createdAt> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> <question>
+
/usr/local/sbin/vFlowOmnisuite <config_arch> omnisuiteText <omnisuite_id> <omnisuite_websiteId> <omnisuite_createdAt> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> <question>
 +
</pre>
  
 
Parámetros ( Los OPCIONALES son "" si no se envía valor):
 
Parámetros ( Los OPCIONALES son "" si no se envía valor):
Línea 268: Línea 280:
 
|}
 
|}
  
Ejemplo de respuesta JSON
+
Ejemplo de respuesta JSON
{
+
 
  "errorNum": 0,
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
  "errorStr": "OK",
+
{
  "session": "e926548d-fdcf-11f0-a793-525400ef204c",
+
"errorNum": 0,
  "language": "es",
+
"errorStr": "OK",
  "response": "HOLA"
+
"session": "e926548d-fdcf-11f0-a793-525400ef204c",
}
+
"language": "es",
 +
"response": "HOLA"
 +
}
 +
</pre>
  
 
==== Para canales de voz ====
 
==== Para canales de voz ====
Línea 281: Línea 296:
  
 
===== Abrir sesión =====
 
===== Abrir sesión =====
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 1200px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionOpen <omnisuite_UniqueId> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email>
+
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionOpen <omnisuite_UniqueId> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email>
 +
</pre>
  
 
Parámetros (Los OPCIONALES son "" si no se envía valor):
 
Parámetros (Los OPCIONALES son "" si no se envía valor):
Línea 301: Línea 317:
  
  
Ejemplo de respuesta JSON
+
Ejemplo de respuesta JSON
 +
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 
  {
 
  {
 
     "errorNum": 0,
 
     "errorNum": 0,
Línea 308: Línea 325:
 
     "platform_id": "146"
 
     "platform_id": "146"
 
  }
 
  }
 +
</pre>
  
 
'''El value correspondiente al key "session" deberá ser guardado en una variable para siguientes invocaciones'''
 
'''El value correspondiente al key "session" deberá ser guardado en una variable para siguientes invocaciones'''
  
 
===== Enviar texto =====
 
===== Enviar texto =====
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 700px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
/usr/local/sbin/vFlowOmnisuite <config_arch> textRequest <vflow_session_uuid> <question>
+
/usr/local/sbin/vFlowOmnisuite <config_arch> textRequest <vflow_session_uuid> <question>
 +
</pre>
  
 
Parámetros:
 
Parámetros:
Línea 327: Línea 346:
 
|}
 
|}
  
Ejemplo de respuesta JSON
+
Ejemplo de respuesta JSON
 +
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 
  {
 
  {
 
     "errorNum": 0,
 
     "errorNum": 0,
Línea 335: Línea 355:
 
     "response": "Cristóbal Colón."
 
     "response": "Cristóbal Colón."
 
  }
 
  }
 +
</pre>
  
 
===== Cerrar sesión=====
 
===== Cerrar sesión=====
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 800px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionClose <vflow_session_uuid> <vflow_cause>
+
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionClose <vflow_session_uuid> <vflow_cause>
 +
</pre>
  
 
Parámetros  (Los OPCIONALES son "" si no se envía valor):
 
Parámetros  (Los OPCIONALES son "" si no se envía valor):
Línea 352: Línea 374:
  
  
Ejemplo de respuesta JSON
+
Ejemplo de respuesta JSON
 +
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 400px; margin-left: 50px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 
  {
 
  {
 
     "errorNum": 104,
 
     "errorNum": 104,
 
     "errorStr": "Wrong session"
 
     "errorStr": "Wrong session"
 
  }
 
  }
 +
</pre>
  
 
=== Ejemplos para omnisuite ===
 
=== Ejemplos para omnisuite ===
  
 
'''Ejemplo de chat'''
 
'''Ejemplo de chat'''
 
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 1400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
<pre>/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_chat.ini" "omnisuiteText" "{{interaction.id}}" "{{account.id}}" "{{interaction.createdAt}}" "" "" "" "{{message.body}}" | jq -r '.response'</pre>
+
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_chat.ini" "omnisuiteText" "{{interaction.id}}" "{{account.id}}" "{{interaction.createdAt}}" "" "" "" "{{message.body}}" | jq -r '.response'
 +
</pre>
  
  
Línea 372: Línea 397:
 
<br>
 
<br>
  
<pre>/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_voice.ini" "sessionOpen" "{UNIQUEID}" "" "" "" |  jq -r '.session' </pre>
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 1000px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_voice.ini" "sessionOpen" "{UNIQUEID}" "" "" "" |  jq -r '.session' </pre>
 
::<small>salida del comando almacenado en variable "vflow_sessionopen_response" para su posterior uso en cally square</small>
 
::<small>salida del comando almacenado en variable "vflow_sessionopen_response" para su posterior uso en cally square</small>
  
Línea 380: Línea 406:
 
<br>
 
<br>
  
<pre>/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "textRequest" "{vflow_sessionopen_response}" "{OPENAI_WHISPER_TRANSCRIPT}" | jq -r '.response'</pre>
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 1400px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">
 +
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "textRequest" "{vflow_sessionopen_response}" "{OPENAI_WHISPER_TRANSCRIPT}" | jq -r '.response'
 +
</pre>
 
::<small>la voz se ha transcrito con OpenAI, por eso se usa como parámetro {OPENAI_WHISPER_TRANSCRIPT})</small>
 
::<small>la voz se ha transcrito con OpenAI, por eso se usa como parámetro {OPENAI_WHISPER_TRANSCRIPT})</small>
  
Línea 388: Línea 416:
 
<br>
 
<br>
  
<pre>/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "sessionClose" "{{vflow_sessionopen_response}}" "normal"</pre>
+
<pre style="background-color: #f6f8fa; border: 1px solid #d1d5da; padding: 1em; border-radius: 4px; max-width: 1000px; margin-left: 0px; font-family: 'Ubuntu Mono', 'Consolas', monospace; white-space: pre-wrap;">  
 +
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "sessionClose" "{{vflow_sessionopen_response}}" "normal"
 +
</pre>
  
 
[[Archivo:Imagen sessionclose.jpg|900px|center|miniatura|Cerrar sesión en vFlow]]
 
[[Archivo:Imagen sessionclose.jpg|900px|center|miniatura|Cerrar sesión en vFlow]]

Revisión actual del 16:45 25 feb 2026

1 Descripción general vFlow

vFlow es un módulo de conexión a sistemas de inteligencia artifical para sistemas de comunicaciones unificadas, ya sean sistemas corporativos o contact center Gracias a vFlow, las plataformas de UC dispondrán de una solución para comunicarse con sistemas IA utilizando un mismo mecanismo independientemente de la solución de inteligencia artificial que se utilice

Para proporcionar el servicio de manera completa, vFlow (en concreto el orquestador) se conectará a sistemas de inteligencia artificial (LLM) que permitirán desarrollar los agentes definidos en los orquestadores

Conceptos:

  • Plataforma--> Plataforma de comunicaciones unificadas; por ejemplo Omnisuite o VIVAit Call
  • Orquestador--> Plataforma agéntica de IA (por ejemplo Flowise)
  • vFlowProxy--> Módulo VIVAit que conecta multiples plataformas con múltiples orquestadores
  • LLM--> Modelo de lenguaje natural que usará un orquestadores
  • Agente--> Cada uno de los flujos creados en vFlow; corresponde a un par plataforma/agentflow de orquestador
  • Servicio--> Cada elemento de negocio en la plataforma de CU (por ejemplo VDN)
Arquitecura de vFlow

Los módulos principales de vFlow son:

  • vFlowProxy: Recibe las conexiones de los sistemas de comunicaciones unificadas, y conecta con los orquestadores de Inteligencia Artificial de manera segura y adaptada al tipo de servicio; el acceso a vFlow Proxy desde las plataformas se realizará mediante:
  • Programa cliente: Se utiliza en el sistema de comunicaciones unificadas (actualmente VIVAit Call y Omnsisuite) para invocar a vFlow
  • API REST: Alternativa al programa cliente, vFlowProxy proporciona una API REST que facilita que cualquier plataforma pueda comunicarse mediante un procedimiento estándar y documentado
  • Portal de administración vFlow: Permite visualizar las interaciones realizadas y configurar el sistema
  • Orquestador de IA: Herramienta de Inteligencia Artificial que permitirá la creación de aplicaciones personalizadas (agentes)


Otros elementos relevantes serán:

  • Base de datos vFlow:
  • Almacena información sobre sesiones y transacciones realizadas
  • Almacena información de configuración sobre vFlow
  • Gestiona el RAG de las inteligencias artificiales a usar

2 Puesta en marcha de nodo vFlow


Existe un nodo vFlow en los repositorios habituales proporcionados


Para dar de alta nodo vflow en un cliente hay que:

  • Configurar IP (por defecto la maquina va configurada por DHCP)
  • Adaptar el firewall, para ello REVISAR el fichero /etc/firewall/vars.sh
  • Certificados validos en apache
  • REVISAR ficheros /etc/apache2/sites-enabled/flowise.conf y /etc/apache2/sites-enabled/vFlow.conf la variable ServerName (nombre valido de la maquina)


Accesos vFlow (se debe cambiar tras instalación):

  • Usuario ssh y de SO por defecto es sat y clave a proporcionar.
  • Para el portal de flowise las credenciales son usuario: vfloadmin@vflow.com clave: A proporcionar
  • Para el portal de vflow las credenciales son usaurio sat y clave a proporcionar.


Accesos BBDD vFlow

  • Para acceder a la base de datos desde el workbenck solo desde localhost (o tunel):
  • BBDD Vlfow (admin) vflowadmin // clave a proporcionar
  • BBDD Vlfow (no_admin) vflow // clave a proporcionar


Portal orquestador Flowise

ubicado en https://host.cliente.xx:4567


⚠️ ATENCION !! Los cambios en tablas de configuración de BBDD de vFlow (orquestadores, plataformas, agentes) requieren reinicio del servicio vFlowProxy


/etc/init.d/vFlowProxy.service status /etc/init.d/vFlowProxy.service stop /etc/init.d/vFlowProxy.service start


El fichero de configuración del demonio <cvode>vFlowProxy se encuentra en /etc/MDtel/vFlowProxy.conf, si bien este fichero de configuración no se modificará habitualmente (los parámetros generales de configuración de vFlowProxy se encuentran en la BBDD de vFlow)

Relevante para poder poner en marcha un loader:

  • Qdrant --> localhost:6333
  • Record Manager --> SQLite


Se adjunta imagen a modo de ejemplo

alta loader vFlow


3 Diagnósticos

tail -f /var/log/vFlowProxy/vFlowProxy.log
En nodo vFlowProxy
para cualquier canal


nc localhost 1131
En nodo vFlowProxy
Monitoriza estado del proceso vflowProxy


 {
  "proceso": {
    "nombre": "vFlowProxy",
    "version": "00.00.01",
    "inicio_ts": 1771315153,
    "inicio_cad": "20260217 085913",
    "log_alarmas_val": 8,
    "log_alarma_ultimo_ts": 1771970401,
    "log_alarma_ultimo_ts_cad": "20260224 230001"
  },
  "diagnostico": {
    "gmp": {
      "msj_val": 1022,
      "msj_max": 1024,
      "buf_val": 1024,
      "buf_max": 1024,
      "tarea_val": 7,
      "tarea_max": 15
    },
    "tiempo": {
      "uptime": 716665,
      "uptime_dias": 8,
      "uptime_horas": 7,
      "uptime_minutos": 4,
      "uptime_segundos": 25
    },
    "wws": {
      "conexiones_val": 0,
      "conexiones_max_periodo": 0,
      "hilos_val": 4,
      "hilos_max": 4,
      "wsi_cad": "sesiones=0/200"
    }
  },
  "alarmas_nivel_max": 0,
  "alarmas": []
 }

Es relevante la monitorización de sesiones "wsi_cad": "sesiones=0/200" (usadas/máximas)

asterisk -rv | grep callsquare_name
en nodo Omnisuite
para canal voz


tail -f /var/log/xcally/agi-combined.yyyy-mm-dd.log
en nodo Omnisuite
para canal voz


tail -f /var/log/xcally/routing-combined.yyyy-mm-dd.log
para canal voz

4 Para probar desde vFlow

En /home/sat/vFlowProxy hay scripts de prueba (se configuran en el vars.sh); para usar los scripts de prueba tendremos que tener también ".ini" en vFlow

Es útil comenzar con

/home/sat/vFlowProxy/vFlowGetInfo.sh

que sin parámetros adicionales confirma el correcto estado de vFlowProxy

{
  "errorNum": 0,
  "errorStr": "OK",
  "app": "vFlowProxy",
  "version": "00.00.01",
  "sessions_opened": 0,
  "sessions_limit": 200,
  "sessions_sleep_timeout_s": 3600,
  "alarms": 8
}

5 Integración de vFlow desde Omnisuite


5.1 Descripción general

En Omnisuite, la integración con vFlow, se realiza con el programa vFlowOmnisuite, que podrá ser invocado como ejecutable (más rápido, para debian), o como Python (más universal)

    /usr/local/sbin/vFlowOmnisuite (OPCIÓN PREFERENTE)
    /usr/local/sbin/vFlowOmnisuite.py (LEGACY)

Asociado al programa existen los siguientes ficheros de configuración (.ini):

Un ".ini" de plataforma Omnisuite en vFlow --> Solo contiene uuid de la plataforma; se entrega un ".ini" a modo de ejemplo en /etc/MDtel/vFlow/platform.ini

EJEMPLO ".INI" DE PLATAFORMA

   [uuids]
   platform=1d111530-e22d-11f0-b0f2-5254008bef96

Un ".ini" por agente en vFlow --> Solo contiene uuid del agente según su identificación en vFlow (NO en un orquestador, por ejemplo flowise); se entrega un ".ini" asociado a un agente "loop" existente en Flowise /etc/MDtel/vFlow/agent_loop_01.ini

EJEMPLO ".INI" DE AGENTE

   [uuids]
   agent=1a3a1020-ea1d-11f0-b4a5-5254008bef96

Un ".ini" por servicio --> Configuración de cada servicio en Omnisuite; se entrega un ".ini" a modo de ejemplo en /etc/MDtel/vFlow/service.ini En cada fichero de servicio configuraremos

  • Donde está Vflow
  • Agente
  • Plataforma
  • timeout_s --> Importante, es afectado por el LLM
  • channel_text_type --> IMPORTANTE si el servicio es de texto que esté bien (vacio solo si el servicio es de texto, NO COMENTARLO)
  • environment --> production, staging, test

EJEMPLO ".INI" DE SERVICIO

  [arch_uuids]
  agent=/etc/MDtel/vFlow/agent_loop_01.ini
  platform=/etc/MDtel/vFlow/platform.ini

  [vflow]
  host_port=172.25.129.242:7900
  timeout_s=20
  # channel_type=[voice|chat|email]
  channel_type=chat
  # environment=[production|staging|test]
  environment=production
  language=es

  [omnisuite]
  # channel_text_type=[chat|mail|sms|whatsup]
  channel_text_type=chat
  service_id=vflow_service_id
  service_name=vflow_service_name


La imagen siguiente muestra el esquema de relación entre orquestador/plataforma/agente/servicio en la plataforma y en vFlow

Relación orquestador-plataforma-agente-servicio


5.2 Invocación

5.2.1 Para canales de texto

Para canales de texto en Omnisuite existe un único Comando de invocación "omnisuiteText"

/usr/local/sbin/vFlowOmnisuite <config_arch> omnisuiteText <omnisuite_id> <omnisuite_websiteId> <omnisuite_createdAt> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email> <question>

Parámetros ( Los OPCIONALES son "" si no se envía valor):

Parámetro Obligatoriedad Descripción
`<config_arch>` OBLIGATORIO ".ini" del servicio
`<omnisuite_id>` OBLIGATORIO Identificativo de la interacción en Omnisuite
`<omnisuite_websiteId>` OBLIGATORIO Identificativo del servicio en Omnisuite (ej. website id en chat)
`<omnisuite_createdAt>` OBLIGATORIO Creación de la interacción
`<vflow_client_id>` OPCIONAL Id de cliente en Omnisuite
`<vflow_client_phone_number>` OPCIONAL Telf de cliente en Omnisuite
`<vflow_client_email>` OPCIONAL Email de cliente en Omnisuite
`<question>` OBLIGATORIO Texto a enviar al orquestado (p. ej. Flowise)

Ejemplo de respuesta JSON

{
 "errorNum": 0,
 "errorStr": "OK",
 "session": "e926548d-fdcf-11f0-a793-525400ef204c",
 "language": "es",
 "response": "HOLA"
}

5.2.2 Para canales de voz

Para canales de voz, existen comandos para "abrir sesión", "enviar texto" y "cerrar sesión"

5.2.2.1 Abrir sesión
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionOpen <omnisuite_UniqueId> <vflow_client_id> <vflow_client_phone_number> <vflow_client_email>

Parámetros (Los OPCIONALES son "" si no se envía valor):

Parámetro Requisito Descripción
<config_arch> OBLIGATORIO ".ini" del servicio
<omnisuite_UniqueId> OBLIGATORIO Unique_ID de asterisk de la llamada en Omnisuite
<vflow_client_id> OPCIONAL Id de cliente en Omnisuite
<vflow_client_phone_number> OPCIONAL Telf de cliente en Omnisuite
<vflow_client_email> OPCIONAL Email de cliente en Omnisuite


Ejemplo de respuesta JSON

 {
    "errorNum": 0,
    "errorStr": "OK",
    "session": "ec73df29-f08a-11f0-a8ec-525400ef204c",
    "platform_id": "146"
 }

El value correspondiente al key "session" deberá ser guardado en una variable para siguientes invocaciones

5.2.2.2 Enviar texto
/usr/local/sbin/vFlowOmnisuite <config_arch> textRequest <vflow_session_uuid> <question>

Parámetros:

Parámetro Requisito Descripción
<config_arch> OBLIGATORIO ".ini" del servicio
<vflow_session_uuid> OBLIGATORIO Variable "session" almacenada en el "sessionOpen"
<question> OBLIGATORIO Texto a enviar al orquestado (p. ej. Flowise) (normal, abandoned, other)

Ejemplo de respuesta JSON

 {
    "errorNum": 0,
    "errorStr": "OK",
    "session": "c6f6fad7-f6c1-11f0-a793-525400ef204c",
    "language": "ES",
    "response": "Cristóbal Colón."
 }
5.2.2.3 Cerrar sesión
/usr/local/sbin/vFlowOmnisuite <config_arch> sessionClose <vflow_session_uuid> <vflow_cause>

Parámetros (Los OPCIONALES son "" si no se envía valor):

Parámetro Estado Descripción
<config_arch> OBLIGATORIO ".ini" del servicio
<vflow_session_uuid> OBLIGATORIO Variable "session" almacenada en el "sessionOpen"
<vflow_cause> OPCIONAL (normal, abandoned, expired, other)


Ejemplo de respuesta JSON

 {
    "errorNum": 104,
    "errorStr": "Wrong session"
 }

5.3 Ejemplos para omnisuite

Ejemplo de chat

/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_chat.ini" "omnisuiteText" "{{interaction.id}}" "{{account.id}}" "{{interaction.createdAt}}" "" "" "" "{{message.body}}" | jq -r '.response'


Ejemplo de voz

Ejemplo de flujo de Cally Square




/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_voice.ini" "sessionOpen" "{UNIQUEID}" "" "" "" |  jq -r '.session' 
salida del comando almacenado en variable "vflow_sessionopen_response" para su posterior uso en cally square
Abrir sesión en vFlow




/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "textRequest" "{vflow_sessionopen_response}" "{OPENAI_WHISPER_TRANSCRIPT}" | jq -r '.response'
la voz se ha transcrito con OpenAI, por eso se usa como parámetro {OPENAI_WHISPER_TRANSCRIPT})
Enviar texto en vFlow




 
/usr/local/sbin/vFlowOmnisuite "/etc/MDtel/vFlow/service_desa_voz.ini" "sessionClose" "{{vflow_sessionopen_response}}" "normal"
Cerrar sesión en vFlow