accept_outofcall_message = yes outofcall_message_context = messages auth_message_requests = no
[messages] exten => _.,1,Set(MSG_TO=${CUT(MESSAGE(to),@,1)}) exten => _.,n,MessageSend(${MSG_TO},${MESSAGE(from)}) exten => _.,n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?sendfailedmsg) exten => _.,n,Hangup() exten => _.,n(sendfailedmsg),Set(MSG_TMP=${CUT(MESSAGE(from),<,2)}) exten => _.,n,Set(MSG_FROM=${CUT(MSG_TMP,@,1)}) exten => _.,n,Set(ODBC_SAVE_MESSAGE("${MESSAGE(from)}","${MSG_TO}","${MESSAGE(body)}")=1) exten => _.,n,Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] ${EXTEN} . , .") exten => _.,n,MessageSend(${MSG_FROM}, SYSTEM) exten => _.,n,Hangup()
CREATE TABLE IF NOT EXISTS `messages` ( `id` int(11) NOT NULL AUTO_INCREMENT, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `mfrom` varchar(100) CHARACTER SET utf8 NOT NULL, `mto` varchar(100) CHARACTER SET utf8 NOT NULL, `mbody` text CHARACTER SET utf8 NOT NULL, `delivered` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
[SAVE_MESSAGE] writesql = INSERT INTO messages (mfrom,mto,mbody) VALUES ('${ARG1}','${ARG2}','${BASE64_ENCODE(${ARG3})}') dsn = asteriskcdrdb
<?php #asteriskcdrdb database #mysql settings $hostname = "localhost"; $username = "asteriskuser"; $password = "password"; $dbName = "asteriskcdrdb"; mysql_connect($hostname,$username,$password) or die("no connect to MySQL."); mysql_select_db($dbName) or die("ERROR: ".mysql_error()); mysql_query("set names 'utf8'"); $messages_query = mysql_query('SELECT `id`,`mfrom`,`mto`,`mbody` FROM `messages` WHERE `delivered` = "0000-00-00 00:00:00" ORDER BY `dt`') or die("ERROR: ".mysql_error()); while($message = mysql_fetch_array($messages_query, MYSQL_ASSOC)) { $peer_to = explode(":", $message['mto']); if (peer_online($peer_to[1])) { //print_r($message); file_put_contents('/tmp/delayed_message_'.$peer_to[1].'_'.time(), 'Channel: Local/s@default'."\r\n".'Application: MessageSend'."\r\n".'Set: MESSAGE(body)='.base64_decode($message['mbody'])."\r\n".'Data: '.$message['mto'].','.$message['mfrom']."\r\n"); exec("mv /tmp/delayed_message_* /var/spool/asterisk/outgoing/"); mysql_query('UPDATE `messages` SET `delivered` = "'.date("Ymd H:i:s").'" WHERE `id` = '.$message['id']." LIMIT 1") or die("ERROR: ".mysql_error()); } } function peer_online($peer) { $raw = shell_exec('asterisk -rx "sip show peer '.$peer.'" | grep "Status" | grep "OK"'); print $raw; if(!empty($raw)) return true; else return false; } ?>
Source: https://habr.com/ru/post/322462/
All Articles