https://a.storyblok.com/f/270183/83917/494e1e7412/openai_vonageapi.png

Integre chamadas telefônicas e o WhatsApp com a OpenAI

Publicado em January 26, 2023

Tempo de leitura: 19 minutos

Introdução

A IA generativa se tornou parte da cultura popular. Ao longo do último ano, surgiram modelos e produtos como o ChatGPT e o DALL-E 2, que permitem gerar textos, imagens e áudio. A OpenAI, criadora do ChatGPT e do DALL-E 2, disponibilizou essas poderosas ferramentas para que os desenvolvedores possam acessá-las e criar novos aplicativos criativos.

Este artigo abordará, em primeiro lugar, como integrar a Voice API da Vonage e API da OpenAI. Criaremos um aplicativo que receberá uma solicitação de um usuário por meio de uma ligação telefônica e a enviará a um serviço de IA generativa. Enviaremos a resposta da IA ao usuário com a Messages API da Vonage. Vamos começar!

Pré-requisitos

Já desenvolvemos um aplicativo inicial do Vonage para receber uma chamada, capturar a resposta do usuário, enviá-la para a OpenAI e, em seguida, enviar uma resposta pelo WhatsApp. Com o aplicativo inicial, basta adicionar suas credenciais ao arquivo .env e implantar o aplicativo usando o GitHub Codespaces. Além disso, você pode editar o aplicativo inicial e fazer alguns testes.

Para começar:

  • Fork este repositório. Abra-o no Codespaces clicando em “Criar codespace no principal”

  • CLI da Vonage - Após instalar o Node.js, você pode usar o comando `npm install -g @vonage/cli` para instalá-lo. Essa ferramenta permite criar e gerenciar suas Applications Vonage.

Create Codespace interface

Como alternativa, você pode implantar o aplicativo com Node.js e ngrok.

Criar um novo aplicativo da Vonage

Faça login/Cadastre-se gratuitamente developer.vonage.com; para poder usar a Voice API da Vonage, você precisará criar um aplicativo Vonage no portal do desenvolvedor.

Todas as solicitações à Voice API da Vonage exigem autenticação. Portanto, você deve gerar uma chave privada por meio da API de Aplicativos, o que permite criar JSON Web Tokens (JWT) para realizar as solicitações. Para fins de demonstração, usaremos a chave da API e o segredo da API.

No menu à esquerda aqui, clique em “Configurações da API”. Na aba “Chaves da API”, você encontrará sua chave da API e o segredo da Account (segredo da API).

API Settings

No ambiente do Codespaces, copie e cole a chave da API e o segredo da API no arquivo .env. Tome cuidado para não armazenar essas informações no próprio repositório do GitHub.

API_KEY=b**********
API_SECRET=******************

Um aplicativo da Vonage contém as informações de segurança e configuração necessárias para interagir com as Voice APIs da Vonage.

Vamos criar uma Application usando o Painel do Desenvolvedor da Vonage.

Clique em “Applications” no menu à esquerda. Em seguida, clique em “Criar um novo aplicativo”. Você precisará dar um nome ao seu aplicativo. Por exemplo, “VoiceApp”. Você também precisará gerar uma chave pública e uma chave privada. Por fim, habilite os recursos de voz.

Create Vonage App

Verifique isso usando o CLI da Vonage.

npm install -g @vonage/cli

Definir configuração

vonage config:set --apiKey=[API_Key] --apiSecret=[API_Secret]

Resultado esperado

Configuration saved.

Precisamos adquirir um número virtual para que nosso aplicativo possa receber chamadas telefônicas. Você pode fazer isso usando a CLI da Vonage:

  • Pesquise e compre números de telefone virtuais.

  • Escolha o número mencionado Voice na coluna “Recursos”.

  • Podemos pesquisar números pelo código do país. A API de Numbers da Vonage API de Numbers da Vonage usa códigos ISO Alpha-2. Veja os códigos de país listados aqui.

vonage numbers:search GB

O comando CLI a seguir nos permite adquirir um número virtual:

vonage numbers:buy **732**56** GB

Ou pesquise e compre números de telefone virtuais usando Painel da Vonage. Selecione o recurso “Voice” no menu suspenso.

Encontre nosso aplicativo

