我只想过滤所有包含“事件:挂断”和“频道:PJSIP / ANCONA_UFFICIO”的事件,如下所示:
Event: Hangup
Privilege: call,all
Channel: PJSIP/ANCONA_UFFICIO-8f8f88
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: xxxxxxx
CallerIDName: xxxxxxx
ConnectedLineNum: 235
ConnectedLineName: WASSILIS IT
Language: it
AccountCode:
Context: ext-group
Exten: h
Priority: 1
Uniqueid: 1700241723.5022
Linkedid: 1700241723.5022
Cause: 16
Cause-txt: Normal Clearing
所以我使用这个正则表达式:
Action: Login
Username: user
Secret: mypassword
Action: Filter
ActionID: 998
Operation: Add
Filter: [\s\S]*Event: Hangup\b[\s\S]*Channel: PJSIP\/ANCONA_UFFICIO[\s\S]*
但它不起作用,我的 ami 控制台没有显示任何挂断事件,奇怪的是,如果我像这样分开这两条规则,它就会起作用
Action: Filter
ActionID: 998
Operation: Add
Filter: [\s\S]*Event: Hangup\b[\s\S]*
Action: Filter
ActionID: 998
Operation: Add
Filter: [\s\S]*Channel: PJSIP\/ANCONA_UFFICIO[\s\S]*
但这种方式就像一个或逻辑条件,但我需要和和。我尝试了上面的正则表达式https://regex101.com/r/Bqn3Ce/1并且它按预期工作,没有激活任何全局标志。所以 AMI 中的正则表达式的工作方式一定存在问题
答案1
好的,解决方案是这样的,AMI 正则表达式可能遵循一个较旧的模式,不接受 [\s\S],并且点也在考虑换行符。无论如何,我尝试了 100 万种组合,我发现解决方案是这样的
Filter: Event: Hangup\b.*Channel: PJSIP\/ANCONA_UFFICIO