1

我有一个 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

4

0 回答 0