https://a.storyblok.com/f/270183/72038/6d13a2ef7f/blog_question-game_dialogflow-api_1200x600.png

Adicione o Dialogflow e a SMS API da Vonage ao seu aplicativo Flask

Publicado em May 5, 2021

Tempo de leitura: 2 minutos

O Dialogflow é uma plataforma de compreensão de linguagem natural (NLU) fornecida pelo Google. É utilizada para projetar e integrar interfaces de usuário conversacionais em aplicativos móveis e web, dispositivos, bots e sistemas de voz interativos. Neste tutorial, vamos demonstrar como integrar as APIs do Dialogflow e da SMS da Vonage para criar um bot de quiz que interaja com o usuário final por SMS. Não abordaremos todas as partes do aplicativo; portanto, se você estiver começando do zero, confira o repositório completo do projeto (ou leia um de nossos tutoriais tutoriais sobre desenvolvimento com Flask do zero!)

Criar um aplicativo

Começaremos usando o modo CLI do Vonage para criar um aplicativo. Instale o CLI do Vonage em seu computador da seguinte maneira:

npm install -g @vonage/cli

Crie um diretório para seu aplicativo localmente:

mkdir your-application

Dentro do diretório, execute o seguinte comando:

vonage apps:create

No modo CLI interativo:

Application Name: your-app-name
Select capabilities: press the space bar to select voice, messages and rtc
Create voice webhooks? No
Create messaging webhooks? No
Create RTC webhooks? No
Allow use of data for AI training? No

O aplicativo já deve estar criado. Acesse o painel e acesse Applications. Seu aplicativo novinho em folha deve estar listado lá.

Configurar o agente do Dialogflow

Para configurar o agente do Dialogflow, acesse https://console.cloud.google.com e crie um novo projeto:

New Dialogflow projectNew Dialogflow project

Preste atenção ao PROJECT ID. Habilite a API do Dialogflow na lista de APIs:

Enable DialogflowEnable Dialogflow

Acesse https://dialogflow.cloud.google.com para criar um novo agente:

Create Dialogflow agentCreate Dialogflow agent

Para facilitar a instalação e o funcionamento do seu aplicativo, incluí um arquivo zip no repositório do GitHub deste projeto. Acesse o dialogflow diretório e, na pasta resources baixe o quizzie.zip arquivo. Esse zip foi exportado da página de configurações do Dialogflow e contém todas as intenções, contextos e respostas necessárias para configurar um agente no painel do Dialogflow.

No painel do Dialogflow, clique em Configurações e acesse Exportar/Importar. Importe o arquivo zip que acabamos de baixar:

Import settingsImport settings

Nosso agente de quiz do Dialogflow já está totalmente configurado e pronto para funcionar!

Nos próximos passos, precisamos criar a lógica que irá gerenciar a troca de mensagens entre o usuário final e nosso agente do Dialogflow.

Código da solicitação

Queremos criar uma interface para enviar um SMS ao usuário final. Primeiro, certifique-se de que a biblioteca Python da Vonage esteja instalada:

pip install vonage

A função para enviar um SMS é a seguinte:

import vonage
import os
import json


def vonage_sms(message, recipient):
   VONAGE_API_KEY = os.getenv("VONAGE_API_KEY")
   VONAGE_API_SECRET = os.getenv("VONAGE_API_SECRET")
   VONAGE_NUMBER = os.getenv("VONAGE_NUMBER")

   client = vonage.Client(key=VONAGE_API_KEY, secret=VONAGE_API_SECRET)
   sms = vonage.Sms(client)

   response_data = sms.send_message(
       {
           "from": VONAGE_NUMBER,
           "to": recipient,
           "text": message,
       }
   )

   if response_data["messages"][0]["status"] == "0":
       return json.dumps("Message sent successfully.")
   else:
       return json.dumps(f"Message failed with error: {response_data['messages'][0]['error-text']}")

Em seguida, adicione o código que notificará nosso cliente:

#! /usr/bin/env python3
import argparse
import sys
import os

from dotenv import load_dotenv

sys.path.append('../')
import vonage

APP_ROOT = os.path.join(os.path.dirname(__file__), '..')  # refers to application_top
dotenv_path = os.path.join(APP_ROOT, '.env')
load_dotenv(dotenv_path)


def notify_customer(number):
   text = "Hello. You can start your quiz with quizzie-bot by sending the following keywords: hi," \
          " hello or vonage."
   print(vonage_sms(text, number))

Assim que o usuário final receber as mensagens, queremos que ele responda. Precisamos criar um endpoint de webhook de entrada para receber a resposta. Lembre-se de que configuramos a URL de SMS de entrada ao criar o aplicativo anteriormente. Agora é hora de adicionar a lógica ao nosso webhook:

@app.route("/update/", methods=['POST'])
def update_url():
   trigger = request.get_json().get('message')
   project_id = os.getenv("PROJECT_ID")
   session_id = os.getenv("SESSION_ID")
   language_code = os.getenv("LANG_CODE")

   response = detect_intent_texts(project_id, session_id, trigger, language_code)
   phone = phone_number()

   return send_sms(response, phone)

Precisamos encadear as respostas que recebemos do usuário final como entrada para o nosso agente do Dialogflow. Para isso, precisamos usar o agente REST do Dialogflow.

Especificamente, precisamos detectar a intenção do usuário e passá-la como entrada para o agente:

def detect_intent_texts(project_id, session_id, texts, language_code):
   """Returns the result of detect intent with texts as inputs.
   Using the same `session_id` between requests allows continuation
   of the conversation."""
   import dialogflow_v2 as dialogflow

   session_client = dialogflow.SessionsClient()

   session = session_client.session_path(project_id, session_id)
   print('Session path: {}\n'.format(session))

   for text in texts:
       text_input = dialogflow.types.TextInput(
           text=text, language_code=language_code)

       query_input = dialogflow.types.QueryInput(text=text_input)

       response = session_client.detect_intent(
           session=session, query_input=query_input)

       return response.query_result.fulfillment_text

Conclusão

A configuração básica já está concluída. Mostramos a lógica necessária para que o aplicativo envie e receba mensagens SMS, bem como a forma de se conectar ao agente do Dialogflow. Para ver o código completo do aplicativo, confira o repositório do projeto: https://github.com/nexmo-community/Vonage-QnA-app. E, caso tenha mais alguma dúvida, fique à vontade para me enviar um e-mail.

Compartilhar:

https://a.storyblok.com/f/270183/400x400/d6b5221cb3/adrian-francis.png
Adrian Francis

Adrian is a problem solver and Python developer advocate. He works with various programming languages to solve engineering problems. Introduced to programming at age 16, Adrian has spent the last 8 years oscillating between backend development and automation. He lives in Nairobi and when not writing code he is most likely playing Call Of Duty or NBA 2K on his PlayStation, riding his bicycle or binge watching the latest series on Netflix.