Forums Read-only archive

Regular expression with "\d" operator.

6 posts · Brekeke SIP Server Forum

tuctran Original post
1. Brekeke Product Name and Version: Brekeke SIP SEVER, 3.4.x.x release

2. Java version: 1.8.0_45

3. OS type and the version: 8.1

4. UA (phone), gateway or other hardware/software involved: does not master

5. Your problem:
I create below rule to check a NOTIFY message then inform to user for a number of new voicemail messages come to his mailbox. A number of new voiemail message is filtered out from NOTIFY message by this expression "expression $body("Voice-Message: (\d+)/") = (.+)". But this expression always returns a null value instead of a number (4) as I expect from this body content "Voice-Message: 4/0 (0/0)".
Could any one tell me if any thing wrong with the expression. Please see below for detail of the problem.

Thanks,
======================================================
Create below dial plan rule:
Rule name: "PN3_NotifyVoiceMes"
[Matching Patterns]
$request = ^NOTIFY
$getSIPuser(To) = (.+)
$pn.user("%1") = true
Content-Type = application/simple-message-summary
$body("Messages-Waiting: (.+)") = yes
$body("Voice-Message: (\d+)/") = (.+)

[Deploy Patterns]
&pn.notify.user = %1
&pn.notify.message = You got new voice message
$pn.notify.counter = %2
$continue = true


*Below is actual NOTIFY message I got.
============
NOTIFY Message:
NOTIFY sip:1003@127.0.0.1 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5054;rport=5054;branch=z9hG4bKc5b4f5dbe82b
From: sip:1003@127.0.0.1;tag=b26505fa7p
To: <sip:1003@127.0.0.1>
Max-Forwards: 20
Contact: <sip:127.0.0.1:5054>
Call-ID: 9ed9392b-463ebb8d-7da3c79-e8e3b40b
User-Agent: Brekeke PBX
CSeq: 1 NOTIFY
Event: message-summary
Content-Type: application/simple-message-summary
Content-Length: 85

Messages-Waiting: yes
Message-Account: sip:8@192.168.0.3
Voice-Message: 4/0 (0/0)


=> With the input "Voice-Message: 4/0 (0/0)". The expression "$body("Voice-Message: (\d+)/") = (.+)" should return "4" instead of "null"

*Detail log:
============================================
Rule [PN3_NotifyVoiceMes]

Pattern: $request = ^NOTIFY
Input: $request = NOTIFY sip:1005@127.0.0.1 SIP/2.0
Result: true

Pattern: $getSIPuser(To) = (.+)
Input: $getSIPuser(To) = 1005
%1 <= 1005
Result: true

Pattern: $pn.user("%1") = true
Input: $pn.user("1005") = true
Result: true

Pattern: Content-Type = application/simple-message-summary
Input: Content-Type = application/simple-message-summary
Result: true

Pattern: $body("Messages-Waiting: (.+)") = yes
Input: $body("Messages-Waiting: (.+)") = yes
Result: true

Pattern: $body("Content-Length: (\d)") = (.+)
Input: $body("Content-Length: (\d)") = null
Result: false
============================================
Harold
Which Voicemail system are you using?
Is it Brekeke PBX? or 3rd product?

If you are talking about Brekeke PBX, let you post the question at the PBX Forum. http://www.brekeke-sip.com/bbs/viewforum.php?f=33

if you are using 3rd product, let me know the product name.
Harold
Have you applied the DialPlan rule?

According to the log, you used $body("Content-Length: (\d)") instead of $body("Voice-Message: (\d+)/").
tuctran
Hi Harold,
Yes, I have.
Sorry I posted a wrong log file. Please see below for a proper one.

...
NOTIFY sip:1004@127.0.0.1 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5054;rport;branch=z9hG4bKd011d912b72
From: sip:1004@127.0.0.1;tag=be4e6e51bp
To: <sip:1004@127.0.0.1>
Max-Forwards: 20
Contact: <sip:127.0.0.1:5054>
Call-ID: 5d6fbe9f-9300df69-1cef1255-35a5d7e7
User-Agent: Brekeke PBX
CSeq: 1 NOTIFY
Event: message-summary
Content-Type: application/simple-message-summary
Content-Length: 86

Messages-Waiting: yes
Message-Account: sip:8@192.168.0.3
Voice-Message: 28/0 (0/0)

==============================================
============================================
Rule [PN3_NotifyVoiceMes]
Pattern: $request = ^NOTIFY
Input: $request = NOTIFY sip:1004@127.0.0.1 SIP/2.0
Result: true

Pattern: $getSIPuser(To) = (.+)
Input: $getSIPuser(To) = 1004
%1 <= 1004
Result: true

Pattern: $pn.user("%1") = true
Input: $pn.user("1004") = true
Result: true

Pattern: Content-Type = application/simple-message-summary
Input: Content-Type = application/simple-message-summary
Result: true

Pattern: $body("Messages-Waiting: (.+)") = yes
Input: $body("Messages-Waiting: (.+)") = yes
Result: true

Pattern: $body("Voice-Message: (\d+)/") = (.+)
Input: $body("Voice-Message: (\d+)/") = null

Result: false

Thanks,
Harold
Try \\d
Since it is within a "", you need to escape \ with one more \.

$body("Voice-Message: (\\d+)/") = (.+)
tuctran
Thanks Harold,

It works now.