Скрипт Python не подключается к OPEN AI и JIRA APIPython

Программы на Python
Anonymous
Скрипт Python не подключается к OPEN AI и JIRA API

Сообщение Anonymous »

Мне нужна серьезная помощь. Дело в том, что у меня был работающий скрипт Python. Он соединяется с OpenAI и API управления сервисами Jira. Проблема началась, когда я внес некоторые изменения в то, как я использую ИИ для создания ответов. Проблема в том, что хотя ответы ИИ генерируются, билет JSM не создается!
Я считаю, что проблема заключается в том, как я управляю данными внутри JSON, но мне не удается увидеть, где я это делаю. Я ошибаюсь!
Буду очень благодарен, если вы мне поможете!
Это мой скрипт на Python:

Код: Выделить всё

from flask import Flask, request, jsonify
from twilio.twiml.messaging_response import MessagingResponse
import openai
import requests
from requests.auth import HTTPBasicAuth
import os
import json
import logging

app = Flask(__name__)

# Configurar logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# Configurar cliente de OpenAI
openai_api_key = os.getenv('OPENAI_API_KEY')
openai.api_key = openai_api_key

# Configuración de Jira
jira_api_url = 'https://holamemo.atlassian.net/rest/api/2/issue'
jira_auth_token = os.getenv('JIRA_AUTH_TOKEN')
jira_email = os.getenv('JIRA_EMAIL')

logger.info(f"JIRA_EMAIL: {jira_email}")
if jira_auth_token:
logger.info(f"JIRA_AUTH_TOKEN: {jira_auth_token[:4]}...")
else:
logger.error("JIRA_AUTH_TOKEN is not set")

conversation_state = {}

def generate_ai_response(prompt):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "Eres un entrevistador que está recopilando información para un candidato. Hazlo de manera amigable y relajada."},
{"role": "user", "content": prompt}
]
)
return response.choices[0].message['content']

def create_jira_issue(data):
auth = HTTPBasicAuth(jira_email, jira_auth_token)
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
payload = {
"fields": {
"summary": f"Nuevo candidato: {data['name']}",
"description": f"Nombre: {data['name']}\nCorreo: {data['email']}\nTeléfono: {data['phone']}\nExperiencia: {data['experience']}",
"issuetype": {
"name": "Tarea"
},
"project": {
"key": "FT"
}
}
}

logger.info(f"Enviando payload a la API de JIRA: {json.dumps(payload, indent=2)}")
logger.info(f"Usando email: {jira_email}")
if jira_auth_token:
logger.info(f"Usando token: {jira_auth_token[:4]}...")

response = requests.post(jira_api_url, json=payload, headers=headers, auth=auth)

logger.info(f"Response status code: {response.status_code}")
logger.info(f"Response text: {response.text}")

if response.status_code == 401:
logger.error("Unauthorized: Check your email and API token.")
logger.error(f"Response headers: {response.headers}")
logger.error(f"Response content: {response.content}")

response.raise_for_status()

issue_key = response.json().get('key')
logger.info(f"Created Jira issue with key: {issue_key}")
return issue_key

def process_message(user_id, message):
if user_id not in conversation_state:
conversation_state[user_id] = {
"stage": 0,
"data": {},
"history": []
}

state = conversation_state[user_id]
state["history"].append({"role": "user", "content": message})

if state["stage"] == 0:
prompt = "Inicia la conversación con el candidato preguntando su nombre y qué tipo de trabajo le interesa."
response_text = generate_ai_response(prompt)
state["stage"] = 1
else:
if state["stage"] == 1:
state["data"]["name"] = message
state["history"].append({"role": "assistant", "content": f"Gracias, {message}.  ¿Qué tipo de trabajo te interesa?"})
prompt = "El candidato ha proporcionado su nombre y está interesado en un trabajo. Pregunta cuál es su dirección de correo electrónico y cómo podemos contactarlo."
response_text = generate_ai_response(prompt)
state["stage"] = 2
elif state["stage"] == 2:
state["data"]["job_interest"] = message
state["history"].append({"role": "assistant", "content": f"Entiendo, estás interesado en {message}. ¿Cuál es tu dirección de correo electrónico para que podamos contactarte?"})
prompt = "El candidato ha proporcionado su interés laboral y su correo electrónico. Pregunta su número de teléfono."
response_text = generate_ai_response(prompt)
state["stage"] = 3
elif state["stage"] == 3:
state["data"]["email"] = message
state["history"].append({"role": "assistant", "content": f"Gracias por tu correo electrónico, {message}. ¿Podrías también darme tu número de teléfono?"})
prompt = "El candidato ha proporcionado su correo electrónico y su número de teléfono. Pregunta sobre su experiencia laboral previa."
response_text = generate_ai_response(prompt)
state["stage"] = 4
elif state["stage"] == 4:
state["data"]["phone"] = message
state["history"].append({"role": "assistant", "content": f"Gracias por tu número de teléfono, {message}. Cuéntame un poco sobre tu experiencia laboral previa."})
prompt = "El candidato ha proporcionado su número de teléfono y ha compartido su experiencia laboral previa. Agradece al candidato y menciona que el equipo de recursos humanos se pondrá en contacto pronto."
response_text = generate_ai_response(prompt)
state["stage"] = 5
elif state["stage"] == 5:
state["data"]["experience"] = message
# Asegúrate de que los datos se estén guardando correctamente
print(state["data"])

# Envía los datos a JSM
ticket_data = {
'name': state['data']['name'],
'email': state['data']['email'],
'phone': state['data']['phone'],
'experience': state['data']['experience']
}
issue_key = create_jira_issue(ticket_data)

# Asegúrate de que se esté recibiendo la respuesta correcta de JSM
print(issue_key)

response_text = "¡Gracias por proporcionar toda la información! Nuestro equipo de recursos humanos se pondrá en contacto contigo pronto."
del conversation_state[user_id]

state["history"].append({"role": "assistant", "content": response_text})
return response_text

@app.route("/webhook", methods=['POST'])
def webhook():
incoming_msg = request.form.get('Body')
client_number = request.form.get('From')
user_id = client_number

ai_response = process_message(user_id, incoming_msg)

response = MessagingResponse()
response.message(ai_response)
return str(response)

@app.route("/")
def index():
return "Hola, esta es la aplicación Flask en funcionamiento!"

if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port, debug=True)

Если вы хотите посмотреть, как показывает моя консоль, вот она:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/788 ... d-jira-api

Вернуться в «Python»