第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調(diào)用文件,如果網(wǎng)絡(luò)服務(wù)這樣說,則取消調(diào)用

調(diào)用文件,如果網(wǎng)絡(luò)服務(wù)這樣說,則取消調(diào)用

PHP
白衣非少年 2021-11-05 13:27:42
我正在嘗試開發(fā)一個提醒系統(tǒng),該系統(tǒng)將自動撥打電話提醒某人特定事件。為此,我使用 Asterisk 進行調(diào)用,并使用 PHP 為 Asterisk 創(chuàng)建調(diào)用文件。我希望調(diào)用文件在添加后 30 秒執(zhí)行。為此,我在 PHP 腳本中設(shè)置了修改后的時間戳。一切都很好,除了我想再次檢查 Web 服務(wù)以確定它是否仍然與調(diào)用用戶相關(guān)。這是我的 PHP 腳本<?phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {        $request = json_decode(file_get_contents("php://input"));        $tmpcallfile = tempnam("/tmp", "call");        $callfile = tempnam("/var/spool/asterisk/outgoing/", "call");        $fh = fopen($tmpcallfile, "w");        fwrite($fh, "Channel: SIP/voxbeam_outbound/" . $request->{'ToPhoneNumber'} . "\n");        fwrite($fh, "CallerID: " . $request->{'FromPhoneNumber'} . "\n");        fwrite($fh, "MaxRetries: 3\n");        fwrite($fh, "RetryTime: 5\n");        fwrite($fh, "Context: remind_event\n");        fwrite($fh, "Extension: 111\n");        fwrite($fh, "Priority: 1\n");        fwrite($fh, "Archive: Yes\n");        fclose($fh);        touch($tmpcallfile, time()+30);        rename($tmpcallfile, $callfile);}?>我的想法是在 extensions.conf 中使用 curl 簡單地調(diào)用 Web 服務(wù)。[voxbeam_outbound]exten => _X.,1,NoOp()        same => n,Answer        same => n,Dial(SIP/voxbeam_outbound/${EXTEN})[remind_event]exten => _X.,1,Answer        same => n,Set(status=${CURL(http://localhost/ShouldRemindEvent)})        same => n,GotoIf($["${status:0:1}" != "1"]?10)        same => n,Dial(SIP/voxbeam_outbound/${EXTEN})        same => n,Playback(remind_event)        same => n,Hangup        same => 10,Hangup我想,如果我會檢查網(wǎng)絡(luò)服務(wù),然后轉(zhuǎn)到 10 掛斷,如果網(wǎng)絡(luò)服務(wù)回復(fù) 1 以外的任何內(nèi)容。但由于某種原因,它確實會調(diào)用。為了完整起見,這里還在 sip.conf 中添加了幾行,盡管我猜這些實際上并不相關(guān):[voxbeam_outbound]type=peerinsecure=invite,portnat=nocanreinvite=nousername=<hidden>secret=<hidden>host=<hidden>context=voxbeam_outbound所以問題是,我可以像這樣簡單地做到這一點,還是需要編寫一個 AGI 腳本才能實現(xiàn)我想要的?我意識到這是編程和配置之間的混合,我相信這最適合 stackoverflow 而不是超級用戶,因為它是我正在構(gòu)建的應(yīng)用程序,并且因為涉及編程。
查看完整描述

3 回答

?
蕭十郎

TA貢獻1815條經(jīng)驗 獲得超13個贊

你的調(diào)用文件有重試參數(shù),所以它認為調(diào)用失敗并重試。

您在這里有 3 個選擇

1)在不需要的情況下刪除文件

2) 掛斷前接聽電話。

3) 刪除重試。


查看完整回答
反對 回復(fù) 2021-11-05
?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

調(diào)用文件非常適合調(diào)度,但我會使用 PHP AGI 而不是撥號計劃來做 web 端。

您可以讓呼叫文件使用目標電話號碼和查詢 Web 服務(wù)所需的任何參數(shù)(用戶 ID、電子郵件等)撥打本地分機號。然后 AGI 執(zhí)行 curl 請求,您可以繼續(xù)從 AGI 內(nèi)部撥號。我猜這對你來說比撥號計劃更舒服。它將消除“出于某種原因它做了 X”的困惑部分,因為您可以在 PHP 中直接控制調(diào)用,并且可以從您的 AGI 腳本中記錄到文件。

您還可以執(zhí)行更高級的 API 查詢,例如需要身份驗證令牌的外部 API、處理更復(fù)雜的輸出等。


查看完整回答
反對 回復(fù) 2021-11-05
?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

從 Asterisk 社區(qū)得到了一些很大的幫助。主要問題是需要兩個上下文,一個用于呼叫的每一段。


使用 Dial 進行呼叫的一種上下文(下面的 message_dial)

播放聲音文件的另一個上下文。(下方留言)

這是有效的 extensions.conf 文件。只需在撥號命令之前在 message_dial 的撥號計劃中添加任何條件:


[message_dial]

exten => s,1,NoOp()

        same => n,Dial(SIP/voxbeam_outbound/${PHONE_NUMBER})


[message]

exten => s,1,NoOp()

        same => n,Playback(message)

        same => n,Hangup

調(diào)用文件可能如下所示


Channel: Local/s@message_dial

CallerID: +46<hidden>

MaxRetries: 3

RetryTime: 15

Context: message

Extension: s

Priority: 1

Archive: Yes

SetVar: PHONE_NUMBER=+46<hidden>

所以看看最終的解決方案,對于任何精通 Asterisk 的人來說,實現(xiàn)它真的很簡單。


查看完整回答
反對 回復(fù) 2021-11-05
  • 3 回答
  • 0 關(guān)注
  • 149 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號