FlowHunt JS API: 고급 사용자를 위한 통합 가이드

FlowHunt JavaScript API Chatbot Integration

FlowHunt JS API는 챗봇과 웹사이트의 통합 방식을 완전하게 제어할 수 있도록 해줍니다. v2 통합 코드를 사용하면 챗봇 임베드, 라이프사이클 및 인터랙션 이벤트 구독, 플로우 변수를 통한 동적 데이터 전달, URL 파라미터를 통한 인터랙션 추적, 채팅 창의 프로그래밍 방식 제어가 가능합니다.

이 가이드에서는 프로젝트에 복사하여 적용할 수 있는 코드 예제와 함께 JS API의 모든 측면을 다룹니다.

통합 코드 (v2)

FlowHunt에서 챗봇을 생성하면 통합 스니펫이 제공됩니다. HTML의 닫는 태그 </body> 바로 앞에 복사하여 붙여넣으세요:

<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
  var currentScript = document.currentScript
    || document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');

  var script = document.createElement('script');
  script.async = true;
  script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
    + '?workspace_id=YOUR_WORKSPACE_ID&v=2';

  script.onload = function() {
    window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
      // The chatbot is ready — use chatbotManager here
    });
  };

  if (currentScript && currentScript.parentNode) {
    currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
  } else {
    document.head.appendChild(script);
  }
</script>

YOUR_CHATBOT_IDYOUR_WORKSPACE_ID를 FlowHunt 대시보드의 값으로 교체하세요. 전역 변수명(window.FHChatbot_YOUR_CHATBOT_ID)의 챗봇 ID는 하이픈 대신 언더스코어를 사용합니다.

setConfig()를 사용한 설정 오버라이드

init()를 호출하기 전에 setConfig()를 사용하여 기본 챗봇 설정을 오버라이드할 수 있습니다:

<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
  var currentScript = document.currentScript
    || document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');

  var script = document.createElement('script');
  script.async = true;
  script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
    + '?workspace_id=YOUR_WORKSPACE_ID&v=2';

  script.onload = function() {
    window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
      headerTitle: 'Support Assistant',
      maxWindowWidth: '700px',
      showChatButton: false,
      flowVariables: {
        userId: '12345',
        plan: 'enterprise'
      },
      urlSuffix: '?utm_source=chatbot'
    });

    window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
      // Chatbot initialized with custom config
    });
  };

  if (currentScript && currentScript.parentNode) {
    currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
  } else {
    document.head.appendChild(script);
  }
</script>

사용 가능한 설정 옵션

OptionTypeDescription
headerTitlestring커스텀 헤더 타이틀 텍스트
maxWindowWidthstring채팅 창 최대 너비 (예: '700px')
maxWindowHeightstring채팅 창 최대 높이
inputPlaceholderstring메시지 입력란의 플레이스홀더 텍스트
showChatButtonboolean기본 플로팅 채팅 버튼 표시 또는 숨김
openChatPanelboolean페이지 로드 시 채팅 패널 자동 열기
flowVariablesobject플로우에 전달되는 커스텀 데이터의 키-값 쌍
urlSuffixstring챗봇이 생성하는 모든 URL에 추가되는 쿼리 문자열
cookieConsentboolean쿠키를 통한 세션 지속성 활성화
embeddedstring임베디드 모드 활성화 (닫기 버튼 없음)
themestring테마 모드
Logo

비즈니스 성장 준비가 되셨나요?

오늘 무료 평가판을 시작하고 며칠 내로 결과를 확인하세요.

플로우 변수: 동적 데이터 전달

플로우 변수를 사용하면 웹사이트에서 챗봇 플로우로 커스텀 데이터를 전송할 수 있습니다. 이를 통해 사용자 컨텍스트에 기반한 개인화된 대화가 가능합니다.

window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
  flowVariables: {
    userId: getCurrentUserId(),
    userEmail: getCurrentUserEmail(),
    currentPage: window.location.pathname,
    plan: 'enterprise'
  }
});

설정 후 이러한 변수는 챗봇의 플로우 로직 내에서 접근 가능하게 되어, 응답 개인화, 대화 라우팅, AI 에이전트에 컨텍스트 전달에 사용할 수 있습니다.

URL 접미사: 챗봇 인터랙션 추적

urlSuffix 파라미터는 챗봇이 생성하는 모든 URL에 쿼리 문자열을 추가합니다. 이는 분석 도구에서 챗봇 경유 트래픽을 추적하는 데 유용합니다:

window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
  urlSuffix: '?utm_source=chatbot&utm_medium=widget'
});