vonage apps
Name Id Capabilities ─────────────────────────────── ──────────────────────────────────── ──────────── VoiceApp 4e15f46e-****-4a0d-9749-000000000000 voice

Vincular o número de telefone ao aplicativo

vonage apps:link [APP_ID] --number=[NUMBER]

Por exemplo

vonage apps:link 4e15f46e-****-4a0d-9749-000000000000 --number=44750385680

Resposta esperada:

Number '**732**56**' is assigned to application '4e15f46e-****-4a0d-9749-000000000000'.

Você também pode vincular números usando o Painel da Vonage: acesse “Applications”, abra o aplicativo correspondente (por exemplo, o VoiceApp) e clique no botão “Vincular” na lista de números.

link number with app

Criar objeto de controle de chamadas

Reconhecimento de Fala (ASR)

O Reconhecimento Automático de Fala (ASR) permite que os aplicativos ofereçam suporte à entrada de voz em casos como IVR, identificação e diversos tipos de bots/assistentes de voz. Ao utilizar esse recurso, nosso aplicativo recebe a transcrição da fala do usuário (na forma de texto) quando espera que o usuário responda a alguma pergunta falando, em vez de digitar dígitos (DTMF); e, então, pode continuar o fluxo da chamada de acordo com sua lógica de negócios, com base no que o usuário disse. O esquema a seguir mostra como nosso aplicativo interage com a API da Vonage por meio do Nexmo Call Control Object (NCCO).

ASR scheme

Você pode usar a ação de entrada para coletar os dígitos digitados pelo usuário ou a entrada por voz. Essa ação é síncrona; a Vonage processa a entrada e a encaminha para o eventUrl ponto de extremidade do webhook. Você deverá configurá-lo para receber essa entrada em sua solicitação. Seu ponto de extremidade do webhook deve retornar outro NCCO que substitua o NCCO existente e controle a chamada com base na entrada do usuário.

Podemos ver como tudo isso funciona em nosso index.js arquivo. Primeiro, o aplicativo aguarda para ser acionado no webhook/answer ponto de extremidade. Em seguida, o aplicativo segue pelas três ações:

{
      action: 'talk',
      text: 'Hi, describe an image that you want to generate'
    },
    {
      eventMethod: 'POST',
      action: 'input',
      eventUrl: [
        '[Codespace-or-server-URL]/webhooks/asr'],
      type: [ "speech" ],
      speech: {
        language: 'en-gb',
        endOnSilence: 0.1
      }
    },
    {
      action: 'talk',
      text: 'Thank you'
    }

Links úteis:

Configurar o OpenAI

A OpenAI lançou novos recursos de geração de imagens com seus modelos DALL·E. Há alguns aspectos muito legais na API da OpenAI. Primeiro, a partir de janeiro de 2023, os usuários recebem um crédito gratuito de US$ 18, que pode ser usado durante os primeiros três meses. É um crédito bem generoso para você explorar! Por exemplo, você pode criar ou editar 900 imagens 1024x1024. Em segundo lugar, de acordo com o capítulo “Seu Conteúdo” nos Termos de Uso da OpenAI: “... A OpenAI, por meio deste, cede a você todos os seus direitos, títulos e interesses relativos à Saída.” Isso significa que você detém a propriedade total das imagens geradas para qualquer uso, inclusive para fins comerciais.

Primeiro, depois de se cadastrar e confirmar seu número de telefone, você precisa gerar sua chave de API.

Com essa chave de API, podemos seguir em frente.

Cole isso no seu .env arquivo

API_KEY=b**********
API_SECRET=******************
OPENAI_API_KEY=sk-**************************************

Neste tutorial, usamos API de Imagens para gerar uma imagem.

Para gerar uma imagem, utilizamos a seguinte solicitação POST.

var req = unirest('POST', 'https://api.openai.com/v1/images/generations')
    .headers({
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + openaiApiKey
    })

Com a seguinte carga JSON. Onde você pode gerenciar os parâmetros

  • n - o número de imagens geradas; você pode solicitar de 1 a 10 imagens por vez

  • size - tamanhos disponíveis: 256x256, 512x512 ou 1024x1024 pixels. Os tamanhos menores são gerados mais rapidamente.

.send(JSON.stringify({
      "prompt": promptText,
      "n": 1,
      "size": "1024x1024"
    }))

O texto do prompt que analisaremos a partir da resposta do usuário que recebermos como um webhook.

