アスタリスク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があります。

Source: https://habr.com/ru/post/J333790/


All Articles