사용 사례:

  • 전환 추적 — Google Analytics에서 챗봇 인터랙션의 전환을 추적합니다.
  • 사용자 행동 분석 — 챗봇과의 상호작용 후 사용자 행동을 분석합니다.
  • 캠페인 귀속 — 챗봇 참여를 유도하는 캠페인의 성과를 귀속합니다.

이벤트 레퍼런스

FlowHunt JS API는 window 객체에서 10개의 커스텀 이벤트를 디스패치합니다. 모든 이벤트는 bubbles: truecomposed: true를 가진 CustomEvent API를 사용합니다.

onFHChatbotReady

챗봇 위젯이 완전히 렌더링되어 사용할 준비가 되었을 때 발생합니다.

  • 이벤트 데이터: 없음
  • 발생 시점: 위젯 DOM이 마운트되고 채팅 버튼이 표시된 후.

onFHChatbotSessionCreated

서버에서 새로운 채팅 세션이 생성되었을 때 발생합니다. 세션이 재시작될 때도 발생합니다.

  • 이벤트 데이터: 없음
  • 발생 시점: 세션 생성 API 호출이 성공한 후.

onFHChatbotWindowOpened

사용자가 채팅 창을 열었을 때 발생합니다.

  • 이벤트 데이터: 없음
  • 발생 시점: 채팅 패널이 표시될 때.
  • 참고: 임베디드 모드에서는 발생하지 않습니다.

onFHChatbotWindowClosed

사용자가 채팅 창을 닫았을 때 발생합니다.

  • 이벤트 데이터: 없음
  • 발생 시점: 채팅 패널이 숨겨질 때.
  • 참고: 임베디드 모드에서는 발생하지 않습니다.

onFHMessageSent

사용자가 메시지를 보냈을 때 발생합니다.

  • 이벤트 데이터 (event.detail.metadata):
{
  "content": "Hello, I need help with...",
  "createdAt": "2026-02-19T10:30:00.000Z"
}

onFHMessageReceived

챗봇이 응답을 수신하여 표시했을 때 발생합니다.

  • 이벤트 데이터 (event.detail.metadata):
{
  "flow_id": "abc123",
  "message_id": "msg_456",
  "message": "Sure, I can help you with that!",
  "sender": {
    "sender_name": "Support Agent",
    "sender_avatar": "https://example.com/avatar.png"
  }
}

sender 필드는 선택 사항이며, 휴먼 에이전트가 관여하는 경우에만 존재합니다.

onFHFormDataSent

사용자가 챗봇을 통해 폼 데이터를 제출했을 때 발생합니다.

  • 이벤트 데이터 (event.detail.metadata):
{
  "objectData": { "name": "John", "email": "john@example.com" },
  "createdAt": "2026-02-19T10:31:00.000Z"
}

onFHFeedback

사용자가 챗봇 메시지에 대해 좋아요 또는 싫어요 피드백을 했을 때 발생합니다.

  • 이벤트 데이터 (event.detail.metadata):
{
  "message_id": "msg_456",
  "content": "Optional feedback text",
  "feedback": "P"
}

feedback 값은 긍정(좋아요)의 경우 "P", 부정(싫어요)의 경우 "N"입니다.

onFHToolCall

플로우 처리 중 도구 또는 액션이 실행되었을 때 발생합니다.

  • 이벤트 데이터 (event.detail.metadata):
{
  "metadata": {
    "flow_id": "abc123",
    "message_id": "msg_789",
    "message": "Calling search API..."
  },
  "createdAt": "2026-02-19T10:32:00.000Z"
}

참고: flowAssistant 및 flowAssistantV3 모드에서만 발생하며, 표준 챗봇 모드에서는 발생하지 않습니다.

onFHError

챗봇 작동 중 오류가 발생했을 때 발생합니다.

  • 이벤트 데이터 (event.detail.metadata):
{
  "metadata": {
    "flow_id": "abc123",
    "message_id": "msg_err",
    "message": "Flow execution failed"
  },
  "createdAt": "2026-02-19T10:33:00.000Z"
}

이벤트 구독

챗봇 이벤트를 구독하는 방법은 두 가지가 있습니다.

방법 1: 윈도우 이벤트 리스너

페이지 어디에서든 window.addEventListener를 사용할 수 있습니다. 챗봇이 로드되기 전에도 작동합니다:

