Discussions

Ask a Question
Back to All

Avatar doesnt respond back

Hello,

Is there any error in this code, becuase the avatar sometimes respond and sometime it doesnt, I think there is an error in the startVoiceChat fucntion

const startSession = async () => {
    sessionStarted.current = true;
    setIsLoadingSession(true);
    setCurrentLoadingStep(0);
    try {
      const quota = await getHeygenRemainingQuota();
      if (quota < 50) {
        setDebug("Not enough quota");
        return;
      }
      setCurrentLoadingStep(1);
      const token = await fetchAccessToken();
      setCurrentLoadingStep(2);
      avatar.current = new StreamingAvatar({ token });

      avatar.current.on(StreamingEvents.AVATAR_START_TALKING, () => {
        handleMicPermission(false);
        EndSessionAfterAmountOfTime(heygenTimeoutPlaceHolder);
      });

      avatar.current.on(StreamingEvents.AVATAR_TALKING_MESSAGE, (message) => {
        setCaptionText((prev) => `${prev} ${message.detail.message}`);
        EndSessionAfterAmountOfTime(message.timeStamp + 1000 * 12);
      });

      avatar.current.on(StreamingEvents.AVATAR_STOP_TALKING, () => {
        handleMicPermission(true);
        setCaptionText("");
        EndSessionAfterAmountOfTime(heygenTimeoutPlaceHolder);
      });

      avatar.current.on(StreamingEvents.STREAM_READY, (event) => {
        setStream(event.detail);
        EndSessionAfterAmountOfTime(heygenTimeoutPlaceHolder);
      });

      avatar.current.on(StreamingEvents.USER_START, () => {
        console.log("User Started Talking");
        // handleInterrupt();
        setIsUserTalking(true);
        setCaptionText("");
      });

      avatar.current.on(StreamingEvents.USER_STOP, () => {
        setIsUserTalking(false);
      });
      avatar.current.on(StreamingEvents.USER_END_MESSAGE, (e) => {
        console.log("user talking message " +e)
      });

      avatar.current.on(StreamingEvents.USER_TALKING_MESSAGE, (e) => {
        console.log("user talking message " +e)
      });

      avatar.current.on(StreamingEvents.STREAM_DISCONNECTED, async () => {
        await endSession();
      });
      setCurrentLoadingStep(3);
      const res = await avatar.current.createStartAvatar({
        avatarName: cardId,
        knowledgeId,
        quality: AvatarQuality.High,
        voice: {
          rate: 1.5,
          emotion: VoiceEmotion.EXCITED,
        },
        language,
        disableIdleTimeout: true,
      });
      setCurrentLoadingStep(4);
      setData(res);
      wait(100);
      await handleSpeak("Say: Hello");
      setCurrentLoadingStep(5);
      setCurrentLoadingStep(6);
      await wait(100);
      console.log("Starting Voice chat")
      await avatar.current.startVoiceChat();
      // await handleMicPermission(false);
    } catch (error) {
      console.error("StartSession Error:", error);
      setDebug(error instanceof Error ? error.message : "Unknown error");
    } finally {
      setIsLoadingSession(false);
    }
  };