AnnA Web Service
O AnnA Web Service é um recurso que possibilita a interação com a AnnA. Com ele, você pode compor os nós de um Fluxo de Trabalho da AnnA para que o bot possa ler e executar conforme desejar.
Como funciona
Ao criar um Web Service, você precisa registrá-lo na AnnA, para que ela gere as chaves necessárias para criptografia/descriptografia. Em seguida, adicione um nó de Web Service ao seu Fluxo de Trabalho da AnnA e selecione o Web Service que será executado.
Nosso sistema chamará o Web Service que você registrou e em seguida executará os contêiners na ordem que você os adicionou à estrutura.
Utilizando a classe AnnAWebService
Para o nó de Web Service da AnnA, você precisará da classe AnnaWebService para instanciar e adicionar contêiners a serem executados.
Exemplos:
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
Adicionando um contêiner de mensagem:
// O segundo parâmetro são as opções; se não deseja usá-las, basta passar nulo. annaWs.addMessageContainer("Hello", null);
Você pode fazer Encadeamento de Métodos ao adicionar contêiners (Como em um builder):
annaWs .addMessageContainer("Hello", null) .addTimeContainer(5, null);
Código de exemplo
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 container possui um construtor de opções disponível. 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); }}
Adicionando contêiner de mensagem
Envia uma mensagem para o usuário
Parâmetros:
- Message: Obrigatório. O texto que será enviado ao usuário, por exemplo, Olá Mundo!
- Opções
- Alias: Opcional. Use para identificar o contêiner após a execução do nó do Web Service, por exemplo, Hello123.
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- BeforeExecutionRule: Opcional. Deve ser uma expressão. Você pode usar Funções da AnnA que retornem “true” ou “false” para decidir se este contêiner deve ser executado.
Exemplo de utilização
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs .addMessageContainer("Message container", // Caso queira utilizar as opções do contêiner, utilize este construtor; do contrário, apenas passe nulo. AnnaMessageContainerOptions.builder() .Alias("Hello123") .build() );
Adicionando contêiner ExecFunction
Executa uma ou mais Funções da AnnA.
Parâmetros:
- Expression: Obrigatório. Escreva expressões com Funções da AnnA aqui, por exemplo, AddParm(Teste1,123) AddParm(Teste,456)
- Opções
- Alias: Opcional. Use para identificar o contêiner após a execução do nó do Web Service, por exemplo, Function123.
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- BeforeExecutionRule: Opcional. Deve ser uma expressão. Você pode usar Funções da AnnA que retornem “true” ou “false” para decidir se este contêiner deve ser executado.
Exemplo de utilização
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaws.addExecFunctionContainer("ADDPARM(Teste,Hello)", // Caso queira utilizar as opções do contêiner, utilize este construtor; do contrário, apenas passe nulo. AnnaExecFunctionContainerOptions.builder() .Alias("ExecFunction123") .build() );
Adicionando contêiner de Tempo
Espere alguns segundos antes de prosseguir com o fluxo de execução dos contêineres.
Parâmetros:
- TimeToWait: Obrigatório. Define o tempo em segundos para pausar a execução.
- Opções
- Alias: Opcional. Use para identificar o contêiner após a execução do nó do Web Service, por exemplo, Time123.
- ShowMessage: Opcional. Se a mensagem deve ser exibida ou não. O padrão é ‘S’ (Mostrar a mensagem).
- Message: Opcional. O texto que será enviado ao usuário, por exemplo, Olá Mundo!
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- BeforeExecutionRule: Opcional. Deve ser uma expressão. Você pode usar Funções da AnnA que retornem “true” ou “false” para decidir se este contêiner deve ser executado.
Exemplo de utilização
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addTimeContainer(5, // Caso queira utilizar as opções do contêiner, utilize este construtor; do contrário, apenas passe nulo. AnnaTimeContainerOptions.builder() .Alias("Time123") .build() );
Adicionando contêiner Multimídia
Envia mídia para o usuário, como imagens, vídeos, áudios e documentos.
Parâmetros:
- MediaURL: Obrigatório. O URL de download para um arquivo, por exemplo, https://your.domain/route/to/file.extension
- Opções
- Alias: Opcional. Use para identificar o contêiner após a execução do nó do Web Service, por exemplo, Media123.
- Message: Opcional. O texto que será enviado ao usuário, por exemplo, Olá Mundo!
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- BeforeExecutionRule: Opcional. Deve ser uma expressão. Você pode usar Funções da AnnA que retornem “true” ou “false” para decidir se este contêiner deve ser executado.
Exemplo de utilização
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addMultimediaContainer("https://learning.anna.center/Resources/AnnaIcon.png", // Caso queira utilizar as opções do contêiner, utilize este construtor; do contrário, apenas passe nulo. AnnaMultimediaContainerOptions.builder() .Alias("Media123") .Message("Message of the image") .build() );
Adicionando contêiner de Questão
Envia uma pergunta para o usuário
Parâmetros:
- Question: Obrigatório. A pergunta que será enviada ao usuário
- Opções
- Alias: Opcional. Use para identificar o contêiner após a execução do nó do Web Service, por exemplo, Function123.
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- BeforeExecutionRule: Opcional. Deve ser uma expressão. Você pode usar Funções da AnnA que retornem “true” ou “false” para decidir se este contêiner deve ser executado..
- Competence: Opcional. Uma competência já registrada na empresa. Uma nova competência será criada se não existir na empresa.
- Subject: Opcional. Um assunto já registrado na empresa. Um novo assunto será criado se não existir na empresa.
- Topic: Opcional. Um tópico dentro do assunto. Será criado se não existir.
- IgnoreExecFluxo: Opcional. Ignora outras ações do usuário além de responder à pergunta atual ou encerrar todos os serviços.
- SensitiveData: Opcional. Informe ‘S’ para criptografar a resposta usando a chave de criptografia da empresa. Observe que ao recuperar a resposta usando as Funções da AnnA, ela também estará criptografada. O padrão é ‘N’.
- RightAnswer: Opcional. Ative este recurso se desejar verificar se a resposta está no array de respostas possíveis.
- RightAnswerValue: Opcional. Os pontos que serão ganhos pelo usuário se ele responder corretamente.
- AnswerType: Opcional. ‘N’ se não deseja enviar feedback sobre a resposta. ‘Q’ se deseja enviar feedback. Padrão é ‘N’.
- CorrectAnswerComment: Opcional. Quando answerType for ‘Q’, use esta configuração para enviar um feedback positivo ao usuário.
- IncorrectAnswerComment: Opcional. Quando o answerType for ‘Q’, use esta configuração para enviar um feedback negativo ao usuário.
- DynamicValidations: Opcional. Escreva expressões usando Funções da AnnA que retornem TRUE ou FALSE. A execução continuará quando a expressão retornar TRUE.
- ValidationError: Opcional. Defina uma mensagem para erros de validação quando dynamicValidations retornar FALSE.
- ValidationMask: Opcional. Defina uma máscara para a resposta do usuário.
- ExternalData: Opcional. Pode armazenar qualquer informação que você deseje recuperar com Funções da AnnA, por exemplo, “LastAnswerJSON()” ou “AnswersJSON()“.
- PossibleAnswers: Opcional. Se “rightAnswer” estiver definido como “S”, então esta propriedade deve ser fornecida. Uma coleção de strings contendo as possíveis respostas corretas para a pergunta.
Exemplo de utilização
AnnaWebService annaWs = new AnnaWebService(encryptionKey, decryptionKey, iv);
annaWs.addQuestionContainer("1 + 1 = ?", AnnaQuestionContainerOptions.builder() .Alias("Question123") .RightAnswer("S") .PossibleAnswers(new String[]{"dois", "two", "2"}) .build() );
Adicionando contêiner de Alternativa
Envia uma pergunta de múltipla escolha para o usuário.
Parâmetros:
- Question: Obrigatório. A pergunta que será enviada ao usuário
- Alternatives: Obrigatório. Array que contém as alternativas.
- Alternative: Obrigatório. Texto da alternativa.
- Alias: Opcional. Alias da alternativa, pode ser usado para identificar a resposta do usuário em nós subsequentes.
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- ExhibitionRule: Opcional. Use Funções da AnnA para escrever uma expressão que retorne TRUE ou FALSE. Se a expressão retornar TRUE, o contêiner será executado.
- IsCorrectAnswer: Opcional. Disponível apenas quando a opção “rightAnswer” é definida como ‘S’. Use ‘S’ para marcar a alternativa como resposta correta.
- AlternativeValue: Opcional. Um valor para as alternativas que será usado em estatísticas.
- Order: Opcional. Ordem da alternativa.
- Comment: Opcional. Mensagem que será enviada ao usuário depois que ele selecionar a alternativa.
- Opções
- Alias: Opcional. Use para identificar o contêiner após a execução do nó do Web Service, por exemplo, Function123.
- RestrictToGroup: Opcional. Preencha com os apelidos dos grupos de usuários registrados na empresa.
- BeforeExecutionRule: Opcional. Deve ser uma expressão. Você pode usar Funções da AnnA que retornem “true” ou “false” para decidir se este contêiner deve ser executado.
- Competence: Opcional. Uma competência já registrada na empresa. Uma nova competência será criada se não existir na empresa.
- Subject: Opcional. Um assunto já registrado na empresa. Um novo assunto será criado se não existir na empresa.
- Topic: Opcional. Um tópico dentro do assunto. Será criado se não existir.
- Enumeration: Opcional. Defina a enumeração das alternativas. N = Números, L = Letras, R = Romanos, I = Lista (Popup no WhatsApp), B = Botões (Botões no WhatsApp)
- Randomize: Opcional. Informe ‘S’ para embaralhar as alternativas. Padrão é ‘N’.
- RightAnswer: Opcional. Ative este recurso se desejar verificar se a resposta está no array de respostas possíveis.
- AnswerType: Opcional. ‘N’ se não deseja enviar feedback sobre a resposta. ‘Q’ se deseja enviar feedback. Padrão é ‘N’.
- AnswerTypeComment: Opcional. A mensagem que será enviada quando o usuário responder à pergunta.
- ExternalData: Opcional. Pode armazenar qualquer informação que você deseje recuperar com Funções da AnnA, por exemplo, “LastAnswerJSON()” ou “AnswersJSON()“.
Exemplo de utilização
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() );