Flask로 WhatsApp 자동 ChatGPT 챗봇 만들기

OpenAI가 개발한 언어 모델인 ChatGPT는 사람과 같은 텍스트를 생성하고 사용자의 다양한 작업을 지원하는 인기 도구로 자리 잡았습니다. 복잡한 질문에 정확한 답변을 제공하는 능력은 많은 사람들에게 깊은 인상을 남겼습니다.

프라그나칼프는 기술을 사용자 친화적으로 만드는 것을 신념으로 삼고 있으며, ChatGPT가 우리 삶을 혁신할 수 있는 잠재력을 인식했습니다. 그래서 저희는 혁신적인 아이디어를 생각해냈습니다. 바로 WhatsApp과 같은 인기 메시징 플랫폼에 ChatGPT를 통합하는 것이었습니다.

이 블로그에서는 Meta가 제공하는 WhatsApp 비즈니스 API를 사용하여 플라스크 웹 프레임워크를 활용하여 사용자 메시지를 수신하고 ChatGPT에서 생성된 자세한 답변으로 응답하는 Python 애플리케이션을 만드는 방법을 살펴보겠습니다.

ChatGPT의 강력한 기능을 활용하고 이를 널리 사용되는 메시징 플랫폼과 통합함으로써 커뮤니케이션을 간소화하고 생산성을 향상시킬 수 있습니다.

1단계 - 왓츠앱 비즈니스 API

플라스크 애플리케이션을 사용하여 자동화된 메시징을 구현하려면 WhatsApp 비즈니스 API를 통합해야 합니다. 이를 위해서는 테스트 전화번호를 사용하여 메시지를 주고받는 방법에 대한 단계별 지침을 제공하는 ‘WhatsApp 비즈니스 API 설정’ 블로그 포스팅을 참조하는 것이 좋습니다. 구현을 진행하기 전에 블로그 게시물에 설명된 지침을 주의 깊게 검토하고 완료하시기 바랍니다.

2단계 - Chat GPT API 발급받기

ChatGPT가 사용자의 메시지에 응답할 수 있도록 하기 위해, 저희는 ChatGPT API를 활용할 것입니다. ChatGPT의 설정 및 활용에 대한 자세한 지침은 블로그의 이 섹션에 나와 있습니다.

ChatGPT API는 웹 서비스에 최첨단 언어 처리 기능을 통합하기 위한 효율적이고 간단한 접근 방식을 제공합니다. 아직 공식 API 엔드포인트는 제공되지 않지만 ChatGPT 커뮤니티에서 쉽게 구현할 수 있는 몇 가지 간단한 솔루션을 개발했습니다.

중요

비공식 ChatGPT API를 활용하기 전에 아래 제공된 단계에 따라 코드를 구성하는 것이 중요합니다.

1. 아래의 명령어를 통해 해당 Git 저장소를 클론해주세요.

git clone https://github.com/mmabrouk/chatgpt-wrapper

2. API를 사용하기 위해 필요한 Setup Tools 라이브러리를 설치해주세요.

pip install setuptools

3. 아래 명령어를 실행하여 Dependency도 설치해주겠습니다!

pip install git+https://github.com/mmabrouk/chatgpt-wrapper

4. 애플리케이션을 시작하려면 Playwright에 브라우저를 먼저 설치해야 합니다. 기본적으로 이 코드에서는 Firefox를 사용합니다.

playwright install firefox

앞서 언급한 명령을 실행하면 아래 이미지와 같은 메시지가 표시됩니다. 플레이라이트를 처음 설치하는 사용자라면 플레이라이트 설치 명령을 한 번만 실행하라는 메시지가 표시됩니다.

5. 설치가 완료되면 아래 명령어를 입력해서 GPT 설치를 완료 하실 수 있습니다.

chatgpt install

이후에는 아래 사진처럼 새로운 브라우저 창이 열리면서 OpenAI 계정으로 로그인 하거나 chat.openai.com에서 새로 회원 가입하라는 메시지가 표시될 겁니다.

로그인이 완료되면, 이후에는 실행 중이던 프로그램이 종료 된 뒤에 다시 열립니다.

