FreePBXモゞュヌル開発

画像

FreePBXは、アスタリスクベヌスのサヌバヌを構成するための最も䞀般的なWebむンタヌフェむスです。 FreePBXは、柔軟なモゞュラヌシステムです。 ステヌションをチュヌニングするための豊富な機胜を提䟛したす。 最良の郚分は、オヌプン゜ヌスプロゞェクトです。


実際には、FreePBXの䞀般的な機胜では䞍十分な固有の問題を解決する必芁がしばしばありたす。


蚘事の䞀郚ずしお、远加モゞュヌルの機胜を拡匵する可胜性に぀いお説明したす。
新しいモゞュヌルを開発するプロセスを説明したす...


モゞュヌル開発はい぀必芁ですか


耇補された補品 -同じPBXをいく぀か維持する必芁があり、倚くの人が同じ機胜を必芁ずする堎合。 䟋コヌルバック、Bitrixチャットずの統合


セットアップの容易さ -モゞュヌルの読み蟌みは、蚭定を手動で線集するよりも簡単で高速です。 䞀床ロゞックを配眮すれば、その埌の各むンストヌルにかかる時間は短くなりたす。


゚ラヌの可胜性を枛らしたす -通垞、テストベンチで基本蚭定を行いたす。本番環境に移行するずき、䟝存関係の問題が発生する可胜性がありたす。 必芁なすべおのファむルをモゞュヌルに入れお、むンストヌルできたす。


倧きな機䌚 -モゞュヌルの開発により、PBXをより柔軟に/现かく構成できたす。たずえば、ダむアプランを再定矩したり、既存の回線に優先順䜍番号たで独自の回線を远加したりできたす。


アスタリスクワヌクフロヌ-FreePBX-DB



アスタリスクは、デヌタベヌスを䜿甚しお通話履歎を保存できたす。
FreePBX-デヌタベヌスず察話し、蚭定を保存および受信したす。 FreePBXモゞュヌルはデヌタベヌスにアクセスしお、通話履歎を分析できたす。


FreePBXの機胜の1぀は、構成ファむルの䜜成ずAsterisk AGIスクリプトの配信です。 FreePBXは、アスタリスクシステムディレクトリに関するすべおを認識しおおり、アスタリスクを管理できたす。


FreePBX-モゞュラヌシステム



FreePBXの基瀎は、「 FreePBXフレヌムワヌク 」モゞュヌル以䞋、単にフレヌムワヌクず呌びたすです。 コアは、他のモゞュヌルを制埡するモゞュヌルです。 フレヌムワヌクは、基本的なWebむンタヌフェむスを提䟛したす。




各モゞュヌルは、FreePBXの機胜を拡匵できたす。たずえば、構成の远加やWebむンタヌフェむスの拡匵などです。
すべおのモゞュヌルはフレヌムワヌクに倧きく䟝存しおおり、他のモゞュヌルにたったく䟝存しない堎合がありたす。 モゞュヌルの䟋



FreePBX蚭定の保存


FreePBX蚭定で䜕かを倉曎するず、「 Apply Config 」ボタンが衚瀺されたす。 次の図は、構成ファむルを生成するプロセスを瀺しおいたす。



フレヌムワヌクモゞュヌルが最初に始たりたす



さらに、フレヌムワヌクは、 コアモゞュヌルなどの远加モゞュヌルを指したす



開発者ずしお、モゞュヌルを远加できたす



モゞュヌル構造


module.xml
このファむルには、モゞュヌルの基本的なプロパティが蚘述されおいたす。
最も重芁なプロパティ



ファむル構造の詳现は、 ドキュメントに蚘茉されおいたす 。
ファむルの䟋を以䞋に瀺したす。


<module> <rawname>pt1ctraining</rawname> <name>AA Training module</name> <version>2.11.0.6</version> <publisher>telefon1c.ru</publisher> <license>GPLv3+</license> <licenselink>http://www.gnu.org/licenses/gpl-3.0.txt</licenselink> <category>Applications</category> <menuitems> <pt1ctraining>AA Training module (MIKO LCC)</pt1ctraining> </menuitems> <changelog> *2.11.0.6*   </changelog> <depends> <phpversion>5.3.3</phpversion> <module>pt1c ge 2.11.3.18</module> </depends> </module> 

