Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature - SMS - Integración inicial del plugin de Seven para el envío de SMS #182

Open
wants to merge 118 commits into
base: develop
Choose a base branch
from

Conversation

enricsinergia
Copy link
Collaborator

@enricsinergia enricsinergia commented Apr 2, 2024

Documento con algunas explicaciones mientras no se completa el PR: https://docs.google.com/document/d/1Kat53nJ9CJT1Qc97Lx6IbXTQ9-eUs-AxTUBnVqqkqjk/edit?usp=sharing

Descripción

Este PR añade a SinergiaCRM la funcionalidad para poder enviar mensajes SMS a teléfonos de Personas, Interesados, Empleados y Organizaciones.
Esta funcionalidad se ha implementado teniendo presente la posibilidad de tener nuevos tipos de mensajes (whatsapp) en el futuro así como la posibilidad que alguna entidad no quiera utilizar el proveedor de SMS que se ha seleccionado inicialmente (y para el que se ha desarrollado las llamadas API pertinentes).

Para ello se desarrollan los siguientes puntos:

  1. Creación de un módulo de mensajes donde almacenar los SMS enviados
  2. Modificación de los subpaneles de actividad e histórico de Personas y Organizaciones para que muestren también los mensajes enviados.
  3. Vista especial de creación de mensajes (inspirada en la vista de creación de e-mails).
  4. Interfaz con la API de Seven (https://www.seven.io/) para el envío de SMS
  5. Nueva acción de flujos de trabajo (al estilo de la envío de e-mails) para poder enviar mensajes
  6. Acción de envío en bloque en los módulos de Personas, Interesados, Empleados y Organizaciones

Configuración

  1. Habilitar el módulo de Mensajes (inicialmente oculto)
  2. Configurar / revisar las variables en el módulo de Configuración
  • MESSAGES_LIMIT - Límite de mensajes: límite a aplicar al envío masivo de mensajes desde la vista de lista
  • MESSAGES_SENDER - Remitente: Nombre que aparecerá como remitente en los mensajes enviados
  • SEVEN_ACTIVE - Activo: Indicador que indica si deben enviarse los mensajes SMS a través de Seven (1) o no deben enviarse dichos mensajes (0)
  • SEVEN_API_KEY - Clave de SEVEN: Clave que debe obtenerse del proveedor de mensajes SMS (SEVEN).

Uso de la funcionalidad

Una vez habilitado el módulo, existen 5 formas de generar mensajes:

  1. Desde el propio módulo de mensajes, creando un nuevo mensaje y seleccionando ahí el destinatario
  2. Desde las vistas de detalle de los módulos de Personas, Interesados, Empleados y Organizaciones. En cada campo teléfono aparecerá un nuevo icono que permite abrir la vista de edición de mensaje directamente para enviar un mensaje al registro con el que se estaba trabajando y al teléfono desde el que se accede
  3. Desde los subpaneles de actividades e histórico de Personas y Organizaciones: hay una nueva acción de creación de mensajes
  4. Desde las vistas de lista de los módulos de Personas,Interesados, Empleados y Organizaciones. Existe una nueva función dentro del menú de acciones masivas para enviar mensajes. Lógicamente, sólo se enviará mensaje a los registros seleccionados que dispongan de teléfono en el campo correspondiente de cada módulo
  5. Mediante un flujo de trabajo: se ha creado una nueva acción que permite enviar un mensaje de forma desatendida

Aspectos a tener presentes

  1. Cada módulo tiene un campo por defecto al que se envían los mensajes. Ello es necesario para las acciones masivas y la acción del flujo de trabajo. También se usa cuando se selecciona un registro relacionado desde la creación de mensajes. El campo a usar no es configurable por el usuario, debe hacerse por código. En Utils.php se define un array con los módulos habilitados para el envío de mensajes donde se indica para cada módulo el campo a usar. En caso que una entidad necesite cambiar este punto, deberá cambiarse desde custom/Extension, creando un nuevo elemento en el array (para un nuevo módulo) o sobreescribiendo el elemento pertinente. En caso de un nuevo módulo será necesario añadirlo también a la lista stic_messages_parent_type_display en los distintos idiomas.
  2. Para la confección de mensajes se pueden usar plantillas de e-mail. Se ha creado un nuevo tipo de plantilla (SMS) que sólo permite definir texto

Puntos pendientes

  1. Revisar la estrategia para añadir nuevos módulos a los que se pueda enviar mensajes. Ahora mismo requiere, entyre otros, ampliar la lista stic_MessagesUtils::$messageableModules que encontramos en Utils.php, lo cual puede hacerse añadiendo un fichero en custom/Extension/.../vardefs tal que
    <?php require_once('modules/stic_Messages/Utils.php'); stic_MessagesUtils::$messageableModules['stic_Assessments'] = array('phoneField' => 'phone_office', 'name' => 'name');

Pruebas

  1. Comprobar, desde los 4 módulos adaptados, que aparece el icono de mensajes al lado del teléfono, cuando el módulo está habilitado.
  2. Comprobar, desde los 4 módulos adaptados, que NO aparece el icono de mensajes al lado del teléfono, cuando el módulo está inhabilitado.
  3. Comprobar que al pinchar en el teléfono, se abre la ventana para enviar el mensaje y se arrastra correctamente tanto el bean a relacionar como el número de teléfono pinchado.
  4. Comprobar que desde el subpanel de actividad y el de histórico, se puede también abrir la ventana para crear el mensaje. En este caso, el teléfono arrastrado será el por defecto de cada módulo (phone_mobile excepto para Accounts que es phone_office).
  5. Comprobar que los mensajes relacionados con cada elemento aparecen correctamente en el subpanel de histórico.
  6. Dentro de la ventana para componer el mensaje comprobar:
  • Si se cambia el elemento con el que se relaciona, se actualiza automáticamente el teléfono.
  • Se recuperar correctamente el nombre del remitente definido
  • Al variar la plantilla, se refresca correctamente el contenido del campo “Mensaje”
  1. Al enviar un SMS verificar:
  • En caso que la plantilla tenga variables, se sustituyen correctamente con los datos del bean relacionado. Comprobar con los distintos módulos.
  • Aparece el mensaje correctamente enviado en la interfaz de SEVEN.
  • Si el estado de la ventana del compose no es “Enviado”, no se envía realmente el mensaje.
  • Si se sobre-escribe el Sender en la vista de creación, se utiliza el valor sobre-escrito
  • Si se cambia el teléfono en la vista de creación, se utiliza el teléfono modificado
  1. Generar algunos mensajes en estado “borrador” o “error”. Desde la vista de lista de mensajes, seleccionarlos y lanzar la acción de re-envío.
  • Comprobar que se envían correctamente
  • Comprobar que si se han seleccionado mensajes ya enviados, no se vuelven a enviar.
  1. En mensajes enviados, comprobar que:
  • No es posible cambiar el estado
  • No es posible cambiar el contenido del mensaje enviado
  1. Comprobar que es posible el envío masivo desde los módulos habilitados. Comprobar que se verifica el límite configurado en settings y que a cada Persona se envía el mensaje con sus datos.
  2. Verificar la nueva acción de flujos de trabajo
  • Verificar que no interfiere con la acción de envío de e-mails (de la cual se partió)
  • Verificar los 5 posibles tipos de destinos: teléfono, teléfono del registro….
  • Comprobar que aparecen los campos relacionados apropiados
  • Comprobar que si el módulo del WK no es uno de los módulos habilitados, no aparece la opción “Teléfono del registro”
  • Comprobar que si no hay campos relacionados válidos, no aparece la opción “Campo relacionado”
  • Verificar que cuando el destinatario del mensaje es distinto del registro que causa la ejecución, los datos usados son los del registro que causa la ejecución y no los del destinatario.

Copy link

github-actions bot commented Apr 2, 2024

Actions executed at: 2024-11-11 10:28:24.

@enricsinergia enricsinergia marked this pull request as ready for review September 27, 2024 09:03
Copy link
Collaborator

@AlbertoSTIC AlbertoSTIC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ver comentarios.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¿CreateMessage o SendMessage?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Puedes crear un mensaje en draft, de ahí que no le llamase Send.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diría de seguir el mismo patrón que la acción de Emails, que se llama "sendEmail".
Si se quiere crear un mensaje en draft, se puede hacer desde la acción de crear registro.


class CustomAccountsViewDetail extends AccountsViewDetail
{
use Checkstic_Messages;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entiendo que las "trait" se utilizan para darle más características a la clase que los usa. En este sentido, yo creo que la función "echoIsMessagesModuleActive" no es una caracteristica del objeto "ViewDetail".
Por otro lado, creo que el nombre de la función tampoco encaja con lo que hace. Ya que no solo comprueba si el módulo está activo o no, sino otros temas aún más importantes.
Yo le daría una vuelta a este tema. Tenemos otros módulos que también muestran botones en Accounts y en otros (como por ejemplo los botones PDF, Incorpora) y estaría bien establecer un estandar para poder aplicarlo en todos los casos donde toque.
Si nos parece que con lo que hacemos con Incorpora no nos convence, revisemos lo que ya hace SuiteCRM o hagamos una propuesta consistente.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cuando creé el trait, estaba usando alguna variable de la clase para poder hacer lo que hace, y por eso necesitaba que fuera un trait y no podía ser una función de Utils. Tal como está ahora, puede incorporarse a Utils y denominarla algo como "includeMessagesJS".
Respecto a lo que hace Incorpora y los botones que se muestran en otros módulos, no he visto que pueda ocultarse la opción de sincronización con Incorpora, cómo sí queremos que suceda con el caso de los mensajes: si el módulo de mensajes no está activo no queremos que la acción aparezca. Por eso no podemos incluirlo directamente en el js de los módulos como se hace con Incorpora u otros módulos.
Otra diferencia clave con Incorpora es que añadimos el icono al lado de cada teléfono, lo cual obliga a insertar un código JS en esos casos....que también sólo queremos que aparezca el icono si hay módulo de mensajes activo.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lo añadiría al Utils.php entonces.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hecho

require_once 'SticInclude/Views.php';

class CustomAccountsViewList extends AccountsViewList
{
use Checkstic_Messages;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem.

custom/modules/EmailTemplates/SticUtils.js Show resolved Hide resolved
modules/Employees/views/view.detail.php Outdated Show resolved Hide resolved
modules/stic_Messages/controller.php Outdated Show resolved Hide resolved
modules/stic_Messages/Helpers/SevenSmsHelper.php Outdated Show resolved Hide resolved
Copy link
Collaborator

@AlbertoSTIC AlbertoSTIC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ver comentarios.

Copy link
Collaborator Author

@enricsinergia enricsinergia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¿CreateMessage o SendMessage?

Puedes crear un mensaje y dejarlo como Draft

@AlbertoSTIC AlbertoSTIC linked an issue Oct 24, 2024 that may be closed by this pull request
@@ -460,7 +460,7 @@ function viewType() {
return "list";
} else if ($(".sub-panel .quickcreate form").length == 1) {
return "quickcreate";
} else if ($(".detail-view").length == 1) {
} else if ($(".detail-view").length == 1 || $("form[name=DetailView]").length == 1) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¿En que casos se ha detectado que se debería ampliar la condición para la vista de detalle? Estas condiciones se llevan utilizando así desde hace tiempo en diferentes procesos y no hasta ahora no ha sido necesario.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si no me equivoco es en EmailTemplates. La vista detail se construye sin tpl y no sigue el estándar habitual.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diría de seguir el mismo patrón que la acción de Emails, que se llama "sendEmail".
Si se quiere crear un mensaje en draft, se puede hacer desde la acción de crear registro.

@@ -23,6 +23,7 @@

require_once 'modules/Accounts/views/view.detail.php';
require_once 'SticInclude/Views.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¿Ya no es necesario?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La acción ya ha sido renombrada. Igualmente mantengo la opción de cambiar el estado y que no sea Sent, ya que creando el registro con la acción de "Crear registro" no tienes el mismo juego de destinatarios que te permite la acción específica.

En cuanto al Checstic_Messages ya está eliminada toda traza. Me quedaron colgados estos require y ya se corrigió hace unos días.

@@ -22,6 +22,7 @@
*/

require_once 'modules/Accounts/views/view.list.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

@@ -23,6 +23,7 @@

require_once 'modules/Contacts/views/view.detail.php';
require_once 'SticInclude/Views.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

@@ -23,6 +23,7 @@

require_once 'modules/Employees/views/view.detail.php';
require_once 'SticInclude/Views.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

@@ -22,6 +22,7 @@
*/

require_once 'modules/Employees/views/view.list.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

@@ -23,6 +23,7 @@

require_once 'modules/Leads/views/view.detail.php';
require_once 'SticInclude/Views.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

@@ -22,6 +22,7 @@
*/

require_once 'modules/Leads/views/view.list.php';
require_once 'modules/stic_Messages/Checkstic_Messages.php';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ídem

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Faltarían comentarios en las funciones que son susceptibles de ser usadas en procesos externos.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hecho

Copy link
Collaborator

@AlbertoSTIC AlbertoSTIC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revisado el código

Copy link
Collaborator

@PaulaaSTIC PaulaaSTIC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validando, he visto algunos comentarios sobre las distintas pruebas a realizar:

  1. Aunque el módulo esté inhabilitado, aparece el icono, pero no la opción en la vista de detalle ni en la lista; solo se muestra el icono.

7.Dentro de la ventana de mensaje, al seleccionar una plantilla de email, pueden aparecer etiquetas sin convertir. Quizá se podrían filtrar las plantillas para mostrar solo las de SMS.

  1. Con un FdT, se puede cambiar el estado de un SMS. Además, me sucede lo siguiente: si cambio un SMS de "Enviado" a "Error" por medio de un FdT, aunque luego intente enviarlo en la vista de lista de Mensajes, el estado no se actualiza y se queda en "Error".

  2. En los FdT, la opción de elegir "para quién" en el campo de teléfono no funciona. Tampoco se puede seleccionar una plantilla de SMS (aparece como plantilla de email, pero sale en blanco). Los emails sí funcionan.

@enricsinergia
Copy link
Collaborator Author

Validando, he visto algunos comentarios sobre las distintas pruebas a realizar:

  1. Aunque el módulo esté inhabilitado, aparece el icono, pero no la opción en la vista de detalle ni en la lista; solo se muestra el icono.
    Resuelto

7.Dentro de la ventana de mensaje, al seleccionar una plantilla de email, pueden aparecer etiquetas sin convertir. Quizá se podrían filtrar las plantillas para mostrar solo las de SMS.
Añadido filtro en la ventana de pop-up.

  1. Con un FdT, se puede cambiar el estado de un SMS. Además, me sucede lo siguiente: si cambio un SMS de "Enviado" a "Error" por medio de un FdT, aunque luego intente enviarlo en la vista de lista de Mensajes, el estado no se actualiza y se queda en "Error".
    No me ha pasado. Puede ser que cuando hacías el retry también se te estuviera lanzando el FdT que cambia el estado y por eso siguiera como en error?
  1. En los FdT, la opción de elegir "para quién" en el campo de teléfono no funciona. Tampoco se puede seleccionar una plantilla de SMS (aparece como plantilla de email, pero sale en blanco). Los emails sí funcionan.
    Resuelto. Se había renombrado la acción del FdT y la invocación del fichero JS todavía tenía el nombre viejo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Nueva funcionalidad - General - Integración para envío de SMS
3 participants