Discourse AI: Discord 봇 통합 가이드

면책 조항:
저는 이 통합 기능의 개발자가 아니며, 최선을 다한 친절한 커뮤니티 지원 이상의 지원을 제공할 수 없습니다. 저는 단지 이 설정을 제 사이트에 적용하고 싶었지만 명확한 방법을 찾지 못한 또 다른 사용자일 뿐입니다. 그 과정에서 버그를 발견하여 수정하기 위해 PR을 제출했지만, 이 주제에 대한 제 지식은 다소 제한적입니다.

작동 방식 (아키텍처)

이 설정을 수행하기 전에, 별도의 봇 애플리케이션을 호스팅하거나 서버에서 “봇” 스크립트(예: Node.js 또는 Python 봇)를 실행할 필요가 없음을 이해하는 것이 중요합니다.

이 통합 기능은 Discord Interactions(Webhooks)와 Progressive Edits를 결합하여 스트리밍 AI 경험을 시뮬레이션합니다:
  1. 사용자 작업: 사용자가 Discord 서버에서 /ask를 입력합니다.
  2. Webhook: Discord가 HTTP POST 요청을 Discourse 서버로 직접 전송합니다.
  3. 즉각적인 확인 응답: Discourse가 즉시 “검색 중…” 상태를 반환합니다. 이는 Discord의 “Interaction Failed” 타임아웃을 방지합니다.
  4. 스트리밍 응답: 백그라운드 작업이 AI 답변 생성을 시작합니다. AI가 텍스트를 생성함에 따라 Discourse는 Discord 메시지를 실시간으로 수정하기 위해 빈번한 HTTP PATCH 요청을 전송합니다.

결과: 사용자는 단일 정적 텍스트 블록을 기다리는 대신, ChatGPT와 마찬가지로 답변이 실시간으로 입력되는 것을 볼 수 있습니다.

주요 이점: Discourse가 로직을 내부적으로 처리하므로 유지보수해야 할 추가 인프라가 없습니다. 포럼이 온라인 상태면 봇도 온라인 상태입니다.

이 가이드는 Discord 서버에 Discourse AI 봇을 통합하는 전체 과정을 자세히 설명합니다. 현재 플러그인의 자동 동기화 문제를 우회하기 위해 API를 통해 슬래시 명령을 수동으로 등록하는 구체적인 지침을 포함합니다.

사전 요구 사항

  • Discourse 관리자 접근 권한: 자체 호스팅 Discourse 인스턴스의 관리자가여야 합니다.
  • Discord 관리자 접근 권한: 대상 Discord 서버에서 “서버 관리” 권한이 있어야 합니다.
  • Discourse AI: Discourse 서버에서 활성화되어 있어야 합니다
  • 터미널 접근 권한: curl 명령을 실행하기 위해 터미널이 필요합니다.

1. Discord 애플리케이션 생성

  1. Discord Developer Portal로 이동합니다.
  2. 오른쪽 상단의 New Application을 클릭합니다.
  3. 애플리케이션 이름을 지정합니다(예: “Discourse Helper”)하고 Create를 클릭합니다.
  4. 자격 증명 복사: General Information 페이지에서 다음 정보를 찾아 나중에 사용하도록 저장합니다:

2. 봇 사용자 구성

  1. 왼쪽 사이드바 메뉴에서 Bot을 클릭합니다.

  2. Reset Token을 클릭합니다.

  3. 특수 권한 인텐트(Privileged Intents) 활성화:

    • “Privileged Gateway Intents” 섹션으로 스크롤합니다.
    • Message Content IntentON으로 전환합니다. (이것은 봇이 응답해야 할 메시지를 읽을 수 있도록 합니다.)
  4. Save Changes를 클릭합니다.

3. Discourse 설정 구성

  1. Discourse 관리자 패널에 로그인합니다.

  2. AdminPluginsAIFeatures로 이동합니다.

  3. "discord"를 검색하고 편집을 클릭합니다:

  4. 세부 정보를 입력합니다

    • AI Discord app ID: =ApplicationId=를 붙여넣습니다
    • AI Discord app public key: =PublicKey=를 붙여넣습니다
  5. Discord 서버 허용:

    • Discord 앱을 열고 개발자 모드를 활성화합니다(User Settings → Advanced → Developer Mode).
    • 사이드바의 서버 아이콘을 우클릭하고 Copy Server ID를 선택합니다.
    • Discourse 설정에서 이 ID를 AI Discord allowed guilds 필드에 붙여넣습니다.

4. Interactions 엔드포인트 설정

  1. 엔드포인트 URL을 구성합니다: =ForumUrl=/discourse-ai/discord/interactions
  2. Discord Developer Portal로 돌아갑니다.
  3. General Information 페이지에서 Interactions Endpoint URL로 스크롤합니다.
  4. URL을 붙여넣고 Save Changes를 클릭합니다.
    • 성공: Discord가 테스트 신호를 전송합니다. 오류 없이 저장되면 Discourse 인스턴스가 서명을 성공적으로 검증한 것입니다.
    • 실패: 오류가 발생하면 Discourse 설정에서 AI Discord app IDAI Discord app public key가 올바르게 저장되었는지 확인하십시오.

5. 봇 초대

  1. Developer Portal에서 사이드바의 Installation을 클릭합니다.
  2. Scopes: botapplications.commands 상자를 선택합니다.
  3. Bot Permissions: 다음 항목을 선택합니다:
    • Send Messages
    • Embed Links
    • Attach Files
    • Read Message History
  4. 페이지 상단의 Installation Link를 복사합니다.
  5. 브라우저 탭에서 이 URL을 열고 봇이 서버에 참여하도록 권한을 부여합니다.

6. 슬래시 명령 등록 (수동 API 호출)

중요: 명령 매개변수 이름은 query여야 합니다.

Mac / Linux (Bash)용

curl -X POST "https://discord.com/api/v10/applications/=ApplicationId=/commands" \
  -H "Authorization: Bot =BotToken=" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ask",
    "description": "Ask the AI a question",
    "options": [
        {
            "name": "query",
            "description": "What is your question?",
            "type": 3,
            "required": true
        }
    ]
}'
  • 성공 응답: 새 명령의 ID가 포함된 JSON 응답을 받아야 합니다.
  • 오류 401? Authorization 헤더에서 토큰 앞에 Bot (공백 포함) 단어가 있는지 확인하십시오.

7. 검증

  1. Discord 서버를 엽니다.
  2. 텍스트 채널에서 /ask를 입력합니다.
  3. 명령 메뉴가 나타납니다. /ask를 선택하고 query 필드에 질문을 입력합니다.
  4. 예상 동작:
    • 즉시: 봇이 "검색 중…"이라고 응답합니다.
    • 몇 초 후: 메시지가 AI의 답변으로 업데이트됩니다.

문제 해결

오류 원인 해결책
401 Unauthorized (Curl에서) 잘못된 토큰 형식 헤더가 Authorization: Bot =BotToken=인지 확인하십시오. General 탭이 아닌 Bot 탭의 토큰을 사용하십시오.
Job Exception: context must be an instance of BotContext 잘못된 페이로드 최신 버전으로 업데이트되어 있는지 확인하십시오. 이 문제는 FIX: Discord Bot crash due to missing BotContext in PersonaReplier - Pull Request #36429#issuecomment-3610843271%EC%97%90%EC%84%9C - discourse/discourse - GitHub 수정되었습니다
2개의 좋아요