[Freeswitch-users] dialplanhelp for callforwarding

Michael Collins msc at freeswitch.org
Mon Feb 7 21:16:39 MSK 2011


There isn't a "gotoif" construct in the FS dialplan. Any time you need a
fair amount of logic in your dialplan then you should consider using a
dialplan script. You can write them in Lua, Perl, or Javascript. Personally,
the FS devs prefer Lua for dialplan scripting because it is pretty easy. I
recommend getting our book and looking at chapter 7. It's a gentle
introduction to writing simple dialplan scripts in Lua.

Remember this rule about the FreeSWITCH XML dialplan: it can do a lot but it
isn't a scripting language - it's a routing "language". Tony designed it
that way. You *can* do some logic-type constructs but I wouldn't go there
when you're still just learning everything.

The first thing you should do in translating your Asterisk dialplan to
FreeSWITCH is to write out the call flow outline. From there you can define
what aspects can be done in the XML dialplan and what can be done in your
Lua script.

The other thing I'd recommend doing is joining the #freeswitch channel on
irc.freenode.net. You can talk to people in realtime and they can help
answer specific questions.

-MC

On Mon, Feb 7, 2011 at 3:32 AM, Thomas Hoellriegel <admin at blindi.net> wrote:

> Hi all, i like to replace my asterisk to fs. FS is very nice.
> I hanging:
> my problem is: i don.t find a Gotoif command from fs to replace, my
> asterisk dialplan.
>
> my simply dialplan in asterisk is:
>
> ;;Callforwarding to a phonenumber from dialplan
> ;;from: thomas Hoellriegel blindi at gmx.net
>
> ;;maimenu for callforwarding
> ;;anfang is in english: beginn
> [callforwarding-only]
> exten => s,1,Answer()
> exten => s,n,Set(TIMEOUT(response)=10)
> exten =>
> s,n,Background(callforwarding-anfang1&callforwarding-anfang2&callforwarding-anfang3&callforwarding-anfang4&callforwarding-anfang5&callforwarding-anfang6&callforwarding-anfang7&callforwarding-anfang8&mit-stern-exit)
> exten => s,n,WaitExten
> exten => *,1,Goto(adminmenu,s,1)
>
> ;;drop all user errors
> exten => i,1,Goto(s,1)
>
> ;;menuselection
> exten => 1,1,Goto(callforwarding-db,s,1)
>
>
> exten => t,1,Playback(vm-goodbye)
> exten => t,n,Hangup()
>
> [callforwarding-db]
> exten => s,1,Answer()
> exten => s,n,Set(TIMEOUT(response)=10)
>
> ;;status: ;;aus: (off)  goto: no number in database
> ;;fwan: (on)  goto: then number is found
> exten => s,n,GotoIf($["${DB(CFtommystatus/0)}" != ""]?fwan:fwaus)
> exten => s,n(fwan),Playback(all-callfw-is-on)
> exten => s,n,Goto(s,30)
>
> exten => s,n(fwaus),Playback(all-fw-ist-off)
> exten => s,n,Goto(s,30)
>
> exten => s,30,Background(callforwarding-main)
> exten => s,n,WaitExten
> exten => *,1,Goto(callforwarding-only,s,1)
>
> exten => i,1,Goto(s,1)
>
> ;;nummer is: shortnumber for callforwarding
> exten => 1,1,Goto(nummer1,nr1,1)
> ;;toggle
> ;;ein aus in english: on off
> exten => 0,1,GotoIf($["${DB(CFtommystatus/0)}" != ""]?ein:aus)
> exten => 0,n(ein),DBdeltree(CFtommystatus/0)
> exten => 0,n,Playback(all-fw-ist-off)
> exten => 0,n,Goto(callforwarding-only,s,1)
>
> exten => 0,n(aus),Set(DB(CFtommystatus/0)=p)
> exten => 0,n,Playback(alle-callfw-is-on)
> exten => 0,n,Goto(callforwarding-only,s,1)
>
> ;;number 1
> ;;kurzwahl is: shortnumber [nummer1]
> exten => nr1,1,Playback(kurzwahl)
> exten => nr1,n,SayDigits(1)
> exten => nr1,n,Background(callforwarding-opt)
> exten => nr1,n,WaitExten
>
> ;;ja: say the existing number
> ;;falsch:
> ;;say no number in database found
>
> exten => 1,1,GotoIf($["${DB(CFtommy1/0)}" != ""]?ja1:falsch1)
> exten => 1,n(ja1),SayDigits(${DB(CFtommy1/0)})
> exten => 1,n,Wait(0.2)
> exten => 1,n,Goto(nr1,1)
> exten => 1,n(falsch1),Playback(callforwarding-keine)
> exten => 1,n,Wait(0.2)
> exten => 1,n,Goto(nr1,1)
>
> ;;2 to add a number
> exten => 2,1,Goto(nummer1-menu1,s,1)
>
> ;;aus: deactivate callforwarding
> exten => 3,1,Goto(nummer1aus,s,1)
> exten => 4,1,SayDigits(${CALLERID(num):})
> exten => 4,n,Set(DB(CFtommy1/0)=${CALLERID(num):})
> exten => 4,n,Playback(callforwarding-on)
> exten => 4,n,Goto(callforwarding-only,s,1)
>
> exten => *,1,Goto(callforwarding-only,s,1)
>
> exten => i,1,Goto(nr1,1)
>
> ;;aus:  deactivate
> [nummer1aus]
> exten => s,1,DBdeltree(CFtommy1/0)
> exten => s,n,Background(callforwarding-off)
> exten => s,n,Goto(callforwarding-only,s,1)
>
> ;;menu for dtmf digits
> [nummer1-menu1]
> exten => s,1,Set(NR=)
> exten => s,n,Background(bitte-callforwarding-nummer)
> exten => s,n,Set(TIMEOUT(response)=10)
> exten => s,n,WaitExten
> exten => _X,1,Set(NR=${NR}${EXTEN})
> exten => _X,n,Goto(s,3)
> exten => *,1,Goto(s,1)
>
> exten => #,1,Playback(callforwardings-number-is)
> exten => #,n,SayDigits(${NR})
>
> ;;check the number
> exten => #,n,Goto(nummer1-chk,${NR},1)
>
> exten => t,1,Playback(vm-goodbye)
> exten => t,n,Hangup()
>
> ;;check the number for no allowed numbers [nummer1-chk]
> exten => i,1,NoOp(Undefined  Nummer ${INVALID_EXTEN}.)
> exten => i,n,Answer()
> exten => i,n,Playback(tt-somethingwrong)
> exten => i,n,Playback(tt-monkeysintro)
> exten => i,n,Hangup()
>
> ;;forbidden numbers:
> ;;neu is:  new
> exten => _911.,1,Playback(nummer-falsch)
> exten => _911.,n,Goto(callback-only-neu,s,1)
>
> exten => _#,1,Playback(notallow)
> exten => _#,n,Goto(nummer1-menu1,s,1)
> exten => _X,1,Playback(notallow)
> exten => _X,n,Goto(nummer1-menu1,s,1)
> exten => _X.,1,Goto(nummer1-confirm,s,1)
>
> ;;confirmmenu
> [nummer1-confirm]
> exten => s,1,Background(ist-correct)
> exten => s,n,Set(TIMEOUT(response)=10)
> exten => s,n,WaitExten
> exten => 1,1,Set(DB(CFtommy1/0)=${NR})
> exten => 1,n,Playback(callforwarding-on)
> exten => 1,n,Goto(callforwarding-only,s,1)
>
> exten => 2,1,Goto(nummer1-menu1,s,1)
>
> exten => #,1,Playback(errormenu)              ; "Thanks for trying the
> demo"
> exten => #,n,Goto(nummer1-menu1,#,1)
> exten => t,1,Goto(nummer1-menu1,#,1)
> exten => i,1,Playback(conf-errormenu)          ; "That's not valid, try
> again"
> exten => i,n,Goto(nummer1-menu1,#,1)
> ;;fw_outcontext
> [fw_out]
> include=trunk
> include=international
>
> [default]
> ;;forwarding extension in defaultcontext
>
> ;;read the db entry
> exten => answert1,1,GotoIf($["${DB(CFtommy1/0)}" != ""]?yesfw1:nofw1)
> exten => answert1,n(yesfw1),Dial(Local/${DB(CFtommy1/0)}@fw_out,,)
> exten => answert1,n(nofw1),NoOp()
>
> can you help me please? thankx.
>
>
>
> ---------------
> Du kannst mich jederzeit kostenlos per Festnetz erreichen unter:
> http://www.blindi.net/callback
> homepage: http://www.blindi.net
> blinde-misc mailingliste für blinde. anmeldung unter:
> http://www.blindi.net/mailman/listinfo/blinde-misc
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20110207/a3845afb/attachment.html 


More information about the FreeSWITCH-users mailing list