Page 190 - Asterisk™: The Future of Telephony
P. 190

exten => 678,n,Set(DB(test/count)=1)
                   exten => 678,n,Goto(1)
                   exten => 678,n(continue),NoOp()
                   exten => 678,n,SayNumber(${COUNT})
                   exten => 678,n,Set(COUNT=$[${COUNT} + 1])
               Now that we’ve incremented COUNT, let’s put the new value back into the database.
               Remember that storing a value for an existing key overwrites the previous value:
                   exten => 678,1,Set(COUNT=${DB(test/count)})
                   exten => 678,n,GotoIf($[${ISNULL(${COUNT})}]?:continue)
                   exten => 678,n,Set(DB(test/count)=1)
                   exten => 678,n,Goto(1)
                   exten => 678,n(continue),NoOp()
                   exten => 678,n,SayNumber(${COUNT})
                   exten => 678,n,Set(COUNT=$[${COUNT} + 1])
                   exten => 678,n,Set(DB(test/count)=${COUNT})
               Finally, we’ll loop back to the first priority. This way, the application will continue
               counting:
                   exten => 678,1,Set(COUNT=${DB(test/count)})
                   exten => 678,n,GotoIf($[${ISNULL(${COUNT})}]?:continue)
                   exten => 678,n,Set(DB(test/count)=1)
                   exten => 678,n,Goto(1)
                   exten => 678,n(continue),NoOp()
                   exten => 678,n,SayNumber(${COUNT})
                   exten => 678,n,Set(COUNT=$[${COUNT} + 1]
                   exten => 678,n,Set(DB(test/count)=${COUNT})
                   exten => 678,n,Goto(1)
               Go ahead and try this example. Listen to it count for a while, and then hang up. When
               you dial this extension again, it should continue counting from where it left off. The
               value stored in the database will be persistent, even across a restart of Asterisk.
               In the next example, we’ll create dialplan logic around the BLACKLIST() function, which
               checks to see if the current Caller ID number exists in the blacklist. (The blacklist is
               simply a family called blacklist in the AstDB.) If BLACKLIST() finds the number in the
               blacklist, it returns the value 1, otherwise it will return 0. We can use these values in
               combination  with  a  GotoIf()  to  control  whether  the  call  will  execute  the  Dial()
               application:
                   exten => 124,1,GotoIf($[${BLACKLIST()]?blocked,1)
                   exten => 124,n,Dial(${JOHN})
                   exten => blocked,1,Playback(privacy-you-are-blacklisted)
                   exten => blocked,n,Playback(vm-goodbye)
                   exten => blocked,n,Hangup()
               To add a number to the blacklist, run the database put blacklist number 1 command
               from the Asterisk command-line interface.







               162 | Chapter 6: More Dialplan Concepts
   185   186   187   188   189   190   191   192   193   194   195