Transcripts with custom transcriber
# support
b
Hi! I am using a custom transcriber/STT with Vapi. Obviously my websocket will return the transcription for the caller, but it seems like Vapi also requires transcription for the agent? Is my understanding correct? It seems odd to me that Vapi relies on STT for the transcript when it could get the transcript from the LLM output that's later used for TTS. Just want to make sure i'm not missing something? If I should be providing transcription for both the caller and the agent, what are the best practices for setting this up? Asking b/c this introduces more room for error, since the STT may make mistakes for the agent transcription, and also additional complexity on whether/how to "listen" for the caller or agent.
v
Yes, your understanding is correct—Vapi expects your custom transcriber to provide transcriptions for both the caller and the agent, using the
channel
field to distinguish them. Here’s a code snippet for emitting both channels in your response:
Copy code
json
{
  "type": "transcriber-response",
  "transcription": "The transcribed text",
  "channel": "customer" // or "assistant"
}
Make sure your transcriber logic detects the channel (e.g., via
channel_index
) and emits a response for each as shown above. Reference: [Vapi Custom Transcriber Docs](https://docs.vapi.ai/customization/custom-transcriber#response) Source: - [Custom transcriber](https://docs.vapi.ai/customization/custom-transcriber#response)
Yes, your understanding is correct: Vapi expects your custom transcriber to emit transcripts for both the caller ("customer") and the agent ("assistant") channels. The best practice is to detect the channel using the
channel_index
and emit a response for each, like this:
Copy code
json
{
  "type": "transcriber-response",
  "transcription": "The transcribed text",
  "channel": "customer" // or "assistant"
}
Make sure your transcriber processes and emits transcripts for both channels to ensure Vapi receives the required data for the full conversation flow. Source: - [Custom Transcriber Documentation](https://docs.vapi.ai/customization/custom-transcriber)
v
You’re correct that Vapi typically expects transcription for both the caller and the agent, even if you’re generating TTS from the LLM output later. The STT is used not only for generating transcripts but also for any real-time processing, analytics, or logging Vapi may rely on. I can help you set up a robust workflow that handles both streams accurately while minimizing errors and complexity, including how to “listen” correctly for caller vs. agent. @Bathroom King
b
@Vignxt Flow Any guidance is much appreciated!
It still seems odd to do it this way, no? Adds a bit of latency (maybe negilible i guess?) and introduces more room for error
v
ok
If you have been trying to reach me and I have not been able to reply, it means my account is restricted. Please message me on WhatsApp at +2348141449023 @Bathroom King
c
Hello, We’d like to check in to see if you need any further assistance. We’re sorry for the inconvenience and are more than happy to help if there’s anything else you need.
d
@Bathroom King Hi, I set my custom transcriber but receive no requests even though I use the exact documentation. Vapi uses deepgram instead of mine. Did you face any similar issue? Thank you!!
For anyone struggling with the above, the web test calls do not use the custom transcriber of your choice. You need to test with a real phone!
c
Could you please send a call id where it used VAPI deepgram key instead of your custom-transcriber?
d
You may check this call id: 039ba1e4-e550-4839-a514-40c0f8f7df83
c
We are reviewing the details of your request and will reach out to you when we have an update or if we need additional information.
k
Any help on this?
How can it be resolved
@Shubham Bajaj whats the solution here?
b
Hi, I am integrating a custom transcriber with VAPI using your WebSocket transport. My service receives audio from VAPI, processes it with Soniox’s real-time WebSocket API, and sends back transcript events in this format: { "type": "transcriber-response", "transcription": "The transcribed text", "channel": "customer" } And sometimes I send as assistant channel, still resulting in schema errors such as: [ "type must be one of the following values: transcriber-response", "transcription must be a string", "channel must be one of the following values: customer, assistant" ] My logs confirm that the outgoing JSON matches your schema, and all fields are strings. I have also validated the encoding (UTF-8) and ensured only one event is sent per message. Could you advise what else might cause this error, or if there are any hidden requirements or common pitfalls for custom transcribers?
c
We apologize for the delay in responses lately. We are in process of making some changes to our workflow in how we handle support requests. The good news is that we are starting to get back on track of having a 48 hour response time and we would like to start cleaning up anything old. With that being said, just wanted to check in with you to see if you have made any progress or changes to your project since support has last reached out.