Construindo meu robô com o Watson — Parte 2: Fazendo ele ouvir

No meu primeiro artigo mostrei como utilizar o serviço de Text-To-Speech do Watson para dar voz ao meu robô. Aqui um vídeo mostrando como ficou a voz dele, conversando com minha filha:

Meu robô falando

Agora vou mostrar como fiz para dar ouvidos a ele. 
Como comentei naquele artigo, quando comecei o projeto, pensei em usar o TJBot como ponto de partida. Os projetos de TJBot usam microfones USB ou Bluetooth conectados ao Raspberry Pi para permitir que as pessoas falem com ele. Quando comecei o meu robô, eu não tinha nenhum microfone desses a mão, por isso resolvi testar uma outra abordagem. Já tinha visto alguns colegas usando o Watson integrado ao aplicativo Telegram. Então resolvi tentar usar o meu celular como interface para conversar com o robô. Neste artigo vou mostrar como integrar o Watson ao Telegram e fazer a conversão de voz para texto.

O primeiro passo é criar uma conta no Telegram. Em seguida, abrimos uma chat com o usuário “Botfather””, enviando a mensagem “/newbot”. Ele irá perguntar o nome do seu bot e um nome de usuário para ele. Em seguida ele retornará uma mensagem confirmando a criação e com um token de acesso à API do bot. Guarde esse token, pois iremos precisar dele mais tarde.

Use o BotFather do Telegram para criar um bot
Criando seu primeiro bot no Telegram
Guarde o token. Vamos precisar mais tarde.

O próximo passo é criar um webhook para o seu bot no Telegram. Um webhook é uma forma de uma aplicação enviar informações em tempo real para outras aplicações, usando uma URL. Basicamente, vamos usar a própria API do telegram para criar a URL do nosso webhook. Essa URL será criada no nosso serviço de Node-RED no Bluemix.
Abra uma página do browser e chame a API do Telegram para criação do webhook. A sintaxe da chamada é assim:

https://api.telegram.org/bot<token>/setWebhook?url=https://<sua_url_no_bluemix>/telegram/<url_do_seu_webhook>

Por exemplo, usando o token que criei ali em cima, a minha chamada poderia ser feita assim:
https://api.telegram.org/bot300535214:AAFNgro9WyXzJy7qLINtWPbinIVl7akMzEQ/setWebhook?url=https://meuprimeirorobot.mybluemix.net/telegram/meuprimeirobotURL

Ao executar o comando, você deve receber uma mensagem de sucesso no browser, assim:

Mensagem de criação do Webhook com sucesso

Agora, temos de criar um fluxo no Node-RED que irá orquestrar a integração entre o Telegram e os serviços do Watson. Lembram no primeiro artigo, quando mostrei como instalar o nó para tocar o áudio? Pois é, aqui iremos instalar um novo conjunto de nós para integrar com o Telegram. Existem diversas opções de integração com Telegram. Aqui vou usar o “Botmaster”, um framework para criação de bots. 
O bacana do Botmaster é que ele oferece uma maneira simples de integrar o seu bot a vários serviços de mensagem, como Telegram, Facebook Messenger ou Twitter. Para instalar os nós do Botmaster é só selecionar o “Manage Palette”, clicar na aba “Instalar”, procurar por “Botmaster” e instalar.

Instalando os nós do Botmaster

Após a instalação, uma nova palheta chamada “botmaster” irá aparecer à esquerda, com vários novos nós. O primeiro nó que iremos usar é o “telegramBot”. Arraste-o até o canvas e dê um duplo clique nele para configurá-lo.

Palheta do Botmaster

Lembram do token que guardamos quando criamos o bot no Telegram? Aqui é onde iremos usá-lo, junto com o Webhook que também criamos ali em cima. Preencha os campos conforme a figura abaixo, colocando seu token no campo “Verify Token” e a URL do seu webhook no campo “Endpoint”.

Configurando o Telegram Bot

Este nó não precisa ser conectado a nenhum outro nó. Ele ficará escutando as mensagens que forem enviadas para esse bot lá no Telegram e, sempre que chegar uma nova mensagem, ele irá passar essa mensagem para o nó “bot update”. Então, arraste o nó “bot update” para o canvas. Para testar, vamos colocar um nó de debug conectado ao “bot update”. Edite o nó de debug para ele imprimir o conteúdo de msg.payload.message.text.

Monitorando mensagens enviadas ao Bot no Telegram

Agora podemos fazer o teste. Não se esqueça de fazer o “Deploy” sempre que alterar algo no seu fluxo do Node-RED. Abra o aplicativo Telegram no seu celular ou via web (https://web.telegram.org/#/im). Procure pelo bot que você criou e envie uma mensagem de texto. Observe na aba de debug que a mensagem enviada irá aparecer ali, o que significa que a integração com o Telegram está funcionando.

Testando mensagens de texto do Telegram

Mas o objetivo é fazer ele funcionar com voz. Para isso, vamos precisar usar um outro serviço do Watson, o Speech-To-Text. Vamos seguir o mesmo processo que usamos no primeiro artigo para criar o serviço de Text-To-Speech. Uma vez criado o serviço no Bluemix, pegamos o nó speech-to-text da palheta IBM Watson e colocamos no canvas. Configuramos com as credenciais do serviço que acabamos de criar lá no Bluemix. Temos também de configurar para Português. Configure o nó conforme a figura abaixo.

Configuração do Speech-To-Text

O nó “speech-to-text” espera uma mensagem de áudio no msg.payload. Mas o “bot update” coloca a mensagem em msg.payload.message.attachments[0].payload.url. Então precisamos carregar o payload com o valor correto. Para isso, podemos usar um nó “change”. Arraste um “change” da palheta “function” para o canvas e preencha os campos com msg.payload e msg.payload.message.attachments[0].payload.url, conforme a figura:

Ajustando o payload para o speech-to-text

Agora conectamos os nós, colocando um debug na saída do “speech-to-text”, configurado para mostrar o conteúdo de msg.transcription:

Configurando a apresentação dos resultados

Agora podemos testar. Abra o aplicativo Telegram no celular e envie uma mensagem de voz para o bot. Quando a mensagem chegar no “Telegram bot”, ela será repassada para o nó update, que enviará para o fluxo que criamos. Ao ser processada, a transcrição do que o Watson entendeu deve aparece na aba de debug.

Resultado da transcrição de voz

A qualidade da transcrição depende muito do seu microfone, do nível de ruído de fundo onde você estiver e também da dicção de quem está falando. Embora algumas palavras podem não ser transcritas corretamente, isto não será um problema, pois o Watson, na maioria das vezes, ainda consegue entender a intenção do que foi falado. Mas vamos falar mais sobre isso no próximo artigo, quando vamos criar um serviço de conversação e conectar com o que fizemos até agora. Iremos ver como fazer para o robô escutar as mensagens de voz vindas do Telegram e responder com a voz que criamos no primeiro artigo. Até lá.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.