카테고리 없음

고객 문의 기능 구현: Python Flask로 간단한 API 작성하기

idea9329 2024. 12. 30. 16:42
반응형

 

고객 문의 기능은 기업과 고객 간의 소통 창구를 제공하는 핵심 요소입니다. 고객이 질문, 요청, 또는 불만 사항을 등록할 수 있는 시스템은 고객 만족도를 높이는 데 필수적입니다. 아래는 Python Flask를 사용해 기본적인 고객 문의 기능을 구현하는 API 예제입니다.


주요 기능

  1. 문의 생성
    고객이 이름, 이메일, 문의 내용을 제출.
  2. 문의 조회
    관리자나 고객이 특정 문의 내용을 확인.
  3. 문의 목록 조회
    모든 문의 내역을 관리자가 확인.
  4. 문의 상태 업데이트
    문의에 대한 상태(예: 처리 중, 완료)를 변경.

API 설계

데이터베이스 구조

  • 문의 테이블:

컬럼타입설명

id Integer (PK) 문의 ID
name String 고객 이름
email String 고객 이메일
message Text 문의 내용
status String 상태 (등록, 처리 중, 완료)
created_at DateTime 문의 등록일

코드 작성

Flask API 구현

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

# Flask 앱 생성
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///inquiries.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 데이터베이스 초기화
db = SQLAlchemy(app)

# 문의 데이터베이스 모델
class Inquiry(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), nullable=False)
    message = db.Column(db.Text, nullable=False)
    status = db.Column(db.String(20), default="등록", nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

# 데이터베이스 생성
with app.app_context():
    db.create_all()

# 1. 문의 생성 API
@app.route('/inquiries', methods=['POST'])
def create_inquiry():
    data = request.json
    try:
        new_inquiry = Inquiry(
            name=data['name'],
            email=data['email'],
            message=data['message']
        )
        db.session.add(new_inquiry)
        db.session.commit()
        return jsonify({"message": "문의가 성공적으로 등록되었습니다.", "inquiry_id": new_inquiry.id}), 201
    except KeyError as e:
        return jsonify({"error": f"필수 입력값이 누락되었습니다: {str(e)}"}), 400

# 2. 특정 문의 조회 API
@app.route('/inquiries/<int:inquiry_id>', methods=['GET'])
def get_inquiry(inquiry_id):
    inquiry = Inquiry.query.get(inquiry_id)
    if inquiry:
        return jsonify({
            "id": inquiry.id,
            "name": inquiry.name,
            "email": inquiry.email,
            "message": inquiry.message,
            "status": inquiry.status,
            "created_at": inquiry.created_at.strftime("%Y-%m-%d %H:%M:%S")
        }), 200
    else:
        return jsonify({"error": "문의 내역을 찾을 수 없습니다."}), 404

# 3. 모든 문의 목록 조회 API
@app.route('/inquiries', methods=['GET'])
def get_all_inquiries():
    inquiries = Inquiry.query.all()
    result = []
    for inquiry in inquiries:
        result.append({
            "id": inquiry.id,
            "name": inquiry.name,
            "email": inquiry.email,
            "message": inquiry.message,
            "status": inquiry.status,
            "created_at": inquiry.created_at.strftime("%Y-%m-%d %H:%M:%S")
        })
    return jsonify(result), 200

# 4. 문의 상태 업데이트 API
@app.route('/inquiries/<int:inquiry_id>', methods=['PUT'])
def update_inquiry_status(inquiry_id):
    data = request.json
    inquiry = Inquiry.query.get(inquiry_id)
    if inquiry:
        inquiry.status = data.get('status', inquiry.status)
        db.session.commit()
        return jsonify({"message": "문의 상태가 성공적으로 업데이트되었습니다."}), 200
    else:
        return jsonify({"error": "문의 내역을 찾을 수 없습니다."}), 404

if __name__ == '__main__':
    app.run(debug=True)

API 사용 방법

1. 문의 생성

POST /inquiries
요청 본문:

{
    "name": "홍길동",
    "email": "hong@example.com",
    "message": "호텔 객실 예약 관련 문의입니다."
}

응답:

{
    "message": "문의가 성공적으로 등록되었습니다.",
    "inquiry_id": 1
}

2. 특정 문의 조회

GET /inquiries/<inquiry_id>
응답:

{
    "id": 1,
    "name": "홍길동",
    "email": "hong@example.com",
    "message": "호텔 객실 예약 관련 문의입니다.",
    "status": "등록",
    "created_at": "2024-01-01 10:00:00"
}

3. 모든 문의 목록 조회

GET /inquiries
응답:

[
    {
        "id": 1,
        "name": "홍길동",
        "email": "hong@example.com",
        "message": "호텔 객실 예약 관련 문의입니다.",
        "status": "등록",
        "created_at": "2024-01-01 10:00:00"
    }
]

4. 문의 상태 업데이트

PUT /inquiries/<inquiry_id>
요청 본문:

{
    "status": "처리 중"
}

응답:

{
    "message": "문의 상태가 성공적으로 업데이트되었습니다."
}

확장 가능성

  1. 인증 시스템 추가:
    • 고객과 관리자 계정을 분리하여 각자의 역할에 맞는 권한 부여.
  2. 첨부 파일 지원:
    • 문의와 함께 이미지, 문서 등의 첨부 파일을 업로드하는 기능 추가.
  3. 자동화 이메일 알림:
    • 문의 등록 시 고객과 관리자에게 알림 이메일 발송.
  4. 고객 포털:
    • 고객이 자신의 문의 내역을 확인하고 상태를 추적할 수 있는 웹 인터페이스 구축.

결론

위 코드는 Flask와 SQLite를 사용한 간단한 고객 문의 기능입니다. 이 API를 활용하면 고객 문의 접수를 효율적으로 관리할 수 있으며, 이를 기반으로 다양한 기능을 추가해 나갈 수 있습니다. 지금 바로 구현해 보고, 고객과의 소통을 한 단계 업그레이드해 보세요! 🚀

반응형