Help Needed: Merge being used to wait until second webhook completes but it's dying

Describe the problem/error/question

I kick off the execution with a webhook that transforms data and sends an API call via an HTTP request to trigger a phone call. After the phone call is complete, the notes of the call are sent back to my workflow via a second webhook trigger. I then take the data from the first webhook (Name, email, phone) and the data from the second webhook trigger (The call Notes which comes in about 5 minutes or so after the call is triggered) and need to pass the complete data to another API call to update the data in my CRM. the issue is the execution is completing on the 1st source of the merge node, and the trigger of the post call data is creating a second execution that ends on the 2nd source of the merge node. So I end up with 2 executions that are individualized and never actually see the data merge together so it’s never sent to my CRM. Wait a minute. I think I know what’s going on. there’s 2 triggers, so 2 executions are happening. I need the webhook to receive data to continue the workflow, but to remove the “trigger” functionality of the second webhook.

What is the error message (if any)?

No

Please share your workflow

Share the output returned by the last node

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

That can not work as each Trigger-Node starts a new workflow execution. Meaning the data of each Webhook call ends up in a totally different execution.

You can make that work with a Wait-Node.

The Webhook-Trigger node would then start the execution and the Wait-Node (configured to “Resume: On Webhook Call”) would then wait till the appropriate URL gets called until it continues. Like that the data of both calls would end up in the same execution.

But how will my application know the webhook to send to if the webhook from the wait node is generated at runtime? I need a static webhook to define in my system after the phone call is made and the data is then sent into n8n. I’ll need to use the exact match of the phone / email address from the 1st incoming webhook and add the post call data from the second webhook. I don’t see how that will be possible if the webhook isn’t available to setup until run execution.

Wouldn’t it just be easier to remove the “trigger” status of that node? I can do that in make.com for this very reason. Never really found another way to make that happen in Zapier except to setup two seperate workflows which also means that every call that’s made costs me at least 2 executions.

Sorry, but I can sadly not see a way how it would be possible without a different URL (or property if we would have that implemented). Or “remove the trigger status”.

Let’s assume it would work as you think it should. Then you call 1 workflow with the first webhook, then you start another one and another one. So now 3 are “waiting”. Now you call the second Webhook URL. What is supposed to happen? You need a way to control that the right Execution gets called, else you end up with data that does not belong together. Some kind of routing has to happen to know to which one of the 3 it should be sent, and in n8n that is done via that URL.

To answer your question about how it would work. You are right that n8n creates this URL at runtime, but you can also access it via the variable $execution.resumeUrl. This means you would have to tell the system to call that specific URL when the second set of data is available. Looking at your workflow that would probably be sent to the System in the HTTP Request node.

If your system does not support custom callback URLs then it would be something you would have to build yourself. Meaning you would then save at the end of the workflow run a pair of custom-ID → Callback URL. Then you can have a second workflow that would read that custom-ID, find the Callback URL and call it with that data. But in this case you could also almost just save the data of the first call somewhere (like a database) and then collect it again when you receive the second call.

But in the end, no matter what, it would be 2 executions. And to be honest, it is maybe one “task” for you but the engine executes 2 times, so is also not that wrong. When you have a phone call discussing one topic, hang up, and call that person again to continue the conversation, you would also be charged 2 calls.

So, in our CRM we tag a contact record to call a person with AI. This is to make a phone call, so I’m kind of getting lost when you say call this and call that and call a workflow and 3 webhooks are in waiting. These are actually consecutive. The workflow starts when the webhook trigger receives a request to make a phone call. The information to make that call and the contact record information are sent to the webhook. There is then a code node to randomly select one of two voice agents, a male voice or a female voice. One the workflow has the information it sends an HTTP post to the dialing system. The dialing system then spins up the appropriate AI agent and runs the script. After the conversation is done the phone calling system sends the results of the call to the second webhook. The information it’s sending though has the call information and it knows nothing but perhaps the phone number (which it has likely modified since it’s a new data output.) So the call results are merged with the contact record that came in the first webhook (The Trigger Node) and we use that data to update the CRM via the final HTTP post so the user knows what happened on the call and they can filter their leads by the result.

The reason I need this all in one workflow is the import of the contact record in the CRM has to have an exact match on the phone number or email address to know which record to update. When the phone system sends the post call data back to the workflow with the results of the call the data it sends is modified by AI and may be unique. For instance if I send the phone number and the email address to the phone system the information I get back might not contact the phone number or the email address if that information isn’t included on the phone call. I’m basically getting back a transcript. It does always include the phone number it called, but it might be in a different format since it’s generated by the system and goes through a transform. This means it won’t be an exact match.

So what we’re doing here is really nothing short of a get request but since there’s human interaction it’s done as a post and when the phone call is over there is a receive that’s a post from the phone system back to the workflow. So it’s not two seperate calls. It’s a delayed Get. There should be a mechanism to allow webhooks later in the workflow as 9 times out of 10 they’re step one, but 1 time out of 10 they’re just a function of the overall workflow. I can’t account for the variables of multiple third party systems. This is why make doesn’t require you to have the webhook as the trigger.

Looking for ideas, and thanks for the all the help. This is really the only snag I’ve run into.

…and I’ve devoted zero brain cycles to the wait on webhook request as I can’t even fathom how on earth to use a dynamic webhook with a third party system where the webhook is generated uniquely at runtime. That’s just… I mean It’s about as confusing as hell and I don’t even know where to start with that. I might as well learn binary. Now, if the wait node would allow me a static url that could be predefined so it waits until that webhook were posted to then yes, that’s exactly what I need. I don’t own the infrastructure of the phone system so no clue at all how we would make a dynamic url work there. I mean. I looked at it and thought, “what the hell is even that?!” LOL

I’m stuck right now and I need this completed. I appreciate all your help, Jan.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.