Sip 以星号显示的来电显示,用于用户识别

Sip 以星号显示的来电显示,用于用户识别,sip,voip,asterisk,Sip,Voip,Asterisk,我不熟悉星号,所以请原谅我,如果这个问题有一个明显的答案,我只是忽略了 我将个人广告和语音邮件服务混合在一起,我希望每个用户都能够提交一个广告,其他人可以通过录制进入此用户收件箱的消息来回复。我最初的想法是完全基于CALLERID(num)值,但很快发现这有点不可靠。有时,当我打电话进来时,它会说匿名,有时它会给我一堆零,有时它会给我显示我的真实电话号码,一旦它真的给了我随机数字。在接听电话后,但在我的第一个声音文件被触发之前,在我的拾取上下文中,我确实有一个等待呼叫。我想知道最好的方法是什么?

我不熟悉星号,所以请原谅我,如果这个问题有一个明显的答案,我只是忽略了

我将个人广告和语音邮件服务混合在一起,我希望每个用户都能够提交一个广告,其他人可以通过录制进入此用户收件箱的消息来回复。我最初的想法是完全基于CALLERID(num)值,但很快发现这有点不可靠。有时,当我打电话进来时,它会说匿名,有时它会给我一堆零,有时它会给我显示我的真实电话号码,一旦它真的给了我随机数字。在接听电话后,但在我的第一个声音文件被触发之前,在我的拾取上下文中,我确实有一个等待呼叫。我想知道最好的方法是什么?我是否要求用户输入他们的电话号码,然后在此基础上生成一个代码,在您回电话时用作密码?我是否尝试使用CALLERID(num)来检测返回的用户,或者从安全角度来看这是不可取的

最好是,我不想完全使用密码,但我被告知,伪造电话号码入侵他人收件箱相对容易。请注意,我不打算允许直接SIP呼叫,只允许通过IP地址在白名单上的PSTN/SIP提供商进行。任何关于如何实现这一点的建议都将不胜感激。基本上,我想让我的用户尽可能地轻松,但要保持高安全性

我还想知道是否有一个函数来检查字符串是否只包含数字?如果我决定以这种方式使用CALLERID(num),那么在我在MySql数据库中查找电话号码之前,这将作为一个健全性检查非常有用

我的基本计划如下:

[verify]

exten => blastbay,1,Answer(1000)

; A few simple sanity checks, but not very good ones.
same => n,GotoIf($["${CALLERID(num)}" != "0000000000"]?nextcheck)

; If we have only zero's, try waiting another second.
same => n,Wait(1)
same => n,GotoIf($["${CALLERID(num)}" = "0000000000"]?rejected)

same => n(nextcheck),GotoIf($["${CALLERID(num)}" = ""]?rejected)
same => n,GotoIf($["${CALLERID(num)}" = "anonymous"]?rejected)
same => n,GotoIf($["${CALLERID(num)}" = "unavailable"]?rejected)
same => n,GotoIf($["${CALLERID(num)}" = "protected"]?rejected)
same => n,GotoIf($[${LEN(${CALLERID(num)})}<5]?rejected)
same => n,Goto(welcome,welcomespeech,1)

same => n(rejected),Playback(/usr/phone/rejected)
same => n,Hangup()

[welcome]
include => mainmenu
exten => welcomespeech,1,BackGround(/usr/phone/welcome)
same => n,Goto(mainmenu,menuspeech,1)

[mainmenu]
exten => menuspeech,1,BackGround(/usr/phone/mainmenu)
same => n,WaitExten(5)

exten => 1,1,Goto(information,infospeech,1)
exten => i,1,Goto(menuspeech,1)
exten => t,1,Goto(menuspeech,1)

