Escrito por Rafael Dias en Planeta Chatbot.
Siempre quise crear un chatbot, pero tan pronto como comencé en el mundo de la programación, la ansiedad de querer tener el resultado saltando los pasos que me llevarían allí siempre me obstaculizó. Después de ver algunos videos y de inspirarme por algunos grandes programadores a los que sigo, pude reeducarme y trabajar muy duro para que no me superara la ansiedad (mencionada anteriormente) en mis proyectos futuros. En consecuencia, los estudios se volvieron mucho más productivos, fue cuando vi que estaba listo para cumplir ese deseo de crear un chatbot.
Usando el lenguaje Python fue simple crear el chatbot en sí mismo usando la biblioteca ChatterBot, que según su documentación utiliza una selección de algoritmos de aprendizaje automático para producir diferentes tipos de respuestas, pero quería más. Fue entonces cuando decidí hacerle hablar con personas en grupos en WhatsApp o en privado, especialmente con mi novia, que se quejaba de que era lento para responder cuando jugaba con mis amigos.
Bueno, ahora que ya he presentado los motivos de este pequeño proyecto, comencemos:
Estoy teniendo en cuenta que hasta ahora todos tienen Python instalado en su el ordenador y saben cómo usar PIP.
Primero ejecuta este comando en tu consola:
# Instalando a biblioteca chatterbot e selenium. pip install selenium pip install chatterbot
Para usar Selenium necesitaremos un controlador web, usaremos Chrome en nuestra aplicación, se puede descargar aquí. Después de la descarga, coloca el ejecutable en la misma carpeta que la aplicación.
Tendremos esta estructura:
├── bot.py ├── chromedriver.exe
Ahora importaremos las bibliotecas necesarias y crearemos nuestra clase.
# Bibliotecas instaladas from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer from chatterbot.trainers import ListTrainer from selenium import webdriver # Bibliotecas nativas do Python import time import os
Llamaremos a nuestra clase WppBot:
class WppBot: def __init__(self): # Aqui vamos informar o nome do contato ou grupo. self.nome_contato = "Contato" #Informamos onde está nosso chromedriver. #Como está na mesma pasta do projeto então ficará assim. #Aproveitamos também para fazer uma pequena configuração. options = webdriver.ChromeOptions() options.add_argument("lang=pt-br") self.driver = webdriver.Chrome(executable_path=r'./chromedriver.exe')# Essa variável servirá para nós mais tarde, mas basicamente é para o bot não fique respondendo a mesma mensagem sem parar. self.ultimo_texto = ''
Ahora hagamos una función que vaya a la página web de WhatsApp y encuentre el contacto con el que se comunicará el bot.
def whatsapp(self): self.driver.get('https://web.whatsapp.com/') time.sleep(20)# Entrar na conversa do grupo ou contato que escolhemos. target = self.driver.find_element_by_xpath(f"//span[@title='{self.nome_contato}']") time.sleep(3) target.click()
Tenemos que conseguir que el chatbot sea capaz de “escuchar/entender” el último mensaje recibido.
def escuta(self): #Vamos listar todos as mensagens no grupo. post = self.driver.find_elements_by_class_name('z_tTQ') #Vamos pegar o índice da última conversa. ultimo = len(post) - 1#Vamos pegar o texto da última conversa e retornar. texto = post[ultimo].find_elements_by_css_selector('span.selectable-text') self.texto = texto[len(texto)-1].text return self.texto
Bien, hasta ahora lo que hemos hecho es que consiga ir a la página de WhatsApp, encontrar el grupo o contacto y que se una a la conversación.
Ahora vamos a la parte que me pareció más divertida del ChatBot:
Será más una función dentro de nuestra clase.
Para entrenar a nuestro chatbot, traté de usar los subtítulos de una película, para que fuera lo más cotidiano posible, pero no funcionó muy bien, se volvió un poco demasiado extraño y maleducado, por así decirlo. Incluso les mostré a mis amigos que le decía “buenos días” al bot y él me respondió con un “Cállate”.
Así que decidí usar un corpus de datos de diálogo incluido en el módulo chatterbot. Puedes obtener más información al respecto aquí .
def bot(self): # Daremos um nome para o nosso bot. chatbot = ChatBot("Tob") # Escolhemos a forma como nosso bot irá treinar. trainer = ChatterBotCorpusTrainer(chatbot) # Usaremos um corpus de dialogo para treina-lo. trainer.train('chatterbot.corpus.portuguese.conversations')
Para que el bot responda a los mensajes entrantes, usaremos el bucle While, de modo que mientras que “Verdadero” “escuche el último mensaje hasta que sea el que debería responder”.
Este bucle estará dentro de nuestra función bot ().
Usé “:” para que el bot no se respondiera a sí mismo y fuera muy fácil de usar como ejemplo. Funciona de la siguiente manera: todos los mensajes que envía el bot tienen un “:” al principio, por lo que siempre sabrás que ese último mensaje fue de él y no de la persona que está hablando con él.
Por supuesto, es un mensaje muy extraño, pero solo quería darle un ejemplo y elegir ya depende de ti.
while True:# O bot sempre estará chamando a função "escuta()" para saber quando deve responder a mensagem. texto = self.escuta()# Sempre transformando o retorno da função "escuta()" em uma string. texto = str(texto)# O ":" é para o bot não responder a ele mesmo if texto != self.ultimo_texto and texto[0] != ':': self.ultimo_texto = texto user_input = texto# Aqui o bot pegará a mensagem da pessoa e verá a melhor forma de responder com base no que ele já sabe. self.bot_response = chatbot.get_response(user_input)# O processo a seguir é clicar na caixa de mensagem... chatBox = self.driver.find_element_by_class_name("_3uMse") time.sleep(3) chatBox.click()# ...Escrever a mensagem adicionando o ":" no início... chatBox.send_keys(":" + str(self.bot_response))# ... Clicar no botão enviar. botao_enviar = self.driver.find_element_by_xpath("//span[@data-icon='send']") time.sleep(3) botao_enviar.click() time.sleep(5)
Finalmente, asignamos nuestra clase a una variable y llamamos a sus funciones de manera que no haya una automatización ultrarrápida, dando tiempo para que todo desempeñe su papel.
bot = WppBot()bot.whatsapp()time.sleep(30)bot.bot()
Este simple proyecto fue un desafío con el que me divertí mucho, tanto que decidí compartir la experiencia y el conocimiento que adquirí.
Espero haber ayudado a las personas que están comenzando en este mundo mágico e increíble que es la programación y decir que cuando tienes una idea, es bueno planificar antes de ensuciarte las manos y salir a programar. Puedes y debes tomarlo con calma, a tu ritmo y comenzar con proyectos así, simples y luego puedes implementar más cosas, siempre desafiándote y aprendiendo de los errores que seguramente cometerás.
También puedes ver el proyecto en GitHub haciendo clic aquí.
Y puedes compartir conmigo tus comentarios o dudas por aquí.
Así que eso es todo, me quedo aquí, un fuerte abrazo y buenos estudios.
Segun entiendo con esto me puedo comunicar a un contacto de whatsapp sin tener una cuenta en esta app y desde mi computador
hola, tendras alguna informacion sobre crear un chat con phyton, api whatsapp, azure, y que tenga base de datos sqlite3? he estado buscando pero no veo sobre eso.
Gracias por la informacion.