SayDigits/SayAlpha infinitely repeat

Problem outline:
With the given dialplan below, SayDigits (also SayAlpha) will correctly read aloud the passed string (numbers or alphabet letters) argument, but then will continue to repeat parts of the string despite no corresponding output in the Asterisk console output.

Environment:
OS: Centos 5
Asterisk version: 1.6.1.18
Patches: Japanese say.c and app_voicemail.c patches available from:
ftp.voip-info.jp/asterisk/patch/1.6.0.18/
Softphone client: 3CX 4.0.11015.0

Dialplan:
exten => _9070018,1,Set(CHANNEL(language)=en)
exten => _9070018,n,NoOp(${PlayType})
exten => _9070018,n,Set(Routing=start)
exten => _9070018,n,Set(PlayType=2)
exten => _9070018,n,Set(PlayAlpha=AlphaMaleA)
exten => _9070018,n,Set(PlayDigits=12345678901234567890)
exten => _9070018,n,GotoIf($[${PlayType}=1]?Playback)
exten => _9070018,n,GotoIf($[${PlayType}=2]?SayDigits)
exten => _9070018,n,GotoIf($[${PlayType}=3]?SayNumber)
exten => _9070018,n,GotoIf($[${PlayType}=4]?SayUnixTime)
exten => _9070018,n,GotoIf($[${PlayType}=5]?SayAlpha)
exten => _9070018,n(Playback),Playback(${PlayFileName})
exten => _9070018,n,Goto(while)
exten => _9070018,n(SayDigits),SayDigits(${PlayDigits})
exten => _9070018,n,Goto(while)
exten => _9070018,n(SayNumber),Playback(num:${PlayNumber},say)
exten => _9070018,n,Goto(while)
exten => _9070018,n,Playback(datetime::${PlayDate},say)
exten => _9070018,n,Goto(while)
exten => _9070018,n(SayAlpha),SayAlpha(${PlayAlpha})
exten => _9070018,n,Goto(while)
exten => _9070018,n(while),While(1)
exten => _9070018,n,Set(Reproduction=Finished)
exten => _9070018,n,Wait(1000)
exten => _9070018,n,EndWhile()

This dialplan is used in conjunction with some software we’re developing (which sets the variables listed above when it requests Asterisk to execute the 9070018 dialplan), but for this forums’s benefit, I’ve been able to reproduce this problem by hardcoding the PlayType and PlayDigits(or PlayAlpha) strings in the dialplan, thus only using Asterisk and not with our software.

Steps to reproduce problem:

  1. Set language to either en(glish) or ja(panese).
  2. Set PlayType to either 2 or 5 (2=read “12345678901234567890”, 5=read “AlphaMaleA”)
  3. Dial from 3CX to 9070018.

You will hear either “12345678901234567890” (or “AlphaMaleA”) read aloud, as the output below shows but then it will continue to say, say in the case of saydigits, “45678901234567890” … “45678901234567890” … “45678901234567890” …

Possible fix?
I discovered by adding:
exten => _9070018,1,Answer()
at the top of the dialplan, I was unable to reproduce the problem. Could somebody please tell what the reason for this is?

Thank you in advance,
Simon.

Asterisk console output log (for using english and 12345678901234567890 SayDigits read aloud dialplan)
== Using SIP RTP CoS mark 5
– Executing [9070018@T01:1] Set(“SIP/3019-00000016”, “CHANNEL(language)=en”) in new stack
– Executing [9070018@T01:2] NoOp(“SIP/3019-00000016”, “”) in new stack
– Executing [9070018@T01:3] Set(“SIP/3019-00000016”, “Routing=start”) in new stack
– Executing [9070018@T01:4] Set(“SIP/3019-00000016”, “PlayType=2”) in new stack
– Executing [9070018@T01:5] Set(“SIP/3019-00000016”, “PlayAlpha=AlphaMaleA”) in new stack
– Executing [9070018@T01:6] Set(“SIP/3019-00000016”, “PlayDigits=12345678901234567890”) in new stack
– Executing [9070018@T01:7] GotoIf(“SIP/3019-00000016”, “0?Playback”) in new stack
– Executing [9070018@T01:8] GotoIf(“SIP/3019-00000016”, “1?SayDigits”) in new stack
– Goto (T01,9070018,14)
– Executing [9070018@T01:14] SayDigits(“SIP/3019-00000016”, “12345678901234567890”) in new stack
– <SIP/3019-00000016> Playing ‘digits/1.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/2.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/3.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/4.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/5.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/6.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/7.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/8.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/9.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/0.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/1.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/2.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/3.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/4.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/5.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/6.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/7.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/8.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/9.gsm’ (language ‘en’)
– <SIP/3019-00000016> Playing ‘digits/0.gsm’ (language ‘en’)
– Executing [9070018@T01:15] Goto(“SIP/3019-00000016”, “while”) in new stack
– Goto (T01,9070018,22)
– Executing [9070018@T01:22] While(“SIP/3019-00000016”, “1”) in new stack
– Executing [9070018@T01:23] Set(“SIP/3019-00000016”, “Reproduction=Finished”) in new stack
– Executing [9070018@T01:24] Wait(“SIP/3019-00000016”, “1000”) in new stack