0

私はアスタリスクに不慣れなので、この質問に私が単に見落としている明白な答えがある場合は、私を許してください。

私は個人広告とボイスメールサービスを組み合わせて、各ユーザーがこのユーザーの受信トレイに届くメッセージを録音することで他のユーザーが応答できる広告を送信できるようにしたいと考えています。私の当初の考えは、これを純粋にCALLERID(num)値に基づくことでしたが、これは少し信頼性が低いことがすぐにわかりました。匿名と言う場合もあれば、ゼロの束が表示される場合もあれば、実際の電話番号が表示される場合もあります。実際にランダムな数字が表示される場合もあります。応答後、ピックアップコンテキストで最初のサウンドファイルがトリガーされる前に、待機コールがあります。私はこれにアプローチするための最良の方法は何であるか疑問に思っていますか?ユーザーに電話番号を入力してもらいますか?次に、これに基づいてコードを生成します。このコードは、コールバック時にパスワードとして機能しますか?CALLERID(num)を使用してリピーターを検出しようとしますか、それともセキュリティの観点からお勧めできませんか?

できれば、コードをまったく使用しないようにしたいのですが、電話番号をスプーフィングして他の人の受信トレイに侵入するのは比較的簡単だと言われています。IPアドレスがホワイトリストにあるPSTN/SIPプロバイダーを介してのみ、直接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)
4

2 に答える 2

3

見過ごされがちなコマンドの 1 つに「認証」コマンドがあります。そのため、ユーザーに番号ベースの UID を割り当ててから PIN を割り当てるメカニズムを構築できます。名前が UID であるファイルに PIN をドロップし、電話をかけたら、UID、Authenticate(uid_file_name) を読み取り、Authenticate を介して正しい PIN を入力した場合は、アクセスできるようにします。

于 2012-10-11T07:07:30.990 に答える
0

個人広告とボイスメール サービスを組み合わせて、各ユーザーがこのユーザーの受信トレイに入るメッセージを録音することで、他のユーザーが応答できる広告を送信できるようにしたいと考えています。

Record()したがって、 、Playback()およびを使用できますVoicemail()

  • Record()広告を記録するには、
  • Playback()宣伝、
  • Voicemail()ユーザーがボイスメールを録音するため

より多くのアクセス制御が必要な場合は、PHP AGIを使用するか、AstDBを使用することをお勧めします。

はい、アクセス制御のために、アクセスコードのようなものを簡単にスプーフィングできます。Read を使用すると、DTMF 入力を変数として読み取ることができます。CallerID Number ベースのフィルターと組み合わせるとよいでしょう。

また、文字列に数字のみが含まれているかどうかを確認する関数があるかどうかも知りたいですか?

これにはREGEXを使用できます。マクロで:

; 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...")

Dialpan では、次のように macro-dblookup を呼び出すことができます。

exten => 012345678,1,Noop("...")
exten => 012345678,n,Macro(dblookup,${CALLERID(num)})
于 2012-10-10T20:31:07.350 に答える