我有一个Java应用程序,通过Asterisk-Java访问Asterisk作为管理员。该应用程序有一个拨号程序界面,我可以使用它来拨打数字字符串并播放单个数字到sip.conf中定义的扩展名。现在,我试图弄清楚如何从此拨号器(使用A-J PlayDtmfAction)驱动数字到MeetMe会议,输入MeetMe请求的PIN。在我的DialPlan中,我有一个ext-meetme上下文支持confRoom 1024 ...
>[ Context 'ext-meetme' created by 'pbx_config' ]
> '1024' => 1. Macro(user-callerid,) [pbx_config]
> 2. Set(MEETME_ROOMNUM=1024) [pbx_config]
> 3. Set(MAX_PARTICIPANTS=2) [pbx_config]
> 4. Set(MEETME_MUSIC=${MOHCLASS}) [pbx_config]
> 5. Gosub(sub-record-check,s,1(conf,1024,always))
>[pbx_config]
> 6. GotoIf($["${DIALSTATUS}" = "ANSWER"]?READPIN)
>[pbx_config]
> 7. Answer() [pbx_config]
> 8. Wait(1) [pbx_config]
> 9. Set(PINCOUNT=0) [pbx_config]
> [READPIN] 10. Read(PIN,enter-conf-pin-number,,,,) [pbx_config]
>
><THIS IS WHERE I WANT TO INJECT A DTMF STRING>
>
> 11. GotoIf($[x${PIN} = x123]?USER) [pbx_config]
> 12. GotoIf($[x${PIN} = x321]?ADMIN) [pbx_config]
> 13. Set(PINCOUNT=$[${PINCOUNT}+1]) [pbx_config]
> 14. GotoIf($[${PINCOUNT}>3]?h) [pbx_config]
> 15. Playback(conf-invalidpin) [pbx_config]
> 16. Goto(READPIN) [pbx_config]
> [ADMIN] 17. Set(MEETME_OPTS=aAoTqcIMsr) [pbx_config]
> 18. Goto(STARTMEETME,1) [pbx_config]
> [USER] 19. Set(MEETME_OPTS=oTqcIMsr) [pbx_config]
> 20. Goto(STARTMEETME,1) [pbx_config]
您可以看到我需要向MeetMe播放PIN的位置。我不确定[READPIN]在这里表示什么。当我打开Asterisk CLI详细模式时,我可以看到上面的数字10。然后发生超时,Asterisk说用户没有输入任何数字。
问题是我无法正确定义PlayDtmfAction正确的目标channelID来播放数字。有效的是播放SIP / 100-00034bc2等真实分机的数字。 MeetMe没有这样的频道。如果我在拨号方案的此时查询呼叫频道的信息,它会将目的地显示为1024 @ from-internal:1。我尝试使用PlayDtmfAction,但Asterisk返回错误。我也尝试了1024 @ ext-meetme,Local / 1024,Local / 1024 @ ext-meetme:1等等。
我听说过使用AGI,但也读到AGI不应该用于阻止像MeetMe这样的应用程序。如果我可以使用AGI,我很乐意学习如何。
我使用FreePBX配置的系统,如果这很重要的话。我的应用程序与FreePBX分开。
任何帮助表示赞赏,我很乐意收到任何信息。
谢谢!
格雷格在MA