[information]
exten => infospeech,1,BackGround(/usr/phone/information)
same => n,Goto(mainmenu,menuspeech,1)
exten => #,1,Goto(mainmenu,menuspeech,1)
exten => i,1,Goto(mainmenu,menuspeech,1)
[验证]
exten=>blastbay,1,回答(1000)
; 一些简单的健康检查,但不是很好的检查。
相同=>n,GotoIf($[“${CALLERID(num)}”!=“0000000000”]?下一步)
; 如果我们只有零,试着再等一秒钟。
相同=>n,等待(1)
相同=>n,GotoIf($[“${CALLERID(num)}”=“0000000000”]?已拒绝)
相同=>n(nextcheck),GotoIf($[“${CALLERID(num)}”=”“]”已拒绝)
相同=>n,GotoIf($[“${CALLERID(num)}”=“匿名”]?拒绝)
相同=>n,GotoIf($[“${CALLERID(num)}”=“不可用”]?已拒绝)
相同=>n,GotoIf($[“${CALLERID(num)}”=“protected”]?拒绝)
same=>n,GotoIf($[${LEN(${CALLERID(num)})n,Goto(欢迎,欢迎,1)
相同=>n(已拒绝),播放(/usr/phone/rejected)
相同=>n,挂起()
[欢迎]
include=>main菜单
exten=>welcomespeech,1,背景(/usr/phone/welcome)
相同=>n,转到(主菜单,菜单搜索,1)
[主菜单]
extn=>menuspeech,1,后台(/usr/phone/main菜单)
相同=>n,WaitExten(5)
extn=>1,1,Goto(信息,信息语音,1)
exten=>i,1,Goto(menuspeech,1)
exten=>t,1,Goto(menuspeech,1)
[资料]
exten=>infospeech,1,背景(/usr/phone/information)
相同=>n,转到(主菜单,菜单搜索,1)
扩展=>#,1,转到(主菜单,菜单搜索,1)
扩展=>i,1,转到(主菜单,菜单搜索,1)
我将个人广告和语音邮件服务混为一谈,我希望每个用户都能提交一则广告,其他人可以通过录制进入此用户收件箱的信息来回复

因此,您可以使用
Record()
Playback()
Voicemail()

  • Record()
    要录制广告
  • Playback()
    广告
  • Voicemail()
    供用户录制语音邮件
如果您想要更多的访问控制,我建议使用或 使用

是的,伪造一个号码很容易,为了访问控制,比如访问代码, 将DTMF输入作为变量读取,可能结合基于CallerID数字的过滤器,听起来是个好主意

我还想知道是否有一个函数来检查字符串是否只包含数字

您可以在宏中使用:

; Arg1: CALLERID(num)
[macro-dblookup]
exten => s,1,Set(isnumber=${REGEX("[0-9]" ${ARG1})})
exten => s,2,GotoIf($["${isnumber}" = "1"]?4)
exten => s,3,MacroExit()
exten => s,4,NoOp("Do something with number here")
exten => s,5,NoOp("...Db Lookup...")
在拨号盘中,可以按如下方式调用宏dblookup:

exten => 012345678,1,Noop("...")
exten => 012345678,n,Macro(dblookup,${CALLERID(num)})
我将个人广告和语音邮件服务混合在一起,我希望每个用户都能够提交一个广告,其他人可以通过录制进入此用户收件箱的消息来回复

因此,您可以使用
Record()
Playback()
Voicemail()

  • Record()
    要录制广告
  • Playback()
    广告
  • Voicemail()
    供用户录制语音邮件
如果您想要更多的访问控制,我建议使用或 使用

是的,伪造一个号码很容易,为了访问控制,比如访问代码, 将DTMF输入作为变量读取,可能结合基于CallerID数字的过滤器,听起来是个好主意

我还想知道是否有一个函数来检查字符串是否只包含数字

您可以在宏中使用:

; Arg1: CALLERID(num)
[macro-dblookup]
exten => s,1,Set(isnumber=${REGEX("[0-9]" ${ARG1})})
exten => s,2,GotoIf($["${isnumber}" = "1"]?4)
exten => s,3,MacroExit()
exten => s,4,NoOp("Do something with number here")
exten => s,5,NoOp("...Db Lookup...")
在拨号盘中,可以按如下方式调用宏dblookup:

exten => 012345678,1,Noop("...")
exten => 012345678,n,Macro(dblookup,${CALLERID(num)})

一个经常被忽略的命令是“Authenticate”命令……因此您可以构建一种机制,为用户分配一个基于数字的UID,然后分配一个PIN。将PIN放入一个文件中,该文件的名称为UID,然后当用户呼叫时,读取其UID,进行身份验证(UID\U file\U name),如果他们通过身份验证输入了正确的PIN,让他们有权访问。

一个经常被忽略的命令是“Authenticate”命令……因此,您可以建立一种机制,为用户分配一个基于数字的UID,然后再分配一个PIN。将PIN放入一个名为UID的文件中,然后当他们调用时,读取他们的UID,进行身份验证(uid\u file\u name),如果他们通过身份验证输入了正确的PIN码,请允许他们访问。

您可以显示您在拨号计划中尝试了什么吗?您可以显示您在拨号计划中尝试了什么吗?非常感谢您提供的代码示例和提示!您对这方面的安全性有什么建议吗?您可以查找Acc