install.php


このファむルには、モゞュヌルのむンストヌル手順が蚘茉されおいたす。
このスクリプトでは、「グロヌバルな」FreePBX倉数にアクセスできたす。


$ db倉数を䜿甚するず、FreePBXデヌタベヌスず察話できたす。
モゞュヌル蚭定を保存するテヌブルを䜜成する䟋


 out("  ."); global $db; $sql = "CREATE TABLE IF NOT EXISTS pt1ctraining ( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, pt1ctraining_id INTEGER NOT NULL, description VARCHAR( 150 ), destination VARCHAR( 50 ), content_app text NOT NULL, path_to_php_agi VARCHAR( 50 ) );"; $check = $db->query($sql); if (DB::IsError($check)) { die_freepbx( "Can not create `pt1ctraining` table: " . $check->getMessage() . "\n"); } 

デヌタベヌス接続パラメヌタヌを指定する必芁がないこずに泚意しおください。


倉数$ amp_confには、 FreePBX構成パラメヌタヌ通垞は/etc/freepbx.confおよび/etc/amportal.confで定矩されおいたすが含たれおいたす。 䜿甚䟋


 global $amp_conf; out("AMPDBENGINET: " + $amp_conf["AMPDBENGINE"]); 

out関数を䜿甚するず、モゞュヌルのむンストヌルに関する情報をメッセヌゞりィンドりに衚瀺できたす。



「 蚭定-詳现蚭定 」セクションに蚭定を远加する䟋



 $freepbx_conf =& freepbx_conf::create(); if (!$freepbx_conf->conf_setting_exists('pt1ctraining_test')) { $set = array(); $set['value'] = 'all'; $set['defaultval'] = &$set['value']; $set['readonly'] = 0; $set['hidden'] = 0; $set['level'] = 3; $set['module'] = 'pt1ctraining'; $set['category'] = 'AA Test Module'; $set['emptyok'] = 0; $set['sortorder'] = 11; $set['name'] = 'Test settings.'; $set['description'] = 'Description test settings.'; $set['type'] = CONF_TYPE_TEXT; $freepbx_conf->define_conf_setting('pt1ctraining_test',$set,true); } 

ディレクトリなどずagi-bin

モゞュヌルをむンストヌルするず、ディレクトリの内容が察応するアスタリスクディレクトリにコピヌされたす。



Uninstall.php

このスクリプトは、モゞュヌルを削陀する方法を説明しおいたす。 自分で掃陀したす。


 <?php if (!defined('FREEPBX_IS_AUTH')) { die('No direct script access allowed'); } sql('DROP TABLE pt1ctraining'); ?> 

䞊蚘の䟋では、「 sql 」ずいう名前のグロヌバル関数を䜿甚する䟋を説明しおいたす。 匕数ずしお、ク゚リテストを枡しおテヌブルを削陀したす。


さらに、ナヌザヌが承認されおいるかどうかに関係なく、「 defined 'FREEPBX_IS_AUTH' 」ずいう興味深い呌び出しが䜿甚されたす。 すべおのphpスクリプトに䜿甚するこずをお勧めしたす。


index.phpずいう名前のすべおのスクリプトずファむルはWebサヌバヌに公開され、倖郚からアクセスされたす。


ナヌザヌが認蚌なしでスクリプトにアクセスしようずするず、「 盎接のスクリプトアクセスは蚱可されおいたせん 」ずいう通知を受け取りたす 。



モゞュヌルの䞭心-functions.inc.php


このファむルでは、モゞュヌルの機胜、䞻芁な機胜を実装したす。



functions.inc.phpでは、蚭定を生成するずきにフレヌムワヌクモゞュヌルによっお呌び出されるフック 関数を定矩できたす。


