রিয়েলটাইম ট্রান্সলেশন API
মাত্র কয়েক মিনিটে যেকোনো অ্যাপ্লিকেশনে লাইভ স্পিচ-টু-স্পিচ অনুবাদ যোগ করুন। অডিও স্ট্রিম করুন এবং অনূদিত অডিও ও ট্রান্সক্রিপ্ট গ্রহণ করুন — সবকিছু একটি WebSocket সংযোগের মাধ্যমে।
কেন রিয়েলটাইম ট্রান্সলেশন API?
তাৎক্ষণিক ও ধারাবাহিক অনুবাদের জন্য তৈরি। একটি স্থায়ী সংযোগ পুরো সেশন পরিচালনা করে — কোনো পোলিং নেই, কোনো বিলম্ব নেই, কোনো জটিলতা নেই।
অত্যন্ত কম লেটেন্সি
স্ট্রিমিং অডিও রিয়েলটাইমে অনুবাদ হয়ে ফিরে আসে। কোনো রিকোয়েস্ট-রেসপন্স রাউন্ড ট্রিপ নেই — বক্তা কথা বলার সাথে সাথেই ফলাফল আসে।
অডিও ইন, অডিও আউট
মাইক্রোফোনের কাঁচা অডিও পাঠান এবং অনূদিত স্পিচ গ্রহণ করুন। ইনপুট ও আউটপুট ট্রান্সক্রিপ্টও স্ট্রিম হয় যাতে আপনি লাইভ ক্যাপশন দেখাতে পারেন।
১৩০+ ভাষা
স্ট্যান্ডার্ড BCP-47 ভাষা কোড ব্যবহার করে যেকোনো প্রধান ভাষায় অনুবাদ করুন। SDK পরিবর্তন ছাড়াই সেশনগুলোর মধ্যে টার্গেট ভাষা পরিবর্তন করুন।
ডিফল্টভাবে নিরাপদ
প্রতিটি সংযোগ আপনার JWT টোকেন দিয়ে অথেনটিকেট করা হয়। প্রতিটি ব্যবহারকারীর সেশন আলাদা থাকে — আপনার অডিও কখনও শেয়ার বা সংরক্ষণ করা হয় না।
সংযোগ ও অথেনটিকেশন
রিয়েলটাইম ট্রান্সলেশন API একটি ডেডিকেটেড Socket.IO namespace-এর উপর চলে। সংযোগ তৈরি করার সময় query parameter হিসেবে API কী পাঠান — সেশন শুরু হওয়ার আগেই সার্ভার এটি যাচাই করবে।
wss://api.gpttranslator.co └── namespace: /api/realtime-translator
import { io } from 'socket.io-client'; // Connect to the Realtime Translation namespace const socket = io('https://api.gpttranslator.co/api/realtime-translator', { transports: ['websocket'], query: { apiKey: 'YOUR_API_KEY' // your GPT Translator API key }, });
নোট: GPT Translator ড্যাশবোর্ডের API Keys বিভাগ থেকে আপনার API কী সংগ্রহ করুন। বৈধ API কী ছাড়া সংযোগ সঙ্গে সঙ্গে বাতিল করা হবে।
ক্লায়েন্ট-সাইড কোডে কখনও আপনার API কী প্রকাশ করবেন না
উপরের কোড উদাহরণটি শুধুমাত্র বোঝানোর জন্য। ব্রাউজারের JavaScript-এ সরাসরি API কী এমবেড করলে যে কেউ আপনার পেজ সোর্স বা নেটওয়ার্ক ট্রাফিক পরীক্ষা করে এটি দেখতে পারবে — এরপর তারা আপনার কী ব্যবহার করে আপনার টোকেন ব্যালেন্স শেষ করে দিতে পারে।
✅ প্রস্তাবিত: আপনার নিজস্ব ব্যাকএন্ডের মাধ্যমে প্রক্সি ব্যবহার করুন
আপনার সার্ভার নিরাপদভাবে API কী সংরক্ষণ করে এবং ব্রাউজারের পক্ষ থেকে Socket.IO সংযোগ স্থাপন করে। ব্রাউজার আপনার সার্ভারের সাথে সংযুক্ত হয়, সরাসরি ট্রান্সলেশন API-এর সাথে নয়।
// Your backend holds the key — the browser never sees it
const socket = io('https://api.gpttranslator.co/api/realtime-translator', {
transports: ['websocket'],
query: { apiKey: process.env.GPT_TRANSLATOR_API_KEY },
});
// Proxy events between the browser client and the translation API
browserSocket.on('translation_start', (data) => socket.emit('translation_start', data));
browserSocket.on('audio_chunk', (chunk) => socket.emit('audio_chunk', chunk));
browserSocket.on('translation_stop', () => socket.emit('translation_stop'));
socket.on('output_audio', (data) => browserSocket.emit('output_audio', data));
socket.on('output_transcript', (data) => browserSocket.emit('output_transcript', data));
socket.on('input_transcript', (data) => browserSocket.emit('input_transcript', data));সেশন লাইফসাইকেল
প্রতিটি ট্রান্সলেশন সেশন একটি সহজ পাঁচ-ধাপের ক্রম অনুসরণ করে। এই ক্রম বোঝা আপনাকে একটি শক্তিশালী ইন্টিগ্রেশন তৈরি করতে সাহায্য করবে।
সেশন শুরু করুন
আপনি পাঠানটার্গেট ভাষার কোডসহ translation_start পাঠান। সার্ভার আপনার টোকেন ব্যালেন্স সংরক্ষণ করে এবং সেশন ইনিশিয়ালাইজ করা শুরু করে।
রেডিনেস সিগন্যালের জন্য অপেক্ষা করুন
আপনি শোনেনসার্ভার ধারাবাহিকভাবে তিনটি স্ট্যাটাস ইভেন্ট পাঠায়: session_initializing, translation_ready এবং শেষে ready_for_audio। ready_for_audio পাওয়ার পরেই অডিও পাঠানো শুরু করুন।
অডিও চাঙ্ক স্ট্রিম করুন
আপনি পাঠানমাইক্রোফোন থেকে সংগৃহীত base64-encoded PCM16 অডিওসহ ধারাবাহিকভাবে audio_chunk ইভেন্ট পাঠান। সর্বনিম্ন লেটেন্সির জন্য চাঙ্ক ছোট রাখুন (প্রায় ১০০ মিলিসেকেন্ড)।
অনূদিত আউটপুট গ্রহণ করুন
আপনি শোনেনঅনুবাদের সময় সার্ভার output_audio (অনূদিত স্পিচ), output_transcript (অনূদিত টেক্সট) এবং input_transcript (স্বীকৃত মূল টেক্সট) স্ট্রিম করে — সবগুলো ইনক্রিমেন্টাল ডেল্টা হিসেবে।
সেশন শেষ করুন
আপনি পাঠানসেশন সঠিকভাবে বন্ধ করতে translation_stop পাঠান। টোকেন ব্যবহারের হিসাব সম্পন্ন হবে এবং translation_closed ইভেন্ট সেশন সমাপ্তির নিশ্চয়তা দেবে।
ইভেন্ট রেফারেন্স
রিয়েলটাইম ট্রান্সলেশন API-এর প্রতিটি ইভেন্টের সম্পূর্ণ রেফারেন্স — আপনি কী পাঠাবেন এবং কী গ্রহণ করবেন।
আপনি যে ইভেন্টগুলো পাঠান
আপনি পাঠানtranslation_startনতুন ট্রান্সলেশন সেশন শুরু করে। টার্গেট ভাষার জন্য BCP-47 ভাষা কোড পাঠান।
{
"targetLanguage": "es" // BCP-47 language code (e.g. "fr", "de", "zh", "ja")
}audio_chunkকাঁচা মাইক্রোফোন অডিওর একটি চাঙ্ক পাঠায়। audioData ফিল্ডটি অবশ্যই ২৪,০০০ Hz স্যাম্পল করা base64-encoded PCM16 mono অডিও বাফার হতে হবে।
{
"audioData": "<base64-encoded PCM16 mono audio>"
// Sample rate: 24 000 Hz
// Encoding: 16-bit PCM, little-endian
// Send continuously while the user speaks
}translation_stopসেশন সঠিকভাবে শেষ করে। সার্ভার বিলিং সম্পন্ন করে এবং translation_closed পাঠায়।
আপনি যে ইভেন্টগুলো শোনেন
আপনি শোনেনsession_initializingstatustranslation_start-এর পরপরই পাঠানো হয়। এটি নির্দেশ করে যে সেশন সেটআপ হচ্ছে — এখনও অডিওর জন্য প্রস্তুত নয়।
translation_readystatusসার্ভার-সাইড সংযোগ স্থাপিত হলে পাঠানো হয়। এখনও চূড়ান্ত সেশন অ্যাক্টিভেশনের অপেক্ষায়।
ready_for_audiostatusসেশন পুরোপুরি সক্রিয়। এখন audio_chunk ইভেন্ট স্ট্রিম করা শুরু করুন।
output_audiostreamঅনূদিত স্পিচ অডিওর একটি চাঙ্ক। delta একটি base64-encoded PCM16 অডিও বাফার। ধারাবাহিক ডেল্টাগুলো বাফার করুন এবং ক্রমানুসারে প্লে করুন।
{
"delta": "<base64-encoded PCM16 audio chunk>"
// Decoded and played directly to the output speaker
// Arrives incrementally — buffer chunks for smooth playback
}output_transcriptstreamঅনূদিত টেক্সটের একটি অংশ। আপনার UI-তে সম্পূর্ণ অনূদিত ট্রান্সক্রিপ্ট তৈরি করতে ডেল্টাগুলো একত্র করুন।
{
"delta": "Hola, ¿cómo estás?" // translated text fragment
}input_transcriptstreamস্বীকৃত মূল স্পিচের একটি অংশ। সোর্স ভাষার ক্যাপশন তৈরি করতে ডেল্টাগুলো একত্র করুন।
{
"delta": "Hello, how are you?" // recognized source speech fragment
}translation_closedstatusনিশ্চিত করে যে সেশন সঠিকভাবে শেষ হয়েছে — translation_stop-এর পরে অথবা টোকেন শেষ হয়ে গেলে সার্ভার সেশন বন্ধ করলে।
translation_errorerrorএকটি অপ্রত্যাশিত ত্রুটি ঘটেছে। message ফিল্ডে সমস্যার কারণ ব্যাখ্যা করা হয়। সেশন এখনও সক্রিয় থাকতে পারে — আপনি পুনরায় চেষ্টা করতে পারেন অথবা translation_stop কল করতে পারেন।
{
"message": "Translation session error. Please try again."
}insufficient_tokenserrorআপনার টোকেন ব্যালেন্স শেষ হয়ে গেছে। সেশন স্বয়ংক্রিয়ভাবে বন্ধ করা হয়েছে। চালিয়ে যেতে আপনার প্ল্যান আপগ্রেড করুন।
{
"message": "You have reached the limit of words for translation...",
"remainingTokens": 0
}সম্পূর্ণ ইন্টিগ্রেশন উদাহরণ
একটি ছোট কিন্তু সম্পূর্ণ JavaScript উদাহরণ যা দেখায় কীভাবে সংযোগ করবেন, সেশন শুরু করবেন, অডিও স্ট্রিম করবেন, সার্ভারের সব ইভেন্ট পরিচালনা করবেন এবং সেশন সঠিকভাবে বন্ধ করবেন।
import { io } from 'socket.io-client';
const socket = io('https://api.gpttranslator.co/api/realtime-translator', {
transports: ['websocket'],
query: { apiKey: 'YOUR_API_KEY' },
});
// ─── Listen for server events ───────────────────────────────────────
socket.on('session_initializing', () => {
console.log('Session is being prepared...');
});
socket.on('translation_ready', () => {
console.log('Session connected. Waiting for activation...');
});
socket.on('ready_for_audio', () => {
console.log('Ready! Start streaming audio chunks now.');
startMicrophone(); // begin capturing and sending audio
});
socket.on('output_audio', ({ delta }) => {
// delta is a base64-encoded PCM16 audio chunk
playAudioChunk(atob(delta));
});
socket.on('output_transcript', ({ delta }) => {
// Append translated text delta to your UI
appendToTranscript('translated', delta);
});
socket.on('input_transcript', ({ delta }) => {
// Append recognized source speech to your UI
appendToTranscript('original', delta);
});
socket.on('translation_closed', () => {
console.log('Session ended.');
stopMicrophone();
});
socket.on('translation_error', ({ message }) => {
console.error('Error:', message);
stopMicrophone();
});
socket.on('insufficient_tokens', ({ message, remainingTokens }) => {
console.warn('Out of tokens:', message, 'remaining:', remainingTokens);
stopMicrophone();
showUpgradePrompt();
});
// ─── Start a session ────────────────────────────────────────────────
socket.emit('translation_start', { targetLanguage: 'es' });
// ─── Stream audio chunks ────────────────────────────────────────────
function onAudioData(pcm16Base64) {
socket.emit('audio_chunk', { audioData: pcm16Base64 });
}
// ─── Stop the session ───────────────────────────────────────────────
function stopSession() {
socket.emit('translation_stop');
}বিলিং কীভাবে কাজ করে
রিয়েলটাইম অনুবাদের বিলিং সেশনের সময়ের উপর ভিত্তি করে — সেশন সক্রিয় হওয়া থেকে translation_stop বা টোকেন শেষ হওয়া পর্যন্ত। কোনো অক্ষর বা শব্দভিত্তিক গণনা নেই।
প্রতি-সেকেন্ড বিলিং
সেশন পুরোপুরি সক্রিয় হওয়ার মুহূর্ত থেকে শেষ হওয়া পর্যন্ত সেকেন্ডে ব্যবহার পরিমাপ করা হয়। আংশিক সেকেন্ড উপরের দিকে রাউন্ড করা হয়।
লাইভ টোকেন কর্তন
প্রতিটি সেশনের শেষে প্রকৃত সময়ের ভিত্তিতে আপনার ব্যালেন্স থেকে টোকেন কাটা হয়। সেশন শুরু করার আগে উপলব্ধ ব্যালেন্স যাচাই করা হয়।
স্বয়ংক্রিয় সীমা
আপনার অবশিষ্ট টোকেন ব্যালেন্স শেষ হওয়ার আগে সেশন স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে। সেশন বন্ধ হওয়ার আগে আপনি insufficient_tokens ইভেন্ট পাবেন।
আনুমানিক টোকেন ব্যবহার
নোট: টোকেনের হিসাব আনুমানিক। প্রকৃত ব্যবহার অডিও নয়েজ ও সেশন কার্যকলাপের উপর নির্ভর করে। রিয়েলটাইম ব্যবহারের জন্য আপনার ড্যাশবোর্ড দেখুন।
অডিও ফরম্যাটের প্রয়োজনীয়তা
সর্বোত্তম নির্ভুলতা ও সর্বনিম্ন লেটেন্সির জন্য API একটি নির্দিষ্ট অডিও ফরম্যাট আশা করে। ব্রাউজারে মাইক্রোফোন অডিও ক্যাপচার ও রূপান্তরের জন্য নিচের কোড ব্যবহার করুন।
PCM 16-bit, little-endian24 000 Hz১ (মোনো)Base64 string// Capture PCM16 audio from the browser microphone
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const audioContext = new AudioContext({ sampleRate: 24000 });
const source = audioContext.createMediaStreamSource(stream);
const processor = audioContext.createScriptProcessor(4096, 1, 1);
processor.onaudioprocess = (e) => {
const float32 = e.inputBuffer.getChannelData(0);
// Convert Float32 → Int16 PCM
const int16 = new Int16Array(float32.length);
for (let i = 0; i < float32.length; i++) {
int16[i] = Math.max(-32768, Math.min(32767, float32[i] * 32768));
}
// Base64-encode and send
const base64 = btoa(String.fromCharCode(...new Uint8Array(int16.buffer)));
socket.emit('audio_chunk', { audioData: base64 });
};
source.connect(processor);
processor.connect(audioContext.destination);প্রায়শই জিজ্ঞাসিত প্রশ্ন
রিয়েলটাইম ট্রান্সলেশন API ইন্টিগ্রেশন ও ব্যবহারের সাধারণ প্রশ্নসমূহ।