Need some design help, ideas welcome

Status
Not open for further replies.

ZCSFT

Bronze Partner
Advanced Certified
Joined
Jan 18, 2022
Messages
22
Reaction score
1
I have a design I am trying to build. I need to set up an outbound dialer. So I came to the community for help. I am struggling with this.

Goals
- Dialer needs to be triggered by someone calling the phone system
- Dial the digits for the app
- That app asks for the phone number that is needing to be call,
- Then it calls that number
- When the person picks up it plays a prerecorded message, notifying the user of the status of a request
- Then it hangs up
 
I think this may require two Call Flow Designer (CFD) applications. The first CFD will ask for the number to dial, and then place a MakeCall between the 2nd CFD and the outside party. The 2nd CFD will likely perform a database lookup to get the status of the request, then use text-to-speech (or use one of several pre-recorded messages) to play the status.

You might be able to simplify this some provided you don't have a huge number of "statuses". You could, for example, have the first CFD look up the status and then perform a make call between the outside party and one of several IVRs that have different prerecorded status prompts assigned. Then only one CFD would be required.

If I was going to build this solution I would create a web page that employs our REST API to place the call. The web page could perform the following functions: (1) display a list of numbers to dial (or verify the number pasted belongs to the correct contact by displaying the contact name), (2) perform the status lookup, and (3) perform our API method "MakeCallPlayFile" to call the number, play the message, and hang up. But we could do the same thing with a CFD application.

The advantage of the last approach is visual validation, no CFDs, and no status IVRs, and a lot more flexibility.
 
I think this may require two Call Flow Designer (CFD) applications. The first CFD will ask for the number to dial, and then place a MakeCall between the 2nd CFD and the outside party. The 2nd CFD will likely perform a database lookup to get the status of the request, then use text-to-speech (or use one of several pre-recorded messages) to play the status.

You might be able to simplify this some provided you don't have a huge number of "statuses". You could, for example, have the first CFD look up the status and then perform a make call between the outside party and one of several IVRs that have different prerecorded status prompts assigned. Then only one CFD would be required.

If I was going to build this solution I would create a web page that employs our REST API to place the call. The web page could perform the following functions: (1) display a list of numbers to dial (or verify the number pasted belongs to the correct contact by displaying the contact name), (2) perform the status lookup, and (3) perform our API method "MakeCallPlayFile" to call the number, play the message, and hang up. But we could do the same thing with a CFD application.

The advantage of the last approach is visual validation, no CFDs, and no status IVRs, and a lot more flexibility.
Let me give that a try and I will let you know.

Thanks!
 
I think this may require two Call Flow Designer (CFD) applications. The first CFD will ask for the number to dial, and then place a MakeCall between the 2nd CFD and the outside party. The 2nd CFD will likely perform a database lookup to get the status of the request, then use text-to-speech (or use one of several pre-recorded messages) to play the status.

You might be able to simplify this some provided you don't have a huge number of "statuses". You could, for example, have the first CFD look up the status and then perform a make call between the outside party and one of several IVRs that have different prerecorded status prompts assigned. Then only one CFD would be required.

If I was going to build this solution I would create a web page that employs our REST API to place the call. The web page could perform the following functions: (1) display a list of numbers to dial (or verify the number pasted belongs to the correct contact by displaying the contact name), (2) perform the status lookup, and (3) perform our API method "MakeCallPlayFile" to call the number, play the message, and hang up. But we could do the same thing with a CFD application.

The advantage of the last approach is visual validation, no CFDs, and no status IVRs, and a lot more flexibility.
Here is what I built, but the file isn't writing
1686374721411.png

1686374738874.png
 
The folder CFD probably doesn't exists in the system.

