242 lines
8.9 KiB
Python
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)
|