http://www.ztmaker.com/read.php?tid-325.html一、Asterisk 端配置
修改配置文件"/etc/asterisk/manager_custom.conf",在其中添加一個(gè)管理帳號(hào)"vtigercrm":
[vtigercrm]
secret = vtigercrm
deny=0.0.0.0/0.0.0.0
permit=192.168.1.3/255.255.255.0
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
然后重啟 Asterisk:
二、CRM 端配置
1、設(shè)置模塊
使用管理員登錄"VtigerCRM",在菜單中選擇"Settings->Module Manager"進(jìn)入模塊列表頁(yè)面。
在此頁(yè)面中找到"PBX Manager"模塊,將其啟用后,點(diǎn)擊配置圖標(biāo)對(duì)此模塊進(jìn)行配置。各配置項(xiàng)內(nèi)容如下:
Asterisk server IP: 填寫 Asterisk 服務(wù)器地址
Asterisk server port: 填寫 Asterisk 管理端口,默認(rèn)為 5038
Asterisk username: 填寫 Asterisk 帳號(hào)名稱,按之前的配置就填寫為"vtigercrm"
Asterisk password: 填寫 Asterisk 帳號(hào)密碼,按之前的配置就填寫為"vtigercrm"
Asterisk Version: 選擇 Asterisk 的版本
2、設(shè)置用戶分機(jī)
使用用戶帳號(hào)登錄后,點(diǎn)擊右上方的"My Preferences",在打開的頁(yè)面中找到"Asterisk Configuration"欄,并作如下配置:
Asterisk Extension: 填寫用戶的分機(jī)號(hào)
Receive Incoming Calls: 選中此選項(xiàng)
3、啟動(dòng)客戶端程序
使用 SSH 登錄 CRM 服務(wù)器,進(jìn)入 CRM 系統(tǒng)安裝路徑下的"cron/modules/PBXManager"目錄,然后運(yùn)行以下命令:
# ./AsteriskClient.php
如果一切正常就會(huì)出現(xiàn)如下信息:
Date: 05-03-2010
Connecting to asterisk server.....
Connected successfully
Trying to login to asterisk
Logged in successfully to asterisk server
至此,就可以使用電話撥打剛才設(shè)置的用戶分機(jī)號(hào)了,如果一切正常,就可以看到CRM頁(yè)面的右下角就會(huì)出現(xiàn)一個(gè)來(lái)電提示框。另外在菜單中打開"Tools->PBX Manager",在頁(yè)面中也可以看到來(lái)電記錄。
注:如果 Asterisk 是 1.4 版的,請(qǐng)到以下位置下載修改過(guò)的"AsteriskClient.php"來(lái)替換原系統(tǒng)中的文件:
http://danielaliaman.com/blog///index.php/2009/07/23/vtiger_pbx_manager_issues_only_first_cal?blog=2http://hi.baidu.com/ahhui/blog/item/e275b419ca6b415343a9ad83.html
如何使用vtigercrm5.1實(shí)現(xiàn)點(diǎn)擊撥號(hào)、來(lái)電彈屏
環(huán)境:Elastix1.6 已經(jīng)實(shí)現(xiàn)的功能:vtigercrm點(diǎn)擊客戶電話撥號(hào),來(lái)電在vtigercrm彈屏。 未解決的問題:彈屏沒有來(lái)電號(hào)碼。
一、vtigercrm點(diǎn)擊呼出配置方法: 1、首先保證asterisk、vtigercrm都正常使用。
2、修改/etc/asterisk/manager.conf文件,增加如下:
[vtigecrm] secret = vtigecrm deny=0.0.0.0/0.0.0.0 permit=0.0.0.0/0.0.0.0 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user 復(fù)制代碼
以上代碼中vtigercrm不是特定的,但要在vtigercrm中的pbx設(shè)置要一致。
3、設(shè)置vtigercrm: 設(shè)定-模塊管理-PBX Manager
Asterisk server IP :192.168.0.15 (這是astersik服務(wù)器的IP) Asterisk server port :5038 (默認(rèn)5038) Asterisk username :vtigercrm Asterisk password :vtigercrm Asterisk Version:1.4 復(fù)制代碼·
4、設(shè)置vtigercrm中的個(gè)人分機(jī)號(hào): 我的設(shè)定 Asterisk Extension:800 (這是asterisk里已設(shè)定分機(jī)號(hào)) Receive Incoming Calls: 是
5、修改接口文件: /var/www/html/vtigercrm/modules/PBXManager/utils/AsteriskClass.php 將以下代碼:
switch($typeCalled){ case "SIP": $context = "local-extensions"; break; case "PSTN": $context = "from-inside";//"outbound-dialing"; break; default: $context = "default"; } 復(fù)制代碼
更改為:
switch($typeCalled){ case "SIP": $context = "local-extensions"; break; case "PSTN": $context = "from-internal";//"outbound-dialing"; break; default: $context = "from-internal"; } 復(fù)制代碼
如果順利,到這里就能用vtigercrm點(diǎn)擊撥號(hào)了,點(diǎn)擊號(hào)碼后,你的分機(jī)會(huì)響鈴,響鈴分機(jī)提機(jī)后,系統(tǒng)就自動(dòng)將號(hào)碼撥出。 參考:http://wiki.vtiger.com/index.php/vtiger510:Module_Asterisk_Howto 二、來(lái)電彈屏的設(shè)置方法: 這里需要運(yùn)行一個(gè)文件,并且運(yùn)行后,不能終止。 進(jìn)入這個(gè)目錄:/var/www/html/vtigercrm/cron/modules/PBXManager 運(yùn)行這個(gè)命令:
php AsteriskClient.php 復(fù)制代碼
運(yùn)行后,不能終止,如果服務(wù)器重啟過(guò),還需要再次運(yùn)行。
到這里,來(lái)電彈屏的功能也實(shí)現(xiàn)了,不過(guò)來(lái)電顯示問題沒找到答案。 翻閱vtigercrm社區(qū)論壇,也未找到合適的解決辦法,更有說(shuō)此方法比較好CPU資源。
|
彈屏補(bǔ)丁
vtigercrm/include/js/asterisk.js
function _defAsteriskTimer(){
var asteriskTimer = null;
var ASTERISK_POLLTIME = 5000; //vtigercrm polls the asterisk server for incoming calls after every 3 seconds for now
var ASTERISK_INCOMING_DIV_TIMEOUT = 60;
notificationPopup.js
function ResetPopup(){
popupDiv.innerHTML = "";
popupDiv.style.height = "0px";
popupDiv.style.display = "none";
parentDiv.removeChild(popupDiv);
if(parentDiv.children.length ==0){
parentDiv.style.display = "none";
}
}
vtigercrm/cron/modules/PBXManager/AsteriskClient.php
function asterisk_handleResponse2($mainresponse, $adb, $asterisk, $state) {
$appdata = $mainresponse['AppData'];
$uniqueid = $channel = $callerType = $extension = null;
$parseSuccess = false;
if(
$mainresponse['Event'] == 'Newexten' && (strstr($appdata, "__DIALED_NUMBER") || strstr($appdata, "EXTTOCALL"))
) {
$uniqueid = $mainresponse['Uniqueid'];
$channel = $mainresponse['Channel'];
$splits = explode('/', $channel);
$callerType = $splits[0];
$splits = explode('=', $appdata);
$extension = $splits[1];
$parseSuccess = true;
} else if($mainresponse['Event'] == 'OriginateResponse'){
//if the event is OriginateResponse then its an outgoing call and set the flag to 1, so that AsteriskClient does not pick up as incoming call
$uniqueid = $mainresponse['Uniqueid'];
$adb->pquery("UPDATE vtiger_asteriskincomingevents set flag = 1 WHERE uid = ?", array($uniqueid));
}else if($mainresponse['Event']=='NewCallerid'){
$channel = $mainresponse['Channel'];
if(strncmp($channel,"DAHDI",5)==0){
$uniqueid = $mainresponse['Uniqueid'];
if(!empty($mainresponse['CallerID'])) {
$callerNumber = $mainresponse['CallerID'];
}elseif(!empty($mainresponse['CallerIDNum'])) {
$callerNumber = $mainresponse['CallerIDNum'];
}
$sql = "UPDATE vtiger_asteriskincomingevents set from_number=? WHERE uid=?";
$adb->pquery($sql, array($callerNumber, $uniqueid));
}
}