AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1010670
Accepted
Mattisdada
Mattisdada
Asked: 2020-04-03 14:57:10 +0800 CST2020-04-03 14:57:10 +0800 CST 2020-04-03 14:57:10 +0800 CST

星号:在 h 扩展中使用 Queue()

  • 772

我试图让用户能够录制消息、挂断电话、继续通话、拨打队列并播放录音。

我已经完成了大部分工作,但是现在当我拨打Queue()h 分机时,它会立即挂断(队列成员确实接到了大约 1 毫秒的电话)。虽然我正在使用选项c

我的拨号方案(为简洁起见)

[standard-gn-helpdesk-corona-afterhours]
; Hangup Extension
exten => h,1, NoOp(hangup standard-gn-helpdesk-corona-afterhours)
same => n, Gosub(sub-queue-gn-afterhours,s,1)
same => n, Return()

exten => s,1, NoOp(standard-gn-helpdesk-corona-afterhours)
same => n, Record(gn_ah_recording%d:ulaw)
same => n, Hangup()
; Callee has hungup by this point. `h` should be executed

[playback-recorded-message]
exten => s,1, NoOp(playback-recorded-message)
same => n, Playback(${RECORDED_FILE})

[sub-queue-gn-afterhours]
exten => s,1,NoOp(sub-queue-gn-afterhours)
; Has the `c` option which allows the queue to continue when callee hangs
same => n,Queue(GNAfterHours1,tkc,,,540,,,playback-recorded-message)
same => n,Return()

任何的意见都将会有帮助。我会被迫使用Dial()该F选项吗?

asterisk voip sip queue
  • 1 1 个回答
  • 1018 Views

1 个回答

  • Voted
  1. Best Answer
    Mattisdada
    2020-04-06T15:29:02+08:002020-04-06T15:29:02+08:00

    我实际上无法解决遇到的所有问题,我的最终解决方案最终成为使用 AGI 使用本地频道发起新呼叫的一种变通方法。我的拨号计划最终看起来像这样:

    [standard-gn-helpdesk-corona-afterhours]
    ; Hangup Extension
    exten => h,1, NoOp(hangup standard-gn-helpdesk-corona-afterhours)
    same => n, AGI(dial-playback-recorded-messages.php)
    same => n, Hangup()
    
    exten => s,1, NoOp(standard-gn-helpdesk-corona-afterhours)
    same => n, Record(gn_ah_recording%d:wav)
    same => n, Hangup()
    ; Callee has hungup by this point. `h` should be executed
    
    [playback-recorded-message]
    exten => s,1, NoOp(playback-recorded-message)
    same => n, Playback(${RECORDED_FILE})
    
    [sub-queue-gn-afterhours]
    exten => s,1,NoOp(sub-queue-gn-afterhours)
     ; Total hack! This is bad practice, but I don't have shared func and I couldn't find another way to keep this variable in scope when using Queue -> Sub
    same => n, Set(GLOBAL(RECORDED_FILE)=${RECORDED_FILE})
    same => n,Queue(GNAfterHours1,tk,,,540,,,playback-recorded-message)
    same => n,Return()
    
    [from-internal-default]
    ; Outbound dial for AH
    exten => 8745111,1, Answer()
    same => n, Gosub(sub-queue-gn-afterhours,s,1)
    same => n, Hangup()
    
    ; Inbound dial for AH
    exten => 8745112,1, Answer()
    same => n, Wait(3600)
    same => n, Hangup()
    

    我的 AGI 脚本看起来像这样(为简单起见减少了)

    <?php
    $recordingFile = $agi->get_variable("RECORDED_FILE", true);
    $hasAh = (string) $agi->get_variable("HAS_AFTERHOURS", true); 
    
    $originateMsg = new OriginateAction('local/8745112@from-internal-default');
    $originateMsg->setContext('from-internal-default');
    $originateMsg->setPriority('1');
    $originateMsg->setExtension('8745111');
    $originateMsg->setAsync(true);
    $originateMsg->setTimeout(19000);
    $originateMsg->setVariable('RECORDED_FILE', $recordingFile);
    $originateMsg->setVariable('HAS_AFTERHOURS', $hasAh);
    $response = $pamiClient->send($originateMsg);
    

    这个怎么运作:

    1. 来电者进来并记录消息
    2. 呼叫挂断并执行 AGI 脚本,该脚本在本地通道8745112和拨打本地分机之间发起新呼叫8745111
    3. 扩展8745112只是等待保持连接打开
    4. 通道8745111移动到队列中,一旦连接了呼叫,它就会运行 post queue subplayback-recorded-message来播放消息

    我相信有一个更好、更简单的解决方案,但以我对 Asterisk 的理解程度,这是我能想到的最好的解决方案。希望它可以帮助某人

    • 0

相关问题

  • 我应该使用 Asterisk GUI 吗?

  • Asterisk/TrixBox 和预测拨号/外呼呼叫中心

  • 有稳定的跨平台软电话吗?还是只有 Linux 的?

  • 我们可以在我们的 MAXIMISER 4140 呼叫服务器上使用 Slicecomm PCS100 运行 Asterisk 吗?

  • 通过星号 PBX 在 IP 电话上使用 Google 联系人

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve