`; const pauseSVG = ` `; class AudioPlayerManager { constructor() { this.currentPlayer = null; this.players = new Map(); // Find all audio players using attribute selector const playerContainers = document.querySelectorAll('[data-audio-player]'); playerContainers.forEach((container, index) => { this.initializePlayer(container, index); }); } initializePlayer(container, index) { // Find necessary elements using attributes const playPauseBtn = container.querySelector('[data-play-pause-btn]'); const waveformContainer = container.querySelector('[data-waveform]'); const audioSrc = container.dataset.audioSrc; const rootStyles = getComputedStyle(document.documentElement); const waveColor = rootStyles.getPropertyValue('--design-system---gray-neutral--n-80').trim(); const progressColor = rootStyles.getPropertyValue('--_themes---on-primary').trim(); // Create Wavesurfer instance const wavesurfer = WaveSurfer.create({ container: waveformContainer, waveColor: waveColor, progressColor: progressColor, height: 'auto', barHeight: 1.5, barWidth: 1.4, barRadius: 2, barGap: 1.8, cursorColor: 'transparent', dragToSeek: true, backend: 'MediaElement' }); // Load audio wavesurfer.load(audioSrc); // Create unique ID const playerId = `player-${index}`; // Reset button to play state const resetButton = () => { playPauseBtn.innerHTML = playSVG; this.currentPlayer = null; }; // Play/Pause functionality playPauseBtn.addEventListener('click', () => { // If another player is playing, pause it if (this.currentPlayer && this.currentPlayer !== wavesurfer) { this.currentPlayer.pause(); const previousPlayBtn = this.findPlayButton(this.currentPlayer); if (previousPlayBtn) previousPlayBtn.innerHTML = playSVG; } // Toggle current player if (wavesurfer.isPlaying()) { wavesurfer.pause(); playPauseBtn.innerHTML = playSVG; this.currentPlayer = null; } else { wavesurfer.play(); playPauseBtn.innerHTML = pauseSVG; this.currentPlayer = wavesurfer; } }); // Reset button when audio ends wavesurfer.on('finish', resetButton); // Store player reference this.players.set(playerId, { wavesurfer, playPauseBtn }); // Initial button setup playPauseBtn.innerHTML = playSVG; } // Helper method to find the play button for a given wavesurfer instance findPlayButton(wavesurferInstance) { for (const player of this.players.values()) { if (player.wavesurfer === wavesurferInstance) { return player.playPauseBtn; } } return null; } } // Initialize players new AudioPlayerManager(); });

Progress for your organisation

Proto is the AI localisation and security partner for emerging industry leaders.

85% inquiries automated +16%YoY

85% inquiries automated +16%YoY

With Proto's solution, we've increased our handling capacity by 30% across our 12 million wallets. The AI instantly shares information with customers in their preferred language, freeing our agents to focus on more complex issues.

14.4M interactions handled annually +240% YoY

14.4M interactions handled annually +240% YoY

The multilingual Proto chatbot empowers consumers by providing an accessible channel for complaints, supporting the central bank’s commitment to financial service innovation.

52% inquiries automated

52% inquiries automated

We are elated to work with Proto to help give our patients a more efficient and convenient way to interact with us.

550K interactions handled monthly +80% YoY

550K interactions handled monthly +80% YoY

The National Bank of Rwanda is pleased to deploy the Proto customer complaints handling chatbot system. The chatbot will include customers in their local languages and preferred messaging channels.
ISO 27001
SOC 2 Type II
Dedicated LLM
Live translation
AI?Assistant switching
Hybrid hosting
On-premise hosting
Unlimited users and teams
Web scraping
Surveillance metrics
Unlimited support
ISO 27001
SOC 2 Type II
Dedicated LLM
Live translation
AI?Assistant switching
Hybrid hosting
On-premise hosting
Unlimited users and teams
Web scraping
Surveillance metrics
Unlimited support

Profit with every interaction

Proto consolidates your contact centre and intelligence costs.
Messages
Send AI text messages and live rep replies with translations.
Voice
Send AI voice messages and receive customer replies.
Transcripts
Generate text records from customer voice messages.
Emails
Send and receive emails for tickets.
Auto-Labels
Populate fields and tags in chats, tickets, and customer profiles.
Summaries
Generate concise descriptions and sentiment for livechats and tickets.
Scrapes
Target websites, social media, and databases for AI assistant training and insights.
Insights
Enterprise Max
Generate text and graphical analysis from your data.

Consult an expert

Let's discuss your local and secure AI deployment.

Read the latest

News
Health

TMC South Luzon deploys AI customer experience platform for patient engagement

The Medical City South Luzon partners with Proto to deploy an AI customer experience platform with multilingual support, voice messaging, and automated FAQs – transforming patient engagement across Southern Luzon.

News
Transport

Proto powers new digital support platform for iPak-Treasure-Island in Visayas and Mindanao

iPak-Treasure-Island enhances customer support with Proto AICX – enabling multilingual order taking, FAQs, complaints, and live chat across Messenger and webchat.