이번에는 아래 사진처럼 ‘install’이라는 단어를 제외하고 shell 명령으로 ‘chatgpt <여러분의 프롬프트>’를 입력하여 사용 하실 수 있습니다.

다만, 일정 시간 동안 ChatGPT를 사용하지 않으실 경우에는 Session이 자동으로 만료되기 때문에, 이 경우 ‘chatgpt install’ 명령어를 사용해서 다시 OpenAI 계정으로 로그인 하셔야 합니다.

이제 클래스의 인스턴스를 새로 생성한 뒤, ‘ask’ 메서드를 사용하여 OpenAI에 메시지를 보낼 겁니다. 그 다음 응답을 사용하여 ChatGPT 클래스를 통해 ChatGPT와 API를 통해 상호 작용하게 될 겁니다.

from chatgpt_wrapper import ChatGPT
import time

prompt = “what is coronavirus? explain me in 2 3 lines”
bot = ChatGPT()
response = bot.ask(prompt)
print(“Prompt: “,prompt)
print(“Response: “,response)

아래 사진은 ChatGPT로부터 받은 응답(Response)를 보여줍니다.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

3단계 - Flask 앱과 Chat GPT API 연결하기

ChatGPT API를 성공적으로 설치했다면, 다음 단계는 이를 Flask 애플리케이션과 통합하는 것입니다.

이를 위해서는 1단계에서 생성한 Flask 앱을 수정해야 합니다. 현재 코드를 아래 제공된 코드 스니펫으로 교체하여 ChatGPT가 사용자 메시지에 응답할 수 있도록 합니다.

from ChatGPT.0][‘value’][‘contacts’][0][‘wa_id’] 

      try: send_msg(response,receiver_number) 

      except: pass 

      return ‘200 OK HTTPS.’ if __name__ == “__main__”: app.run(debug=True)

from flask import Flask, request
import requests
from chatgpt_wrapper import ChatGPT


app = Flask(__name__)

def send_msg(msg,receiver_number):

headers = {
‘Authorization’: ‘Bearer VERIFICATION_TOKEN’,
}
json_data = {
‘messaging_product’: ‘whatsapp’,
‘to’: receiver_number,
‘type’: ‘text’,
“text”: {
“body”: msg
}
}
response = requests.post(‘https://graph.facebook.com/v13.0/PHONE_NUMBER_ID/messages’, headers=headers, json=json_data)
print(response.text)

@app.route(‘/receive_msg’, methods=[‘POST’,‘GET’])
def webhook():
res = request.get_json()
print(res)
try:
if res[‘entry’][0][‘changes’][0][‘value’][‘messages’][0][‘id’]:
chat_gpt_input=res[‘entry’][0][‘changes’][0][‘value’][‘messages’][0][‘text’][‘body’]
bot = ChatGPT()
response = bot.ask(chat_gpt_input)
print(“ChatGPT Response=>”,response)
receiver_number=res[‘entry’][0][‘changes’][0][‘value’][‘contacts’][0][‘wa_id’]
send_msg(response,receiver_number)
except:
pass
return ‘200 OK HTTPS.’


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

터미널에서 플라스크 애플리케이션 실행하는 명령어: python SCRIPT_NAME.py

 

터미널에서 ngrok 여는 명령어: ngrok http 5000

4단계 - 챗봇 테스트하기

이제 아래 이미지와 같이 ‘시작하기’ 페이지로 돌아와서 ‘메시지 보내기’ 버튼을 클릭합니다.

메시지를 보내거나, 전달하거나, 읽으면 플라스크 앱의 receive_msg 엔드포인트에서 응답을 받게 됩니다. ChatGPT의 응답은 서버 터미널을 통해서도 확인할 수 있습니다. 서버는 메시지 전송, 메시지 전달, 메시지 읽기를 포함한 모든 이벤트에 대한 응답을 제공합니다. 문장을 재배열, 추가 또는 제거하여 문장 구조를 수정할 수 있습니다.

이제 Whatsapp에서 Chat GPT를 활용하여 동작하고 있는 챗봇을 확인해보세요.