<script>
document.addEventListener('DOMContentLoaded', function() {
  // Chatbot lifecycle events
  window.addEventListener('onFHChatbotReady', function(event) {
    console.log('Chatbot is ready');
  });

  window.addEventListener('onFHChatbotSessionCreated', function(event) {
    console.log('Session created');
  });

  window.addEventListener('onFHChatbotWindowOpened', function(event) {
    console.log('Chat window opened');
  });

  window.addEventListener('onFHChatbotWindowClosed', function(event) {
    console.log('Chat window closed');
  });

  // Message events
  window.addEventListener('onFHMessageSent', function(event) {
    console.log('User sent:', event.detail.metadata.content);
  });

  window.addEventListener('onFHMessageReceived', function(event) {
    console.log('Bot replied:', event.detail.metadata.message);
  });

  window.addEventListener('onFHFormDataSent', function(event) {
    console.log('Form submitted:', event.detail.metadata.objectData);
  });

  // Feedback
  window.addEventListener('onFHFeedback', function(event) {
    var feedback = event.detail.metadata;
    console.log('Feedback on message', feedback.message_id, ':',
      feedback.feedback);
  });

  // Tool calls (flowAssistant modes only)
  window.addEventListener('onFHToolCall', function(event) {
    console.log('Tool called:', event.detail.metadata);
  });

  // Errors
  window.addEventListener('onFHError', function(event) {
    console.error('Chatbot error:', event.detail.metadata);
  });
});
</script>

이벤트 수신을 중지하려면 동일한 함수 참조를 사용하여 removeEventListener를 호출합니다:

var handleMessage = function(event) {
  console.log(event.detail.metadata);
};
window.addEventListener('onFHMessageReceived', handleMessage);

// Later, when you want to stop listening:
window.removeEventListener('onFHMessageReceived', handleMessage);

방법 2: 매니저 콜백 메서드

init() 콜백 내에서 챗봇 매니저의 내장 메서드를 사용합니다:

window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
  chatbotManager.onSessionCreated(function() {
    console.log('Session created');
  });

  chatbotManager.onWindowOpened(function() {
    console.log('Window opened');
  });

  chatbotManager.onWindowClosed(function() {
    console.log('Window closed');
  });

  chatbotManager.onMessageSent(function(event) {
    console.log('User sent:', event.metadata);
  });

  chatbotManager.onMessageReceived(function(event) {
    console.log('Bot replied:', event.metadata);
  });

  chatbotManager.onFormDataSent(function(event) {
    console.log('Form data:', event.metadata);
  });

  chatbotManager.onFeedback(function(event) {
    console.log('Feedback:', event.metadata);
  });

  chatbotManager.onToolCall(function(event) {
    console.log('Tool call:', event.metadata);
  });

  chatbotManager.onError(function(event) {
    console.error('Error:', event.metadata);
  });
});

매니저 메서드 레퍼런스

MethodParametersDescription
onSessionCreated(fn)fn: () => void세션 생성 수신
onWindowOpened(fn)fn: () => void창 열기 수신
onWindowClosed(fn)fn: () => void창 닫기 수신
onMessageSent(fn)fn: (event) => void사용자 메시지 수신
onMessageReceived(fn)fn: (event) => void봇 응답 수신
onFormDataSent(fn)fn: (event) => void폼 제출 수신
onFeedback(fn)fn: (event) => void사용자 피드백 수신
onToolCall(fn)fn: (event) => void도구 실행 수신
onError(fn)fn: (event) => void오류 수신
openChat()채팅 패널 열기
closeChat()채팅 패널 닫기

커스텀 채팅 활성화: 버튼 숨기기 및 클릭으로 열기

챗봇의 표시 시점을 완전히 제어하려면 기본 플로팅 버튼을 숨기고 프로그래밍 방식으로 채팅을 엽니다. 예를 들어, 자체 커스텀 버튼에서 열 수 있습니다.

전체 예제

<!-- Your custom chat button -->
<button id="my-chat-button">Chat with us</button>

<!-- FlowHunt integration with hidden default button -->
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
  var currentScript = document.currentScript
    || document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');

  var script = document.createElement('script');
  script.async = true;
  script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
    + '?workspace_id=YOUR_WORKSPACE_ID&v=2';

  script.onload = function() {
    window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
      showChatButton: false
    });

    window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
      // Open chat when your custom button is clicked
      document.getElementById('my-chat-button')
        .addEventListener('click', function() {
          chatbotManager.openChat();
        });
    });
  };

  if (currentScript && currentScript.parentNode) {
    currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
  } else {
    document.head.appendChild(script);
  }
</script>

챗봇 준비 완료 시에만 커스텀 버튼 표시

숨김 활성화와 이벤트 리스너를 결합하여 고급 인터랙션을 만들 수 있습니다:

<button id="open-chat" style="display:none;">Need help?</button>

<script>
// Show a custom button only when the chatbot is ready
window.addEventListener('onFHChatbotReady', function() {
  document.getElementById('open-chat').style.display = 'block';
});
</script>

