원하시는 것이 특정 사용자 이름(예: UserA)이 게시물에서 언급될 때 OpenAI로부터 응답을 생성하는 것이라면, Discourse로 알림을 가져오기 위해 API 요청을 보내는 대신 Discourse 알림 이벤트 웹훅을 Python 애플리케이션 서버로 설정할 수 있습니다. Python 애플리케이션은 웹훅 페이로드를 확인해야 합니다. 페이로드의 notification_type이 1로 설정되어 있고, user_id가 알림을 받기를 원하는 사용자의 ID와 일치하는 경우, 페이로드의 original_post_id 필드에 설정된 게시물을 가져오기 위해 Discourse로 API 요청을 보내야 합니다. 그런 다음 해당 요청에서 반환된 게시물 내용을 OpenAI로 전송합니다.
언급 알림의 페이로드가 어떤 모습인지 보여주는 예시는 다음과 같습니다:
{
"notification": {
"id": 55267,
"user_id": 2,
"notification_type": 1,
"read": false,
"high_priority": false,
"created_at": "2022-12-08T23:23:36.379Z",
"post_number": 5,
"topic_id": 277,
"fancy_title": "I should be able to call this topic anything",
"slug": "i-should-be-able-to-call-this-topic-anything",
"data": {
"topic_title": "I should be able to call this topic anything",
"original_post_id": 10999,
"original_post_type": 1,
"original_username": "scossar",
"revision_number": null,
"display_username": "scossar"
}
}
}
이 방식의 장점은 Discourse 사이트로 대량의 API 요청을 보내지 않고도 실시간으로 알림을 받을 수 있다는 것입니다.
웹훅 방식을 선택한다면, Discourse에서 웹훅의 “Secret” 필드를 설정한 후 Python 애플리케이션에서 요청을 검증하여 시크릿 키가 올바르게 설정되었는지 확인하는 것이 좋습니다. 저는 아직 Python 애플리케이션에서 이를 수행하기 위한 라우트를 설정해 보지 않았습니다. WordPress에서 웹훅의 Secret을 검증하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다: wp-discourse-custom-webhook-request/wp-discourse-custom-webhook-request.php at master · scossar/wp-discourse-custom-webhook-request · GitHub.