let promptText = request.body.speech.results[0].text

Depois de recebermos uma resposta da API da OpenAI, analisaremos a URL da imagem contida no corpo da resposta.

let imgUrl = res.body.data[0].url

Configurar a Messages API da Vonage

A Messages API da Vonage permite que você envie e receba mensagens por SMS, MMS, Facebook Messenger, Viber e WhatsApp! No nosso caso de uso, utilizamos o WhatsApp, mas os usuários podem alterar o código e usar o Facebook ou o Viber. Lembre-se de consultar a documentação da Messages API para obter mais informações."

Usaremos a Messages API do Vonage no ambiente de teste do WhatsApp para receber uma mensagem com conteúdo ou um link.

Criamos a sentMsg função que recebe dois parâmetros, phoneNumber, que contém informações sobre o número de telefone de quem está ligando. E imgUrl que extraímos da resposta da OpenAI.

function sentMsg(phoneNumber, imgUrl)

Abra o WhatsApp no seu smartphone e clique no ícone da foto. Em seguida, escaneie o código QR e clique em “enviar” na mensagem já preenchida.

WhatsApp Sandbox QR

Abrir Sandbox da Messages API se precisar de mais informações ou quiser usar outro aplicativo de mensagens.

Implantar nosso aplicativo no Codespace

Abra o GitHub Codespace no seu fork.

No terminal do Codespace, execute o seguinte comando para instalar nossos pacotes do Node:

npm install

Execute o seguinte comando no terminal para obter a URL do GitHub Codespace para os webhooks

echo "https://${CODESPACE_NAME}-3000.preview.app.github.dev/webhooks/asr"

Copie e cole o resultado EVENT_URL= no .env arquivo

API_KEY=b**********
API_SECRET=******************
OPENAI_API_KEY=sk-**************************************
EVENT_URL=https://******************************************-3000.preview.app.github.dev/webhooks/asr

Agora precisamos atualizar as configurações do nosso aplicativo Vonage para receber os webhooks do CodeSpace. Podemos fazer isso usando o Painel. Vá até “Aplicativo” no menu à esquerda. Escolha nosso aplicativo atual e clique no botão “Editar”.

Edit App

Atualize as configurações do aplicativo usando a CLI da Vonage. Cole a URL do seu Codespace ou a URL do servidor no lugar de [Codespace-or-server-URL] no comando da CLI a seguir

vonage apps:update 4e15f46e-****-4a0d-9749-000000000000 --voice_event_url=[Codespace-or-server-URL]/webhooks/event --voice_answer_url=[Codespace-or-server-URL]/webhooks/answer

Execute o aplicativo

node index.js

No terminal, abra a Port aba. Clique em Private na Visibility coluna e altere para Public.

codespace port public

Está tudo pronto

  • Experimente ligar para o número vinculado ao aplicativo **732**56**

  • Diga ao bot qual é a sua gorjeta

  • Aguarde o conteúdo no aplicativo de mensagens correspondente

  • Monitorar o console

A seguir, você encontra uma imagem de exemplo que poderá receber no seu celular.

Generated image

Texto da solicitação: Prado montanhoso nos Cárpatos ucranianos, fotografia, fotorrealista em 8K, HD

Conclusão

Parabéns! Você acabou de criar um serviço de atendimento por bot para chamadas recebidas usando a Voice API da Vonage, que envia mensagens por meio da Messages API da Vonage. E tudo isso está hospedado no GitHub Codespaces. Você pode ampliar esse projeto com o Vonage AI Studio, adicionando um fluxo de trabalho dinâmico para responder de maneira diferente de acordo com as informações fornecidas pelo chamador. Ou, como já fizemos a integração com a OpenAI, você pode integrar o ChatGPT.

Mostre suas criações com IA ou diga-nos como podemos ajudar! Participe da conversa na nossa Slack da Comunidade Vonage ou envie-nos uma mensagem no Twitter.

Compartilhar:

https://a.storyblok.com/f/270183/400x409/b965ab37c0/oleksii-borysenko.png
Oleksii BorysenkoEx-funcionários da Vonage

Oleksii é Developer Advocate na Vonage, autor e contador de histórias. Seus interesses incluem IA/ML, comunicações unificadas, tecnologias educacionais, tecnologias em nuvem e código aberto.