hi Jim, if you want to match the "ActivationHelp" event and react to the earliest "User entered" event, provided that these events share the same caller ID, you could use the following rule:
type=PAIR desc=IVR caller $4 offered activation or statement inquiry ptype=RegExp action= write - $4 activation or statement inquiry offered pattern=^.*\[(20[234][0-9]-[0-9]{2}-[0-3][0-9])-([0-2][0-9]:[0-5][0-9]:[0-5][0-9]).*VERBOSE\[([0-9]{3,6})\]\[(C-[0-9a-f]{8})\].*Executing \[(.+)\@(ivr-welcome:[0-9]{1,3})\] (.+)\(\"([A-Z]{3,10})\/(.+)\", \"ActivationHelp,prompts.* ptype2=regexp rem=pattern2=^.*\[(20[234][0-9]-[0-9]{2}-[0-3][0-9])-([0-2][0-9]:[0-5][0-9]:[0-5][0-9]).*VERBOSE\[([0-9]{3,6})\]\[(C-[0-9a-f]{8})\].* app_read.c: User entered '?(nothing|[0-9]*)'?.* pattern2=^.*\[(20[234][0-9]-[0-9]{2}-[0-3][0-9])-([0-2][0-9]:[0-5][0-9]:[0-5][0-9]).*VERBOSE\[([0-9]{3,6})\]\[($4)\].* app_read.c: User entered '?(nothing|[0-9]*)'?.* desc2=Flexiti IVR - caller selection at activation or statement inquiry action2=assign %p flexity; \ assign %i -ivr ; \ write %p%i.csv $1,$2,$4,,,,,,,,,$5 ; closef %p%i.csv ; \ write - $4 ACTIVATION_STATEMENT %p %i $1 User entered: $5 window=10800 Let me also explain the changes I have made in the original version: 1) in the 'pattern' field, I have replaced "flexity-ivr-welcome" with "ivr-welcome", so that the example events would be properly matched. Also, I have set %p in the 'action2' field, since this variable was originally used without a value. 2) the 'desc' field of the rule has been set to the string 'IVR caller $4 offered activation or statement inquiry'. Since the value of the 'desc' field determines the ID of the event correlation operation, the presence of the $4 variable (corresponds to the caller ID) in the 'desc' field ensures that the rule will start a separate Pair operation for each distinct caller ID. That will prevent situations where there is only one operation that mistakenly reacts to "ActivationHelp" and "User entered" events for different caller ID's. 3) in the 'pattern2' field, "\[(C-[0-9a-f]{8})\]" has been replaced with "\[($4)\]". The use of $4 variable in 'pattern2' field allows for narrowing the regular expression match to the particular caller ID you are expecting to see. For instance, after seeing the event [2022-02-08-06:18:01:] VERBOSE[24858][C-00004037] pbx.c: Executing [8005551234@ivr-welcome:34] Read("SIP/CHANNELNAME-000138ac", "ActivationHelp,prompts/902&prompts/063,1,,,15,") in new stack the Pair operation is started which expects another event matching the following regular expression (note that $4 has been replaced with the caller ID from the previous event): ^.*\[(20[234][0-9]-[0-9]{2}-[0-3][0-9])-([0-2][0-9]:[0-5][0-9]:[0-5][0-9]).*VERBOSE\[([0-9]{3,6})\]\[(C\-00004037)\].* app_read.c: User entered '?(nothing|[0-9]*)'?.* Without this modification to 'pattern2', the regular expression would match the "User entered" event for *any* caller ID (that is probably not what you want). 4) I have also set the "window" parameter to 3 hours (10800 seconds) -- if for some reason you would never be seeing "User entered" event for the given caller ID, the Pair operation will not exist forever but will rather time out after 3 hours. 5) If there is a chance of not seeing the "User entered event", you can also utilize the following Single rule after the Pair rule for terminating the hanging Pair operation when the call is ended: type=Single ptype=RegExp pattern=^.*\[(20[234][0-9]-[0-9]{2}-[0-3][0-9])-([0-2][0-9]:[0-5][0-9]:[0-5][0-9]).*VERBOSE\[([0-9]{3,6})\]\[(C-[0-9a-f]{8})\].*pbx\.c: Spawn extension \(.*\) exited non-zero on.* desc=End of call for caller $4 action=reset -1 IVR caller $4 offered activation or statement inquiry Note that the first parameter of the 'reset' action (-1) indicates that an event correlation operation started by the previous rule (i.e., the Pair rule) has to be terminated. And the second parameter "IVR caller $4 offered activation or statement inquiry" provides the ID of this operation (in other words, whenever a call with some ID has ended, we will be terminating the Pair operation for this call ID). Also, if this Pair operation does not exist for the given call ID (maybe because the ActivationHelp event was never seen for this particular call), the 'reset' action is a no-op. However, if you are absolutely confident that the "User entered" event always occurs after "ActivationHelp", you don't need the above Single rule. Does this solution work for you? I hope I understood the problem description correctly, and if there are any other questions or something that needs improvement, feel free to ask. kind regards, risto Risto, > > Absolutely. > > The following pattern should catch it: > > ^.*\[(20[234][0-9]-[0-9]{2}-[0-3][0-9])-([0-2][0-9]:[0-5][0-9]:[0-5][0-9]).*VERBOSE\[([0-9]{3,6})\]\[(C-[0-9a-f]{8})\].* > pbx.c: Spawn extension \(.*\) exited non-zero on.* > > > Here's a few lines leading up to it (interesting because here is a Read() > operation where the caller does not make a choice but instead hangs up > while the system is waiting for a response): > > [2022-02-08-06:21:22:] VERBOSE[24858][C-00004037] pbx.c: Executing > [8005551234@ivr-MainMenu:45] Read("SIP/CHANNELNAME-000138ac", > "BalanceRepeatPressed,prompts/004h&prompts/004i&prompts/043,1,,,15") in new > stack > [2022-02-08-06:21:22:] VERBOSE[24858][C-00004037] app_read.c: Accepting a > maximum of 1 digits. > [2022-02-08-06:21:22:] VERBOSE[24858][C-00004037] file.c: > <SIP/CHANNELNAME-000138ac> Playing 'prompts/004h.slin' (language 'en') > [2022-02-08-06:21:25:] VERBOSE[24858][C-00004037] file.c: > <SIP/CHANNELNAME-000138ac> Playing 'prompts/004i.slin' (language 'en') > [2022-02-08-06:21:28:] VERBOSE[24858][C-00004037] file.c: > <SIP/CHANNELNAME-000138ac> Playing 'prompts/043.slin' (language 'en') > [2022-02-08-06:21:33:] VERBOSE[24858][C-00004037] app_read.c: User > disconnected > [2022-02-08-06:21:33:] VERBOSE[24858][C-00004037] pbx.c: Executing > [h@ivr-MainMenu:1] NoOp("SIP/CHANNELNAME-000138ac", "Hangup handler > GlobalCallCount=0 CHANNELNAME=0 ") in new stack > [2022-02-08-06:21:33:] VERBOSE[24858][C-00004037] pbx.c: Executing > [h@ivr-MainMenu:2] NoOp("SIP/CHANNELNAME-000138ac", "SurveyType is ") in > new stack > [2022-02-08-06:21:33:] VERBOSE[24858][C-00004037] pbx.c: Executing > [h@ivr-MainMenu:3] ExecIf("SIP/CHANNELNAME-000138ac", "1?Hangup()") in > new stack > *[2022-02-08-06:21:33:] VERBOSE[24858][C-00004037] pbx.c: Spawn extension > (ivr-MainMenu, h, 3) exited non-zero on 'SIP/CHANNELNAME-000138ac'* > > > > -- > Jim Van Meggelen > ClearlyCore Inc. > > > > +1-416-639-6001 (DID) > +1-877-253-2716 (Canada) > +1-866-644-7729 (USA) > +1-416-425-6111 x6001 > jim.vanmegge...@clearlycore.com > http://www.clearlycore.com > > > *Asterisk: The Definitive GuideFIFTH EDITION NOW AVAILABLE TO DOWNLOAD:* > https://cdn.oreillystatic.com/pdf/Asterisk_The_Definitive_Guide.pdf > >
_______________________________________________ Simple-evcorr-users mailing list Simple-evcorr-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users