added DSM example collecting extension an connecting in B2BUA mode

sayer/1.4-spce2.6
Stefan Sayer 15 years ago
parent 568466ad65
commit 4de892facf

@ -0,0 +1,135 @@
-- This small DSM collects the extension via key input and
-- connects to the extension in B2B mode.
--
-- Set run_invite_event=no in dsm.conf. Make necessary prompts by make in wav/
-- The domain part of the extension to call is set below.
initial state START
enter {
-- directory for prompts, may also be e.g. in $config.prompts_dir
set($prompts_dir="wav/");
-- the prompt we play at the beginning
sets($prompt_name=$(prompts_dir)enter_extension.wav);
playFile($prompt_name);
-- 60 seconds to enter extension, if not we hang up
setTimer(1, 60);
-- evaluate directly transition, to go to COLLECTING state
repost();
};
-- immediately to COLLECTING state
transition "go to collecting" START --> COLLECTING;
-- state for collecting extension digits
state COLLECTING
enter {
-- set 10 seconds 'hint' timer
setTimer(2, 10);
};
-- digit key pressed
transition "key press" COLLECTING - key(#key<10) / {
-- break any possibly playing prompt
closePlaylist();
-- add key to extension
append($extension, #key);
} -> COLLECTING;
transition "hint timer hit" COLLECTING - timer(#id==2) / {
-- 'please enter the extension'
sets($prompt_name=$(prompts_dir)enter_extension.wav);
playFile($prompt_name);
} -> COLLECTING;
transition "timeout timer hit" COLLECTING - timer(#id==1) / {
-- 'sorry you have problems. please call customer service'
sets($prompt_name=$(prompts_dir)sorry_problems.wav);
playFile($prompt_name);
} -> PLAY_AND_BYE;
-- connect (# or *) pressed, but no extension entered
transition "connect key, but empty extension" COLLECTING - key(#key>9); test(len($extension)==0) / {
-- 'please enter the extension'
sets($prompt_name=$(prompts_dir)enter_extension.wav);
playFile($prompt_name);
} -> COLLECTING;
-- connect (# or *) pressed
transition "connect key press" COLLECTING - key(#key>9) / {
-- break any possibly playing prompt
closePlaylist();
-- 'now connecting'
sets($prompt_name=$(prompts_dir)connecting.wav);
playFile($prompt_name);
-- prefixing with 000777 (iptel.org webconference direct dialin)
set($remote="sip:000777");
-- room
append($remote, $extension);
-- at domain
append($remote, @);
append($remote, "iptel.org");
log(3,$remote);
-- connect in B2BUA mode
B2B.connectCallee($remote, $remote);
} -> CONNECTING;
state CONNECTING;
-- received BYE from caller
transition "bye while connecting" CONNECTING - hangup / {
log(1, bye while connecting);
B2B.terminateOtherLeg();
stop(false);
} -> END;
-- provisional reply in callee leg
transition "provisional reply" CONNECTING - B2B.otherReply(#code < 200) / {
log(3, received provisional reply)
log(3, #code)
log(3, #reason)
} -> CONNECTING;
-- positive reply in callee leg
transition "positive reply" CONNECTING - B2B.otherReply(#code < 300) / {
log(3, received positive reply)
log(3, #code)
log(3, #reason)
} -> CONNECTED;
-- negative reply in callee leg, try again
transition "negative reply" CONNECTING - B2B.otherReply() / {
log(3, received negative reply)
log(3, #code)
log(3, #reason)
-- 'connecting extension failed, please enter another extension'
sets($prompt_name=$(prompts_dir)failed_enter_extension.wav);
playFile($prompt_name);
-- remove old timers
removeTimer(1);
removeTimer(2);
-- collect a new one
clear($extension);
} -> COLLECTING;
state CONNECTED;
transition "bye recvd" CONNECTED - hangup / B2B.terminateOtherLeg(); stop(false) -> END;
transition "bye on other leg" CONNECTED - B2B.otherBye() / stop(true) -> END;
state PLAY_AND_BYE;
transition "file ended" PLAY_AND_BYE - noAudio / stop(true) -> END;
-- caller hangs up while entering extension
transition "hangup while entering" (COLLECTING, PLAY_AND_BYE) - hangup / stop(false) -> END;
state END;

@ -0,0 +1,11 @@
SRCS=$(wildcard *.txt)
WAVS=$(SRCS:.txt=.wav)
all:
@echo "use 'make tts' to generate prompts."
tts: $(WAVS)
%.wav : %.txt Makefile
flite -f $< -o $(basename $@)_16k.wav
sox $(basename $@)_16k.wav -r 8000 $@

@ -0,0 +1 @@
Please enter the extension you want to connect, followed by the pound key.

@ -0,0 +1 @@
The extension you entered could not be reached. Please enter the extension you want to call.

@ -0,0 +1 @@
I am sorry you are having problems. If you can't resolve that issue, please call the customer care at 555. Good Bye.
Loading…
Cancel
Save