214 lines
13 KiB
PHP
214 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
class SwooleHttp extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'swoole:http';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'swoole http';
|
|
|
|
/**
|
|
* Create a new command instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function handle()
|
|
{
|
|
$http = new \Swoole\Http\Server("127.0.0.1", 9501);
|
|
$http->set([
|
|
'worker_num' => 1,
|
|
]);
|
|
$conf = [
|
|
'host' => config('freeswitch.esl.host'),
|
|
'port' => config('freeswitch.esl.port'),
|
|
'password' => config('freeswitch.esl.password'),
|
|
'fs_cli_bin' => '/usr/local/freeswitch/bin/fs_cli',
|
|
'gateway' => '/usr/local/freeswitch/conf/sip_profiles/external/',
|
|
'directory' => '/usr/local/freeswitch/conf/directory/default/',
|
|
//拨号计划下面默认分为default(呼出)和public(呼入)
|
|
'dialplan' => '/usr/local/freeswitch/conf/dialplan/',
|
|
'callcenter' => '/usr/local/freeswitch/conf/autoload_configs/callcenter.conf.xml'
|
|
];
|
|
$http->on('request', function ($request, $response) use ($conf) {
|
|
if($request->server['request_method'] == 'POST'){
|
|
$data = json_decode($request->getContent(),true);
|
|
$uri = $request->server['request_uri'];
|
|
$return = ['code'=>1,'msg'=>''];
|
|
$command = $conf['fs_cli_bin']." -H ".$conf['host']." -P ".$conf['port']." -p ".$conf['password']." -x ";
|
|
try{
|
|
switch($uri){
|
|
case '/gateway': //网关
|
|
//清空所有文件
|
|
array_map('unlink', glob($conf['gateway']."*"));
|
|
//再写入
|
|
foreach ($data as $d){
|
|
$xml = "<include>\n";
|
|
$xml .= "\t<gateway name=\"gw".$d['id']."\">\n";
|
|
$xml .= "\t\t<param name=\"realm\" value=\"".$d['realm']."\"/>\n";
|
|
if ($d['type'] == 1){ //sip对接
|
|
$xml .= "\t\t<param name=\"username\" value=\"".$d['username']."\"/>\n";
|
|
$xml .= "\t\t<param name=\"password\" value=\"".$d['password']."\"/>\n";
|
|
$xml .= "\t\t<param name=\"register\" value=\"true\"/>\n";
|
|
}else{ //ip对接
|
|
$xml .= "\t\t<param name=\"proxy\" value=\"".$d['realm']."\"/>\n";
|
|
$xml .= "\t\t<param name=\"register\" value=\"false\"/>\n";
|
|
}
|
|
$xml .= "\t\t<param name=\"caller-id-in-from\" value=\"true\"/>\n";
|
|
$xml .= "\t</gateway>\n";
|
|
$xml .= "</include>";
|
|
file_put_contents($conf['gateway']."gw".$d['id'].".xml",$xml);
|
|
}
|
|
exec($command."\""."sofia profile external restart"."\"");
|
|
$return = ['code'=>0,'msg'=>'网关更新成功'];
|
|
break;
|
|
case '/directory': //分机
|
|
//清空所有文件
|
|
array_map('unlink', glob($conf['directory']."*"));
|
|
//再写入
|
|
foreach($data as $d){
|
|
$xml = "<include>\n";
|
|
$xml .= "\t<user id=\"".$d['username']."\">\n";
|
|
$xml .= "\t\t<params>\n";
|
|
$xml .= "\t\t\t<param name=\"password\" value=\"".$d['password']."\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"vm-password\" value=\"".$d['username']."\"/>\n";
|
|
$xml .= "\t\t</params>\n";
|
|
$xml .= "\t\t<variables>\n";
|
|
$xml .= "\t\t\t<variable name=\"toll_allow\" value=\"domestic,international,local\"/>\n";
|
|
$xml .= "\t\t\t<variable name=\"accountcode\" value=\"".$d['username']."\"/>\n";
|
|
$xml .= "\t\t\t<variable name=\"user_context\" value=\"default\"/>\n";
|
|
$xml .= "\t\t\t<variable name=\"effective_caller_id_name\" value=\"".$d['username']."\"/>\n";
|
|
$xml .= "\t\t\t<variable name=\"effective_caller_id_number\" value=\"".$d['username']."\"/>\n";
|
|
$xml .= "\t\t\t<variable name=\"callgroup\" value=\"techsupport\"/>\n";
|
|
$xml .= "\t\t</variables>\n";
|
|
$xml .= "\t</user>\n";
|
|
$xml .= "</include>\n";
|
|
file_put_contents($conf['directory'].$d['username'].".xml",$xml);
|
|
}
|
|
exec($command."\""."reloadxml"."\"");
|
|
$return = ['code'=>0,'msg'=>'分机更新成功'];
|
|
break;
|
|
case '/dialplan': //拨号计划
|
|
foreach($data as $context=>$extension){
|
|
$xml = "<include>\n";
|
|
$xml .= "\t<context name=\"".$context."\">\n";
|
|
foreach ($extension as $exten){
|
|
$xml .= "\t\t<extension name=\"" . $exten['name'] . "\" continue=\"" . $exten['continue'] . "\" >\n";
|
|
if(isset($exten['condition']) && !empty($exten['condition'])){
|
|
foreach($exten['condition'] as $condition){
|
|
if(isset($condition['action']) && !empty($condition['action'])){
|
|
$xml .= "\t\t\t<condition field=\"" . $condition['field'] . "\" expression=\"" . $condition['expression'] . "\" break=\"" . $condition['break'] . "\">\n";
|
|
foreach ($condition['action'] as $action){
|
|
$xml .= "\t\t\t\t<action application=\"" . $action['application'] . "\" data=\"" . $action['data'] . "\" />\n";
|
|
}
|
|
$xml .= "\t\t\t</condition>\n";
|
|
}else{
|
|
$xml .= "\t\t\t<condition field=\"" . $condition['field'] . "\" expression=\"" . $condition['expression'] . "\" break=\"" . $condition['break'] . "\" />\n";
|
|
}
|
|
}
|
|
}
|
|
$xml .= "\t\t</extension>\n";
|
|
}
|
|
$xml .= "\t</context>\n";
|
|
$xml .= "</include>\n";
|
|
file_put_contents($conf['dialplan'].$context.".xml",$xml);
|
|
}
|
|
exec($command."\""."reloadxml"."\"");
|
|
$return = ['code'=>0,'msg'=>'拨号计划更新成功'];
|
|
break;
|
|
case '/callcenter':
|
|
$xml = "<configuration name=\"callcenter.conf\" description=\"CallCenter\">\n";
|
|
$xml .= "\t<settings>\n";
|
|
$xml .= "\t\t<!--<param name=\"odbc-dsn\" value=\"dsn:user:pass\"/>-->\n";
|
|
$xml .= "\t\t<!--<param name=\"dbname\" value=\"/dev/shm/callcenter.db\"/>-->\n";
|
|
$xml .= "\t\t<!--<param name=\"cc-instance-id\" value=\"single_box\"/>-->\n";
|
|
$xml .= "\t\t<param name=\"truncate-tiers-on-load\" value=\"true\"/>\n";
|
|
$xml .= "\t\t<param name=\"truncate-agents-on-load\" value=\"true\"/>\n";
|
|
$xml .= "\t</settings>\n";
|
|
//---------------------------------- 写入队列信息 ------------------------------------
|
|
$xml .= "\t<queues>\n";
|
|
foreach ($data['queues'] as $queue){
|
|
$xml .= "\t\t<queue name=\"queue".$queue['id']."\">\n";
|
|
$xml .= "\t\t\t<param name=\"strategy\" value=\"".$queue['strategy']."\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"moh-sound\" value=\"\$\${hold_music}\"/>\n";
|
|
//$xml .= "\t\t\t<param name=\"record-template\" value=\"\$\${recordings_dir}/\${strftime(%Y)}/\${strftime(%m)}/\${strftime(%d)}/.\${destination_number}.\${caller_id_number}.\${uuid}.wav\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"time-base-score\" value=\"system\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"max-wait-time\" value=\"".$queue['max_wait_time']."\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"max-wait-time-with-no-agent\" value=\"0\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"max-wait-time-with-no-agent-time-reached\" value=\"5\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"tier-rules-apply\" value=\"false\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"tier-rule-wait-second\" value=\"300\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"tier-rule-wait-multiply-level\" value=\"true\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"tier-rule-no-agent-no-wait\" value=\"false\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"discard-abandoned-after\" value=\"60\"/>\n";
|
|
$xml .= "\t\t\t<param name=\"abandoned-resume-allowed\" value=\"false\"/>\n";
|
|
$xml .= "\t\t</queue>\n";
|
|
}
|
|
$xml .= "\t</queues>\n";
|
|
|
|
//---------------------------------- 写入坐席信息 ------------------------------------
|
|
$xml .= "\t<agents>\n";
|
|
foreach ($data['agents'] as $agent){
|
|
$contact = "[leg_timeout=10]user/".$agent['username'];
|
|
$xml .= "\t\t<agent name=\"agent".$agent['id']."\" type=\"callback\" contact=\"".$contact."\" status=\"".$agent['status']."\" max-no-answer=\"0\" wrap-up-time=\"10\" reject-delay-time=\"0\" busy-delay-time=\"0\" no-answer-delay-time=\"0\" />\n";
|
|
}
|
|
$xml .= "\t</agents>\n";
|
|
|
|
//---------------------------------- 写入队列-坐席信息 ------------------------------------
|
|
$xml .= "\t<tiers>\n";
|
|
foreach ($data['queues'] as $queue){
|
|
if (isset($queue['agents'])&&!empty($queue['agents'])) {
|
|
foreach ($queue['agents'] as $agent){
|
|
$xml .= "\t\t<tier agent=\"agent".$agent['id']."\" queue=\"queue".$queue['id']."\" level=\"1\" position=\"1\"/>\n";
|
|
}
|
|
}
|
|
}
|
|
$xml .= "\t</tiers>\n";
|
|
$xml .= "</configuration>\n";
|
|
//生成配置文件
|
|
file_put_contents($conf['callcenter'],$xml);
|
|
exec($command."\""."reload mod_callcenter"."\"");
|
|
$return = ['code'=>0,'msg'=>'分机更新成功'];
|
|
break;
|
|
case '/favicon.ico':
|
|
$response->status(404);
|
|
$response->end();
|
|
break;
|
|
default:
|
|
$return = ['code'=>1,'msg'=>'uri error'];
|
|
}
|
|
$response->end(json_encode($return));
|
|
}catch(\Exception $e){
|
|
print_r($e->getMessage());
|
|
$response->end(json_encode(['code'=>1,'msg'=>'error','data'=>$e->getMessage()]));
|
|
}
|
|
}else{
|
|
$response->end("hello word!");
|
|
}
|
|
});
|
|
$http->start();
|
|
}
|
|
}
|