この記事は、すでにアスタリスクを使用し、「基本」スキルを持っている人を対象としています。
Func_odbcなぜですか?
そして、aelで同じリクエストを行うことができるのに、なぜFunction_ODBCを使用する必要があるのでしょうか?
- extensions.aelでは、構成内で要求が数十回繰り返されると「きれい」に見えます
- 複数のデータベースを使用する方が便利
それ以外の場合、構成内の家に慣れていて、1つの要求を何度も書いたりコピーしたりするなら、この記事はあなたには向いていません。 残りについては、先に進みましょう。
Func_odbc.conf
最も単純な例のアスタリスク+ mysqlを検討します。
sipuser(多くのsipusers)があり、外部のcid番号があります。これは、私たちとは独立した理由で常に変化しているため、毎回確認する必要があります。
2番目の例:着信転送が必要です。
パラグラフ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があります。