为Asterisk AGI函数处理设置等待音调

7
我正在使用普通的PHP AGI与Asterisk一起使用,遵循此链接。问题是我的PHP AGI需要5秒钟才能执行。我只想为用户设置一些等待提示,让用户等待AGI的处理。在同样的链接中,我找到了以下内容:

set music: 启用/禁用音乐保持生成器,例如 "SET MUSIC ON default"

但我不知道如何使用,也就是说具体的语法是什么,以及我应该把它放在哪里。

我已经尝试添加:

same => n,Set(CHANNEL(musicclass)=default)

但是它没有起作用。
5个回答

2

非常感谢您的回复,但我没有使用php-agi,正如我在问题中所述,我正在使用simple agi。 - codegasmer
我建议您使用phpagi。自己造轮子没有意义。如果您正在使用自定义脚本,只需发送“SET MUSIC ON holdclass_here\r\n”。 - arheops
我已经尝试通过星号设置类,但在哪里运行“SET MUSIC ON hold”? - codegasmer
你需要将它发送到 AGI 连接 (通常只需打印到标准输出)。 - arheops
抱歉,我无法理解您的意思。我需要在星号或PHP中指定它,语法应该是什么? - codegasmer
你应该使用上面的语法或按照上面第3条评论中所述打印到标准输出。对于您使用的自定义AGI系统,没有提供语法方式。 - arheops

0
请查看Playtones命令。
exten => s,2,Playtones(dial)

0
只是我能想到的一些方法,并不一定是详尽无遗的清单。
  1. 您可以使用拨号计划应用程序StartMusicOnHold在调用AGI之前播放等待音乐,然后在AGI退出后使用StopMusicOnHold停止等待音乐。

例如,在extensions.conf(或包含文件)中:

exten => test,1,....
same => n,StartMusicOnHold()
same => n,AGI(....)
same => n,StopMusicOnHold()

播放铃声
你可以让呼叫者听到铃声,并且要停止铃声,你可以执行"Answer()"。
exten => test,1,....
same => n,Ringing()
same => n,AGI(....)
same => n,Answer()

从拨号计划中进行上述操作的替代方法是可以在AGI内部同时完成。
查看设置音乐以获取保持音乐,或使用AGI with EXEC Ringing进行振铃。
或者使用一个库,例如php-agi

-1

我有一个更简单的解决方案来解决你的问题。

你可以使用Asterisk AGI来实现,而不需要创建AGI脚本(我不喜欢AGI机制。我发明了一个更强大、更易用和更灵活的框架,让我能够在Asterisk上做一些疯狂的事情,而不必接触拨号计划或任何其他配置文件)。

对于你的问题,只需按照以下步骤操作:

  1. 通过以下方式为agi目录中的'/bin/echo'应用程序创建符号链接:

    ln -s /bin/echo  /var/lib/asterisk/agi-bin/echo
    
  2. 从您的拨号计划中调用exten => s,n,AGI( echo, SET MUSIC ON)来启动音乐保持。

  3. 执行您的操作
  4. 通过调用exten => s,n,AGI( echo, SET MUSIC OFF)停止音乐保持。
  5. 转移或执行其他操作

这是最简单的方法,无需创建AGI页面。


这个答案展示了如何通过使用AGI脚本从拨号计划中启动/停止保持音乐,但这种方法过于复杂。在拨号计划中,可以使用应用程序来实现这个目的:StartMusicOnHoldStopMusicOnHold - undefined

-1

1
不,这不是我想要的。我希望在请求处理时播放音调,而不是在AGI请求之前。 - codegasmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接