Files
Agendamento-Servicos-V1/Main_Receiver-Whatsapp.py

242 lines
8.9 KiB
Python

from flask import Flask, request, jsonify
import requests
from datetime import datetime
###
from BD_manager_Mysql import inserir_acompanhamento, buscar_ultimo_chat, atualizar_acompanhamento, inserir_evento, listar_agenda, atualizar_agenda
###
#Funções de fluxo
def MostrarPeriodos(chat_id, name, status):
#
if(status == "10" or status == "null"):
inserir_acompanhamento(chat_id, "2", name)
else:
atualizar_acompanhamento(chat_id, "status", "2")
resposta = f"Qual periodo você gostaria de agendar ?\n1-Manhã\n2-Tarde\n3-Noite"
return resposta
def MostrarHorarios(texto_recebido, chat_id):
print("Entrou na função de consultar os horarios")
z = ""
try:
if(texto_recebido == "1"):
horarios = listar_agenda("periodo","manhã")
resposta = horarios
for horario in horarios:
z = z + str(horario['id'])+" - "+horario['data'].strftime("%d/%m/%Y")+" as "+str(horario['horario'])+"\n"
resposta = f"Qual horario você gostaria de agendar ?\n"+z+"\n0 - Voltar"
atualizar_acompanhamento(chat_id, "status", "3")
return resposta
elif(texto_recebido == "2"):
horarios = listar_agenda("periodo","tarde")
resposta = horarios
for horario in horarios:
z = z + str(horario['id'])+" - "+horario['data'].strftime("%d/%m/%Y")+" as "+str(horario['horario'])+"\n"
resposta = f"Qual horario você gostaria de agendar ?\n"+z+"\n0 - Voltar"
atualizar_acompanhamento(chat_id, "status", "3")
return resposta
elif(texto_recebido == "3"):
horarios = listar_agenda("periodo","noite")
resposta = horarios
for horario in horarios:
z = z + str(horario['id'])+" - "+horario['data'].strftime("%d/%m/%Y")+" as "+str(horario['horario'])+"\n"
resposta = f"Qual horario você gostaria de agendar ?\n"+z+"\n0 - Voltar"
atualizar_acompanhamento(chat_id, "status", "3")
return resposta
else:
resposta = "Opção inválida, por favor digite um periodo válido\n1 - manhã\n2 - tarde\n3 - noite"
return resposta
except ValueError:
resposta = f"Você não digitou uma opção válida"
return resposta
###############
app = Flask(__name__)
# 🔧 Configurações da sua instância UltraMsg
INSTANCE_ID = ""
TOKEN = ""
# URL da API para enviar mensagens
API_URL = f"https://api.ultramsg.com/{INSTANCE_ID}/messages/chat"
@app.route('/webhook', methods=['POST'])
def webhook():
payload = request.json
print("🔵 DADOS RECEBIDOS:")
print(payload)
# Extrai a mensagem de dentro de 'data'
data = payload.get("data", {})
texto_recebido = data.get("body", "")
#numero_remetente = data.get("from", "")
chat_id = data.get("from", "")
name = data.get("pushname", "")
resposta = ""
print(f"Mensagem recebida de {chat_id}: {texto_recebido}")
# Remove sufixo "@c.us" do número
#numero_remetente = numero_remetente.replace("@c.us", "")
chat_id = chat_id.replace("@c.us", "")
try:
status = buscar_ultimo_chat(chat_id)['status']
except:
status = "null"
print("Status: ", status)
#Começo do atendimento (Fluxo iniciado)
'''if(texto_recebido.lower() == "oi" or texto_recebido.lower() == "sim"):
resposta = f"Olá! você gostaria de agendar um horário?\n Digite\n1-SIM\n2-NÃO"
inserir_acompanhamento(chat_id, "1", name)'''
if(texto_recebido == "2" and status == "10") :
resposta = "Sem problemas, qualquer coisa estou aqui"
print("ChatID: ", chat_id)
print("Status: ", status)
print("Status type: ", type(status))
#Mostrar periodos Manhã, tarde e Noite
elif(texto_recebido == "1" and status == "10" or texto_recebido == "1" and status == "null") :
print("Mostrar os periodos manhã, tarde e noite")
resposta = MostrarPeriodos(chat_id, name, status)
'''atualizar_acompanhamento(chat_id, "status", "2")
resposta = f"Qual periodo você gostaria de agendar ?\n1-Manhã\n2-Tarde\n3-Noite"'''
##mostrar horarios
elif(status == "2") :
print("mostrar os horarios disponiveis")
resposta = MostrarHorarios(texto_recebido, chat_id)
#Seleção dos horarios disponiveis
elif(texto_recebido != "0" and status == "3") :
try:
#converter data
id = texto_recebido
data_horario_agenda = listar_agenda("id",id)
print("Data Agenda: ",data_horario_agenda)
print("Data agenda data: ",data_horario_agenda[0]['data'])
#sqlite
#data_convertida = datetime.strptime(data_horario_agenda[0]['data'], "%d/%m/%Y").strftime("%Y-%m-%d")
#mysql
data_convertida = data_horario_agenda[0]['data'].strftime("%Y-%m-%d")
datetime.strptime(data_convertida, "%Y-%m-%d")
atualizar_acompanhamento(chat_id, "data_event", data_convertida)
atualizar_acompanhamento(chat_id, "time_event", data_horario_agenda[0]['horario'])
atualizar_acompanhamento(chat_id, "status", "4")
#atualizar a disponibilidade da agenda para não aparecer depois da data ser agendada
atualizar_agenda(int(texto_recebido), "disponibilidade", "1")
resposta = f"Você gostaria de adicionar algum comentários ?\n1 - Sim\n2 -Não"
except ValueError:
resposta = f"A data que você digitou não está no formato correto.\nDigite a data no seguinte formato dd/mm/yyyy"
except IndexError:
resposta = "Nenhum evento encontrado para esse ID, por favor, selecione uma das datas que lhe enviei."
#Adicionar comentário caso a resposta seja sim para adicionar
elif(texto_recebido == "1" and status == "4"):
atualizar_acompanhamento(chat_id, "status", "5")
resposta = "Por favor, escreva o seu comentário"
#Capturando a mensagem para ser inserida no banco
elif(status == "5"):
atualizar_acompanhamento(chat_id, "status", "10")
data_agendada = buscar_ultimo_chat(chat_id)["data_event"]
#data_agendada = datetime.strptime(data_agendada, "%Y-%m-%d")
data_agendada_formatada = data_agendada.strftime("%d/%m/%Y")
horario_agendado = buscar_ultimo_chat(chat_id)["time_event"]
inserir_evento(buscar_ultimo_chat(chat_id)["data_event"],buscar_ultimo_chat(chat_id)["time_event"],"00:30:00","Padão Titulo",texto_recebido,chat_id,name,"Telegram")
resposta = f"Então agendamos para {data_agendada_formatada} as {horario_agendado} !\nObrigado !"
#Caso a resposta de inserir uma mensagem seja "Não"
elif(texto_recebido == "2" and status == "4"):
atualizar_acompanhamento(chat_id, "status", "10")
data_agendada = buscar_ultimo_chat(chat_id)["data_event"]
#data_agendada = datetime.strptime(data_agendada, "%Y-%m-%d")
data_agendada_formatada = data_agendada.strftime("%d/%m/%Y")
horario_agendado = buscar_ultimo_chat(chat_id)["time_event"]
inserir_evento(buscar_ultimo_chat(chat_id)["data_event"],buscar_ultimo_chat(chat_id)["time_event"],"00:30:00","Padão Titulo",texto_recebido,chat_id,name,"Telegram")
resposta = f"Então agendamos para {data_agendada_formatada} as {horario_agendado} !\nObrigado !"
#voltar para priodo
elif(texto_recebido == "0" and status == "3"):
atualizar_acompanhamento(chat_id, "status", "2")
resposta = MostrarPeriodos(chat_id, name, status)
#Tratamento de mensagem inválida ao bot
elif(texto_recebido.lower() == "quem é você?" or texto_recebido.lower() == "quem e você?"):
resposta = f"Eu sou um Bot de agendamento!"
#await update.message.reply_text(resposta)
#resposta = f"Você escreveu: {texto_recebido}"
elif(texto_recebido.lower() == "2" and status == "null" or texto_recebido.lower() == "2" and status == "10"):
resposta = f"Então tudo bem !\nSe precisar é só me chamar."
else:
resposta = f"Olá, você gostaria de agendar um horario ?\n1 - Sim\n2 - Não"
# Envia a resposta
API_URL = f"https://api.ultramsg.com/{INSTANCE_ID}/messages/chat"
payload_resposta = {
"token": TOKEN,
#"to": numero_remetente,
"to": chat_id,
"body": resposta
}
r = requests.post(API_URL, data=payload_resposta)
print("🟢 Enviando resposta:", resposta)
print("🟡 Status da API:", r.status_code)
print("🔴 Resposta da API:", r.text)
return jsonify({"status": "mensagem processada"}), 200
if __name__ == '__main__':
app.run(port=5000)