AnnA Web Service
AnnA Web Service es un recurso que permite interactuar con AnnA. Con él, puedes componer los nodos de un flujo de trabajo de AnnA para que el bot pueda leer y ejecutar según lo desees.
Cómo funciona
Al crear un Web Service, necesitas registrarlo en AnnA para que genere las claves necesarias para cifrar/descifrar. Luego, agrega un nodo de Web Service a tu Flujo de Trabajo de AnnA y selecciona el Web Service que se ejecutará.
Nuestro sistema llamará al Web Service que registraste y luego ejecutará los contenedores en el orden que los agregaste a la estructura.
Utilizando la clase AnnAWebService
Para el nodo de Web Service de AnnA, necesitarás la clase AnnAWebService para instanciar y añadir contenedores a ser ejecutados.
Ejemplos:
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
Agregando un contenedor de mensaje:
// O segundo parâmetro são as opções; se não deseja usá-las, basta passar nulo. annaWs.addMessageContainer("Hello", null);
Puedes hacer encadenamiento de métodos al agregar contenedores (como en un builder):
annaWs .addMessageContainer("Hello", null) .addTimeContainer(5, null);
Código de ejemplo
package center.anna.demoannaservices.annaws;
import center.anna.annawebservices.AnnaAlternative;import center.anna.annawebservices.AnnaWebService;import center.anna.annawebservices.options.*;import org.springframework.http.*;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;
import java.nio.charset.StandardCharsets;import java.util.ArrayList;
@RestController@RequestMapping("/AnnaWS")public class Sample {
@PostMapping(value = "/", produces = MediaType.TEXT_PLAIN_VALUE) public ResponseEntity<String> annaWsTest(@RequestParam(name = "ANNAEXEC") String iv) { String encryptionKey = "YOUR_ENCRYPTION_KEY"; String decryptionKey = "YOUR_DECRYPTION_KEY";
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs .addMessageContainer("Hello", // Cada tipo de contenedor tiene un constructor de opciones disponible. AnnaMessageContainerOptions.builder() .Alias("Hello123") .build() ) .addQuestionContainer("1 + 1 = ?", AnnaQuestionContainerOptions.builder() .Alias("Question123") .RightAnswer("S") .PossibleAnswers(new String[]{"dois", "two", "2"}) .build() );
HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8));
var responseData = annaWs.getEncryptedContainers();
return new ResponseEntity<>(responseData, httpHeaders, HttpStatus.OK); }}
Agregando un contenedor de mensaje:
Envía un mensaje al usuario.
Parámetros:
- Mensaje: Obligatorio. El texto que se enviará al usuario, por ejemplo, ¡Hola Mundo!
- Opciones
- Alias: Opcional. Úsalo para identificar el contenedor después de la ejecución del nodo del Servicio Web, por ejemplo, Hello123.
- RestrictToGroup: Opcional. Llena los alias de grupos de usuarios registrados en la empresa.
- BeforeExecutionRule: Opcional. Debe ser una expresión. Puedes utilizar Funciones de AnnA que devuelvan “true” o “false” para decidir si este contenedor debe ejecutarse.
Ejemplo de uso
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs .addMessageContainer("Message container", // Si deseas usar las opciones del contenedor, utiliza este constructor; de lo contrario, simplemente pasa nulo. AnnaMessageContainerOptions.builder() .Alias("Hello123") .build() );
Agregando contenedor ExecFunction
Ejecuta una o más Funciones de AnnA.
Parámetros:
- Expresión: Obligatorio. Escribe expresiones con Funciones de AnnA aquí, por ejemplo, AddParm(Test1,123) AddParm(Test,456)
- Opciones
- Alias: Opcional. Úsalo para identificar el contenedor después de la ejecución del nodo del Servicio Web, por ejemplo, Function123.
- RestrictToGroup: Opcional. Llena con los alias de los grupos de usuarios registrados en la empresa.
- BeforeExecutionRule: Opcional. Debe ser una expresión. Puedes usar Funciones de AnnA que devuelvan “true” o “false” para decidir si este contenedor debe ejecutarse.
Ejemplo de uso
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaws.addExecFunctionContainer("ADDPARM(Teste,Hello)", // Si deseas usar las opciones del contenedor, utiliza este constructor; de lo contrario, simplemente pasa nulo. AnnaExecFunctionContainerOptions.builder() .Alias("ExecFunction123") .build() );
Agregando contenedor de Tiempo
Espere unos segundos antes de continuar con el flujo de ejecución de los contenedores.
Parámetros:
- TimeToWait: Obligatorio. Establece el tiempo en segundos para pausar la ejecución.
- Opciones
- Alias: Opcional. Úsalo para identificar el contenedor después de la ejecución del nodo del Servicio Web, por ejemplo, Time123.
- ShowMessage: Opcional. Indica si se debe mostrar o no el mensaje. El valor predeterminado es ‘S’ (Mostrar el mensaje).
- Message: Opcional. El texto que se enviará al usuario, por ejemplo, ¡Hola Mundo!
- RestrictToGroup: Opcional. Complete con los alias de los grupos de usuarios registrados en la empresa.
- BeforeExecutionRule: Opcional. Debe ser una expresión. Puede utilizar Funciones de AnnA que devuelvan “true” o “false” para decidir si este contenedor debe ejecutarse.
Ejemplo de uso
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addTimeContainer(5, // Si deseas usar las opciones del contenedor, utiliza este constructor; de lo contrario, simplemente pasa nulo. AnnaTimeContainerOptions.builder() .Alias("Time123") .build() );
Agregando contenedor Multimedia
Envía medios al usuario, como imágenes, vídeos, audios y documentos.
Parámetros:
- MediaURL: Obligatorio. La URL de descarga de un archivo, por ejemplo, https://su.dominio/ruta/a/archivo.extensión
- Opciones
- Alias: Opcional. Úsalo para identificar el contenedor después de la ejecución del nodo del Servicio Web, por ejemplo, Media123.
- Message: Opcional. El texto que se enviará al usuario, por ejemplo, ¡Hola Mundo!
- RestrictToGroup: Opcional. Completa con los alias de los grupos de usuarios registrados en la empresa.
- BeforeExecutionRule: Opcional. Debe ser una expresión. Puedes usar Funciones de AnnA que devuelvan “true” o “false” para decidir si este contenedor debe ejecutarse.
Ejemplo de uso
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addMultimediaContainer("https://learning.anna.center/Resources/AnnaIcon.png", // Si deseas usar las opciones del contenedor, utiliza este constructor; de lo contrario, simplemente pasa nulo. AnnaMultimediaContainerOptions.builder() .Alias("Media123") .Message("Message of the image") .build() );
Agregando contenedor de Pregunta
Enviar una pregunta al usuario
Parámetros:
- Question: Obligatorio. La pregunta que se enviará al usuario.
- Opciones
- Alias: Opcional. Utilízalo para identificar el contenedor después de la ejecución del nodo del Servicio Web, por ejemplo, Function123.
- RestrictToGroup: Opcional. Completa con los alias de los grupos de usuarios registrados en la empresa.
- BeforeExecutionRule: Opcional. Debe ser una expresión. Puedes usar Funciones de AnnA que devuelvan “true” o “false” para decidir si este contenedor debe ejecutarse.
- Competence: Opcional. Una competencia ya registrada en la empresa. Se creará una nueva competencia si no existe en la empresa.
- Subject: Opcional. Un tema ya registrado en la empresa. Se creará un nuevo tema si no existe en la empresa.
- Topic: Opcional. Un tema dentro del asunto. Se creará si no existe.
- IgnoreExecFluxo: Opcional. Ignora otras acciones del usuario además de responder a la pregunta actual o finaliza todos los servicios.
- SensitiveData: Opcional. Ingresa ‘S’ para cifrar la respuesta usando la clave de cifrado de la empresa. Ten en cuenta que al recuperar la respuesta usando las Funciones de AnnA, también estará cifrada. El valor predeterminado es ‘N’.
- RightAnswer: Opcional. Activa esta función si deseas verificar si la respuesta está en el conjunto de respuestas posibles.
- RightAnswerValue: Opcional. Los puntos que obtendrá el usuario si responde correctamente.
- AnswerType: Opcional. ‘N’ si no deseas enviar comentarios sobre la respuesta. ‘Q’ si deseas enviar comentarios. El valor predeterminado es ‘N’.
- CorrectAnswerComment: Opcional. Cuando answerType sea ‘Q’, utiliza esta configuración para enviar comentarios positivos al usuario.
- IncorrectAnswerComment: Opcional. Cuando answerType sea ‘Q’, utiliza esta configuración para enviar comentarios negativos al usuario.
- DynamicValidations: Opcional. Escribe expresiones utilizando Funciones de AnnA que devuelvan TRUE o FALSE. La ejecución continuará cuando la expresión devuelva TRUE.
- ValidationError: Opcional. Establece un mensaje para los errores de validación cuando dynamicValidations devuelva FALSE.
- ValidationMask: Opcional. Establece una máscara para la respuesta del usuario.
- ExternalData: Opcional. Puede almacenar cualquier información que desees recuperar con Funciones de AnnA, por ejemplo, “LastAnswerJSON()” o “AnswersJSON()“.
- PossibleAnswers: Opcional. Si “rightAnswer” está definido como “S”, entonces esta propiedad debe proporcionarse. Una colección de cadenas que contienen las posibles respuestas correctas a la pregunta.
Ejemplo de uso
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addQuestionContainer("1 + 1 = ?", AnnaQuestionContainerOptions.builder() .Alias("Question123") .RightAnswer("S") .PossibleAnswers(new String[]{"dois", "two", "2"}) .build() );
Agregando contenedor de Alternativa
Enviar una pregunta de opción múltiple al usuario.
Parámetros:
- Question: Obligatorio. La pregunta que se enviará al usuario.
- Alternatives: Obligatorio. Array que contiene las alternativas.
- Alternative: Obligatorio. Texto de la alternativa.
- Alias: Opcional. Alias de la alternativa, se puede usar para identificar la respuesta del usuario en nodos subsecuentes.
- RestrictToGroup: Opcional. Completa con los alias de los grupos de usuarios registrados en la empresa.
- ExhibitionRule: Opcional. Use Funções da AnnA para escribir una expresión que devuelva TRUE o FALSE. Si la expresión devuelve TRUE, el contenedor se ejecutará.
- IsCorrectAnswer: Opcional. Disponible solo cuando la opción “rightAnswer” está definida como ‘S’. Usa ‘S’ para marcar la alternativa como respuesta correcta.
- AlternativeValue: Opcional. Un valor para las alternativas que se utilizará en estadísticas.
- Order: Opcional. Orden de la alternativa.
- Comment: Opcional. Mensaje que se enviará al usuario después de que seleccione la alternativa.
- Opciones
- Alias: Opcional. Use para identificar el contenedor después de la ejecución del nó del Web Service, por ejemplo, Function123.
- RestrictToGroup: Opcional. Completa con los alias de los grupos de usuarios registrados en la empresa.
- BeforeExecutionRule: Opcional. Debe ser una expresión. Puedes usar Funções da AnnA que devuelvan “true” o “false” para decidir si este contenedor debe ejecutarse.
- Competence: Opcional. Una competencia ya registrada en la empresa. Se creará una nueva competencia si no existe en la empresa.
- Subject: Opcional. Un tema ya registrado en la empresa. Se creará un nuevo tema si no existe en la empresa.
- Enumeration: Opcional. Establece la enumeración de las alternativas. N = Números, L = Letras, R = Romanos, I = Lista (Popup en WhatsApp), B = Botones (Botones en WhatsApp)
- Randomize: Opcional. Ingresa ‘S’ para barajar las alternativas. El valor predeterminado es ‘N’.
- RightAnswer: Opcional. Activa esta función si deseas verificar si la respuesta está en el conjunto de respuestas posibles.
- AnswerType: Opcional. ‘N’ si no deseas enviar comentarios sobre la respuesta. ‘Q’ si deseas enviar comentarios. El valor predeterminado es ‘N’.
- AnswerTypeComment: Opcional. El mensaje que se enviará cuando el usuario responda a la pregunta.
- ExternalData: Opcional. Puede almacenar cualquier información que desees recuperar con Funções da AnnA, por ejemplo, “LastAnswerJSON()” o “AnswersJSON()“.
Ejemplo de uso
var alternatives = new ArrayList<AnnaAlternative>();
alternatives.add( AnnaAlternative.builder() .Alias("Alternative001") .Alternative("2 two") .Order("1") .IsCorrectAnswer("S") .build() );
alternatives.add( AnnaAlternative.builder() .Alias("Alternative002") .Alternative("5 five") .Order("2") .build() );
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addAlternativeContainer( "1 + 1 = ?", alternatives, AnnaAlternativeContainerOptions.builder() .Alias("Alternative123") .RightAnswer("S") .build() );