アスタリスクfunc_odbcまたは変なael

グループでの投票の結果、一連の記事「アスタリスクリアルタイム」を開始し、最初の記事はfunc_odbcまたはあなたの人生を簡素化する方法に専念します。



この記事は、すでにアスタリスクを使用し、「基本」スキルを持っている人を対象としています。



Func_odbcなぜですか?



そして、aelで同じリクエストを行うことができるのに、なぜFunction_ODBCを使用する必要があるのでしょうか?





それ以外の場合、構成内の家に慣れていて、1つの要求を何度も書いたりコピーしたりするなら、この記事はあなたには向いていません。 残りについては、先に進みましょう。



Func_odbc.conf



最も単純な例のアスタリスク+ mysqlを検討します。



sipuser(多くのsipusers)があり、外部のcid番号があります。これは、私たちとは独立した理由で常に変化しているため、毎回確認する必要があります。



2番目の例:着信転送が必要です。

odbc.iniおよびres_odbc.confの設定はスキップします。これを行う方法は既にわかっているためです。



パラグラフ1に進みます。



func_odbc.confに以下を記述します



[cid] dsn=asterisk readsql=SELECT cid FROM sipusers WHERE username = ${ARG1}
      
      





そして分解する



dsn=asterisk



-DSNパラメーターは、/ etc / odbc.iniファイルで指定されたデータベースにアスタリスクを接続する役割を果たします。



readsql=SELECT cid FROM sipusers WHERE username = ${ARG1}



-必要なSQLクエリですが、変数を使用します。



ここで、aelで得られたものを見てみましょう。



 _89. => { Set(cid=${ODBC_cid(${CALLERID(num)})}); SET(CALLERID(num)=${cid}); SET(CALLERID(name)=${cid}); ...... }
      
      





 Set(cid=${ODBC_cid(${CALLERID(num)})}); -   SELECT cid FROM sipusers WHERE username = ${CALLERID(num)})} ,   . SET(CALLERID(num)=${cid}) -  CALLERID(num) SET(CALLERID(name)=${cid}) - CALLERID(name)
      
      





実際にリクエストと変数の想像力をさらに高めます。



パラグラフ2に進みます。



func_odbc.confを追加します



 [forward] dsn=asterisk readsql=SELECT numforward, `type` FROM call_forwarding WHERE number = ${ARG1}
      
      





この答えでは配列を取得することに注意してください。



ここで、aelで得られたものを見てみましょう。



 macro redirect(number, from){ Set(ARRAY(forward,type)=${ODBC_forward(${number})}); } if (${EXISTS(${forward})}) { switch(${type}) { case all: .... case noanswer: .... case noanswer-worktime: .... break; default: break; } hangup; } return; };
      
      





ここで再アドレス指定するために、 マクロを使用する方が便利であると判断しました



Set(ARRAY(forward,type)=${ODBC_forward(${number})});



-リクエストから2つのパラメーターを取得するため、配列を使用する必要があります。

if (${EXISTS(${forward})})



-転送番号がある場合は、さらに先へ進みます...



switch(${type})



-転送のタイプを決定し、必要なタイプに応じて、アドレス指定の条件を作成します。



リダイレクト設定は誰もが異なる可能性があるため、意図的にリダイレクト設定を見逃しました。



PS:これは確かにリアルタイムではありません。 しかし、一番下の行は、特定の呼び出し中に適切なタイミングでいくつかのパラメーターを取得し、cidを変更するために構成に移動したり、cidを変更するためにリロードする必要がないことです。



PPS:readsqlの他に、同じ原理で動作するwritesqlがあります。



All Articles