Ciaran
05/07/2026, 8:21 AMAI Evy
05/07/2026, 8:21 AMAI Evy
05/07/2026, 8:22 AMcall_inbound wrapper with dynamic_variables inside is the expected format .
A few things to check:
1. Response Status Code
Your webhook must return a successful 2xx status code . If it doesn't, Retell will retry up to 3 times, and if all attempts fail, it will try to connect using the default inbound agent (if set) or disconnect the call .
2. All Values Must Be Strings
All values in dynamic_variables must be strings [(2) ]() . Your example shows "false" and "true" as strings, which is correct. Numbers, booleans, or other data types are not supported .
3. Check for Null Values
If any dynamic variable contains null, all variables may be ignored [(3) ]() . Make sure none of your values are null.
4. Verify JSON Format
The error "dynamic variables must be an object that's key value pairs of strings" indicates the JSON structure may not be valid [(4) ]() . Ensure your Ruby hash is being properly serialized to JSON.
Debugging Steps:
- Check your call history for the specific call ID and look for error messages in the disconnect reason [(1) ]()
- Verify the webhook is returning a 2xx status
- Test your JSON output with a validator to ensure it's properly formatted
- Check that no values are null or non-string types
If the webhook fails, you should see error_inbound_webhook as the disconnection reason in your call history [(3) ]() .AI Evy
05/07/2026, 8:22 AMAI Evy
05/07/2026, 8:22 AMCiaran
05/07/2026, 8:48 AMAI Evy
05/07/2026, 8:48 AMAI Evy
05/07/2026, 8:48 AMdynamic_variables must be strings [(1) ]() . Numbers, booleans, or other data types are not supported .
In Ruby on Rails, make sure you're converting any integers, booleans, or other types to strings before returning them in your webhook response. For example:
ruby
{
call_inbound: {
dynamic_variables: {
user_id: user_id.to_s, # Convert integer to string
is_active: is_active.to_s, # Convert boolean to string
name: name # Already a string
}
}
}
This ensures compatibility with Retell's inbound webhook requirements [(2) ]() .AI Evy
05/07/2026, 8:48 AMAI Evy
05/07/2026, 8:48 AMCiaran
05/07/2026, 9:09 AMAI Evy
05/07/2026, 9:09 AMAI Evy
05/07/2026, 9:10 AMboosted_keywords array to bias the transcription model toward recognizing this specific term [(1) ]() [(3) ]() .
json
{
"boosted_keywords": ["prescription"]
}
[(3) ]()
You can add up to 100 custom keywords [(1) ]() . This is particularly useful for domain-specific terms like medical terminology .
Additionally, since you mentioned your agent is set to "Optimized for speed", consider switching to Optimized for accuracy if transcription quality remains an issue . You can control this with the stt_mode setting [(3) ]() [(4) ]() :
json
{
"stt_mode": "accurate"
}
If background noise isn't a major factor, you might also try adjusting the denoising_mode setting to preserve more audio signal, which can improve accuracy for certain words [(1) ]() [(3) ]() [(4) ]() .AI Evy
05/07/2026, 9:10 AMAI Evy
05/07/2026, 9:10 AMCiaran
05/07/2026, 10:24 AMAI Evy
05/07/2026, 10:24 AMAI Evy
05/07/2026, 10:25 AMAI Evy
05/07/2026, 10:25 AMAI Evy
05/07/2026, 10:25 AM