我有一个 Java 应用程序,它通过 Asterisk-Java 作为管理器访问 Asterisk。该应用程序有一个拨号界面,我可以使用它来拨打号码字符串并播放单个数字到 sip.conf 中定义的扩展名。现在,我试图弄清楚如何将这个拨号器中的一个数字(使用 AJ PlayDtmfAction)驱动到一个 MeetMe 会议中,以按照 MeetMe 的要求输入一个 PIN。在我的 DialPlan 中,我有一个支持 confRoom 1024 的 ext-meetme 上下文...
>[ 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