Monday, October 27, 2014

Tables to support the GoIP incoming for both line is either non-busy or busy

When the GSM line is non-busy, GOIP allows user to configure the "Forward to VOIP number", For this case, I have set the VOIP number to 991 (call group in asterisk). And in the asterisk, I customised the 991 in the "/etc/asterisk" extensions_custom.conf with the following code

[ext-group-custom]
; here we start goip call handling
exten => 991,1,Macro(user-callerid,)
exten => 991,n,GotoIf($["foo${BLKVM_OVERRIDE}" = "foo"]?skipdb)
exten => 991,n,GotoIf($["${DB(${BLKVM_OVERRIDE})}" = "TRUE"]?skipov)
exten => 991,n(skipdb),Set(__NODEST=)
exten => 991,n,Set(__BLKVM_OVERRIDE=BLKVM/${EXTEN}/${CHANNEL})
exten => 991,n,Set(__BLKVM_BASE=${EXTEN})
exten => 991,n,Set(DB(${BLKVM_OVERRIDE})=TRUE)
exten => 991,n(skipov),Set(RRNODEST=${NODEST})
exten => 991,n(skipvmblk),Set(__NODEST=${EXTEN})
exten => 991,n,GosubIf($[${DB_EXISTS(RINGGROUP/991/changecid)} = 1 & "${DB(RINGGROUP/991/changecid)}" != "default" & "${DB(RINGGROUP/991/changecid)}" != ""]?sub-rgsetcid,s,1)
exten => 991,n,AGI(callgroup_mapping.agi)
exten => 991,n,NoOP("NewCallGroup=${callgrp}")
exten => 991,n,NoOP("NewCallType=${calltype}")
exten => 991,n,Set(RecordMethod=Group)
exten => 991,n,Macro(record-enable,${callgrp},${RecordMethod})
exten => 991,n,Set(RingGroupMethod=${calltype})
exten => 991,n(DIALGRP),Macro(dial,20,${DIAL_OPTIONS},${callgrp})
exten => 991,n,Set(RingGroupMethod=)
exten => 991,n,GotoIf($["foo${RRNODEST}" != "foo"]?nodest)
exten => 991,n,Set(__NODEST=)
exten => 991,n,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 991,n,Goto(app-blackhole,hangup,1)
exten => 991,n(nodest),Noop(SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST})



as you can see the above, it calls the "callgroup_mapping.agi".

Refer to the /var/lib/asterisk/agi-bin/callgroup_mapping.agi
it search in the cdr table for the last extension call make out to the caller id .
Base on this ext., it searches for goip_callgroup table for the call routing numbers.
The routing number has to be in the format of the call group e.g
7109-60123836313# or 8109-8110-8111

The above is for the non-busy.. as for busy.. the GOIP's SIM FORWARD
to a special number - "0321069278" and for this number, it has customised as "incoming route" for below "extensions_custom.conf"

to call the 991
[ext-did-0002-custom]
exten => 60321069278,1,Set(__FROM_DID=${EXTEN})
exten => 60321069278,n,Gosub(app-blacklist-check,s,1)
exten => 60321069278,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => 60321069278,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => 60321069278,n,Set(CALLERPRES()=allowed_not_screened)
exten => 60321069278,n(dest-ext),Goto(ext-group,991,1)

So the above try to loop back to the 991. 






Sunday, October 19, 2014

Open trunk or extension for MyPBX to connect to

You can either define new trunk with the following information on the
User Context =
User Details
type=friend
secret=1234Goip
qualify=yes
host=dynamic
dtmfmode=rfc2833
context=from-internal
canreinvite=no

However this option, it will not able to pass thru the a2billing since the accountcode is not defined.

To enable this, you need to define the account in the user context.

The other method is to define a new extension but for this option, you unable to pass thru the CLI as it will always follow the CLI defined at the extension level.

Monday, October 6, 2014

GOIP - handling incoming for multiple tenants

The GOIP single server mode will help in supporting the multiple tenants. The call within the GOIP  trunk will be randomly assigned to the any of the available channel. However, as for the incoming, we will have to configure the PSTN to VOIP forwarding. The good thing is that the GOIP allows you to specify the call group ext number. hence, I defined a generic call group no. 991 for all the SIM.

