DTMF Tool is not passing the Variable
# support
s
I’m facing a weird issue where the dynamic variable isn’t passing and isn’t being read by the DTMF tool. It works if I pass it as a number, but it’s hit or miss. I’m using a string type to instruct the prompt to add the pound (#) symbol required for Google Meet dial-in, but it still won’t work. It worked once, but I can’t figure out what caused it to work that time. I’ve submitted the working log, screenshots of the config, and the logs of the successful call that now doesn’t work.
Copy code
const callConfig = {
        "workflowId": "e7de2cd0-5ff8-4a32-8247-8e9e469a3802",
        "phoneNumberId": "983a06ff-4d81-41cb-9f3b-219af4322427",
        "customer": {
            "number": phoneNumber
        },
        "assistantOverrides": {
            "variableValues": {
                "PIN": pinWithHash
            }
        }
    };
Copy code
Making VAPI Call with DTMF as First Node
============================================
Calling: +14434025957
PIN: 304722564# 
Flow: Call connects → DTMF tool fires immediately → Dials 304722564#
Call ID: 35d7fa3a-c7cc-4c83-a77e-5bd8eb833858
dtmf_tool: f92b5cd0-2832-46bb-99fc-178b9318062c
Copy code
{
  "id": "f92b5cd0-2832-46bb-99fc-178b9318062c",
  "orgId": "b45b6bc1-9635-4529-9995-88e9c8133c8f",
  "function": {
    "name": "dtmf_tool",
    "description": "Please pass the PIN that is provided to you ",
    "parameters": {
      "properties": {
        "PIN": {
          "type": "string",
          "description": "CRITICAL: Use the exact PIN value from workflow variables. This PIN must be dialed immediately. Expected format: digits followed by #. Do not leave empty."
        }
      },
      "required": [
        "PIN"
      ],
      "type": "object"
    }
  },
  "type": "dtmf"
}
Working state:
Copy code
{
  "role": "tool_calls",
  "toolCalls": [
    {
      "id": "dcee1d97",
      "type": "function",
      "function": {
        "name": "dtmf_tool",
        "arguments": "{\"PIN\": \"623444858#\"}"
      }
    }
  ],
}
https://cdn.discordapp.com/attachments/1397674350391333025/1397674350731329596/Screenshot_2025-07-24_at_1.04.19_AM.jpg?ex=6882952c&is=688143ac&hm=19e736c6a09c458d682334305dbc80107687627c3cdfdaf37b07f628abeadec3& https://cdn.discordapp.com/attachments/1397674350391333025/1397674351033323600/Screenshot_2025-07-24_at_1.09.46_AM.jpg?ex=6882952c&is=688143ac&hm=9aafa3360ead36f7ce25540afa27e4d331a0c8a3bbebd663d52df198b20187f8& https://cdn.discordapp.com/attachments/1397674350391333025/1397674351372796020/Screenshot_2025-07-24_at_1.10.35_AM.jpg?ex=6882952c&is=688143ac&hm=68c576529760e6509f76f445793c78d23abd2d45f078474640b042a6c537bca1&
c
Hey! To help track down this issue, could you share: \- The call ID \- When exactly this happened (the timestamp) \- What response you expected to get \- What response you actually got instead This would really help us figure out what went wrong!
s
- Call id: 35d7fa3a-c7cc-4c83-a77e-5bd8eb833858 -Precise time: 01:06:32:712 | 7/24/2025 | - Precise time of tool call:
Copy code
{
  "role": "tool_calls",
  "time": 1753301192712,
  "message": "",
  "toolCalls": [
    {
      "id": "4081e84a",
      "type": "function",
      "function": {
        "name": "dtmf_tool",
        "arguments": "{\"PIN\": \"\"}"
      }
    }
  ],
  "secondsFromStart": 1.103
}
- Expected the PIN to be passed from the call which was:
Copy code
phoneNumber: "+14434025957"
pinWithHash: "304722564#"
{
        "workflowId": "e7de2cd0-5ff8-4a32-8247-8e9e469a3802",
        "phoneNumberId": "983a06ff-4d81-41cb-9f3b-219af4322427",
        "customer": {
            "number": phoneNumber
        },
        "assistantOverrides": {
            "variableValues": {
                "PIN": pinWithHash
            }
        }
- Expected response:
Copy code
"toolCalls": [
    {
      "id": "4081e84a",
      "type": "function",
      "function": {
        "name": "dtmf_tool",
        "arguments": "{\"PIN\": \"304722564#\"}
      }
    }
- The response I got:
Copy code
"toolCalls": [
    {
      "id": "4081e84a",
      "type": "function",
      "function": {
        "name": "dtmf_tool",
        "arguments": "{\"PIN\": \"\"}"
      }
    }
c
Hey Sher, thanks for sharing your details. Our team will look into it and get back to you soon with an update.
Hey, You are not supposed to define parameters for the DTMF tool. You are only supposed to include the tool type with the function name of your choice. Passing parameters the DTMF tones to your telephony will be taken care by VAPI and the LLM. So please remove them and try again.
s
But how do I pass my dtmf validation pin to dtmf_tool in that case? My current work around is that im passing the pin in the tool description and for every workflow run, im manually calling a curl patch request that updates the dtmf_tool description, which kind of works but is a backy solution Description: please enter the dtmf pin: {Pin} output: please enter the dtmf pin: 147284712# and it updates the description for every automated call
c
Hey Sher, let me check with our team and get back to you with an update soon.
2 Views