<!-- FlowHunt integration -->
<script id="fh-chatbot-script-YOUR_CHATBOT_ID">
  var currentScript = document.currentScript
    || document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');

  var script = document.createElement('script');
  script.async = true;
  script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
    + '?workspace_id=YOUR_WORKSPACE_ID&v=2';

  script.onload = function() {
    window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
      showChatButton: false
    });

    window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
      document.getElementById('open-chat')
        .addEventListener('click', function() {
          chatbotManager.openChat();
        });
    });
  };

  if (currentScript && currentScript.parentNode) {
    currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
  } else {
    document.head.appendChild(script);
  }
</script>

완전한 통합 예제

설정 오버라이드, 이벤트 추적, 커스텀 채팅 활성화를 함께 보여주는 완전한 작동 예제:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>FlowHunt Chatbot Integration</title>
</head>
<body>
  <h1>My Website</h1>
  <button id="open-chat-btn">Talk to our AI assistant</button>
  <button id="close-chat-btn">Close chat</button>

  <!-- Subscribe to events before the chatbot loads -->
  <script>
  document.addEventListener('DOMContentLoaded', function() {
    window.addEventListener('onFHChatbotReady', function() {
      console.log('Chatbot widget is ready');
    });

    window.addEventListener('onFHChatbotSessionCreated', function() {
      console.log('New chat session started');
    });

    window.addEventListener('onFHMessageSent', function(event) {
      console.log('User message:', event.detail.metadata.content);
    });

    window.addEventListener('onFHMessageReceived', function(event) {
      console.log('Bot response:', event.detail.metadata.message);
    });

    window.addEventListener('onFHFeedback', function(event) {
      var fb = event.detail.metadata;
      if (fb.feedback === 'P') {
        console.log('Positive feedback on message', fb.message_id);
      } else {
        console.log('Negative feedback on message', fb.message_id);
      }
    });

    window.addEventListener('onFHError', function(event) {
      console.error('Chatbot error:', event.detail.metadata);
    });
  });
  </script>

  <!-- FlowHunt integration -->
  <script id="fh-chatbot-script-YOUR_CHATBOT_ID">
    var currentScript = document.currentScript
      || document.getElementById('fh-chatbot-script-YOUR_CHATBOT_ID');

    var script = document.createElement('script');
    script.async = true;
    script.src = 'https://app.flowhunt.io/api/chatbot/YOUR_CHATBOT_ID'
      + '?workspace_id=YOUR_WORKSPACE_ID&v=2';

    script.onload = function() {
      window.FHChatbot_YOUR_CHATBOT_ID.setConfig({
        showChatButton: false,
        headerTitle: 'AI Assistant',
        maxWindowWidth: '600px',
        flowVariables: {
          source: 'website',
          page: window.location.pathname
        },
        urlSuffix: '?utm_source=chatbot'
      });

      window.FHChatbot_YOUR_CHATBOT_ID.init(function(chatbotManager) {
        document.getElementById('open-chat-btn')
          .addEventListener('click', function() {
            chatbotManager.openChat();
          });

        document.getElementById('close-chat-btn')
          .addEventListener('click', function() {
            chatbotManager.closeChat();
          });
      });
    };

    if (currentScript && currentScript.parentNode) {
      currentScript.parentNode.insertBefore(script, currentScript.nextSibling);
    } else {
      document.head.appendChild(script);
    }
  </script>
</body>
</html>

자주 묻는 질문

더 알아보기

FlowHunt에서 AI 게임 생성기로 AI 미니 게임 만들기
FlowHunt에서 AI 게임 생성기로 AI 미니 게임 만들기

FlowHunt에서 AI 게임 생성기로 AI 미니 게임 만들기

Tool Calling Agent, 프롬프트 노드, 그리고 Anthropic LLM을 활용해 FlowHunt에서 AI 자바스크립트 게임 생성기를 만드는 방법을 단계별로 배워보세요. 플로우 다이어그램 기반 가이드....

3 분 읽기
AI Game Generator +5
플로우
플로우

플로우

플로우는 FlowHunt의 모든 것의 중심 두뇌입니다. 첫 컴포넌트 배치부터 웹사이트 통합, 챗봇 배포, 사전 제작된 템플릿 활용까지, 코드 없이 시각적으로 플로우를 만드는 방법을 알아보세요....

2 분 읽기
AI No-Code +4
FlowHunt 2.6.12: 슬랙 통합, 의도 분류 및 그 이상
FlowHunt 2.6.12: 슬랙 통합, 의도 분류 및 그 이상

FlowHunt 2.6.12: 슬랙 통합, 의도 분류 및 그 이상

FlowHunt 2.6.12에서는 슬랙 통합, 의도 분류, 그리고 Gemini 모델을 도입하여 AI 챗봇 기능, 고객 인사이트, 팀 워크플로우를 강화합니다....

2 분 읽기
FlowHunt AI Chatbot +5