Use "session.audioFolder" instead (it's a path to the audio folder of the CFD, that folder exists so you can save the file there.)

Something like CONCATENATE(session.audioFolder, "/DialedNumberList.txt")
 
@ConceptsWeb
@VoIPTools

I have gotten everything but the outbound call to work, please see the error below, would love some recommendations.

I have replaced the number I am using for testing receiving a call from with <Number>



2023/06/11 23:19:55.813|20616|0009|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.SequenceContainerComponent 'UserInput1_Conditional_ValidInput' - Start executing component 'MakeCall1'
2023/06/11 23:19:55.813|20616|0009|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.MakeCallComponent 'MakeCall1' - Making call from origin='804' to destination='<Number>'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - OnMakeCallResult for component 'UserInput1_Conditional' - Result: 'False'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.ConditionalComponent 'UserInput1_Conditional' - OnMakeCallResult for branch 'UserInput1_Conditional_ValidInput' - Result: 'False'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.SequenceContainerComponent 'UserInput1_Conditional_ValidInput' - OnMakeCallResult for component 'MakeCall1' - Result: 'False'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.MakeCallComponent 'MakeCall1' - Make call failed from origin='804' to destination='<Number>'
2023/06/11 23:20:25.818|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - Start executing component 'mainAutoAddedFinalDisconnectCall'
2023/06/11 23:20:25.818|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.DisconnectCallComponent 'mainAutoAddedFinalDisconnectCall' - No more files to play, disconnecting call...
2023/06/11 23:20:25.857|20616|0007|Inf|ScriptRunner.ScriptRunner-Removed CallID mapping on terminated connection for SIP dialog quzkLs6dqPkq14zjKp4EcQ..0dc12ad3e
2023/06/11 23:20:25.857|20616|0007|Inf|ScriptRunner.ScriptRunner-CallStorageSize=1(0)
2023/06/11 23:20:25.859|20616|0007|Inf|ScriptRunner.ScriptRunner-FireTerminate and remove mapping for existing SIP dialogue quzkLs6dqPkq14zjKp4EcQ..0dc12ad3e
2023/06/11 23:20:25.859|20616|0007|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: Main - Switching executing mode from Active to Wrapup
2023/06/11 23:20:25.859|20616|0007|Inf|ScriptRunner.ScriptRunner-CallStorageSize=0(0)
2023/06/11 23:20:25.863|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - OnCallTerminated for component 'mainAutoAddedFinalDisconnectCall'
2023/06/11 23:20:25.863|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.DisconnectCallComponent 'mainAutoAddedFinalDisconnectCall' - Processing OnCallTerminated
2023/06/11 23:20:25.863|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - Disconnect handler flow is empty...
2023/06/11 23:20:30.869|20616|0002|Trc|ScriptRunner.ScriptRunner-Active script instances: 0
 
@ConceptsWeb
@VoIPTools

I have gotten everything but the outbound call to work, please see the error below, would love some recommendations.

I have replaced the number I am using for testing receiving a call from with <Number>



2023/06/11 23:19:55.813|20616|0009|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.SequenceContainerComponent 'UserInput1_Conditional_ValidInput' - Start executing component 'MakeCall1'
2023/06/11 23:19:55.813|20616|0009|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.MakeCallComponent 'MakeCall1' - Making call from origin='804' to destination='<Number>'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - OnMakeCallResult for component 'UserInput1_Conditional' - Result: 'False'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.ConditionalComponent 'UserInput1_Conditional' - OnMakeCallResult for branch 'UserInput1_Conditional_ValidInput' - Result: 'False'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.SequenceContainerComponent 'UserInput1_Conditional_ValidInput' - OnMakeCallResult for component 'MakeCall1' - Result: 'False'
2023/06/11 23:20:25.817|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.MakeCallComponent 'MakeCall1' - Make call failed from origin='804' to destination='<Number>'
2023/06/11 23:20:25.818|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - Start executing component 'mainAutoAddedFinalDisconnectCall'
2023/06/11 23:20:25.818|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.DisconnectCallComponent 'mainAutoAddedFinalDisconnectCall' - No more files to play, disconnecting call...
2023/06/11 23:20:25.857|20616|0007|Inf|ScriptRunner.ScriptRunner-Removed CallID mapping on terminated connection for SIP dialog quzkLs6dqPkq14zjKp4EcQ..0dc12ad3e
2023/06/11 23:20:25.857|20616|0007|Inf|ScriptRunner.ScriptRunner-CallStorageSize=1(0)
2023/06/11 23:20:25.859|20616|0007|Inf|ScriptRunner.ScriptRunner-FireTerminate and remove mapping for existing SIP dialogue quzkLs6dqPkq14zjKp4EcQ..0dc12ad3e
2023/06/11 23:20:25.859|20616|0007|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: Main - Switching executing mode from Active to Wrapup
2023/06/11 23:20:25.859|20616|0007|Inf|ScriptRunner.ScriptRunner-CallStorageSize=0(0)
2023/06/11 23:20:25.863|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - OnCallTerminated for component 'mainAutoAddedFinalDisconnectCall'
2023/06/11 23:20:25.863|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - CallFlow.CFD.DisconnectCallComponent 'mainAutoAddedFinalDisconnectCall' - Processing OnCallTerminated
2023/06/11 23:20:25.863|20616|0008|Trc|CallPair._900_14.Main.41.[C:22.2]-From script: CallFlow___Project_Ticket_475601___On_Call_to_SMS - CallID 00000188AE0BBE88_22 - Callflow - Disconnect handler flow is empty...
2023/06/11 23:20:30.869|20616|0002|Trc|ScriptRunner.ScriptRunner-Active script instances: 0
From the logs, the CFD app is requesting the call to 3CX. If this call is not being made, then most probably there is no outbound rule for this call. You can check this in the 3CX Activity Logs.
 
Keep in mind that "MakeCall" is not an extension, and therefore cannot be in a group. So, if you have restrictions on your outbound rules that require the caller to be in a list of extensions, or a member of a group, the CFD will not find a working outbound rule. Also, consider that MakeCall may not be sending an outbound rule, so make sure the rule in use has a manually assigned Caller ID number.
 
  • Like
Reactions: edossantos
Status
Not open for further replies.

Forum statistics

Threads
111,973
Messages
590,078
Members
164,896
Latest member
sameage