{"id":84513,"date":"2024-11-19T17:42:12","date_gmt":"2024-11-19T14:12:12","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/"},"modified":"2024-11-19T17:42:12","modified_gmt":"2024-11-19T14:12:12","slug":"turn-job-descriptions-into-recruitment-video-with-ai-4c8b","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/","title":{"rendered":"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0634\u063a\u0644 \u0631\u0627 \u0628\u0627 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0647 \u0648\u06cc\u062f\u06cc\u0648\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u062f"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0622\u0645\u0627\u0631 \u062a\u0648\u0633\u0637 Genius\u060c 60 \u062f\u0631\u0635\u062f \u0627\u0632 \u062c\u0648\u06cc\u0646\u062f\u06af\u0627\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u0648\u062f\u0646 \u06cc\u0627 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0648\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0645\u0635\u0627\u062d\u0628\u0647\u060c \u06a9\u0627\u0631 \u0631\u0627 \u062a\u0631\u06a9 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0645\u06cc\u0627\u0646\u06af\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0622\u0646 \u062d\u062f\u0648\u062f 23 \u0631\u0648\u0632 \u0637\u0648\u0644 \u0645\u06cc \u06a9\u0634\u062f. <\/p>\n<p>\u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0633\u0646\u062a\u06cc \u0648\u0642\u062a \u06af\u06cc\u0631 \u0648 \u0645\u0633\u062a\u0639\u062f \u0633\u0648\u06af\u06cc\u0631\u06cc \u0627\u0633\u062a. \u0628\u0647 \u062c\u0627\u06cc \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 \u0647\u0631 \u062f\u0627\u0648\u0637\u0644\u0628 \u0628\u0647 \u0635\u0648\u0631\u062a \u062c\u062f\u0627\u06af\u0627\u0646\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0647\u0645\u0632\u0645\u0627\u0646 \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 \u0647\u0645\u0647 \u0646\u0627\u0645\u0632\u062f\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u062a\u0627 23 \u0631\u0648\u0632 \u0645\u0646\u062a\u0638\u0631 \u0628\u0645\u0627\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062f\u0631 \u062f\u0648 \u062a\u0627 \u0633\u0647 \u0631\u0648\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u06cc \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627 \u0646\u0627\u0645\u0632\u062f\u0647\u0627\u06cc \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API Simli \u0645\u0635\u0627\u062d\u0628\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc \u0628\u0633\u0627\u0632\u06cc\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0631\u062d \u0634\u063a\u0644 \u0631\u0627 \u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u0647\u0627\u06cc \u062a\u0639\u0627\u0645\u0644\u06cc \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u062f\u060c \u0631\u0648\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0634\u0645\u0627 \u0631\u0627 \u0633\u0627\u062f\u0647 \u06a9\u0646\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u0646\u0627\u0645\u0632\u062f \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0628\u062e\u0634\u062f. <\/p>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u062d\u062a\u0645\u0627 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f:<\/p>\n<p>\u062f\u0631\u06a9 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0648 React.<br \/>\nNode \u0648 Node Package Manager \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a.<br \/>\n\u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0633\u06cc\u0645\u0644\u06cc \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627\u06cc\u06af\u0627\u0646 Simli \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<br \/>\n\u06cc\u06a9 \u062d\u0633\u0627\u0628 OpenAI <\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0645\u0646\u0628\u0639 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 GitHub \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 OpenAPI<\/p>\n<p>OpenAI API \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 \u0632\u0628\u0627\u0646 \u0628\u0632\u0631\u06af \u0622\u0645\u0648\u0632\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0628\u0631 \u0631\u0648\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631 \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0645\u062a\u0646 \u0627\u0632 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 API\u0647\u0627 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u0686\u062a \u0627\u0633\u062a. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0648 \u0627\u0631\u0627\u0626\u0647 \u0634\u0631\u062d \u0634\u063a\u0644 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0639\u0644\u0627\u0646\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0633\u0624\u0627\u0644\u0627\u062a\u060c \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0622\u0646\u0647\u0627 \u0628\u0647 \u0635\u062f\u0627 \u0627\u0633\u062a \u062a\u0627 \u0628\u062a\u0648\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 API SimliClient \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f\u060c \u06a9\u0647 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc Lipsynced \u0628\u0631\u0627\u06cc \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 \u0645\u062a\u0642\u0627\u0636\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. Simli \u06cc\u06a9 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u0648\u06cc\u062f\u06cc\u0648\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc\u060c \u06cc\u06a9 API \u06af\u0641\u062a\u0627\u0631 \u0628\u0647 \u0648\u06cc\u062f\u06cc\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0634\u0645\u0627 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 OpenAI \u06cc\u06a9 API \u0635\u0648\u062a\u06cc \u0628\u0627 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646 \u06af\u0641\u062a\u0627\u0631 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062f\u0644 TTS (\u0645\u062a\u0646 \u0628\u0647 \u06af\u0641\u062a\u0627\u0631) \u062e\u0648\u062f \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u06af\u0641\u062a\u0627\u0631 \u0628\u0647 \u0633\u0647 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f: \u0645\u062f\u0644\u060c \u0645\u062a\u0646\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u062a \u062a\u0628\u062f\u06cc\u0644 \u0634\u0648\u062f \u0648 \u0635\u062f\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0635\u062f\u0627. \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0627\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0647 \u0635\u0648\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<p>  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a<\/p>\n<p>\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u06a9\u0646\u0646\u062f\u0647 \u0634\u0631\u062d \u0634\u063a\u0644\u06cc \u0631\u0627 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 API \u062a\u06a9\u0645\u06cc\u0644 \u0686\u062a OpenAI \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f.<br \/>\nAPI \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062a\u0646\u06cc \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<br \/>\n\u0627\u06cc\u0646 \u0633\u0624\u0627\u0644\u0627\u062a \u0633\u067e\u0633 \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u06af\u0641\u062a\u0627\u0631 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u062f\u0631 \u0622\u0646\u062c\u0627 \u0628\u0647 \u0635\u062f\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f.<br \/>\n\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0635\u062f\u0627 \u0628\u0647 API Simli \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u06a9\u0647 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u0648\u0627\u0642\u0639\u06cc \u0648 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0644\u0628 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u0633\u0624\u0627\u0644\u0627\u062a \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f \u0648 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u062c\u0630\u0627\u0628 \u0628\u0631\u0627\u06cc \u062f\u0627\u0648\u0637\u0644\u0628\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f. ## \u0645\u062d\u06cc\u0637 API \u062e\u0648\u062f \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc Simli \u0628\u0647 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc Simli \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u062f\u060c \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0646\u0645\u0627\u06cc\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u0634\u0648\u06cc\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0644\u06cc\u062f API \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0645\u06cc\u0632\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API \u062e\u0648\u062f \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.\u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u06a9\u067e\u06cc \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0633\u067e\u0633 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0631 OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06a9\u0644\u06cc\u062f API \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0646\u0645\u0627\u06cc\u0647 \u0647\u062f\u0627\u06cc\u062a \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f. \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f\u060c \u0628\u0647 \u0628\u062e\u0634 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API \u0628\u0631\u0648\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u0628\u062e\u0634 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API\u060c \u0631\u0648\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u062c\u062f\u06cc\u062f \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0647 \u06a9\u0644\u06cc\u062f \u06cc\u06a9 \u0646\u0627\u0645 \u0628\u062f\u0647\u06cc\u062f \u0648 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f. \u062d\u062a\u0645\u0627\u064b \u0622\u0646 \u0631\u0627 \u06a9\u067e\u06cc \u0648 \u062f\u0631 \u0645\u06a9\u0627\u0646\u06cc \u0627\u0645\u0646 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0639\u062f\u0627\u064b \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u062a\u0648\u062c\u0647: API \u0628\u0644\u0627\u062f\u0631\u0646\u06af OpenAI \u062f\u0631 \u0646\u0633\u062e\u0647 \u0628\u062a\u0627 \u0627\u0633\u062a \u0648 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u067e\u0648\u0644\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0627 \u0622\u0645\u0627\u062f\u0647 \u0628\u0648\u062f\u0646 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API \u062e\u0648\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u062c\u0631\u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0628\u0631\u0646\u062f \u0648 \u0646\u0642\u0634 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0634\u0645\u0627 \u0647\u0645\u0633\u0648 \u0628\u0627\u0634\u062f.<\/p>\n<p>  \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0648\u0627\u062a\u0627\u0631 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc\u060c \u062a\u0635\u0648\u06cc\u0631 \u0628\u0631\u0646\u062f \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0648 \u0646\u0642\u0634\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f. \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0627\u0632 \u0622\u0648\u0627\u062a\u0627\u0631 &#39;Franco&#39; \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062a\u0635\u0627\u062f\u0641\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc Simli \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u06cc\u0627\u0628\u06cc\u062f.<\/p>\n<p>Simli \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u0622\u0648\u0627\u062a\u0627\u0631 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0627 \u0622\u067e\u0644\u0648\u062f \u062a\u0635\u0627\u0648\u06cc\u0631\u060c \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f. \u0627\u06af\u0631 \u0647\u06cc\u0686 \u06cc\u06a9 \u0627\u0632 \u0686\u0647\u0631\u0647 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0645\u0637\u0627\u0628\u0642 \u0628\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0634\u0645\u0627 \u0646\u06cc\u0633\u062a\u060c \u0627\u0632 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0647\u0645 \u0639\u06a9\u0633 \u0641\u0631\u0627\u0646\u06a9\u0648 \u062f\u0631 \u06a9\u0627\u062f\u0631 \u0642\u0631\u0645\u0632:<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0622\u0648\u0627\u062a\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Next.js \u0622\u0646 \u0631\u0627 \u0632\u0646\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Next.js<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Next.js \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>npx create-next-app@latest interview-simli<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0686\u0646\u062f \u0633\u0648\u0627\u0644 \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Next.js \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0627\u0633\u062e \u0628\u0647 \u0647\u0631 \u0633\u0648\u0627\u0644 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u0628\u0639\u062f\u060c \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0648\u06cc\u062f \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f. \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>cd recruitment-video-app<br \/>\nnpm install simli-client openai github:openai\/openai-realtime-api-beta<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>SimliClient \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u067e\u062e\u0634 \u0635\u062f\u0627 \u0648 \u0648\u06cc\u062f\u06cc\u0648\u06cc \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0648\u0628 \u0634\u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 WebRTC \u0627\u0633\u062a. <\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647\u060c \u0633\u0631\u0648\u0631 \u062a\u0648\u0633\u0639\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>npm run dev<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u0631\u0648\u0698\u0647 Next.js \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0627\u062c\u0631\u0627 \u0634\u0648\u062f http:\/\/localhost:3000.<\/p>\n<p>\u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f\u060c a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f .env \u0645\u0627\u0646\u0646\u062f \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 \u06a9\u0644\u06cc\u062f Simli \u0648 OpenAI API \u0631\u0627 \u0641\u0627\u06cc\u0644 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>NEXT_PUBLIC_SIMLI_API_KEY=&#8221;your simli api key&#8221;<br \/>\nNEXT_PUBLIC_OPENAI_API_KEY=&#8221;your openai api key&#8221;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0639\u0627\u0645\u0644\u0627\u062a \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0628\u0627 \u0645\u062a\u0642\u0627\u0636\u06cc\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f\u060c \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0628\u0631\u0648\u06cc\u062f src\/app \u067e\u0648\u0634\u0647\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 components \u067e\u0648\u0634\u0647\u060c \u0648 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f Interview.js \u0641\u0627\u06cc\u0644 \u0627\u06cc\u0646 \u0645\u0624\u0644\u0641\u0647 \u0631\u0627\u0628\u0637 \u0645\u0635\u0627\u062d\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0631\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0633\u0624\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u0622\u0646\u0647\u0627 \u067e\u0627\u0633\u062e \u062f\u0647\u0646\u062f.<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u062d\u0627\u0644\u062a \u0648 \u0645\u0631\u0627\u062c\u0639\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0648 \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u062c\u0646\u0628\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0624\u0644\u0641\u0647 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u060c \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0642\u0637\u0639\u0647 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n\/\/ State management<br \/>\n\/\/&#8230;<br \/>\nconst [isLoading, setIsLoading] = useState(false);<br \/>\nconst [isAvatarVisible, setIsAvatarVisible] = useState(false);<br \/>\nconst [error, setError] = useState(&#8220;&#8221;);<br \/>\nconst [isRecording, setIsRecording] = useState(false);<br \/>\nconst [userMessage, setUserMessage] = useState(&#8220;&#8230;&#8221;);<br \/>\n\/\/ Refs for various components and states<br \/>\nconst videoRef = useRef(null);<br \/>\nconst audioRef = useRef(null);<br \/>\nconst openAIClientRef = useRef(null);<br \/>\nconst audioContextRef = useRef(null);<br \/>\nconst streamRef = useRef(null);<br \/>\nconst processorRef = useRef(null);<br \/>\n\/\/ New refs for managing audio chunk delay<br \/>\nconst audioChunkQueueRef = useRef([]);<br \/>\nconst isProcessingChunkRef = useRef(false);<br \/>\n\/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9 \u06a9\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u062d\u0627\u0644\u062a \u0645\u062e\u062a\u0644\u0641 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u062f\u06cc\u0627\u0628\u06cc \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f isLoading\u060c isAvatarVisible\u060c error \u0648 userMessage \u062f\u0648\u0644\u062a\u0647\u0645\u0686\u0646\u06cc\u0646 \u0686\u0646\u062f\u06cc\u0646 ref \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0686\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f:<\/p>\n<p>videoRef  \u0648 audioRef \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0639\u0646\u0627\u0635\u0631 \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u0648 \u0635\u0648\u062a\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0647\u0633\u062a\u0646\u062f SimliClient.<\/p>\n<p>audioContextRef  \u0648 processorRef \u067e\u0631\u062f\u0627\u0632\u0634 \u0648 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0635\u062f\u0627 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0636\u0628\u0637 \u0648 \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/p>\n<p>audioQueueRef  \u06cc\u06a9 \u0628\u0627\u0641\u0631 \u0628\u0631\u0627\u06cc \u062a\u06a9\u0647\u200c\u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u067e\u062e\u0634 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0635\u062f\u0627 \u0631\u0627 \u0628\u0627 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0642\u0637\u0639\u0627\u062a \u062f\u0631 \u0635\u0641 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0622\u0645\u0627\u062f\u0647 \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u0646\u062f \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0631\u0627 SimliClient \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u0631\u0633\u0627\u0644 \u0635\u0648\u062a \u0628\u0647 \u0635\u0648\u0631\u062a \u062a\u06a9\u0647\u200c\u0627\u06cc \u062f\u0631 \u0642\u0627\u0644\u0628 PCM16 \u0628\u0627 \u0646\u0631\u062e \u0646\u0645\u0648\u0646\u0647 16 \u06a9\u06cc\u0644\u0648\u0647\u0631\u062a\u0632 \u062f\u0627\u0631\u062f.<\/p>\n<p>  Simli Client Initialization<\/p>\n<p>\u062d\u0627\u0644\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u0634\u062a\u0631\u06cc Simli \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u0645. \u0642\u0637\u0639\u0647 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f Interview.js \u0641\u0627\u06cc\u0644:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Initializes the Simli client with the provided configuration<br \/>\n&#8230;<br \/>\nconst initializeSimliClient = useCallback(() =&gt; {<br \/>\n   if (videoRef.current &amp;&amp; audioRef.current) {<br \/>\n     const SimliConfig = {<br \/>\n       apiKey: process.env.NEXT_PUBLIC_SIMLI_API_KEY,<br \/>\n       faceID: simli_faceid,<br \/>\n       handleSilence: true,<br \/>\n       maxSessionLength: 60, \/\/ in seconds<br \/>\n       maxIdleTime: 60, \/\/ in seconds<br \/>\n       videoRef: videoRef,<br \/>\n       audioRef: audioRef,<br \/>\n     };<br \/>\n     simliClient.Initialize(SimliConfig);<br \/>\n     console.log(&#8220;Simli Client initialized&#8221;);<br \/>\n   }<br \/>\n }, [simli_faceid]);<br \/>\n\/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9 \u06a9\u062f \u0628\u0627\u0644\u0627 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u062f SimliClient. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0647\u0631 \u0642\u0633\u0645\u062a \u0627\u0632 \u0622\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645 SimliConfig \u062a\u0627\u0628\u0639:<\/p>\n<p>apiKey: \u0627\u06cc\u0646 \u06a9\u0644\u06cc\u062f Simli API \u0627\u0633\u062a.<\/p>\n<p>faceID: \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u0634\u0646\u0627\u0633\u0647 \u0686\u0647\u0631\u0647 \u0622\u0648\u0627\u062a\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0648\u06cc\u062f\u06cc\u0648 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f. <\/p>\n<p>handleSilence: \u0627\u06cc\u0646 \u0628\u0648\u0644\u06cc \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0645\u0634\u062a\u0631\u06cc \u0628\u0627\u06cc\u062f \u0644\u062d\u0638\u0627\u062a \u0628\u06cc\u200c\u0635\u062f\u0627 \u0631\u0627 \u062f\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0635\u0648\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0635\u062f\u0627\u060c \u0648\u06cc\u062f\u06cc\u0648 \u0631\u0627 \u0642\u0637\u0639 \u06cc\u0627 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f).<\/p>\n<p>maxSessionLength: \u062d\u062f\u0627\u06a9\u062b\u0631 \u0637\u0648\u0644 \u062c\u0644\u0633\u0647 (\u0628\u0631 \u062d\u0633\u0628 \u062b\u0627\u0646\u06cc\u0647) \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>maxIdleTime: \u062d\u062f\u0627\u06a9\u062b\u0631 \u0632\u0645\u0627\u0646 \u0628\u06cc\u06a9\u0627\u0631\u06cc (\u0628\u0631 \u062d\u0633\u0628 \u062b\u0627\u0646\u06cc\u0647) \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u062c\u0644\u0633\u0647 \u0628\u0639\u062f \u0627\u0632 600 \u062b\u0627\u0646\u06cc\u0647 (10 \u062f\u0642\u06cc\u0642\u0647) \u0628\u062f\u0648\u0646 \u0641\u0639\u0627\u0644\u06cc\u062a \u0642\u0637\u0639 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>videoRef and audioRef: \u0627\u06cc\u0646\u0647\u0627 \u0627\u0631\u062c\u0627\u0639\u0627\u062a\u06cc \u0628\u0647 \u0639\u0646\u0627\u0635\u0631 \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u0648 \u0635\u0648\u062a\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062c\u0631\u06cc\u0627\u0646 \u0647\u0627\u06cc \u0631\u0633\u0627\u0646\u0647 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f. <\/p>\n<p>  OpenAI Client Initialization<\/p>\n<p>\u06af\u0627\u0645 \u0628\u0639\u062f\u06cc\u060c \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u06cc\u0646\u062a OpenAI \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f Interview.js \u0641\u0627\u06cc\u0644:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Initializes the OpenAI client, sets up event listeners, and connects to the API<br \/>\n&#8230;<br \/>\nconst initializeOpenAIClient = useCallback(async () =&gt; {<br \/>\n  try {<br \/>\n    console.log(&#8220;Initializing OpenAI client&#8230;&#8221;);<br \/>\n    openAIClientRef.current = new RealtimeClient({<br \/>\n      apiKey: process.env.NEXT_PUBLIC_OPENAI_API_KEY,<br \/>\n      dangerouslyAllowAPIKeyInBrowser: true,<br \/>\n    });<br \/>\n    await openAIClientRef.current.updateSession({<br \/>\n      instructions: initialPrompt,<br \/>\n      voice: openai_voice,<br \/>\n      turn_detection: { type: &#8220;server_vad&#8221; },<br \/>\n      input_audio_transcription: { model: &#8220;whisper-1&#8221; },<br \/>\n    });<br \/>\n    \/\/ Set up event listeners<br \/>\n    openAIClientRef.current.on(<br \/>\n      &#8220;conversation.updated&#8221;,<br \/>\n      handleConversationUpdate<br \/>\n    );<br \/>\n    openAIClientRef.current.on(&#8220;conversation.interrupted&#8221;, () =&gt; {<br \/>\n      interruptConversation();<br \/>\n    });<br \/>\n    openAIClientRef.current.on(<br \/>\n      &#8220;input_audio_buffer.speech_stopped&#8221;,<br \/>\n      handleSpeechStopped<br \/>\n    );<br \/>\n    \/\/ openAIClientRef.current.on(&#8216;response.canceled&#8217;, handleResponseCanceled);<br \/>\n    await openAIClientRef.current.connect();<br \/>\n    console.log(&#8220;OpenAI Client connected successfully&#8221;);<br \/>\n    setIsAvatarVisible(true);<br \/>\n  } catch (error) {<br \/>\n    console.error(&#8220;Error initializing OpenAI client:&#8221;, error);<br \/>\n    setError(`Failed to initialize OpenAI client: ${error.message}`);<br \/>\n  }<br \/>\n}, [initialPrompt]);<br \/>\n\/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0627\u0628\u0639 initializeOpenAIClient \u06a9\u0644\u0627\u06cc\u0646\u062a OpenAI \u0631\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f\u060c \u06a9\u0647 \u0645\u06a9\u0627\u0644\u0645\u0627\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0628\u0627 \u0645\u062a\u0642\u0627\u0636\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f. \u06a9\u0644\u0627\u06cc\u0646\u062a \u0628\u0627 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u0648 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u062e\u0648\u0634 \u0622\u0645\u062f \u0645\u06cc \u06af\u0648\u06cc\u062f. \u067e\u0633 \u0627\u0632 \u0622\u0646\u060c \u0634\u0646\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f \u062a\u0627 \u0627\u0634\u062a\u0628\u0627\u0647\u0627\u062a \u0648 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0646\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0634\u062a\u0631\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u060c isAvatarVisible \u0631\u0648\u06cc true \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0622\u0648\u0627\u062a\u0627\u0631 \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0638\u0627\u0647\u0631 \u0634\u0648\u062f.<\/p>\n<p>\u062a\u0648\u062c\u0647: \u062a\u0646\u0638\u06cc\u0645 dangerouslyAllowAPIKeyInBrowser \u0628\u0647 true \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627 \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u06a9\u0644\u06cc\u062f OpenAI API \u0634\u0645\u0627 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0645\u0639\u0631\u0636 \u0633\u0645\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u062f \u06a9\u0647 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a. \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f\u060c \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0627\u0645\u0646 Next.js API\u060c \u06a9\u0647 \u06a9\u0644\u06cc\u062f \u0634\u0645\u0627 \u0631\u0627 \u0645\u062e\u0641\u06cc \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f\u060c \u062a\u0645\u0627\u0633\u200c\u0647\u0627\u06cc API \u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0647\u062a\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<p>  \u067e\u0631\u062f\u0627\u0632\u0634 \u0648 \u0627\u0631\u0633\u0627\u0644 \u0635\u062f\u0627<\/p>\n<p>\u0628\u0627\u06cc\u062f \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0635\u062f\u0627 \u0631\u0627 \u0628\u0647 16 \u06a9\u06cc\u0644\u0648\u0647\u0631\u062a\u0632 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0642\u0637\u0639\u0627\u062a \u06a9\u0648\u0686\u06a9\u062a\u0631 PCM \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f Interview.js \u0641\u0627\u06cc\u0644:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Downsamples audio data from one sample rate to another<br \/>\n&#8230;<br \/>\nconst downsampleAudio = (<br \/>\n  audioData,<br \/>\n  inputSampleRate,<br \/>\n  outputSampleRate<br \/>\n) =&gt; {<br \/>\n  if (inputSampleRate === outputSampleRate) {<br \/>\n    return audioData;<br \/>\n  }<br \/>\n  const ratio = inputSampleRate \/ outputSampleRate;<br \/>\n  const newLength = Math.round(audioData.length \/ ratio);<br \/>\n  const result = new Int16Array(newLength);<br \/>\n  for (let i = 0; i &lt; newLength; i++) {<br \/>\n    const index = Math.round(i * ratio);<br \/>\n    result[i] = audioData[index];<br \/>\n  }<br \/>\n  return result;<br \/>\n };<br \/>\n \/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0647 Simli<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0647 SimliClient \u0628\u0631\u0627\u06cc \u067e\u062e\u0634\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0642\u0637\u0639\u0647 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Processes the next audio chunk in the queue.<br \/>\n&#8230;<\/p>\n<p>const processNextAudioChunk = useCallback(() =&gt; {<br \/>\n  if (<br \/>\n    audioChunkQueueRef.current.length &gt; 0 &amp;&amp;<br \/>\n    !isProcessingChunkRef.current<br \/>\n  ) {<br \/>\n    isProcessingChunkRef.current = true;<br \/>\n    const audioChunk = audioChunkQueueRef.current.shift();<br \/>\n    if (audioChunk) {<br \/>\n      const chunkDurationMs = (audioChunk.length \/ 16000) * 1000; \/\/ Calculate chunk duration in milliseconds<br \/>\n      \/\/ Send audio chunks to Simli immediately<br \/>\n      simliClient?.sendAudioData(audioChunk);<br \/>\n      console.log(<br \/>\n        &#8220;Sent audio chunk to Simli:&#8221;,<br \/>\n        chunkDurationMs,<br \/>\n        &#8220;Duration:&#8221;,<br \/>\n        chunkDurationMs.toFixed(2),<br \/>\n        &#8220;ms&#8221;<br \/>\n      );<br \/>\n      isProcessingChunkRef.current = false;<br \/>\n      processNextAudioChunk();<br \/>\n    }<br \/>\n  }<br \/>\n }, []);<br \/>\n\/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0631\u0627 processNextAudioChunk \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u062a\u06a9\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0631 \u0622\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06cc\u0627 \u062e\u06cc\u0631 audioQueueRef. \u0627\u06af\u0631 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u060c \u0642\u0637\u0639\u0647 \u0628\u0639\u062f\u06cc \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f\u060c \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u062e\u0634 \u0628\u0647 Simli \u0645\u06cc \u0641\u0631\u0633\u062a\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0635\u0641 \u062d\u0630\u0641 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062a\u0646\u0647\u0627 \u06cc\u06a9 \u0642\u0637\u0639\u0647 \u062f\u0631 \u06cc\u06a9 \u0632\u0645\u0627\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u067e\u062e\u0634 \u0631\u0648\u0627\u0646\u06cc \u0631\u0627 \u0628\u062f\u0648\u0646 \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0635\u062f\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0633\u067e\u0633 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0627\u0632\u06af\u0634\u062a\u06cc \u062a\u0627\u0628\u0639 \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0642\u0637\u0639\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631 \u0635\u0641 \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u0648\u062f.<\/p>\n<p>  \u067e\u0627\u0633\u062e \u0647\u0627\u06cc OpenAI \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0627\u0633\u062e \u0647\u0627 \u0627\u0632 OpenAI API \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Handles conversation updates, including user and assistant messages<br \/>\n&#8230;<br \/>\nconst handleConversationUpdate = useCallback((event) =&gt; {<br \/>\n  console.log(&#8220;Conversation updated:&#8221;, event);<br \/>\n  const { item, delta } = event;<br \/>\n  if (item.type === &#8220;message&#8221; &amp;&amp; item.role === &#8220;assistant&#8221;) {<br \/>\n    console.log(&#8220;Assistant message detected&#8221;);<br \/>\n    if (delta &amp;&amp; delta.audio) {<br \/>\n      const downsampledAudio = downsampleAudio(delta.audio, 24000, 16000);<br \/>\n      audioChunkQueueRef.current.push(downsampledAudio);<br \/>\n      if (!isProcessingChunkRef.current) {<br \/>\n        processNextAudioChunk();<br \/>\n      }<br \/>\n    }<br \/>\n  } else if (item.type === &#8220;message&#8221; &amp;&amp; item.role === &#8220;user&#8221;) {<br \/>\n    setUserMessage(item.content[0].transcript);<br \/>\n  }<br \/>\n }, []);<br \/>\n\/\/Handles interruptions in the conversation flow.<br \/>\nconst interruptConversation = () =&gt; {<br \/>\n  console.warn(&#8220;User interrupted the conversation&#8221;);<br \/>\n  simliClient?.ClearBuffer();<br \/>\n  openAIClientRef.current?.cancelResponse(&#8220;&#8221;);<br \/>\n};<br \/>\n\/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u06a9\u062f \u0628\u0627\u0644\u0627 \u062f\u0648 \u062a\u0627\u0628\u0639 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f: handleConversationUpdate \u0648 interruptConversation. \u0631\u0627 handleConversationUpdate \u062a\u0627\u0628\u0639 \u0627\u0628\u062a\u062f\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u067e\u06cc\u0627\u0645 \u0627\u0632 \u062f\u0633\u062a\u06cc\u0627\u0631 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631. \u0633\u067e\u0633\u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u067e\u06cc\u0627\u0645 \u062f\u0633\u062a\u06cc\u0627\u0631 \u0634\u0627\u0645\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631. \u0627\u06af\u0631 \u062f\u0631\u0633\u062a \u0628\u0627\u0634\u062f\u060c \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f downsampleAudio \u0642\u0627\u0628\u0644\u06cc\u062a \u062a\u0628\u062f\u06cc\u0644 \u0635\u062f\u0627 \u0628\u0647 \u0646\u0631\u062e \u0646\u0645\u0648\u0646\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u062a\u0631 (24000 \u0647\u0631\u062a\u0632 \u062a\u0627 16000 \u0647\u0631\u062a\u0632).<\/p>\n<p>\u0627\u06cc\u0646 \u0635\u062f\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0634\u062f\u0647 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a audioChunkQueueRef.current\u060c \u0645\u0631\u062c\u0639\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u06a9\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc. \u0627\u06af\u0631 \u0647\u06cc\u0686 \u062a\u06a9\u0647 \u0627\u06cc \u062f\u0631 \u062d\u0627\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0646\u0628\u0627\u0634\u062f\u060c processNextAudioChunk() \u062a\u0627\u0628\u0639 (\u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0645 \u06a9\u0631\u062f\u06cc\u0645) \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u0632\u0634 \u0642\u0637\u0639\u0627\u062a \u0635\u0648\u062a\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0631\u0627 interruptConversation \u0639\u0645\u0644\u06a9\u0631\u062f \u0648\u0642\u0641\u0647 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0635\u0627\u062d\u0628\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u0642\u0637\u0639 \u06a9\u0646\u062f\u060c \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0627\u0641\u0631 SimliClient \u0631\u0627 \u067e\u0627\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u067e\u0627\u0633\u062e \u0645\u062f\u0627\u0648\u0645 \u0627\u0632 OpenAI API \u0631\u0627 \u0644\u063a\u0648 \u0645\u06cc \u06a9\u0646\u062f. <\/p>\n<p>  \u0636\u0628\u0637 \u0635\u062f\u0627<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0648\u0627\u0628\u0639\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0646\u0627\u0645\u0632\u062f \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u0646 \u0627\u0633\u062a\u060c \u0636\u0628\u0637 \u0635\u062f\u0627 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u062f. \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Starts audio recording from the user&#8217;s microphone<br \/>\n&#8230;<\/p>\n<p>const startRecording = useCallback(async () =&gt; {<br \/>\n   if (!audioContextRef.current) {<br \/>\n     audioContextRef.current = new AudioContext({ sampleRate: 24000 });<br \/>\n   }<br \/>\n   try {<br \/>\n     console.log(&#8220;Starting audio recording&#8230;&#8221;);<br \/>\n     streamRef.current = await navigator.mediaDevices.getUserMedia({<br \/>\n       audio: true,<br \/>\n     });<br \/>\n     const source = audioContextRef.current.createMediaStreamSource(<br \/>\n       streamRef.current<br \/>\n     );<br \/>\n     processorRef.current = audioContextRef.current.createScriptProcessor(<br \/>\n            2048,<br \/>\n            1,<br \/>\n            1<br \/>\n          );<br \/>\n     processorRef.current.onaudioprocess = (e) =&gt; {<br \/>\n       const inputData = e.inputBuffer.getChannelData(0);<br \/>\n       const audioData = new Int16Array(inputData.length);<br \/>\n       let sum = 0;<br \/>\n       for (let i = 0; i &lt; inputData.length; i++) {<br \/>\n         const sample = Math.max(-1, Math.min(1, inputData[i]));<br \/>\n         audioData[i] = Math.floor(sample * 32767);<br \/>\n         sum += Math.abs(sample);<br \/>\n       }<br \/>\n       openAIClientRef.current?.appendInputAudio(audioData);<br \/>\n     };<br \/>\n     source.connect(processorRef.current);<br \/>\n          processorRef.current.connect(audioContextRef.current.destination);<br \/>\n     setIsRecording(true);<br \/>\n     console.log(&#8220;Audio recording started&#8221;);<br \/>\n   } catch (err) {<br \/>\n     console.error(&#8220;Error accessing microphone:&#8221;, err);<br \/>\n     setError(&#8220;Error accessing microphone. Please check your permissions.&#8221;);<br \/>\n   }<br \/>\n }, []);<\/p>\n<p>\/\/ Stops audio recording from the user&#8217;s microphone<\/p>\n<p>const stopRecording = () =&gt; { const stopRecording = useCallback(() =&gt; {<br \/>\n   if (processorRef.current) {<br \/>\n     processorRef.current.disconnect();<br \/>\n     processorRef.current = null;<br \/>\n   }<br \/>\n   if (streamRef.current) {<br \/>\n     streamRef.current.getTracks().forEach((track) =&gt; track.stop());<br \/>\n     streamRef.current = null;<br \/>\n   }<br \/>\n   setIsRecording(false);<br \/>\n   console.log(&#8220;Audio recording stopped&#8221;);<br \/>\n }, []);<br \/>\n\/\/&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0647\u0631 \u062a\u0627\u0628\u0639 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<p>startRecording:<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u06cc\u06a9\u0631\u0648\u0641\u0648\u0646\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0632\u0645\u06cc\u0646\u0647 \u0635\u0648\u062a\u06cc \u0648 \u067e\u062e\u0634 \u062c\u0631\u06cc\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc.<br \/>\n\u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0636\u0628\u0637 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0631\u0627\u06cc \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0647 \u0641\u0631\u0645\u062a PCM \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0647 \u0645\u0634\u062a\u0631\u06cc OpenAI \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>stopRecording: \u0632\u0645\u06cc\u0646\u0647 \u0635\u0648\u062a\u06cc \u0631\u0627 \u0645\u06cc \u0628\u0646\u062f\u062f \u0648 \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647 \u0631\u0627 \u0642\u0637\u0639 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>  \u0634\u0631\u0648\u0639 \u0648 \u062a\u0648\u0642\u0641 \u062a\u0639\u0627\u0645\u0644<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Handles starting the interaction<br \/>\n&#8230;<br \/>\nconst handleStart = useCallback(async () =&gt; {<br \/>\n  setIsLoading(true);<br \/>\n  setError(&#8220;&#8221;);<br \/>\n  try {<br \/>\n    await simliClient?.start();<br \/>\n    await initializeOpenAIClient();<br \/>\n  } catch (error) {<br \/>\n     console.error(&#8220;Error starting interaction:&#8221;, error);<br \/>\n     setError(`Error starting interaction: ${error.message}`);<br \/>\n  } finally {<br \/>\n     setIsAvatarVisible(true);<br \/>\n     setIsLoading(false);<br \/>\n        }<br \/>\n      }, [initializeOpenAIClient]);<\/p>\n<p>      \/\/ Handles stopping the interaction, cleaning up resources and resetting states.<\/p>\n<p>const handleStop = useCallback(() =&gt; {<br \/>\n  console.log(&#8220;Stopping interaction&#8230;&#8221;);<br \/>\n  setIsLoading(false);<br \/>\n  setError(&#8220;&#8221;);<br \/>\n  stopRecording();<br \/>\n  setIsAvatarVisible(false);<br \/>\n  simliClient?.close();<br \/>\n  openAIClientRef.current?.disconnect();<br \/>\n  if (audioContextRef.current) {<br \/>\n    audioContextRef.current.close();<br \/>\n  }<br \/>\n  stopRecording();<br \/>\n  onClose();<br \/>\n  console.log(&#8220;Interaction stopped&#8221;);<br \/>\n }, [stopRecording]);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u06a9\u062f \u0628\u0627\u0644\u0627\u060c handleStart \u062a\u0627\u0628\u0639 \u0628\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a\u200c\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0648 \u0622\u0645\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0627\u0628\u0637 \u0628\u0631\u0627\u06cc \u0636\u0628\u0637\u060c \u062a\u0639\u0627\u0645\u0644 \u0631\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0628\u0627 \u062a\u0645\u0627\u0633 \u0628\u0627 simliClient?.start() \u0631\u0648\u0634\u060c SimliClient \u06cc\u06a9 \u062f\u0633\u062a \u062f\u0627\u062f\u0646 WebRTC \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0630\u0627\u06a9\u0631\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc \u0648 \u0633\u0631\u0648\u0631 Simli \u0622\u063a\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0631\u0627 handleStop \u062a\u0627\u0628\u0639 \u0628\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0627\u06cc\u0646 \u062a\u0639\u0627\u0645\u0644 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc \u06a9\u0646\u062f simliClient?.close()  \u0631\u0648\u0634\u060c \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0645\u0646\u0627\u0628\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a\u060c \u0648 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062d\u0627\u0644\u062a \u0647\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0622\u0648\u0627\u062a\u0627\u0631.<\/p>\n<p>  \u0646\u0635\u0628 \u0648 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a<\/p>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0624\u0644\u0641\u0647\u060c \u0628\u0627\u06cc\u062f \u0645\u0642\u062f\u0627\u0631 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u0645 simliClient \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u062c\u0632\u0621 \u0633\u0648\u0627\u0631 \u0645\u06cc \u0634\u0648\u062f. \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ Effect to initialize Simli client once the component mounts and clean up resources on unmount<br \/>\n&#8230; <\/p>\n<p>useEffect(() =&gt; {<br \/>\n  initializeSimliClient();<br \/>\n  if (simliClient) {<br \/>\n    simliClient?.on(&#8220;connected&#8221;, () =&gt; {<br \/>\n      console.log(&#8220;SimliClient connected&#8221;);<br \/>\n      const audioData = new Uint8Array(6000).fill(0);<br \/>\n      simliClient?.sendAudioData(audioData);<br \/>\n      console.log(&#8220;Sent initial audio data&#8221;);<br \/>\n      startRecording();<br \/>\n    });<br \/>\n    simliClient?.on(&#8220;disconnected&#8221;, () =&gt; {<br \/>\n      console.log(&#8220;SimliClient disconnected&#8221;);<br \/>\n    });<br \/>\n  }<br \/>\n  return () =&gt; {<br \/>\n    try {<br \/>\n      simliClient?.close();<br \/>\n      openAIClientRef.current?.disconnect();<br \/>\n      if (audioContextRef.current) {<br \/>\n        audioContextRef.current.close();<br \/>\n      }<br \/>\n    } catch {}<br \/>\n  };<br \/>\n}, [initializeSimliClient]);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 useEffect \u0642\u0644\u0627\u0628 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u062f simliClient \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0646\u0635\u0628 \u0645\u06cc \u0634\u0648\u062f\u060c \u0634\u0646\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0645\u062a\u0635\u0644 \u06cc\u0627 \u0642\u0637\u0639 \u0645\u06cc \u0634\u0648\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u0647\u0646\u06af\u0627\u0645 \u0627\u062a\u0635\u0627\u0644\u060c \u06cc\u06a9 \u0633\u06cc\u06af\u0646\u0627\u0644 \u0635\u0648\u062a\u06cc \u0628\u06cc \u0635\u062f\u0627 \u0628\u0631\u0627\u06cc \u0632\u0646\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0627\u062a\u0635\u0627\u0644 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0634\u0631\u0648\u0639 \u0628\u0647 \u0636\u0628\u0637 \u0635\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f. \u0639\u0645\u0644\u06a9\u0631\u062f \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc\u060c \u06a9\u0647 \u0628\u0627 \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0641\u0639\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0633\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f simliClient\u060c \u0648 \u06a9\u0644\u0627\u06cc\u0646\u062a OpenAI \u0631\u0627 \u0642\u0637\u0639 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0639\u062f\u060c \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0628\u0631\u0648\u06cc\u062f src\/app\/pages.js \u0641\u0627\u06cc\u0644 \u0648 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<p>\/\/ src\/app\/components\/Interview.js<br \/>\n&#8230;<br \/>\n\/\/ configure the avatar and display the home page<br \/>\n&#8230;<br \/>\n&#8220;use client&#8221;;<br \/>\nimport React, { useState, useEffect } from &#8220;react&#8221;;<br \/>\nimport Interview from &#8220;.\/components\/Interview&#8221;;<\/p>\n<p>const Demo = () =&gt; {<br \/>\n  const [jobDescription, setJobDescription] = useState(&#8220;&#8221;);<br \/>\n  const avatar = {<br \/>\n    name: &#8220;Frank&#8221;,<br \/>\n    openai_voice: &#8220;alloy&#8221;,<br \/>\n    simli_faceid: &#8220;5514e24d-6086-46a3-ace4-6a7264e5cb7c&#8221;,<br \/>\n    initialPrompt: `Your name is Frank, an interviewer hiring for a specific role. You are looking for a candidate whose expertise aligns closely with the following job description: ${jobDescription}. Please generate three interview questions that assess key qualifications and relevant experience. Begin by introducing yourself and asking the interviewee to share a bit about their background.`,<br \/>\n  };<br \/>\n  return (<br \/>\n    &lt;div className=&#8221;bg-black min-h-screen flex flex-col items-center font-abc-repro font-normal text-sm text-white p-8&#8243;&gt;<br \/>\n      &lt;div className=&#8221;flex flex-col items-center mt-4&#8243;&gt;<br \/>\n        &lt;label htmlFor=&#8221;job-description&#8221; className=&#8221;font-bold mb-2&#8243;&gt;<br \/>\n              Add Job Description<br \/>\n        &lt;\/label&gt;<br \/>\n        &lt;textarea<br \/>\n              id=&#8221;job-description&#8221;<br \/>\n              placeholder=&#8221;Enter job description, e.g., Responsibilities, Requirements&#8221;<br \/>\n              value={jobDescription}<br \/>\n              onChange={(e) =&gt; setJobDescription(e.target.value)}<br \/>\n              className=&#8221;p-2 border border-gray-300 rounded-md w-80 h-24 resize-none mb-4 text-black&#8221;<br \/>\n            \/&gt;<br \/>\n      &lt;\/div&gt;<br \/>\n      &lt;div className=&#8221;flex flex-col items-center gap-6 bg-effect15White p-6 pb-[40px] rounded-xl w-full&#8221;&gt;<br \/>\n        &lt;div&gt;<br \/>\n          &lt;Interview<br \/>\n            openai_voice={avatar.openai_voice}<br \/>\n            simli_faceid={avatar.simli_faceid}<br \/>\n            initialPrompt={avatar.initialPrompt}<br \/>\n          \/&gt;<br \/>\n        &lt;\/div&gt;<br \/>\n      &lt;\/div&gt;<br \/>\n    &lt;\/div&gt;<br \/>\n  );<br \/>\n};<br \/>\nexport default Demo;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u06a9\u062f \u0648\u0631\u0648\u062f\u06cc \u0634\u0631\u062d \u0634\u063a\u0644 \u0631\u0627 \u0627\u0632 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u200c\u06a9\u0646\u0646\u062f\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0648\u0644\u06cc\u0647\u060c \u0634\u0646\u0627\u0633\u0647 \u0686\u0647\u0631\u0647 \u0648 \u0635\u062f\u0627\u06cc OpenAI \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u0647 OpenAI API \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u062f\u060c \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0633\u067e\u0633\u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062a\u06a9\u06cc\u0647 \u06af\u0627\u0647 \u0628\u0647 \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc \u0634\u0648\u062f Interview.js. \u062c\u0632\u0621<\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0634\u0631\u062d \u0634\u063a\u0644 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646\u06cc \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 OpenAI API \u0622\u0646 \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f. OpenAI API \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0633\u0647 \u0633\u0648\u0627\u0644 \u0628\u0631\u0627\u06cc \u0622\u0648\u0627\u062a\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0627\u0632 \u0645\u062a\u0642\u0627\u0636\u06cc \u0628\u067e\u0631\u0633\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0644\u06cc\u0646\u06a9 \u0648\u06cc\u062f\u06cc\u0648 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647 \u0646\u062d\u0648\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a: <\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/p>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 SimliClient \u0648 OpenAI\u060c \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0627 \u0633\u0627\u062e\u062a\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0634\u0631\u062d \u0634\u063a\u0644 \u062b\u0627\u0628\u062a \u0631\u0627 \u0628\u0647 \u0648\u06cc\u062f\u0626\u0648\u0647\u0627\u06cc \u0645\u0635\u0627\u062d\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u067e\u0648\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0631\u0627\u0647\u200c\u062d\u0644\u06cc \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0645\u0634\u06a9\u0644 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0648\u0642\u062a\u200c\u06af\u06cc\u0631 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f. \u062a\u0631\u06a9\u06cc\u0628 \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u06cc\u06a9 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u0632\u06cc \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0628\u0627 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0641\u0631\u0622\u06cc\u0646\u062f \u063a\u0631\u0628\u0627\u0644\u06af\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0646\u0627\u0645\u0632\u062f\u0647\u0627 \u0648 \u06a9\u0627\u0647\u0634 \u0627\u0633\u062a\u0631\u0633 \u0646\u0627\u0634\u06cc \u0627\u0632 \u06af\u0630\u0631\u0627\u0646\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0633\u0646\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f.<\/p>\n<p>API Simli \u0628\u0627 \u06cc\u06a9 \u0637\u0631\u062d \u0631\u0627\u06cc\u06af\u0627\u0646 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0627\u0645\u0631\u0648\u0632 \u062f\u0631 Simli \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<div data-article-id=\"2112168\" id=\"article-body\">\n<p>\u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0622\u0645\u0627\u0631 \u062a\u0648\u0633\u0637 Genius\u060c 60 \u062f\u0631\u0635\u062f \u0627\u0632 \u062c\u0648\u06cc\u0646\u062f\u06af\u0627\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u0648\u062f\u0646 \u06cc\u0627 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0648\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0645\u0635\u0627\u062d\u0628\u0647\u060c \u06a9\u0627\u0631 \u0631\u0627 \u062a\u0631\u06a9 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0645\u06cc\u0627\u0646\u06af\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0622\u0646 \u062d\u062f\u0648\u062f 23 \u0631\u0648\u0632 \u0637\u0648\u0644 \u0645\u06cc \u06a9\u0634\u062f. <\/p>\n<p>\u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0633\u0646\u062a\u06cc \u0648\u0642\u062a \u06af\u06cc\u0631 \u0648 \u0645\u0633\u062a\u0639\u062f \u0633\u0648\u06af\u06cc\u0631\u06cc \u0627\u0633\u062a. \u0628\u0647 \u062c\u0627\u06cc \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 \u0647\u0631 \u062f\u0627\u0648\u0637\u0644\u0628 \u0628\u0647 \u0635\u0648\u0631\u062a \u062c\u062f\u0627\u06af\u0627\u0646\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0647\u0645\u0632\u0645\u0627\u0646 \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 \u0647\u0645\u0647 \u0646\u0627\u0645\u0632\u062f\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u062a\u0627 23 \u0631\u0648\u0632 \u0645\u0646\u062a\u0638\u0631 \u0628\u0645\u0627\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062f\u0631 \u062f\u0648 \u062a\u0627 \u0633\u0647 \u0631\u0648\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u06cc \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627 \u0646\u0627\u0645\u0632\u062f\u0647\u0627\u06cc \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API Simli \u0645\u0635\u0627\u062d\u0628\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc \u0628\u0633\u0627\u0632\u06cc\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0631\u062d \u0634\u063a\u0644 \u0631\u0627 \u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u0647\u0627\u06cc \u062a\u0639\u0627\u0645\u0644\u06cc \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u062f\u060c \u0631\u0648\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0634\u0645\u0627 \u0631\u0627 \u0633\u0627\u062f\u0647 \u06a9\u0646\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u0646\u0627\u0645\u0632\u062f \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0628\u062e\u0634\u062f. <\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA_%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87_%D8%A8%D8%A7_OpenAPI\" >\u0627\u06cc\u062c\u0627\u062f \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 OpenAPI<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%AF%D8%B1_%D8%A7%DB%8C%D9%86%D8%AC%D8%A7_%D9%86%D8%AD%D9%88%D9%87_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%A2%D9%85%D8%AF%D9%87_%D8%A7%D8%B3%D8%AA\" >\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8_%D8%A2%D9%88%D8%A7%D8%AA%D8%A7%D8%B1_%D9%87%D9%88%D8%B4_%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85\" >\u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_Nextjs\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Next.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#Simli_Client_Initialization\" >Simli Client Initialization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#OpenAI_Client_Initialization\" >OpenAI Client Initialization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4_%D9%88_%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%B5%D8%AF%D8%A7\" >\u067e\u0631\u062f\u0627\u0632\u0634 \u0648 \u0627\u0631\u0633\u0627\u0644 \u0635\u062f\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_%D8%B5%D9%88%D8%AA%DB%8C_%D8%A8%D9%87_Simli\" >\u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0647 Simli<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D9%BE%D8%A7%D8%B3%D8%AE_%D9%87%D8%A7%DB%8C_OpenAI_%D8%B1%D8%A7_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\" >\u067e\u0627\u0633\u062e \u0647\u0627\u06cc OpenAI \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%B6%D8%A8%D8%B7_%D8%B5%D8%AF%D8%A7\" >\u0636\u0628\u0637 \u0635\u062f\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D8%B4%D8%B1%D9%88%D8%B9_%D9%88_%D8%AA%D9%88%D9%82%D9%81_%D8%AA%D8%B9%D8%A7%D9%85%D9%84\" >\u0634\u0631\u0648\u0639 \u0648 \u062a\u0648\u0642\u0641 \u062a\u0639\u0627\u0645\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D9%86%D8%B5%D8%A8_%D9%88_%D9%BE%D8%A7%DA%A9%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA\" >\u0646\u0635\u0628 \u0648 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >\u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/turn-job-descriptions-into-recruitment-video-with-ai-4c8b\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\" >\u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\"><\/span>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u062d\u062a\u0645\u0627 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f:<\/p>\n<ul>\n<li>\u062f\u0631\u06a9 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0648 React.<\/li>\n<li>Node \u0648 Node Package Manager \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<li>\u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0633\u06cc\u0645\u0644\u06cc \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627\u06cc\u06af\u0627\u0646 Simli \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u06cc\u06a9 \u062d\u0633\u0627\u0628 OpenAI <\/li>\n<\/ul>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0645\u0646\u0628\u0639 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 GitHub \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA_%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87_%D8%A8%D8%A7_OpenAPI\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 OpenAPI<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>OpenAI API \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 \u0632\u0628\u0627\u0646 \u0628\u0632\u0631\u06af \u0622\u0645\u0648\u0632\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0628\u0631 \u0631\u0648\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631 \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0645\u062a\u0646 \u0627\u0632 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 API\u0647\u0627 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u0686\u062a \u0627\u0633\u062a. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0648 \u0627\u0631\u0627\u0626\u0647 \u0634\u0631\u062d \u0634\u063a\u0644 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0639\u0644\u0627\u0646\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0633\u0624\u0627\u0644\u0627\u062a\u060c \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0622\u0646\u0647\u0627 \u0628\u0647 \u0635\u062f\u0627 \u0627\u0633\u062a \u062a\u0627 \u0628\u062a\u0648\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 API SimliClient \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f\u060c \u06a9\u0647 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc Lipsynced \u0628\u0631\u0627\u06cc \u0645\u0635\u0627\u062d\u0628\u0647 \u0628\u0627 \u0645\u062a\u0642\u0627\u0636\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. Simli \u06cc\u06a9 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u0648\u06cc\u062f\u06cc\u0648\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc\u060c \u06cc\u06a9 API \u06af\u0641\u062a\u0627\u0631 \u0628\u0647 \u0648\u06cc\u062f\u06cc\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0634\u0645\u0627 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 OpenAI \u06cc\u06a9 API \u0635\u0648\u062a\u06cc \u0628\u0627 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646 \u06af\u0641\u062a\u0627\u0631 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062f\u0644 TTS (\u0645\u062a\u0646 \u0628\u0647 \u06af\u0641\u062a\u0627\u0631) \u062e\u0648\u062f \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u06af\u0641\u062a\u0627\u0631 \u0628\u0647 \u0633\u0647 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f: \u0645\u062f\u0644\u060c \u0645\u062a\u0646\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u062a \u062a\u0628\u062f\u06cc\u0644 \u0634\u0648\u062f \u0648 \u0635\u062f\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0635\u062f\u0627. \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0627\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0647 \u0635\u0648\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1_%D8%A7%DB%8C%D9%86%D8%AC%D8%A7_%D9%86%D8%AD%D9%88%D9%87_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%A2%D9%85%D8%AF%D9%87_%D8%A7%D8%B3%D8%AA\"><\/span>\n<p>  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u06a9\u0646\u0646\u062f\u0647 \u0634\u0631\u062d \u0634\u063a\u0644\u06cc \u0631\u0627 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 API \u062a\u06a9\u0645\u06cc\u0644 \u0686\u062a OpenAI \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f. <\/li>\n<li>API \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u0633\u0648\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062a\u0646\u06cc \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f. <\/li>\n<li>\u0627\u06cc\u0646 \u0633\u0624\u0627\u0644\u0627\u062a \u0633\u067e\u0633 \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u06af\u0641\u062a\u0627\u0631 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u062f\u0631 \u0622\u0646\u062c\u0627 \u0628\u0647 \u0635\u062f\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f. <\/li>\n<li>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0635\u062f\u0627 \u0628\u0647 API Simli \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u06a9\u0647 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u0648\u0627\u0642\u0639\u06cc \u0648 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0644\u0628 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u0633\u0624\u0627\u0644\u0627\u062a \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f \u0648 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u062c\u0630\u0627\u0628 \u0628\u0631\u0627\u06cc \u062f\u0627\u0648\u0637\u0644\u0628\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f. ## \u0645\u062d\u06cc\u0637 API \u062e\u0648\u062f \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/li>\n<\/ul>\n<p>\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc Simli \u0628\u0647 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc Simli \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u062f\u060c \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0646\u0645\u0627\u06cc\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u0634\u0648\u06cc\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0644\u06cc\u062f API \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0645\u06cc\u0632\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API \u062e\u0648\u062f \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u06a9\u067e\u06cc \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><\/p>\n<p>\u0633\u067e\u0633 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0631 OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06a9\u0644\u06cc\u062f API \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0646\u0645\u0627\u06cc\u0647 \u0647\u062f\u0627\u06cc\u062a \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f. \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f\u060c \u0628\u0647 \u0628\u062e\u0634 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API \u0628\u0631\u0648\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F891g1gp5oogsx27jbwpp.png\" alt=\"\u062f\u0627\u0634\u0628\u0648\u0631\u062f OpenAI\" loading=\"lazy\" width=\"800\" height=\"432\" title=\"\"><\/p>\n<p>\u062f\u0631 \u0628\u062e\u0634 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API\u060c \u0631\u0648\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u062c\u062f\u06cc\u062f \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0647 \u06a9\u0644\u06cc\u062f \u06cc\u06a9 \u0646\u0627\u0645 \u0628\u062f\u0647\u06cc\u062f \u0648 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iukb53exxwkrvrhcu8h.png\" alt=\"\u062f\u0627\u0634\u0628\u0648\u0631\u062f OpenAI\" loading=\"lazy\" width=\"800\" height=\"435\" title=\"\"><\/p>\n<p>\u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f. \u062d\u062a\u0645\u0627\u064b \u0622\u0646 \u0631\u0627 \u06a9\u067e\u06cc \u0648 \u062f\u0631 \u0645\u06a9\u0627\u0646\u06cc \u0627\u0645\u0646 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0639\u062f\u0627\u064b \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<blockquote>\n<p>\u062a\u0648\u062c\u0647: API \u0628\u0644\u0627\u062f\u0631\u0646\u06af OpenAI \u062f\u0631 \u0646\u0633\u062e\u0647 \u0628\u062a\u0627 \u0627\u0633\u062a \u0648 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u067e\u0648\u0644\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a.<\/p>\n<\/blockquote>\n<p>\u0628\u0627 \u0622\u0645\u0627\u062f\u0647 \u0628\u0648\u062f\u0646 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API \u062e\u0648\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u062c\u0631\u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0628\u0631\u0646\u062f \u0648 \u0646\u0642\u0634 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0634\u0645\u0627 \u0647\u0645\u0633\u0648 \u0628\u0627\u0634\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8_%D8%A2%D9%88%D8%A7%D8%AA%D8%A7%D8%B1_%D9%87%D9%88%D8%B4_%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85\"><\/span>\n<p>  \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0648\u0627\u062a\u0627\u0631 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc\u060c \u062a\u0635\u0648\u06cc\u0631 \u0628\u0631\u0646\u062f \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0648 \u0646\u0642\u0634\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f. \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0627\u0632 \u0622\u0648\u0627\u062a\u0627\u0631 &#39;Franco&#39; \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062a\u0635\u0627\u062f\u0641\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc Simli \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u06cc\u0627\u0628\u06cc\u062f.<\/p>\n<p>Simli \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u0622\u0648\u0627\u062a\u0627\u0631 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0627 \u0622\u067e\u0644\u0648\u062f \u062a\u0635\u0627\u0648\u06cc\u0631\u060c \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f. \u0627\u06af\u0631 \u0647\u06cc\u0686 \u06cc\u06a9 \u0627\u0632 \u0686\u0647\u0631\u0647 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0645\u0637\u0627\u0628\u0642 \u0628\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0634\u0645\u0627 \u0646\u06cc\u0633\u062a\u060c \u0627\u0632 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0647\u0645 \u0639\u06a9\u0633 \u0641\u0631\u0627\u0646\u06a9\u0648 \u062f\u0631 \u06a9\u0627\u062f\u0631 \u0642\u0631\u0645\u0632:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5or94h8ki6914ch7q18.png\" alt=\"\u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f Simli\" loading=\"lazy\" width=\"800\" height=\"646\" title=\"\"><\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0622\u0648\u0627\u062a\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Next.js \u0622\u0646 \u0631\u0627 \u0632\u0646\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_Nextjs\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Next.js<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Next.js \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npx create-next-app@latest interview-simli\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0686\u0646\u062f \u0633\u0648\u0627\u0644 \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Next.js \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0627\u0633\u062e \u0628\u0647 \u0647\u0631 \u0633\u0648\u0627\u0644 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdq0decrbowt5afpx6qz.png\" alt=\"\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Next.js\" loading=\"lazy\" width=\"800\" height=\"161\" title=\"\"><\/p>\n<p>\u0628\u0639\u062f\u060c \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0648\u06cc\u062f \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f. \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">cd <\/span>recruitment-video-app\nnpm <span class=\"nb\">install <\/span>simli-client openai github:openai\/openai-realtime-api-beta\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>SimliClient \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u062f\u063a\u0627\u0645 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u067e\u062e\u0634 \u0635\u062f\u0627 \u0648 \u0648\u06cc\u062f\u06cc\u0648\u06cc \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0648\u0628 \u0634\u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 WebRTC \u0627\u0633\u062a. <\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647\u060c \u0633\u0631\u0648\u0631 \u062a\u0648\u0633\u0639\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm run dev\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0631\u0648\u0698\u0647 Next.js \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0627\u062c\u0631\u0627 \u0634\u0648\u062f <code>http:\/\/localhost:3000<\/code>.<\/p>\n<p>\u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0631\u06cc\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f\u060c a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>.env<\/code> \u0645\u0627\u0646\u0646\u062f \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 \u06a9\u0644\u06cc\u062f Simli \u0648 OpenAI API \u0631\u0627 \u0641\u0627\u06cc\u0644 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>NEXT_PUBLIC_SIMLI_API_KEY=\"your simli api key\"\nNEXT_PUBLIC_OPENAI_API_KEY=\"your openai api key\"\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0639\u0627\u0645\u0644\u0627\u062a \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0628\u0627 \u0645\u062a\u0642\u0627\u0636\u06cc\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f\u060c \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0628\u0631\u0648\u06cc\u062f <code>src\/app<\/code> \u067e\u0648\u0634\u0647\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <code>components<\/code> \u067e\u0648\u0634\u0647\u060c \u0648 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>Interview.js<\/code> \u0641\u0627\u06cc\u0644 \u0627\u06cc\u0646 \u0645\u0624\u0644\u0641\u0647 \u0631\u0627\u0628\u0637 \u0645\u0635\u0627\u062d\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0631\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0633\u0624\u0627\u0644\u0627\u062a \u0645\u0635\u0627\u062d\u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06cc\u06a9 \u0622\u0648\u0627\u062a\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u0622\u0646\u0647\u0627 \u067e\u0627\u0633\u062e \u062f\u0647\u0646\u062f.<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u062d\u0627\u0644\u062a \u0648 \u0645\u0631\u0627\u062c\u0639\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0648 \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u062c\u0646\u0628\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0624\u0644\u0641\u0647 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u060c \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0642\u0637\u0639\u0647 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"c1\">\/\/ State management<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">isLoading<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setIsLoading<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">isAvatarVisible<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setIsAvatarVisible<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">error<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setError<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">isRecording<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setIsRecording<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">userMessage<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setUserMessage<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">...<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n<span class=\"c1\">\/\/ Refs for various components and states<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">videoRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">audioRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">openAIClientRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">audioContextRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">streamRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">processorRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n<span class=\"c1\">\/\/ New refs for managing audio chunk delay<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">audioChunkQueueRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">([]);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">isProcessingChunkRef<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useRef<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9 \u06a9\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u062d\u0627\u0644\u062a \u0645\u062e\u062a\u0644\u0641 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u062f\u06cc\u0627\u0628\u06cc \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f <code>isLoading<\/code>\u060c <code>isAvatarVisible<\/code>\u060c <code>error<\/code> \u0648 <code>userMessage<\/code> \u062f\u0648\u0644\u062a<br \/>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0686\u0646\u062f\u06cc\u0646 ref \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0686\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f:<\/p>\n<ul>\n<li>\n<code>videoRef<\/code>  \u0648 <code>audioRef<\/code> \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0639\u0646\u0627\u0635\u0631 \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u0648 \u0635\u0648\u062a\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0647\u0633\u062a\u0646\u062f <code>SimliClient<\/code>.<\/li>\n<li>\n<code>audioContextRef<\/code>  \u0648 <code>processorRef<\/code> \u067e\u0631\u062f\u0627\u0632\u0634 \u0648 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0635\u062f\u0627 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0636\u0628\u0637 \u0648 \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/li>\n<li>\n<code>audioQueueRef<\/code>  \u06cc\u06a9 \u0628\u0627\u0641\u0631 \u0628\u0631\u0627\u06cc \u062a\u06a9\u0647\u200c\u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u067e\u062e\u0634 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0635\u062f\u0627 \u0631\u0627 \u0628\u0627 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0642\u0637\u0639\u0627\u062a \u062f\u0631 \u0635\u0641 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0622\u0645\u0627\u062f\u0647 \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u0646\u062f \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0631\u0627 <code>SimliClient<\/code> \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u0631\u0633\u0627\u0644 \u0635\u0648\u062a \u0628\u0647 \u0635\u0648\u0631\u062a \u062a\u06a9\u0647\u200c\u0627\u06cc \u062f\u0631 \u0642\u0627\u0644\u0628 PCM16 \u0628\u0627 \u0646\u0631\u062e \u0646\u0645\u0648\u0646\u0647 16 \u06a9\u06cc\u0644\u0648\u0647\u0631\u062a\u0632 \u062f\u0627\u0631\u062f.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Simli_Client_Initialization\"><\/span>\n<p>  Simli Client Initialization<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062d\u0627\u0644\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u0634\u062a\u0631\u06cc Simli \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u0645. \u0642\u0637\u0639\u0647 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f <code>Interview.js<\/code> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Initializes the Simli client with the provided configuration<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">initializeSimliClient<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n   <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">videoRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">audioRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <span class=\"kd\">const<\/span> <span class=\"nx\">SimliConfig<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n       <span class=\"na\">apiKey<\/span><span class=\"p\">:<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">NEXT_PUBLIC_SIMLI_API_KEY<\/span><span class=\"p\">,<\/span>\n       <span class=\"na\">faceID<\/span><span class=\"p\">:<\/span> <span class=\"nx\">simli_faceid<\/span><span class=\"p\">,<\/span>\n       <span class=\"na\">handleSilence<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n       <span class=\"na\">maxSessionLength<\/span><span class=\"p\">:<\/span> <span class=\"mi\">60<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ in seconds<\/span>\n       <span class=\"na\">maxIdleTime<\/span><span class=\"p\">:<\/span> <span class=\"mi\">60<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ in seconds<\/span>\n       <span class=\"na\">videoRef<\/span><span class=\"p\">:<\/span> <span class=\"nx\">videoRef<\/span><span class=\"p\">,<\/span>\n       <span class=\"na\">audioRef<\/span><span class=\"p\">:<\/span> <span class=\"nx\">audioRef<\/span><span class=\"p\">,<\/span>\n     <span class=\"p\">};<\/span>\n     <span class=\"nx\">simliClient<\/span><span class=\"p\">.<\/span><span class=\"nc\">Initialize<\/span><span class=\"p\">(<\/span><span class=\"nx\">SimliConfig<\/span><span class=\"p\">);<\/span>\n     <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Simli Client initialized<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n   <span class=\"p\">}<\/span>\n <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">simli_faceid<\/span><span class=\"p\">]);<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9 \u06a9\u062f \u0628\u0627\u0644\u0627 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u062f <code>SimliClient<\/code>. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0647\u0631 \u0642\u0633\u0645\u062a \u0627\u0632 \u0622\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645 <code>SimliConfig<\/code> \u062a\u0627\u0628\u0639:<\/p>\n<ul>\n<li>\n<code>apiKey<\/code>: \u0627\u06cc\u0646 \u06a9\u0644\u06cc\u062f Simli API \u0627\u0633\u062a.<\/li>\n<li>\n<code>faceID<\/code>: \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u0634\u0646\u0627\u0633\u0647 \u0686\u0647\u0631\u0647 \u0622\u0648\u0627\u062a\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0648\u06cc\u062f\u06cc\u0648 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f. <\/li>\n<li>\n<code>handleSilence<\/code>: \u0627\u06cc\u0646 \u0628\u0648\u0644\u06cc \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0645\u0634\u062a\u0631\u06cc \u0628\u0627\u06cc\u062f \u0644\u062d\u0638\u0627\u062a \u0628\u06cc\u200c\u0635\u062f\u0627 \u0631\u0627 \u062f\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0635\u0648\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0635\u062f\u0627\u060c \u0648\u06cc\u062f\u06cc\u0648 \u0631\u0627 \u0642\u0637\u0639 \u06cc\u0627 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f).<\/li>\n<li>\n<code>maxSessionLength<\/code>: \u062d\u062f\u0627\u06a9\u062b\u0631 \u0637\u0648\u0644 \u062c\u0644\u0633\u0647 (\u0628\u0631 \u062d\u0633\u0628 \u062b\u0627\u0646\u06cc\u0647) \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<code>maxIdleTime<\/code>: \u062d\u062f\u0627\u06a9\u062b\u0631 \u0632\u0645\u0627\u0646 \u0628\u06cc\u06a9\u0627\u0631\u06cc (\u0628\u0631 \u062d\u0633\u0628 \u062b\u0627\u0646\u06cc\u0647) \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u062c\u0644\u0633\u0647 \u0628\u0639\u062f \u0627\u0632 600 \u062b\u0627\u0646\u06cc\u0647 (10 \u062f\u0642\u06cc\u0642\u0647) \u0628\u062f\u0648\u0646 \u0641\u0639\u0627\u0644\u06cc\u062a \u0642\u0637\u0639 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\n<code>videoRef<\/code> <code>and<\/code> <code>audioRef<\/code>: \u0627\u06cc\u0646\u0647\u0627 \u0627\u0631\u062c\u0627\u0639\u0627\u062a\u06cc \u0628\u0647 \u0639\u0646\u0627\u0635\u0631 \u0648\u06cc\u062f\u06cc\u0648\u06cc\u06cc \u0648 \u0635\u0648\u062a\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062c\u0631\u06cc\u0627\u0646 \u0647\u0627\u06cc \u0631\u0633\u0627\u0646\u0647 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f. <\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"OpenAI_Client_Initialization\"><\/span>\n<p>  OpenAI Client Initialization<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06af\u0627\u0645 \u0628\u0639\u062f\u06cc\u060c \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0644\u0627\u06cc\u0646\u062a OpenAI \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f <code>Interview.js<\/code> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Initializes the OpenAI client, sets up event listeners, and connects to the API<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">initializeOpenAIClient<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Initializing OpenAI client...<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">RealtimeClient<\/span><span class=\"p\">({<\/span>\n      <span class=\"na\">apiKey<\/span><span class=\"p\">:<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">NEXT_PUBLIC_OPENAI_API_KEY<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">dangerouslyAllowAPIKeyInBrowser<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">});<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">updateSession<\/span><span class=\"p\">({<\/span>\n      <span class=\"na\">instructions<\/span><span class=\"p\">:<\/span> <span class=\"nx\">initialPrompt<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">voice<\/span><span class=\"p\">:<\/span> <span class=\"nx\">openai_voice<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">turn_detection<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">server_vad<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">},<\/span>\n      <span class=\"na\">input_audio_transcription<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"na\">model<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">whisper-1<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">});<\/span>\n    <span class=\"c1\">\/\/ Set up event listeners<\/span>\n    <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">conversation.updated<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"nx\">handleConversationUpdate<\/span>\n    <span class=\"p\">);<\/span>\n    <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">conversation.interrupted<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nf\">interruptConversation<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">});<\/span>\n    <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">input_audio_buffer.speech_stopped<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"nx\">handleSpeechStopped<\/span>\n    <span class=\"p\">);<\/span>\n    <span class=\"c1\">\/\/ openAIClientRef.current.on('response.canceled', handleResponseCanceled);<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">connect<\/span><span class=\"p\">();<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">OpenAI Client connected successfully<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"nf\">setIsAvatarVisible<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Error initializing OpenAI client:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error<\/span><span class=\"p\">);<\/span>\n    <span class=\"nf\">setError<\/span><span class=\"p\">(<\/span><span class=\"s2\">`Failed to initialize OpenAI client: <\/span><span class=\"p\">${<\/span><span class=\"nx\">error<\/span><span class=\"p\">.<\/span><span class=\"nx\">message<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">initialPrompt<\/span><span class=\"p\">]);<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0627\u0628\u0639 <code>initializeOpenAIClient<\/code> \u06a9\u0644\u0627\u06cc\u0646\u062a OpenAI \u0631\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f\u060c \u06a9\u0647 \u0645\u06a9\u0627\u0644\u0645\u0627\u062a \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0628\u0627 \u0645\u062a\u0642\u0627\u0636\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f. \u06a9\u0644\u0627\u06cc\u0646\u062a \u0628\u0627 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u0648 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0645\u0635\u0627\u062d\u0628\u0647 \u062e\u0648\u0634 \u0622\u0645\u062f \u0645\u06cc \u06af\u0648\u06cc\u062f. \u067e\u0633 \u0627\u0632 \u0622\u0646\u060c \u0634\u0646\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f \u062a\u0627 \u0627\u0634\u062a\u0628\u0627\u0647\u0627\u062a \u0648 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0646\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u0634\u062a\u0631\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u060c <code>isAvatarVisible<\/code> \u0631\u0648\u06cc true \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0622\u0648\u0627\u062a\u0627\u0631 \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0638\u0627\u0647\u0631 \u0634\u0648\u062f.<\/p>\n<blockquote>\n<p>\u062a\u0648\u062c\u0647: \u062a\u0646\u0638\u06cc\u0645 <code>dangerouslyAllowAPIKeyInBrowser<\/code> \u0628\u0647 <code>true<\/code> \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627 \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u06a9\u0644\u06cc\u062f OpenAI API \u0634\u0645\u0627 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0645\u0639\u0631\u0636 \u0633\u0645\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u062f \u06a9\u0647 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a. \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f\u060c \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0627\u0645\u0646 Next.js API\u060c \u06a9\u0647 \u06a9\u0644\u06cc\u062f \u0634\u0645\u0627 \u0631\u0627 \u0645\u062e\u0641\u06cc \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u062f\u060c \u062a\u0645\u0627\u0633\u200c\u0647\u0627\u06cc API \u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0647\u062a\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4_%D9%88_%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%B5%D8%AF%D8%A7\"><\/span>\n<p>  \u067e\u0631\u062f\u0627\u0632\u0634 \u0648 \u0627\u0631\u0633\u0627\u0644 \u0635\u062f\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627\u06cc\u062f \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0635\u062f\u0627 \u0631\u0627 \u0628\u0647 16 \u06a9\u06cc\u0644\u0648\u0647\u0631\u062a\u0632 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0642\u0637\u0639\u0627\u062a \u06a9\u0648\u0686\u06a9\u062a\u0631 PCM \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u062e\u0644 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f <code>Interview.js<\/code> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Downsamples audio data from one sample rate to another<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">downsampleAudio<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n  <span class=\"nx\">audioData<\/span><span class=\"p\">,<\/span>\n  <span class=\"nx\">inputSampleRate<\/span><span class=\"p\">,<\/span>\n  <span class=\"nx\">outputSampleRate<\/span>\n<span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">inputSampleRate<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">outputSampleRate<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">audioData<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">ratio<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">inputSampleRate<\/span> <span class=\"o\">\/<\/span> <span class=\"nx\">outputSampleRate<\/span><span class=\"p\">;<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">newLength<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nf\">round<\/span><span class=\"p\">(<\/span><span class=\"nx\">audioData<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">\/<\/span> <span class=\"nx\">ratio<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Int16Array<\/span><span class=\"p\">(<\/span><span class=\"nx\">newLength<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">for <\/span><span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">newLength<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">index<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nf\">round<\/span><span class=\"p\">(<\/span><span class=\"nx\">i<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">ratio<\/span><span class=\"p\">);<\/span>\n    <span class=\"nx\">result<\/span><span class=\"p\">[<\/span><span class=\"nx\">i<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">audioData<\/span><span class=\"p\">[<\/span><span class=\"nx\">index<\/span><span class=\"p\">];<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">result<\/span><span class=\"p\">;<\/span>\n <span class=\"p\">};<\/span>\n <span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_%D8%B5%D9%88%D8%AA%DB%8C_%D8%A8%D9%87_Simli\"><\/span>\n<p>  \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0647 Simli<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0628\u0647 <code>SimliClient<\/code> \u0628\u0631\u0627\u06cc \u067e\u062e\u0634\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0642\u0637\u0639\u0647 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Processes the next audio chunk in the queue.<\/span>\n<span class=\"p\">...<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">processNextAudioChunk<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span>\n    <span class=\"nx\">audioChunkQueueRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">&amp;&amp;<\/span>\n    <span class=\"o\">!<\/span><span class=\"nx\">isProcessingChunkRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span>\n  <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">isProcessingChunkRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">audioChunk<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">audioChunkQueueRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">shift<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">audioChunk<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"kd\">const<\/span> <span class=\"nx\">chunkDurationMs<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">audioChunk<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">\/<\/span> <span class=\"mi\">16000<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Calculate chunk duration in milliseconds<\/span>\n      <span class=\"c1\">\/\/ Send audio chunks to Simli immediately<\/span>\n      <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">sendAudioData<\/span><span class=\"p\">(<\/span><span class=\"nx\">audioChunk<\/span><span class=\"p\">);<\/span>\n      <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">Sent audio chunk to Simli:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"nx\">chunkDurationMs<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">Duration:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"nx\">chunkDurationMs<\/span><span class=\"p\">.<\/span><span class=\"nf\">toFixed<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">),<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">ms<\/span><span class=\"dl\">\"<\/span>\n      <span class=\"p\">);<\/span>\n      <span class=\"nx\">isProcessingChunkRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n      <span class=\"nf\">processNextAudioChunk<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span>\n <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u0627 <code>processNextAudioChunk<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u062a\u06a9\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0631 \u0622\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06cc\u0627 \u062e\u06cc\u0631 <code>audioQueueRef<\/code>. \u0627\u06af\u0631 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u060c \u0642\u0637\u0639\u0647 \u0628\u0639\u062f\u06cc \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f\u060c \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u062e\u0634 \u0628\u0647 Simli \u0645\u06cc \u0641\u0631\u0633\u062a\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0635\u0641 \u062d\u0630\u0641 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062a\u0646\u0647\u0627 \u06cc\u06a9 \u0642\u0637\u0639\u0647 \u062f\u0631 \u06cc\u06a9 \u0632\u0645\u0627\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u067e\u062e\u0634 \u0631\u0648\u0627\u0646\u06cc \u0631\u0627 \u0628\u062f\u0648\u0646 \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0635\u062f\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0633\u067e\u0633 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0627\u0632\u06af\u0634\u062a\u06cc \u062a\u0627\u0628\u0639 \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0642\u0637\u0639\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631 \u0635\u0641 \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u0648\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%D8%B3%D8%AE_%D9%87%D8%A7%DB%8C_OpenAI_%D8%B1%D8%A7_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u067e\u0627\u0633\u062e \u0647\u0627\u06cc OpenAI \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0627\u0633\u062e \u0647\u0627 \u0627\u0632 OpenAI API \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Handles conversation updates, including user and assistant messages<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleConversationUpdate<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">((<\/span><span class=\"nx\">event<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Conversation updated:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">event<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">item<\/span><span class=\"p\">,<\/span> <span class=\"nx\">delta<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">event<\/span><span class=\"p\">;<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">type<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">message<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">role<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">assistant<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Assistant message detected<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">delta<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">delta<\/span><span class=\"p\">.<\/span><span class=\"nx\">audio<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"kd\">const<\/span> <span class=\"nx\">downsampledAudio<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">downsampleAudio<\/span><span class=\"p\">(<\/span><span class=\"nx\">delta<\/span><span class=\"p\">.<\/span><span class=\"nx\">audio<\/span><span class=\"p\">,<\/span> <span class=\"mi\">24000<\/span><span class=\"p\">,<\/span> <span class=\"mi\">16000<\/span><span class=\"p\">);<\/span>\n      <span class=\"nx\">audioChunkQueueRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">push<\/span><span class=\"p\">(<\/span><span class=\"nx\">downsampledAudio<\/span><span class=\"p\">);<\/span>\n      <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">isProcessingChunkRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nf\">processNextAudioChunk<\/span><span class=\"p\">();<\/span>\n      <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">type<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">message<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">role<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">user<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nf\">setUserMessage<\/span><span class=\"p\">(<\/span><span class=\"nx\">item<\/span><span class=\"p\">.<\/span><span class=\"nx\">content<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">].<\/span><span class=\"nx\">transcript<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\n<span class=\"c1\">\/\/Handles interruptions in the conversation flow.<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">interruptConversation<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">warn<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">User interrupted the conversation<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nc\">ClearBuffer<\/span><span class=\"p\">();<\/span>\n  <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">?.<\/span><span class=\"nf\">cancelResponse<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u062f \u0628\u0627\u0644\u0627 \u062f\u0648 \u062a\u0627\u0628\u0639 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f: <code>handleConversationUpdate<\/code> \u0648 <code>interruptConversation<\/code>. \u0631\u0627 <code>handleConversationUpdate<\/code> \u062a\u0627\u0628\u0639 \u0627\u0628\u062a\u062f\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u067e\u06cc\u0627\u0645 \u0627\u0632 \u062f\u0633\u062a\u06cc\u0627\u0631 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631. \u0633\u067e\u0633\u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u067e\u06cc\u0627\u0645 \u062f\u0633\u062a\u06cc\u0627\u0631 \u0634\u0627\u0645\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631. \u0627\u06af\u0631 \u062f\u0631\u0633\u062a \u0628\u0627\u0634\u062f\u060c \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>downsampleAudio<\/code> \u0642\u0627\u0628\u0644\u06cc\u062a \u062a\u0628\u062f\u06cc\u0644 \u0635\u062f\u0627 \u0628\u0647 \u0646\u0631\u062e \u0646\u0645\u0648\u0646\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u062a\u0631 (24000 \u0647\u0631\u062a\u0632 \u062a\u0627 16000 \u0647\u0631\u062a\u0632).<\/p>\n<p>\u0627\u06cc\u0646 \u0635\u062f\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0634\u062f\u0647 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a <code>audioChunkQueueRef.current<\/code>\u060c \u0645\u0631\u062c\u0639\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u06a9\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc. \u0627\u06af\u0631 \u0647\u06cc\u0686 \u062a\u06a9\u0647 \u0627\u06cc \u062f\u0631 \u062d\u0627\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0646\u0628\u0627\u0634\u062f\u060c <code>processNextAudioChunk()<\/code> \u062a\u0627\u0628\u0639 (\u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0645 \u06a9\u0631\u062f\u06cc\u0645) \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u0632\u0634 \u0642\u0637\u0639\u0627\u062a \u0635\u0648\u062a\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0631\u0627 <code>interruptConversation<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0648\u0642\u0641\u0647 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0635\u0627\u062d\u0628\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u0642\u0637\u0639 \u06a9\u0646\u062f\u060c \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0627\u0641\u0631 SimliClient \u0631\u0627 \u067e\u0627\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u067e\u0627\u0633\u062e \u0645\u062f\u0627\u0648\u0645 \u0627\u0632 OpenAI API \u0631\u0627 \u0644\u063a\u0648 \u0645\u06cc \u06a9\u0646\u062f. <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B6%D8%A8%D8%B7_%D8%B5%D8%AF%D8%A7\"><\/span>\n<p>  \u0636\u0628\u0637 \u0635\u062f\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0648\u0627\u0628\u0639\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0646\u0627\u0645\u0632\u062f \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u0646 \u0627\u0633\u062a\u060c \u0636\u0628\u0637 \u0635\u062f\u0627 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u062f. \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Starts audio recording from the user's microphone<\/span>\n<span class=\"p\">...<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">startRecording<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n   <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">AudioContext<\/span><span class=\"p\">({<\/span> <span class=\"na\">sampleRate<\/span><span class=\"p\">:<\/span> <span class=\"mi\">24000<\/span> <span class=\"p\">});<\/span>\n   <span class=\"p\">}<\/span>\n   <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Starting audio recording...<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n     <span class=\"nx\">streamRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nb\">navigator<\/span><span class=\"p\">.<\/span><span class=\"nx\">mediaDevices<\/span><span class=\"p\">.<\/span><span class=\"nf\">getUserMedia<\/span><span class=\"p\">({<\/span>\n       <span class=\"na\">audio<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n     <span class=\"p\">});<\/span>\n     <span class=\"kd\">const<\/span> <span class=\"nx\">source<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">createMediaStreamSource<\/span><span class=\"p\">(<\/span>\n       <span class=\"nx\">streamRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span>\n     <span class=\"p\">);<\/span>\n     <span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">createScriptProcessor<\/span><span class=\"p\">(<\/span>\n            <span class=\"mi\">2048<\/span><span class=\"p\">,<\/span>\n            <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n            <span class=\"mi\">1<\/span>\n          <span class=\"p\">);<\/span>\n     <span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">onaudioprocess<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n       <span class=\"kd\">const<\/span> <span class=\"nx\">inputData<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">inputBuffer<\/span><span class=\"p\">.<\/span><span class=\"nf\">getChannelData<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n       <span class=\"kd\">const<\/span> <span class=\"nx\">audioData<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Int16Array<\/span><span class=\"p\">(<\/span><span class=\"nx\">inputData<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span><span class=\"p\">);<\/span>\n       <span class=\"kd\">let<\/span> <span class=\"nx\">sum<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n       <span class=\"k\">for <\/span><span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">inputData<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n         <span class=\"kd\">const<\/span> <span class=\"nx\">sample<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nf\">max<\/span><span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nf\">min<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">inputData<\/span><span class=\"p\">[<\/span><span class=\"nx\">i<\/span><span class=\"p\">]));<\/span>\n         <span class=\"nx\">audioData<\/span><span class=\"p\">[<\/span><span class=\"nx\">i<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nf\">floor<\/span><span class=\"p\">(<\/span><span class=\"nx\">sample<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">32767<\/span><span class=\"p\">);<\/span>\n         <span class=\"nx\">sum<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nf\">abs<\/span><span class=\"p\">(<\/span><span class=\"nx\">sample<\/span><span class=\"p\">);<\/span>\n       <span class=\"p\">}<\/span>\n       <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">?.<\/span><span class=\"nf\">appendInputAudio<\/span><span class=\"p\">(<\/span><span class=\"nx\">audioData<\/span><span class=\"p\">);<\/span>\n     <span class=\"p\">};<\/span>\n     <span class=\"nx\">source<\/span><span class=\"p\">.<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">);<\/span>\n          <span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">connect<\/span><span class=\"p\">(<\/span><span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nx\">destination<\/span><span class=\"p\">);<\/span>\n     <span class=\"nf\">setIsRecording<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n     <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Audio recording started<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n   <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Error accessing microphone:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span><span class=\"p\">);<\/span>\n     <span class=\"nf\">setError<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Error accessing microphone. Please check your permissions.<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n   <span class=\"p\">}<\/span>\n <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\n\n<span class=\"c1\">\/\/ Stops audio recording from the user's microphone<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">stopRecording<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">stopRecording<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n   <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">disconnect<\/span><span class=\"p\">();<\/span>\n     <span class=\"nx\">processorRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n   <span class=\"p\">}<\/span>\n   <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">streamRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nx\">streamRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">getTracks<\/span><span class=\"p\">().<\/span><span class=\"nf\">forEach<\/span><span class=\"p\">((<\/span><span class=\"nx\">track<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">track<\/span><span class=\"p\">.<\/span><span class=\"nf\">stop<\/span><span class=\"p\">());<\/span>\n     <span class=\"nx\">streamRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n   <span class=\"p\">}<\/span>\n   <span class=\"nf\">setIsRecording<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n   <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Audio recording stopped<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n <span class=\"p\">},<\/span> <span class=\"p\">[]);<\/span>\n<span class=\"c1\">\/\/...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0647\u0631 \u062a\u0627\u0628\u0639 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>\n<code>startRecording<\/code>:<\/p>\n<ul>\n<li>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u06cc\u06a9\u0631\u0648\u0641\u0648\u0646\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0632\u0645\u06cc\u0646\u0647 \u0635\u0648\u062a\u06cc \u0648 \u067e\u062e\u0634 \u062c\u0631\u06cc\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc.<\/li>\n<li>\u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc \u0636\u0628\u0637 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0631\u0627\u06cc \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0647 \u0641\u0631\u0645\u062a PCM \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0647 \u0645\u0634\u062a\u0631\u06cc OpenAI \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<code>stopRecording<\/code>: \u0632\u0645\u06cc\u0646\u0647 \u0635\u0648\u062a\u06cc \u0631\u0627 \u0645\u06cc \u0628\u0646\u062f\u062f \u0648 \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647 \u0631\u0627 \u0642\u0637\u0639 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B4%D8%B1%D9%88%D8%B9_%D9%88_%D8%AA%D9%88%D9%82%D9%81_%D8%AA%D8%B9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  \u0634\u0631\u0648\u0639 \u0648 \u062a\u0648\u0642\u0641 \u062a\u0639\u0627\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Handles starting the interaction<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleStart<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nf\">setIsLoading<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n  <span class=\"nf\">setError<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">start<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nf\">initializeOpenAIClient<\/span><span class=\"p\">();<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Error starting interaction:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error<\/span><span class=\"p\">);<\/span>\n     <span class=\"nf\">setError<\/span><span class=\"p\">(<\/span><span class=\"s2\">`Error starting interaction: <\/span><span class=\"p\">${<\/span><span class=\"nx\">error<\/span><span class=\"p\">.<\/span><span class=\"nx\">message<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">finally<\/span> <span class=\"p\">{<\/span>\n     <span class=\"nf\">setIsAvatarVisible<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n     <span class=\"nf\">setIsLoading<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n      <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">initializeOpenAIClient<\/span><span class=\"p\">]);<\/span>\n\n      <span class=\"c1\">\/\/ Handles stopping the interaction, cleaning up resources and resetting states.<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleStop<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useCallback<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Stopping interaction...<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"nf\">setIsLoading<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n  <span class=\"nf\">setError<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"nf\">stopRecording<\/span><span class=\"p\">();<\/span>\n  <span class=\"nf\">setIsAvatarVisible<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n  <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">close<\/span><span class=\"p\">();<\/span>\n  <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">?.<\/span><span class=\"nf\">disconnect<\/span><span class=\"p\">();<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">close<\/span><span class=\"p\">();<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"nf\">stopRecording<\/span><span class=\"p\">();<\/span>\n  <span class=\"nf\">onClose<\/span><span class=\"p\">();<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Interaction stopped<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n <span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">stopRecording<\/span><span class=\"p\">]);<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u06a9\u062f \u0628\u0627\u0644\u0627\u060c <code>handleStart<\/code> \u062a\u0627\u0628\u0639 \u0628\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a\u200c\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0648 \u0622\u0645\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0627\u0628\u0637 \u0628\u0631\u0627\u06cc \u0636\u0628\u0637\u060c \u062a\u0639\u0627\u0645\u0644 \u0631\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0628\u0627 \u062a\u0645\u0627\u0633 \u0628\u0627 <code>simliClient?.start()<\/code> \u0631\u0648\u0634\u060c <code>SimliClient<\/code> \u06cc\u06a9 \u062f\u0633\u062a \u062f\u0627\u062f\u0646 WebRTC \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0630\u0627\u06a9\u0631\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc \u0648 \u0633\u0631\u0648\u0631 Simli \u0622\u063a\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0631\u0627 <code>handleStop<\/code> \u062a\u0627\u0628\u0639 \u0628\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0627\u06cc\u0646 \u062a\u0639\u0627\u0645\u0644 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc \u06a9\u0646\u062f <code>simliClient?.close()<\/code>  \u0631\u0648\u0634\u060c \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0645\u0646\u0627\u0628\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a\u060c \u0648 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062d\u0627\u0644\u062a \u0647\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0622\u0648\u0627\u062a\u0627\u0631.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%B5%D8%A8_%D9%88_%D9%BE%D8%A7%DA%A9%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA\"><\/span>\n<p>  \u0646\u0635\u0628 \u0648 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0624\u0644\u0641\u0647\u060c \u0628\u0627\u06cc\u062f \u0645\u0642\u062f\u0627\u0631 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u0645 <code>simliClient<\/code> \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u062c\u0632\u0621 \u0633\u0648\u0627\u0631 \u0645\u06cc \u0634\u0648\u062f. \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ Effect to initialize Simli client once the component mounts and clean up resources on unmount<\/span>\n<span class=\"p\">...<\/span> \n\n<span class=\"nf\">useEffect<\/span><span class=\"p\">(()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nf\">initializeSimliClient<\/span><span class=\"p\">();<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">simliClient<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">connected<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">SimliClient connected<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"kd\">const<\/span> <span class=\"nx\">audioData<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Uint8Array<\/span><span class=\"p\">(<\/span><span class=\"mi\">6000<\/span><span class=\"p\">).<\/span><span class=\"nf\">fill<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n      <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">sendAudioData<\/span><span class=\"p\">(<\/span><span class=\"nx\">audioData<\/span><span class=\"p\">);<\/span>\n      <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Sent initial audio data<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"nf\">startRecording<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">});<\/span>\n    <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">disconnected<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">SimliClient disconnected<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">});<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"k\">return <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nx\">simliClient<\/span><span class=\"p\">?.<\/span><span class=\"nf\">close<\/span><span class=\"p\">();<\/span>\n      <span class=\"nx\">openAIClientRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">?.<\/span><span class=\"nf\">disconnect<\/span><span class=\"p\">();<\/span>\n      <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nx\">audioContextRef<\/span><span class=\"p\">.<\/span><span class=\"nx\">current<\/span><span class=\"p\">.<\/span><span class=\"nf\">close<\/span><span class=\"p\">();<\/span>\n      <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">{}<\/span>\n  <span class=\"p\">};<\/span>\n<span class=\"p\">},<\/span> <span class=\"p\">[<\/span><span class=\"nx\">initializeSimliClient<\/span><span class=\"p\">]);<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 <code>useEffect<\/code> \u0642\u0644\u0627\u0628 \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>simliClient<\/code> \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0646\u0635\u0628 \u0645\u06cc \u0634\u0648\u062f\u060c \u0634\u0646\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0645\u062a\u0635\u0644 \u06cc\u0627 \u0642\u0637\u0639 \u0645\u06cc \u0634\u0648\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u0647\u0646\u06af\u0627\u0645 \u0627\u062a\u0635\u0627\u0644\u060c \u06cc\u06a9 \u0633\u06cc\u06af\u0646\u0627\u0644 \u0635\u0648\u062a\u06cc \u0628\u06cc \u0635\u062f\u0627 \u0628\u0631\u0627\u06cc \u0632\u0646\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0627\u062a\u0635\u0627\u0644 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0634\u0631\u0648\u0639 \u0628\u0647 \u0636\u0628\u0637 \u0635\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f. \u0639\u0645\u0644\u06a9\u0631\u062f \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc\u060c \u06a9\u0647 \u0628\u0627 \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0641\u0639\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0633\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f <code>simliClient<\/code>\u060c \u0648 \u06a9\u0644\u0627\u06cc\u0646\u062a OpenAI \u0631\u0627 \u0642\u0637\u0639 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0639\u062f\u060c \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0628\u0631\u0648\u06cc\u062f <code>src\/app\/pages.js<\/code> \u0641\u0627\u06cc\u0644 \u0648 \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ src\/app\/components\/Interview.js<\/span>\n<span class=\"p\">...<\/span>\n<span class=\"c1\">\/\/ configure the avatar and display the home page<\/span>\n<span class=\"p\">...<\/span> \n<span class=\"dl\">\"<\/span><span class=\"s2\">use client<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"nx\">React<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">useState<\/span><span class=\"p\">,<\/span> <span class=\"nx\">useEffect<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">react<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"nx\">Interview<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">.\/components\/Interview<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">Demo<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">jobDescription<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setJobDescription<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">avatar<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Frank<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">openai_voice<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">alloy<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">simli_faceid<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">5514e24d-6086-46a3-ace4-6a7264e5cb7c<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">initialPrompt<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`Your name is Frank, an interviewer hiring for a specific role. You are looking for a candidate whose expertise aligns closely with the following job description: <\/span><span class=\"p\">${<\/span><span class=\"nx\">jobDescription<\/span><span class=\"p\">}<\/span><span class=\"s2\">. Please generate three interview questions that assess key qualifications and relevant experience. Begin by introducing yourself and asking the interviewee to share a bit about their background.`<\/span><span class=\"p\">,<\/span>\n  <span class=\"p\">};<\/span>\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\n    <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"nx\">className<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">bg-black min-h-screen flex flex-col items-center font-abc-repro font-normal text-sm text-white p-8<\/span><span class=\"dl\">\"<\/span><span class=\"o\">&gt;<\/span>\n      <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"nx\">className<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">flex flex-col items-center mt-4<\/span><span class=\"dl\">\"<\/span><span class=\"o\">&gt;<\/span>\n        <span class=\"o\">&lt;<\/span><span class=\"nx\">label<\/span> <span class=\"nx\">htmlFor<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">job-description<\/span><span class=\"dl\">\"<\/span> <span class=\"nx\">className<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">font-bold mb-2<\/span><span class=\"dl\">\"<\/span><span class=\"o\">&gt;<\/span>\n              <span class=\"nx\">Add<\/span> <span class=\"nx\">Job<\/span> <span class=\"nx\">Description<\/span>\n        <span class=\"o\">&lt;<\/span><span class=\"sr\">\/label<\/span><span class=\"err\">&gt;\n<\/span>        <span class=\"o\">&lt;<\/span><span class=\"nx\">textarea<\/span>\n              <span class=\"nx\">id<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">job-description<\/span><span class=\"dl\">\"<\/span>\n              <span class=\"nx\">placeholder<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Enter job description, e.g., Responsibilities, Requirements<\/span><span class=\"dl\">\"<\/span>\n              <span class=\"nx\">value<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">jobDescription<\/span><span class=\"p\">}<\/span>\n              <span class=\"nx\">onChange<\/span><span class=\"o\">=<\/span><span class=\"p\">{(<\/span><span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setJobDescription<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)}<\/span>\n              <span class=\"nx\">className<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">p-2 border border-gray-300 rounded-md w-80 h-24 resize-none mb-4 text-black<\/span><span class=\"dl\">\"<\/span>\n            <span class=\"o\">\/&gt;<\/span>\n      <span class=\"o\">&lt;<\/span><span class=\"sr\">\/div<\/span><span class=\"err\">&gt;\n<\/span>      <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"nx\">className<\/span><span class=\"o\">=<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">flex flex-col items-center gap-6 bg-effect15White p-6 pb-[40px] rounded-xl w-full<\/span><span class=\"dl\">\"<\/span><span class=\"o\">&gt;<\/span>\n        <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span><span class=\"o\">&gt;<\/span>\n          <span class=\"o\">&lt;<\/span><span class=\"nx\">Interview<\/span>\n            <span class=\"nx\">openai_voice<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nx\">openai_voice<\/span><span class=\"p\">}<\/span>\n            <span class=\"nx\">simli_faceid<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nx\">simli_faceid<\/span><span class=\"p\">}<\/span>\n            <span class=\"nx\">initialPrompt<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nx\">initialPrompt<\/span><span class=\"p\">}<\/span>\n          <span class=\"sr\">\/<\/span><span class=\"err\">&gt;\n<\/span>        <span class=\"o\">&lt;<\/span><span class=\"sr\">\/div<\/span><span class=\"err\">&gt;\n<\/span>      <span class=\"o\">&lt;<\/span><span class=\"sr\">\/div<\/span><span class=\"err\">&gt;\n<\/span>    <span class=\"o\">&lt;<\/span><span class=\"sr\">\/div<\/span><span class=\"err\">&gt;\n<\/span>  <span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"nx\">Demo<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u06a9\u062f \u0648\u0631\u0648\u062f\u06cc \u0634\u0631\u062d \u0634\u063a\u0644 \u0631\u0627 \u0627\u0632 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u200c\u06a9\u0646\u0646\u062f\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0648\u0644\u06cc\u0647\u060c \u0634\u0646\u0627\u0633\u0647 \u0686\u0647\u0631\u0647 \u0648 \u0635\u062f\u0627\u06cc OpenAI \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u0647 OpenAI API \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u062f\u060c \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0633\u067e\u0633\u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062a\u06a9\u06cc\u0647 \u06af\u0627\u0647 \u0628\u0647 \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc \u0634\u0648\u062f <code>Interview.js<\/code>. \u062c\u0632\u0621<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0634\u0631\u062d \u0634\u063a\u0644 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646\u06cc \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 OpenAI API \u0622\u0646 \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f. OpenAI API \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0633\u0647 \u0633\u0648\u0627\u0644 \u0628\u0631\u0627\u06cc \u0622\u0648\u0627\u062a\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0627\u0632 \u0645\u062a\u0642\u0627\u0636\u06cc \u0628\u067e\u0631\u0633\u062f. <br \/>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0644\u06cc\u0646\u06a9 \u0648\u06cc\u062f\u06cc\u0648 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647 \u0646\u062d\u0648\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a: <\/p>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=X0JVFykPo8c\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/www.youtube.com\/watch?v=X0JVFykPo8c<\/a><br \/>\n<\/iframe>\n<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 SimliClient \u0648 OpenAI\u060c \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0627 \u0633\u0627\u062e\u062a\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0634\u0631\u062d \u0634\u063a\u0644 \u062b\u0627\u0628\u062a \u0631\u0627 \u0628\u0647 \u0648\u06cc\u062f\u0626\u0648\u0647\u0627\u06cc \u0645\u0635\u0627\u062d\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u067e\u0648\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0631\u0627\u0647\u200c\u062d\u0644\u06cc \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0645\u0634\u06a9\u0644 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0648\u0642\u062a\u200c\u06af\u06cc\u0631 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f. \u062a\u0631\u06a9\u06cc\u0628 \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u06cc\u06a9 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u0632\u06cc \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0628\u0627 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0641\u0631\u0622\u06cc\u0646\u062f \u063a\u0631\u0628\u0627\u0644\u06af\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0646\u0627\u0645\u0632\u062f\u0647\u0627 \u0648 \u06a9\u0627\u0647\u0634 \u0627\u0633\u062a\u0631\u0633 \u0646\u0627\u0634\u06cc \u0627\u0632 \u06af\u0630\u0631\u0627\u0646\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0633\u0646\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f.<\/p>\n<p>API Simli \u0628\u0627 \u06cc\u06a9 \u0637\u0631\u062d \u0631\u0627\u06cc\u06af\u0627\u0646 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0627\u0645\u0631\u0648\u0632 \u062f\u0631 Simli \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0622\u0645\u0627\u0631 \u062a\u0648\u0633\u0637 Genius\u060c 60 \u062f\u0631\u0635\u062f \u0627\u0632 \u062c\u0648\u06cc\u0646\u062f\u06af\u0627\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u0648\u062f\u0646 \u06cc\u0627 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0648\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0645\u0635\u0627\u062d\u0628\u0647\u060c \u06a9\u0627\u0631 \u0631\u0627 \u062a\u0631\u06a9 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0645\u06cc\u0627\u0646\u06af\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0622\u0646 \u062d\u062f\u0648\u062f 23 \u0631\u0648\u0632 \u0637\u0648\u0644 \u0645\u06cc \u06a9\u0634\u062f. \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0633\u0646\u062a\u06cc \u0648\u0642\u062a \u06af\u06cc\u0631 \u0648 \u0645\u0633\u062a\u0639\u062f \u0633\u0648\u06af\u06cc\u0631\u06cc \u0627\u0633\u062a. \u0628\u0647 \u062c\u0627\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":84515,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-84513","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/84513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=84513"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/84513\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/84515"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=84513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=84513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=84513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}