Upgrade 3CX to v18 and get it hosted free!

Authenticate Users by Caller ID or PIN – password

Author image

Authenticate Users by caller ID or PIN – password

A user can access the system if

  • is calling from a registered phone number and then his caller id will authenticate the user to the system
  • is calling from a different phone number and will be prompted for a pin/password

This is a simple script that will authenticate a user based on caller ID. This script will run on any Asterisk version and does not request MySQL or any other application.
I developed and used this script with success in a postpaid application.

Two entries must exist in the Asterisk database for each user:
database put pass ACCOUNTCODE CALLERID
database put blacklist CALLERID ACCOUNTCODE


>>>save the following text as card1.txt in your /etc/asterisk folder
===============================================
; include next two lines in extensions.conf
; # include <card1.txt>
; goto (card-auth,1)
; 
~np~;How to call this routine: Goto(card-auth,s,1)~/np~
;
;database entrys for accountcode=pin=1234567890 / account number=callerid=202000111
~np~;Example:database put pass 1234567890 2020001111~/np~
;
;database entrys for blacklist=identify by caller id - one line for each callerid /  account number
~np~;Example:database put blacklist 2020001111 1234567890~/np~
;
; (C) 2005 Radu Constantinescu, released under the GPL
; radu at voipintouch dot com



~np~[card-auth] ~/np~
exten => s,1,LookupBlacklist	; will use blacklist to check the callerid. If the callerid is in the blacklist then the caller is authentichated
; the user is not in the caller id list, ask for pin
exten => s,2,noop()
exten => s,3,Answer() 	; First answer the call
exten => s,4,DigitTimeout(4)         ; Set Digit Timeout 4 seconds
exten => s,5,ResponseTimeout(5)      ; Set Response Timeout 5 sec
 ; The next line read the password, max 10 digits+#
exten => s,6,Authenticate(/pass,da)	; read the pass using the /pass key in the database, set the account code to the pass
exten => s,7,GoTo(31)	; caller id and account ok
exten => s,8,Hangup() 	; just in case...
 
exten => s,102,NoOp() caller id ok, read account
exten => s,103,DBget(ACCOUNT=blacklist/${CALLERIDNUM})
exten => s,104,SetAccount(${ACCOUNT})
exten => s,105,Goto(s,31)	; caller id and account ok

exten => s,204, playback(vm-goodbye)	;NoOp("cannot find calerid/account in blacklist")
exten => s,205, Hangup 



; used by authenticated users to get access
exten => s,31,NoOp()
exten => s,32,DigitTimeout(6) ; Set Digit Timeout to 10 seconds 
exten => s,33,ResponseTimeout(8) ; Set Response Timeout to 12 seconds 

exten => s,34,SetGroup(${ACCOUNTCODE})	; set the group to accountcode in order to limit the number of calls 
exten => s,35,CheckGroup(2)	; if more than two  calls at a time hangup
exten => s,36,ResetCDR()
exten => s,37,goto(carddial,s,1 )

exten => s,136, Playback(vm-goodbye)	; checkgroup failed, more than one call for this account, maybe add an announcement
exten => s,137, Hangup


~np~[carddial]~/np~
exten => s,1,Background(vm-enter-num-to-call)
; 
exten => _011x.,1,Dial(SIP/${EXTEN}@sip.yourinternationalprovider.com,60)
exten => _1xxxxxxxxxx,1,Dial(SIP/${EXTEN}@sip.anotherprovider.com,60)

exten => _X.,102,noop()	; will play busy tone and restart
exten => _X.,103,Playtones(busy)
exten => _X.,104,Wait(2)
exten => _X.,105,StopPlaytones()
exten => _X.,106,goto(card-auth,s,31)

exten => i,1,Playback(pbx-invalid)	; will play invalid number and restart	
exten => i,2,goto(card-auth,s,31)

exten => t,1,Playback(pbx-invalid)	; will play invalid number and restart
exten => t,2,goto(card-auth,s,31)

Hitcounter: 9228 since Sat 15 of Oct, 2005 (20:06 UTC)

Related Posts:

Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.