As for the 991, I customised the "extensions_custom.conf" and the 991 will call the agi in the "callgroup_mapping.agi" /var/lib/asterisk/agi-bin/

within this agi, it will select the last extension e.g 7109 which calls the caller id. the script will then check on the "goip_callgroup" table. in this table, you shall define which call group that the call shall route to for incoming. e.g if any of the caller calling 7109, it will route to the same ext. or you have an option to divert the call to another ext or even to a group of ext e.g 7109-6012xxxxx#-2701

With the above, I can upsell the sim base trunk to customer with more attractive rate.

Friday, September 26, 2014

Steps to handling the call forwarding (from call group)

The current a2billing doesn't support the call forwarding and incoming call rating. Hence, we will have to write our own rating engine and also update the a2billing tables according.
Based on the following SQL, we shall able to identify all the call fowarding traffic but then it has to be match to the individual calling number to determine the account no.

mysql> select calldate, dst, dcontext, dst, billsec, (billsec/60) into outfile "/tmp/DS20141005_04" FIELDS TERMINATED BY '|' from cdr where channel like '%from-internal%' and dcontext = "from-internal" and dst = "60182258257" and calldate > "2014-09-01 00:00:00" and calldate <= "2014-09-30 23:59:59" order by calldate;

Steps to generate new bill for customer (Jinercel)

Login to Jinercel Server

 mysql --user=root --password=xxxxxx

use mya2billing;

search for the account id for the customer - refer to the elastix, "Extras", "Calling Cards",

SELECT a.starttime, a.src, a.sessionid, a.calledstation, a.sessiontime, a.sessionbill into outfile "/tmp/VENUS20140926_01" FIELDS TERMINATED BY '|' from cc_call a, cc_card b where b.id = a.card_id and a.starttime >= "2014-08-01 00:00:00" and  a.starttime <= "2014-08-31 23:59:59" and b.username = '1483798503' and a.sessionbill > 0 order by a.starttime;

scp the outfile to the local PC

start up the "wkhtmltopdf TRIAL" instance

login to the instance and cd "/var/tmp/perldev/jinercel/v01"

scp the outfile into this instance


Tuesday, September 16, 2014

twilio - aggregated sms gateway

found the twilio when looking for freelancer.
initially, I thought that they provide attractive sms rate of 0.027 but only later found out that this is in US currency which converted to RM is close to 9sen / sms. Much higher than local content provider rate. Hence, the short code option is not viable through twilio.
Nevertheless,  please find the following method to test the twilio with their published REST API

Go to 54.254.53.88 (wkhtmltopdf server)
go to /var/tmp/twilio/twilio-php-master
edit test.php

install the twilio-php-master.zip
unzip in the PC and download (winscp) into the server (/var/tmp/twilio/twilio-php-master)
follow the sample code on the twilio website. 



require "/var/tmp/twilio/twilio-php-master/Services/Twilio.php";

// set your AccountSid and AuthToken from www.twilio.com/user/account
$AccountSid = "AC637853e1e1201472b91684dbcc88bd87";
$AuthToken = "a080c7872a6a0fe5dccd4784813ec34e";

$client = new Services_Twilio($AccountSid, $AuthToken);

//$message = $client->account->messages->create(array(
//    "From" => "66001",
//    "To" => "60123836313",
//    "Body" => "Test message!",
//));

// Display a confirmation message on the screen
//echo "Sent message {$message->sid}";


$sms = $client->account->messages->sendMessage(

        // Step 6: Change the 'From' number below to be a valid Twilio number
        // that you've purchased, or the (deprecated) Sandbox number
            "+1 717-454-2049",


            // the number we are sending to - Any phone number

.....

Monday, September 1, 2014

Sample code to send and retrieve Whatsapp

Go to http://blog.philippheckel.com/2013/07/07/send-whatsapp-messages-via-php-script-using-whatsapi/
Login to "wkhtmltopdf TRIAL" amazon server
as root
cd /var/whatsapp/WhatsAPI
change the whatsapp_whatsapi_config.php