アスタリスク 前の内線が使用されていない場合、次の内線に通話を転送します

アスタリスク 前の内線が使用されていない場合、次の内線に通話を転送します

前の内線が使用中 (INUSE) または通話中の場合、次の内線に通話を転送しようとしています。EXTENSION_STATE(extension[@context])次のようにステータスを確認しようとしました:

[sales]
exten => s,1,Dial(SIP/123)
exten => s,n,GotoIf($["${EXTENSION_STATE(123)}"="INUSE"]?passed:failed)
exten => s,n(passed),Dial(SIP/124)
exten => s,n(failed),Hangup();if other

しかし、成功しませんでした。どうすればいいでしょうか?

答え1

あなたの解決策は非常に複雑で、それが基本的に機能しない理由の 1 つです。むしろこれを試してください。これは、内部変数を使用した一般的な単純なアプローチです${DIALSTATUS}。応答すると、通話が単に切断されるため、すべてのエラー ステータスを処理するだけで済みます。

[sales] exten => s,1,Dial(SIP/123) exten => s,2,Goto(${EXTEN}-${DIALSTATUS},1) exten => s-BUSY,1,Dial(SIP/other) exten => s-CONGESTION,1,Dial(SIP/someone)

答え2

これは、EXTENSION_STATE の代わりに GROUP_COUNT() を使用するとうまくいきました:

exten => s,1,Set(GROUP()=OUTBOUND_GROUP)
exten => s,2,GotoIf($[ ${GROUP_COUNT()} > 1 ]?try1:try2)
exten => s,3(try1),Dial(SIP/124)
exten => s,4(try2),Dial(SIP/123)

関連情報