
Compartilhar:
Steve se autodenomina “Mathlete” e “Rei da Ironia”. Ele também é apaixonado por galgos, quebra-cabeças de torção e jogos de tabuleiro europeus. Quando não está falando de matemática para quem não entende de matemática, nem de Java para quem não entende de Java, ele pode ser encontrado tomando café e programando.
Como lidar com entradas do teclado numérico (DTMF) em Java
Tempo de leitura: 10 minutos
Introdução
Em um tutorial anterior, mostramos como criar um aplicativo capaz de receber uma chamada telefônica com Java. Neste tutorial, você criará um aplicativo capaz de receber uma chamada telefônica e responder às entradas do usuário usando a Voice API da Vonage.
Pré-requisitos
Para seguir este tutorial, você precisará de um Account na Vonage. Cadastre-se agora, caso ainda não tenha um Account.
Você utilizará o Gradle para gerenciar suas dependências e executar seu aplicativo. Além disso, você precisará ter uma cópia do JDK instalada. Usarei o JDK 8 neste tutorial.
Como lidar com entradas do usuário em Java
Este tutorial irá guiá-lo pelas seguintes etapas:
Usando Gradle para configurar um novo projeto Java.
Usando o estrutura do Spark para controlar a chamada.
Adquirir um número e configurar sua conta da Vonage para usar esse número com seu aplicativo.
Usando o Gradle para configurar um novo projeto em Java
Você utilizará o Gradle para gerenciar suas dependências e para criar e executar seu aplicativo Java. Na linha de comando, crie um novo projeto Java com os seguintes comandos:
O gradle init --type java-application comando criará todas as pastas necessárias, além de uma classe de exemplo na qual você escreverá seu código.
Utilização do Spark Framework para controlar a chamada
Você utilizará o Spark para interceptar a chamada HTTP que a Vonage utiliza quando seu número recebe uma chamada, bem como para a solicitação que a Vonage envia quando uma entrada é recebida.
Adicionando as dependências
Adicione o seguinte ao seu dependencies bloco no seu build.gradle arquivo:
compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'Seu dependencies bloco deve ficar assim:
dependencies {
// This dependency is found on compile classpath of this component and consumers.
compile 'com.google.guava:guava:23.0'
compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
} Configurar a rota de resposta
O Gradle criará a App classe na src/main/java pasta. Dentro dessa classe há um getGreeting e um main método. Você não vai precisar do getGreeting , então fique à vontade para removê-lo.
Substitua o conteúdo do main método, resolvendo todas as importações, por:
/*
* Route to answer incoming calls.
*/
Route answerRoute = (req, res) -> {
TalkAction intro = new TalkAction
.Builder("Hello. Please press any key to continue.")
.build();
InputAction input = new InputAction.Builder()
.eventUrl(String.format("%s://%s/webhooks/dtmf", req.scheme(), req.host()))
.maxDigits(1)
.build();
res.type("application/json");
return new Ncco(intro, input).toJson();
};
/*
* Route to print out call event info.
*/
Route eventRoute = (req, res) -> {
System.out.println(req.body());
return "";
};
Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/events", eventRoute);
Este código configurará uma rota em http://localhost:3000/webhooks/answer que responderá com o seguinte Objeto de Controle de Chamadas da Nexmo (NCCO):
[
{
"text": "Hello please press any key to continue.",
"action": "talk"
},
{
"maxDigits": 1,
"action": "input",
"eventUrl": [
"http://localhost:3000/webhooks/dtmf"
]
}
]A ação “talk” instruirá a Vonage a ler em voz alta a text informação de volta para o chamador. A ação de entrada instruirá o Vonage a capturar um único dígito digitado pelo chamador e a enviar uma solicitação POST para eventUrl com essas informações.
Também será configurada uma rota em http://localhost:3000/webhooks/events que a Vonage utilizará para comunicar alterações no status das chamadas.
Configurar a rota DTMF
Quando o chamador pressiona um dígito em seu aparelho, é gerado um sinal de multifrequência de dois tons (DTMF). A Vonage utiliza esse sinal DTMF para determinar quais teclas foram pressionadas. Assim que isso ocorre, a Vonage envia uma solicitação POST para o eventUrl definido no InputNcco.
Aqui está um exemplo de solicitação POST que contém um corpo em JSON:
{
"dtmf": "5",
"timed_out": false,
"uuid": "some-uuid",
"conversation_uuid": "some-conversation",
"timestamp": "2018-08-14T19:59:02.528Z"
}Para ler essas informações em Java, você precisará de uma classe que mapeie as propriedades JSON para propriedades Java. A Biblioteca de Cliente Java da Nexmo contém a InputEvent classe responsável por esse mapeamento.
No main método da App classe, adicione a seguinte rota abaixo do eventRoute:
/*
* Route which returns NCCO saying which DTMF code was received.
*/
Route inputRoute = (req, res) -> {
InputEvent event = InputEvent.fromJson(req.body());
TalkAction response = new TalkAction
.Builder(String.format("You pressed %s, Goodbye.", event.getDtmf()))
.build();
res.type("application/json");
return new Ncco(response).toJson();
};
Em seguida, registre a rota adicionando o seguinte no final do main método:
Spark.post("/webhooks/dtmf", inputRoute);Essa rota responderá com o seguinte NCCO:
[
{
"text": "You pressed 6, Goodbye.",
"action": "talk"
}
]onde 6 é a dtmf propriedade do JSON enviado para /webhooks/dtmf.
Compra de um número
Você precisará de um número da Vonage para receber chamadas telefônicas. Caso não tenha um número, você pode usar o CLI da Vonage para encontrar e, em seguida, adquirir um. Primeiro, escolha um número disponível para comprar:
E, em seguida, compre um dos números disponíveis:
Anote o número que lhe foi atribuído no momento da compra. Você precisará desse número para vincular seu aplicativo e para realizar os testes.
Como disponibilizar seu aplicativo
Para enviar uma solicitação HTTP ao seu aplicativo, a Vonage precisa saber a URL em que o seu aplicativo está sendo executado.
Em vez de configurar sua rede local ou hospedar seu aplicativo em um serviço externo, você pode usar o ngrok para expor seu aplicativo à internet com segurança.
Baixar ngrok e execute o seguinte comando:
Anote o endereço de encaminhamento, pois você precisará dele ao configurar sua conta. Na imagem a seguir, o endereço de encaminhamento é http://99cad2de.ngrok.io.
screenshot of ngrok
Configure seu Account da Vonage
Se você não tiver um aplicativo, pode usar o CLI da Vonage para criar um usando seu ngrok :
Após executar esse comando, será exibido um ID de aplicativo. Por exemplo: notreal-1111-2222-3333-appid. Você precisará desse ID de aplicativo para vincular seu número de telefone ao aplicativo.
Você pode usar o CLI da Vonage para vincular seu número de telefone ao aplicativo:
Este comando instrui a Vonage a criar um novo aplicativo em sua Account. O aplicativo enviará uma solicitação para a primeira URL ao receber uma chamada telefônica. O aplicativo enviará solicitações para a segunda URL quando o status da chamada for alterado.
Teste seu aplicativo
Inicie seu aplicativo com o gradle run comando dentro do seu handle-user-input diretório.
Ligue para o seu número da Vonage e teste seu aplicativo. Você ouvirá a mensagem: “Olá, pressione qualquer tecla para continuar”. Pressione um dígito no teclado do seu telefone e, em seguida, ouvirá a mensagem: “Você pressionou 6. Até logo”, sendo que 6 é o número que você digitou.
Conclusão
Com apenas algumas linhas de código, você criou uma aplicação capaz de receber uma chamada telefônica, capturar a entrada do usuário e responder com base nessa entrada. Experimente outras maneiras de usar a entrada do usuário para controlar a chamada.
Confira nossa documentação sobre Nexmo Developer , onde você pode saber mais sobre fluxo de chamadas ou Objetos de Controle de Chamadas da Nexmo. Confira nossos Exemplos de Início Rápido do Nexmo para Java para exemplos completos de código sobre este tutorial e muito mais.
Compartilhar:
Steve se autodenomina “Mathlete” e “Rei da Ironia”. Ele também é apaixonado por galgos, quebra-cabeças de torção e jogos de tabuleiro europeus. Quando não está falando de matemática para quem não entende de matemática, nem de Java para quem não entende de Java, ele pode ser encontrado tomando café e programando.