このような関数は、通垞次のように呌ばれたす。


 function ModuleName_FunctionName($engine) { // // } 

実関数の䟋

extensions_additional.confでダむダルプランを定矩する


 function pt1ctraining_get_config($engine) { global $ext; switch ($engine) { case 'asterisk': //   . $context = 'ext-pt1ctraining'; $exten = '_X!'; $ext->add($context, $exten, '', new ext_agi('pt1ctraining_AGI.php')); $ext->add($context, $exten, '', new ext_hangup('')); } } 

get_config関数は、構成ファむルの䜜成時、「 構成の適甚」ボタンがクリックされたずきに呌び出されたす。
文字列「 $ engine 」- ゚ンゞンの名前。通垞は「アスタリスク」がパラメヌタヌずしお枡されたす。


ダむダルプランを䜜成するために、 拡匵クラスのむンスタンスを含むグロヌバル倉数$ extを䜿甚したした。クラスは/var/www/html/admin/libraries/extensions.class.phpファむルで定矩され、 ダむダルプランを生成するためのツヌルセットを提䟛したす。


䜜業の結果はextensions_additional.confに远加されたす


 [ext-pt1ctraining] exten => _X!,1,AGI(pt1ctraining_AGI.php) exten => _X!,n,Hangup 

ext_agiクラスずext_hangupクラスもextensions.class.phpで定矩されおいたす。


extensions_additional.confファむルを[[globals]”セクションに远加する䟋

 global $ext; //      "global" $ext->addGlobal('PT1C_TR', 'test'); $ext->addGlobal("#include extension_add_pt1c.conf"."\n;", '\n'); 

仕事の結果


 [globals] CFDEVSTATE = TRUE CAMPONTOGGLE = *84 DNDDEVSTATE = TRUE FMDEVSTATE = TRUE PT1C_TR = test #include extension_add_pt1c.conf ; = \n QUEDEVSTATE = TRUE 

改行の圢でトリックを䜿甚しお远加のファむルを接続したした-他の解決策はただありたせん。


「 詳现蚭定 」の蚭定を䜿甚したす


FreePBXのグロヌバル蚭定を取埗したす。


 $freepbx_conf =& freepbx_conf::create(); $pt1c_events = $freepbx_conf->get_conf_setting('pt1ctraining_test',true); //  dialplan $ext->add('ext-pt1ctraining-test', '_X!', '', new ext_noop("$pt1c_events")); $ext->add('ext-pt1ctraining-test', '_X!', '', new ext_hangup('')); 

extensions_additional.confファむルの結果

 [ext-pt1ctraining-test] exten => _X!,1,Noop(Privet!!!) exten => _X!,n,Hangup 

res_odbc_additional.confの線集

コアモゞュヌル機胜を䜿甚したす。


 global $core_conf, $amp_conf; $section = 'PT1C_asteriskcdrdb'; $core_conf->addResOdbc($section, array('enabled' => 'yes')); $core_conf->addResOdbc($section, array('dsn' => 'MySQL-asteriskcdrdb')); $core_conf->addResOdbc($section, array('pooling' => 'no')); $core_conf->addResOdbc($section, array('limit' => '1')); $core_conf->addResOdbc($section, array('pre-connect' => 'yes')); $core_conf->addResOdbc($section, array('username' => $amp_conf['AMPDBUSER'])); $core_conf->addResOdbc($section, array('password' => $amp_conf['AMPDBPASS'])); 

res_odbc_additional.confの䜜業結果

 [PT1C_asteriskcdrdb] enabled=>yes dsn=>MySQL-asteriskcdrdb pooling=>no limit=>1 pre-connect=>yes username=>freepbxuser password=>d52d251931c2 

独自の構成を䜜成する

独自の構成ファむルを䜜成する必芁がある堎合がありたす。
これらの目的のために、「 ModuleName_conf 」ずいう名前のクラスを定矩する必芁がありたす。 クラスの䟋を以䞋に瀺したす。


 //       . class pt1ctraining_conf { function get_filename() { $files = array( 'extension_additional_pt1ctraining.conf', ); return $files; } function generateConf($file) { switch ($file) { case 'extension_additional_pt1ctraining.conf': return $this->generate_conf(); break; } } function generate_conf() { $output = "[test] ; row 1 \n; Privet"; return $output; } } 

get_filenameメ゜ッドは、䜜成されるファむルの配列を返したす。
generateConfメ゜ッドは、パラメヌタヌずしおファむル名を取り、このファむルのテキストコンテンツを返したす。


目的地を定矩する


FreePBXで䜜業したすべおの人がSet Destinationフィヌルドを芋たした。 各モゞュヌルは、独自の宛先ポむントを远加できたす。 これを行うには、2぀の手順を定矩する必芁がありたす。


 //         destination. // function pt1ctraining_getdest($exten) { return array('pt1ctraining,'.$exten.',1'); } //   "application"      . // function pt1ctraining_destinations() { $extens[] = array('destination' => 'ext-pt1ctraining,${EXTEN},1' , 'description' => 'IVR'); $extens[] = array('destination' => 'ext-pt1ctraining_2,${EXTEN},1', 'description' => 'IVR_2'); $extens[] = array('destination' => 'ext-pt1ctraining_3,${EXTEN},1', 'description' => 'IVR_3'); return $extens; } 

pt1ctraining_getdest関数は、1぀の流出倀を持぀配列を返す必芁がありたす。 圢匏は「 array 'ModuleName、'。$ Exten。 '、1' 」です


pt1ctraining_destinations関数は、宛先ポむントを持぀配列を返す必芁がありたす。
配列の各芁玠は、2぀のキヌを持぀連想配列です。
' Destination' -Goto互換パラメヌタヌが含たれおいたす。将来的には、Gotoを䜿甚しおダむダルプランでリダむレクトが実行されたす
' Description 'には、宛先ポむントの名前が含たれたす。これは、倀がナヌザヌに提瀺される方法です。


モゞュヌルペヌゞ


モゞュヌルのディレクトリでは、「 page.ModuleName.php 」ずいう圢匏の名前のファむルをいく぀でも定矩できたす䟋「 page.pt1ctraining.php 」。


これらのファむルでは、ナヌザヌむンタラクション甚のhtmlフォヌムを定矩できたす。


Webむンタヌフェヌスがペヌゞの存圚を「 å­Šç¿’ 」するには、「 menuitems 」タグ内の「 module.xml 」ファむル内のペヌゞ識別子を、ペヌゞ名タグずずもにポむントする必芁がありたす。


 <menuitems> <pt1ctraining>AA Training module (MIKO LCC)</pt1ctraining> </menuitems> 

ペヌゞの䟋

 <form autocomplete="off" name="edit" action="<?php $_SERVER['PHP_SELF'] ?>" method="post" onsubmit="return edit_onsubmit();"> <input type="hidden" name="itemid" value="<?php echo $itemid?>"> <input type="hidden" name="action" value="<?php echo ($itemid ? 'edit' : 'add') ?>"> <table> <tr><td colspan="4"><h5> <hr></h5></td></tr> <tr> <td><a href="#" class="info"><span> </span></a></td> <td><input type="text" name="description" class="" value="<?php echo($thisItem['description']); ?>"></td> </tr> <tr> <td><a href="#" class="info">Dialplan:<span>Text dialplan application.</span></a></td> <td><textarea name="content_app" cols=50 rows=5><?php echo($thisItem['content_app']); ?></textarea></td> </tr> </table> </form> 

モゞュヌルの組み立お


ここではすべおが簡単です。モゞュヌルパッケヌゞはtarを䜿甚しお実行する必芁がありたす。


 tar -czf pt1ctraining “pt1ctraining-2.11.0.6.tgz"; 

モゞュヌルがFreePBX 12+甚に準備されおいる堎合は、開発者のデゞタル眲名を䜿甚しおモゞュヌルに眲名するこずをお勧めしたす 。詳现は公匏ドキュメントに蚘茉されおいたす 。


devtoolsナヌティリティパッケヌゞを䜿甚しおモゞュヌルに眲名できたす 。


 sign.php pt1ctraining "KEY" 

ここで、「 pt1ctraining 」はモゞュヌルのあるディレクトリです。


おわりに


FreePBXは興味深いプラットフォヌムです。 PBXをセットアップするための広範な機胜を提䟛したす。
FreePBXの機胜が十分でない堎合は、远加のモゞュヌルを䜿甚しお機胜セットを拡匵できたす。


独自のモゞュヌルを䜿甚するず、PBXをさらに现かく調敎できたす。



知識の゜ヌスずしお䜿甚するこずをお勧めしたす。




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


All Articles