Asterisk® SCF™ PJSIP em ARA (Asterisk Realtime Architecture).
Configurar o armazenamento em ARA com ODBC, é uma tarefa que exige um pouco de dedicação e atenção, o objetivo deste post é dar uma orientação de como executar esta tarefa com o Asterisk® SCF™. Este procedimento vai ser para os objetos PJSIP-AORs, AUTHs e ENDPOINTs.
Lembrando que estamos usando as seguintes configurações para validação deste post:
Sistema Operacional: CentOS Linux release 7.8.2003 (CORE) x86_64;
Asterisk® SCF™: Asterisk Certified release 16.8 certification 3.
As demais configurações segui o padrão LAMP. Nossa primeira ação é instalar o ODBC e o conector para o Banco de Dados MySQL:
# yum instalar mysql-connector-odbc unixODBC unixODBC-devel libmyodbc vim wget
Vamos criar um banco de dados no MySQL:
mysqladmin -u root -p create astmydb
Vamos criar um usuário e definir os direitos do acesso ao banco de dados:
mysql -u root -p -e "grant all privileges on astmydb.* to astmin@localhost identified by 'MyPass@2020';" mysql -u root -p -e "flush privileges;"
Este é o esquema do bando de dados:
Pequena alteração => adicionar ao ps_contacts `prune_on_boot` enum ('yes','no') DEFAULT NULL
CREATE TABLE `ps_aors` (
`id` varchar(40) NOT NULL,
`contact` varchar(255) DEFAULT NULL,
`default_expiration` int(11) DEFAULT NULL,
`mailboxes` varchar(80) DEFAULT NULL,
`max_contacts` int(11) DEFAULT NULL,
`minimum_expiration` int(11) DEFAULT NULL,
`remove_existing` enum('yes','no') DEFAULT NULL,
`qualify_frequency` int(11) DEFAULT NULL,
`authenticate_qualify` enum('yes','no') DEFAULT NULL,
`maximum_expiration` int(11) DEFAULT NULL,
`outbound_proxy` varchar(40) DEFAULT NULL,
`support_path` enum('yes','no') DEFAULT NULL,
`qualify_timeout` float DEFAULT NULL,
`voicemail_extension` varchar(40) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_aors_id` (`id`),
KEY `ps_aors_qualifyfreq_contact` (`qualify_frequency`,`contact`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_auths` (
`id` varchar(40) NOT NULL,
`auth_type` enum('md5','userpass') DEFAULT NULL,
`nonce_lifetime` int(11) DEFAULT NULL,
`md5_cred` varchar(40) DEFAULT NULL,
`password` varchar(80) DEFAULT NULL,
`realm` varchar(40) DEFAULT NULL,
`username` varchar(40) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_auths_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_contacts` (
`id` varchar(255) DEFAULT NULL,
`uri` varchar(255) DEFAULT NULL,
`expiration_time` bigint(20) DEFAULT NULL,
`qualify_frequency` int(11) DEFAULT NULL,
`outbound_proxy` varchar(40) DEFAULT NULL,
`path` text,
`user_agent` varchar(255) DEFAULT NULL,
`qualify_timeout` float DEFAULT NULL,
`reg_server` varchar(20) DEFAULT NULL,
`authenticate_qualify` enum('yes','no') DEFAULT NULL,
`via_addr` varchar(40) DEFAULT NULL,
`via_port` int(11) DEFAULT NULL,
`call_id` varchar(255) DEFAULT NULL,
`endpoint` varchar(40) DEFAULT NULL,
`prune_on_boot` enum('yes','no') DEFAULT NULL,
UNIQUE KEY `id` (`id`),
UNIQUE KEY `ps_contacts_uq` (`id`,`reg_server`),
KEY `ps_contacts_id` (`id`),
KEY `ps_contacts_qualifyfreq_exp` (`qualify_frequency`,`expiration_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_domain_aliases` (
`id` varchar(40) NOT NULL,
`domain` varchar(80) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_domain_aliases_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_endpoint_id_ips` (
`id` varchar(40) NOT NULL,
`endpoint` varchar(40) DEFAULT NULL,
`match` varchar(80) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_endpoint_id_ips_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_endpoints` (
`id` varchar(40) NOT NULL,
`transport` varchar(40) DEFAULT NULL,
`aors` varchar(200) DEFAULT NULL,
`auth` varchar(40) DEFAULT NULL,
`context` varchar(40) DEFAULT NULL,
`disallow` varchar(200) DEFAULT NULL,
`allow` varchar(200) DEFAULT NULL,
`direct_media` enum('yes','no') DEFAULT NULL,
`connected_line_method` enum('invite','reinvite','update') DEFAULT NULL,
`direct_media_method` enum('invite','reinvite','update') DEFAULT NULL,
`direct_media_glare_mitigation` enum('none','outgoing','incoming') DEFAULT NULL,
`disable_direct_media_on_nat` enum('yes','no') DEFAULT NULL,
`dtmf_mode` enum('rfc4733','inband','info','auto') DEFAULT NULL,
`external_media_address` varchar(40) DEFAULT NULL,
`force_rport` enum('yes','no') DEFAULT NULL,
`ice_support` enum('yes','no') DEFAULT NULL,
`identify_by` enum('username','auth_username') DEFAULT NULL,
`mailboxes` varchar(40) DEFAULT NULL,
`moh_suggest` varchar(40) DEFAULT NULL,
`outbound_auth` varchar(40) DEFAULT NULL,
`outbound_proxy` varchar(40) DEFAULT NULL,
`rewrite_contact` enum('yes','no') DEFAULT NULL,
`rtp_ipv6` enum('yes','no') DEFAULT NULL,
`rtp_symmetric` enum('yes','no') DEFAULT NULL,
`send_diversion` enum('yes','no') DEFAULT NULL,
`send_pai` enum('yes','no') DEFAULT NULL,
`send_rpid` enum('yes','no') DEFAULT NULL,
`timers_min_se` int(11) DEFAULT NULL,
`timers` enum('forced','no','required','yes') DEFAULT NULL,
`timers_sess_expires` int(11) DEFAULT NULL,
`callerid` varchar(40) DEFAULT NULL,
`callerid_privacy` enum('allowed_not_screened','allowed_passed_screened','allowed_failed_screened','allowed','prohib_not_screened','prohib_passed_screened','prohib_failed_screened','prohib','unavailable') DEFAULT NULL,
`callerid_tag` varchar(40) DEFAULT NULL,
`100rel` enum('no','required','yes') DEFAULT NULL,
`aggregate_mwi` enum('yes','no') DEFAULT NULL,
`trust_id_inbound` enum('yes','no') DEFAULT NULL,
`trust_id_outbound` enum('yes','no') DEFAULT NULL,
`use_ptime` enum('yes','no') DEFAULT NULL,
`use_avpf` enum('yes','no') DEFAULT NULL,
`media_encryption` enum('no','sdes','dtls') DEFAULT NULL,
`inband_progress` enum('yes','no') DEFAULT NULL,
`call_group` varchar(40) DEFAULT NULL,
`pickup_group` varchar(40) DEFAULT NULL,
`named_call_group` varchar(40) DEFAULT NULL,
`named_pickup_group` varchar(40) DEFAULT NULL,
`device_state_busy_at` int(11) DEFAULT NULL,
`fax_detect` enum('yes','no') DEFAULT NULL,
`t38_udptl` enum('yes','no') DEFAULT NULL,
`t38_udptl_ec` enum('none','fec','redundancy') DEFAULT NULL,
`t38_udptl_maxdatagram` int(11) DEFAULT NULL,
`t38_udptl_nat` enum('yes','no') DEFAULT NULL,
`t38_udptl_ipv6` enum('yes','no') DEFAULT NULL,
`tone_zone` varchar(40) DEFAULT NULL,
`language` varchar(40) DEFAULT NULL,
`one_touch_recording` enum('yes','no') DEFAULT NULL,
`record_on_feature` varchar(40) DEFAULT NULL,
`record_off_feature` varchar(40) DEFAULT NULL,
`rtp_engine` varchar(40) DEFAULT NULL,
`allow_transfer` enum('yes','no') DEFAULT NULL,
`allow_subscribe` enum('yes','no') DEFAULT NULL,
`sdp_owner` varchar(40) DEFAULT NULL,
`sdp_session` varchar(40) DEFAULT NULL,
`tos_audio` varchar(10) DEFAULT NULL,
`tos_video` varchar(10) DEFAULT NULL,
`sub_min_expiry` int(11) DEFAULT NULL,
`from_domain` varchar(40) DEFAULT NULL,
`from_user` varchar(40) DEFAULT NULL,
`mwi_from_user` varchar(40) DEFAULT NULL,
`dtls_verify` varchar(40) DEFAULT NULL,
`dtls_rekey` varchar(40) DEFAULT NULL,
`dtls_cert_file` varchar(200) DEFAULT NULL,
`dtls_private_key` varchar(200) DEFAULT NULL,
`dtls_cipher` varchar(200) DEFAULT NULL,
`dtls_ca_file` varchar(200) DEFAULT NULL,
`dtls_ca_path` varchar(200) DEFAULT NULL,
`dtls_setup` enum('active','passive','actpass') DEFAULT NULL,
`srtp_tag_32` enum('yes','no') DEFAULT NULL,
`media_address` varchar(40) DEFAULT NULL,
`redirect_method` enum('user','uri_core','uri_pjsip') DEFAULT NULL,
`set_var` text,
`cos_audio` int(11) DEFAULT NULL,
`cos_video` int(11) DEFAULT NULL,
`message_context` varchar(40) DEFAULT NULL,
`force_avp` enum('yes','no') DEFAULT NULL,
`media_use_received_transport` enum('yes','no') DEFAULT NULL,
`accountcode` varchar(80) DEFAULT NULL,
`user_eq_phone` enum('yes','no') DEFAULT NULL,
`moh_passthrough` enum('yes','no') DEFAULT NULL,
`media_encryption_optimistic` enum('yes','no') DEFAULT NULL,
`rpid_immediate` enum('yes','no') DEFAULT NULL,
`g726_non_standard` enum('yes','no') DEFAULT NULL,
`rtp_keepalive` int(11) DEFAULT NULL,
`rtp_timeout` int(11) DEFAULT NULL,
`rtp_timeout_hold` int(11) DEFAULT NULL,
`bind_rtp_to_media_address` enum('yes','no') DEFAULT NULL,
`voicemail_extension` varchar(40) DEFAULT NULL,
`mwi_subscribe_replaces_unsolicited` int(11) DEFAULT NULL,
`deny` varchar(95) DEFAULT NULL,
`permit` varchar(95) DEFAULT NULL,
`acl` varchar(40) DEFAULT NULL,
`contact_deny` varchar(95) DEFAULT NULL,
`contact_permit` varchar(95) DEFAULT NULL,
`contact_acl` varchar(40) DEFAULT NULL,
`subscribe_context` varchar(40) DEFAULT NULL,
`fax_detect_timeout` int(11) DEFAULT NULL,
`contact_user` varchar(80) DEFAULT NULL,
`asymmetric_rtp_codec` enum('yes','no') DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_endpoints_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_globals` (
`id` varchar(40) NOT NULL,
`max_forwards` int(11) DEFAULT NULL,
`user_agent` varchar(255) DEFAULT NULL,
`default_outbound_endpoint` varchar(40) DEFAULT NULL,
`debug` varchar(40) DEFAULT NULL,
`endpoint_identifier_order` varchar(40) DEFAULT NULL,
`max_initial_qualify_time` int(11) DEFAULT NULL,
`default_from_user` varchar(80) DEFAULT NULL,
`keep_alive_interval` int(11) DEFAULT NULL,
`regcontext` varchar(80) DEFAULT NULL,
`contact_expiration_check_interval` int(11) DEFAULT NULL,
`default_voicemail_extension` varchar(40) DEFAULT NULL,
`disable_multi_domain` enum('yes','no') DEFAULT NULL,
`unidentified_request_count` int(11) DEFAULT NULL,
`unidentified_request_period` int(11) DEFAULT NULL,
`unidentified_request_prune_interval` int(11) DEFAULT NULL,
`default_realm` varchar(40) DEFAULT NULL,
`mwi_tps_queue_high` int(11) DEFAULT NULL,
`mwi_tps_queue_low` int(11) DEFAULT NULL,
`mwi_disable_initial_unsolicited` enum('yes','no') DEFAULT NULL,
`ignore_uri_user_options` enum('yes','no') DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_globals_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_registrations` (
`id` varchar(40) NOT NULL,
`auth_rejection_permanent` enum('yes','no') DEFAULT NULL,
`client_uri` varchar(255) DEFAULT NULL,
`contact_user` varchar(40) DEFAULT NULL,
`expiration` int(11) DEFAULT NULL,
`max_retries` int(11) DEFAULT NULL,
`outbound_auth` varchar(40) DEFAULT NULL,
`outbound_proxy` varchar(40) DEFAULT NULL,
`retry_interval` int(11) DEFAULT NULL,
`forbidden_retry_interval` int(11) DEFAULT NULL,
`server_uri` varchar(255) DEFAULT NULL,
`transport` varchar(40) DEFAULT NULL,
`support_path` enum('yes','no') DEFAULT NULL,
`fatal_retry_interval` int(11) DEFAULT NULL,
`line` enum('yes','no') DEFAULT NULL,
`endpoint` varchar(40) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_registrations_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_subscription_persistence` (
`id` varchar(40) NOT NULL,
`packet` varchar(2048) DEFAULT NULL,
`src_name` varchar(128) DEFAULT NULL,
`src_port` int(11) DEFAULT NULL,
`transport_key` varchar(64) DEFAULT NULL,
`local_name` varchar(128) DEFAULT NULL,
`local_port` int(11) DEFAULT NULL,
`cseq` int(11) DEFAULT NULL,
`tag` varchar(128) DEFAULT NULL,
`endpoint` varchar(40) DEFAULT NULL,
`expires` int(11) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_subscription_persistence_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_systems` (
`id` varchar(40) NOT NULL,
`timer_t1` int(11) DEFAULT NULL,
`timer_b` int(11) DEFAULT NULL,
`compact_headers` enum('yes','no') DEFAULT NULL,
`threadpool_initial_size` int(11) DEFAULT NULL,
`threadpool_auto_increment` int(11) DEFAULT NULL,
`threadpool_idle_timeout` int(11) DEFAULT NULL,
`threadpool_max_size` int(11) DEFAULT NULL,
`disable_tcp_switch` enum('yes','no') DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_systems_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ps_transports` (
`id` varchar(40) NOT NULL,
`async_operations` int(11) DEFAULT NULL,
`bind` varchar(40) DEFAULT NULL,
`ca_list_file` varchar(200) DEFAULT NULL,
`cert_file` varchar(200) DEFAULT NULL,
`cipher` varchar(200) DEFAULT NULL,
`domain` varchar(40) DEFAULT NULL,
`external_media_address` varchar(40) DEFAULT NULL,
`external_signaling_address` varchar(40) DEFAULT NULL,
`external_signaling_port` int(11) DEFAULT NULL,
`method` enum('default','unspecified','tlsv1','sslv2','sslv3','sslv23') DEFAULT NULL,
`local_net` varchar(40) DEFAULT NULL,
`password` varchar(40) DEFAULT NULL,
`priv_key_file` varchar(200) DEFAULT NULL,
`protocol` enum('udp','tcp','tls','ws','wss') DEFAULT NULL,
`require_client_cert` enum('yes','no') DEFAULT NULL,
`verify_client` enum('yes','no') DEFAULT NULL,
`verify_server` enum('yes','no') DEFAULT NULL,
`tos` varchar(10) DEFAULT NULL,
`cos` int(11) DEFAULT NULL,
`allow_reload` enum('yes','no') DEFAULT NULL,
UNIQUE KEY `id` (`id`),
KEY `ps_transports_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;O melhor a fazer é criar um arquivo em seu servidor, tipo astmydb.sql, e colar nele o esquema acima:
mysql -u root -p astmydb < astmydb.sql
Vamos ter então, as seguintes tabelas:
+-----------------------------+ | ps_aors | | ps_auths | | ps_contacts | | ps_domain_aliases | | ps_endpoint_id_ips | | ps_endpoints | | ps_globals | | ps_registrations | | ps_subscription_persistence | | ps_systems | | ps_transports | +-----------------------------+
Avançado, outras tabelas para ARA no Asterisk® SCF™:
---
--- static asterisk config
---
CREATE TABLE `static_ast_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cat_metric` int(11) NOT NULL DEFAULT '0',
`var_metric` int(11) NOT NULL DEFAULT '0',
`commented` int(11) NOT NULL DEFAULT '0',
`filename` varchar(128) NOT NULL DEFAULT '',
`category` varchar(128) NOT NULL DEFAULT 'default',
`var_name` varchar(128) NOT NULL DEFAULT '',
`var_val` varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `filename_comment` (`filename`,`commented`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
---
---realtime dialplan
---
CREATE TABLE `extensions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`context` varchar(40) NOT NULL,
`exten` varchar(40) NOT NULL,
`priority` int(11) NOT NULL,
`app` varchar(40) NOT NULL,
`appdata` varchar(256) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `context` (`context`,`exten`,`priority`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
--
-- Table structure for table `iaxfriends`
--
DROP TABLE IF EXISTS `iaxfriends`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iaxfriends` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`type` enum('friend','user','peer') DEFAULT NULL,
`username` varchar(40) DEFAULT NULL,
`mailbox` varchar(40) DEFAULT NULL,
`secret` varchar(40) DEFAULT NULL,
`dbsecret` varchar(40) DEFAULT NULL,
`context` varchar(40) DEFAULT NULL,
`regcontext` varchar(40) DEFAULT NULL,
`host` varchar(40) DEFAULT NULL,
`ipaddr` varchar(40) DEFAULT NULL,
`port` int(11) DEFAULT NULL,
`defaultip` varchar(20) DEFAULT NULL,
`sourceaddress` varchar(20) DEFAULT NULL,
`mask` varchar(20) DEFAULT NULL,
`regexten` varchar(40) DEFAULT NULL,
`regseconds` int(11) DEFAULT NULL,
`accountcode` varchar(80) DEFAULT NULL,
`mohinterpret` varchar(20) DEFAULT NULL,
`mohsuggest` varchar(20) DEFAULT NULL,
`inkeys` varchar(40) DEFAULT NULL,
`outkeys` varchar(40) DEFAULT NULL,
`language` varchar(10) DEFAULT NULL,
`callerid` varchar(100) DEFAULT NULL,
`cid_number` varchar(40) DEFAULT NULL,
`sendani` enum('yes','no') DEFAULT NULL,
`fullname` varchar(40) DEFAULT NULL,
`trunk` enum('yes','no') DEFAULT NULL,
`auth` varchar(20) DEFAULT NULL,
`maxauthreq` int(11) DEFAULT NULL,
`requirecalltoken` enum('yes','no','auto') DEFAULT NULL,
`encryption` enum('yes','no','aes128') DEFAULT NULL,
`transfer` enum('yes','no','mediaonly') DEFAULT NULL,
`jitterbuffer` enum('yes','no') DEFAULT NULL,
`forcejitterbuffer` enum('yes','no') DEFAULT NULL,
`disallow` varchar(200) DEFAULT NULL,
`allow` varchar(200) DEFAULT NULL,
`codecpriority` varchar(40) DEFAULT NULL,
`qualify` varchar(10) DEFAULT NULL,
`qualifysmoothing` enum('yes','no') DEFAULT NULL,
`qualifyfreqok` varchar(10) DEFAULT NULL,
`qualifyfreqnotok` varchar(10) DEFAULT NULL,
`timezone` varchar(20) DEFAULT NULL,
`adsi` enum('yes','no') DEFAULT NULL,
`amaflags` varchar(20) DEFAULT NULL,
`setvar` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `iaxfriends_name` (`name`),
KEY `iaxfriends_name_host` (`name`,`host`),
KEY `iaxfriends_name_ipaddr_port` (`name`,`ipaddr`,`port`),
KEY `iaxfriends_ipaddr_port` (`ipaddr`,`port`),
KEY `iaxfriends_host_port` (`host`,`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `meetme`
--
CREATE TABLE `meetme` (
`bookid` int(11) NOT NULL AUTO_INCREMENT,
`confno` varchar(80) NOT NULL,
`starttime` datetime DEFAULT NULL,
`endtime` datetime DEFAULT NULL,
`pin` varchar(20) DEFAULT NULL,
`adminpin` varchar(20) DEFAULT NULL,
`opts` varchar(20) DEFAULT NULL,
`adminopts` varchar(20) DEFAULT NULL,
`recordingfilename` varchar(80) DEFAULT NULL,
`recordingformat` varchar(10) DEFAULT NULL,
`maxusers` int(11) DEFAULT NULL,
`members` int(11) NOT NULL,
PRIMARY KEY (`bookid`),
KEY `meetme_confno_start_end` (`confno`,`starttime`,`endtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `musiconhold`
--
CREATE TABLE `musiconhold` (
`name` varchar(80) NOT NULL,
`mode` enum('custom','files','mp3nb','quietmp3nb','quietmp3') DEFAULT NULL,
`directory` varchar(255) DEFAULT NULL,
`application` varchar(255) DEFAULT NULL,
`digit` varchar(1) DEFAULT NULL,
`sort` varchar(10) DEFAULT NULL,
`format` varchar(10) DEFAULT NULL,
`stamp` datetime DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `queue_members`
--
CREATE TABLE `queue_members` (
`queue_name` varchar(80) NOT NULL,
`interface` varchar(80) NOT NULL,
`membername` varchar(80) DEFAULT NULL,
`state_interface` varchar(80) DEFAULT NULL,
`penalty` int(11) DEFAULT NULL,
`paused` int(11) DEFAULT NULL,
`uniqueid` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`queue_name`,`interface`),
UNIQUE KEY `uniqueid` (`uniqueid`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;
--
-- Table structure for table `queue_rules`
--
CREATE TABLE `queue_rules` (
`rule_name` varchar(80) NOT NULL,
`time` varchar(32) NOT NULL,
`min_penalty` varchar(32) NOT NULL,
`max_penalty` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `queues`
--
CREATE TABLE `queues` (
`name` varchar(128) NOT NULL,
`musiconhold` varchar(128) DEFAULT NULL,
`announce` varchar(128) DEFAULT NULL,
`context` varchar(128) DEFAULT NULL,
`timeout` int(11) DEFAULT NULL,
`ringinuse` enum('yes','no') DEFAULT NULL,
`setinterfacevar` enum('yes','no') DEFAULT NULL,
`setqueuevar` enum('yes','no') DEFAULT NULL,
`setqueueentryvar` enum('yes','no') DEFAULT NULL,
`monitor_format` varchar(8) DEFAULT NULL,
`membermacro` varchar(512) DEFAULT NULL,
`membergosub` varchar(512) DEFAULT NULL,
`queue_youarenext` varchar(128) DEFAULT NULL,
`queue_thereare` varchar(128) DEFAULT NULL,
`queue_callswaiting` varchar(128) DEFAULT NULL,
`queue_quantity1` varchar(128) DEFAULT NULL,
`queue_quantity2` varchar(128) DEFAULT NULL,
`queue_holdtime` varchar(128) DEFAULT NULL,
`queue_minutes` varchar(128) DEFAULT NULL,
`queue_minute` varchar(128) DEFAULT NULL,
`queue_seconds` varchar(128) DEFAULT NULL,
`queue_thankyou` varchar(128) DEFAULT NULL,
`queue_callerannounce` varchar(128) DEFAULT NULL,
`queue_reporthold` varchar(128) DEFAULT NULL,
`announce_frequency` int(11) DEFAULT NULL,
`announce_to_first_user` enum('yes','no') DEFAULT NULL,
`min_announce_frequency` int(11) DEFAULT NULL,
`announce_round_seconds` int(11) DEFAULT NULL,
`announce_holdtime` varchar(128) DEFAULT NULL,
`announce_position` varchar(128) DEFAULT NULL,
`announce_position_limit` int(11) DEFAULT NULL,
`periodic_announce` varchar(50) DEFAULT NULL,
`periodic_announce_frequency` int(11) DEFAULT NULL,
`relative_periodic_announce` enum('yes','no') DEFAULT NULL,
`random_periodic_announce` enum('yes','no') DEFAULT NULL,
`retry` int(11) DEFAULT NULL,
`wrapuptime` int(11) DEFAULT NULL,
`penaltymemberslimit` int(11) DEFAULT NULL,
`autofill` enum('yes','no') DEFAULT NULL,
`monitor_type` varchar(128) DEFAULT NULL,
`autopause` enum('yes','no','all') DEFAULT NULL,
`autopausedelay` int(11) DEFAULT NULL,
`autopausebusy` enum('yes','no') DEFAULT NULL,
`autopauseunavail` enum('yes','no') DEFAULT NULL,
`maxlen` int(11) DEFAULT NULL,
`servicelevel` int(11) DEFAULT NULL,
`strategy` enum('ringall','leastrecent','fewestcalls','random','rrmemory','linear','wrandom','rrordered') DEFAULT NULL,
`joinempty` varchar(128) DEFAULT NULL,
`leavewhenempty` varchar(128) DEFAULT NULL,
`reportholdtime` enum('yes','no') DEFAULT NULL,
`memberdelay` int(11) DEFAULT NULL,
`weight` int(11) DEFAULT NULL,
`timeoutrestart` enum('yes','no') DEFAULT NULL,
`defaultrule` varchar(128) DEFAULT NULL,
`timeoutpriority` varchar(128) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `sippeers`
--
CREATE TABLE `sippeers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`ipaddr` varchar(45) DEFAULT NULL,
`port` int(11) DEFAULT NULL,
`regseconds` int(11) DEFAULT NULL,
`defaultuser` varchar(40) DEFAULT NULL,
`fullcontact` varchar(80) DEFAULT NULL,
`regserver` varchar(20) DEFAULT NULL,
`useragent` varchar(255) DEFAULT NULL,
`lastms` int(11) DEFAULT NULL,
`host` varchar(40) DEFAULT NULL,
`type` enum('friend','user','peer') DEFAULT NULL,
`context` varchar(40) DEFAULT NULL,
`permit` varchar(95) DEFAULT NULL,
`deny` varchar(95) DEFAULT NULL,
`secret` varchar(40) DEFAULT NULL,
`md5secret` varchar(40) DEFAULT NULL,
`remotesecret` varchar(40) DEFAULT NULL,
`transport` enum('udp','tcp','tls','ws','wss','udp,tcp','tcp,udp') DEFAULT NULL,
`encryption` varchar(128) DEFAULT NULL,
`dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
`directmedia` enum('yes','no','nonat','update','outgoing') DEFAULT NULL,
`nat` varchar(29) DEFAULT NULL,
`callgroup` varchar(40) DEFAULT NULL,
`pickupgroup` varchar(40) DEFAULT NULL,
`language` varchar(40) DEFAULT NULL,
`disallow` varchar(200) DEFAULT NULL,
`allow` varchar(200) DEFAULT NULL,
`insecure` varchar(40) DEFAULT NULL,
`trustrpid` enum('yes','no') DEFAULT NULL,
`progressinband` enum('yes','no','never') DEFAULT NULL,
`promiscredir` enum('yes','no') DEFAULT NULL,
`useclientcode` enum('yes','no') DEFAULT NULL,
`accountcode` varchar(80) DEFAULT NULL,
`setvar` varchar(200) DEFAULT NULL,
`callerid` varchar(40) DEFAULT NULL,
`amaflags` varchar(40) DEFAULT NULL,
`callcounter` enum('yes','no') DEFAULT NULL,
`busylevel` int(11) DEFAULT NULL,
`allowoverlap` enum('yes','no') DEFAULT NULL,
`allowsubscribe` enum('yes','no') DEFAULT NULL,
`videosupport` enum('yes','no') DEFAULT NULL,
`maxcallbitrate` int(11) DEFAULT NULL,
`rfc2833compensate` enum('yes','no') DEFAULT NULL,
`mailbox` varchar(40) DEFAULT NULL,
`session-timers` enum('accept','refuse','originate') DEFAULT NULL,
`session-expires` int(11) DEFAULT NULL,
`session-minse` int(11) DEFAULT NULL,
`session-refresher` enum('uac','uas') DEFAULT NULL,
`t38pt_usertpsource` varchar(40) DEFAULT NULL,
`regexten` varchar(40) DEFAULT NULL,
`fromdomain` varchar(40) DEFAULT NULL,
`fromuser` varchar(40) DEFAULT NULL,
`qualify` varchar(40) DEFAULT NULL,
`defaultip` varchar(45) DEFAULT NULL,
`rtptimeout` int(11) DEFAULT NULL,
`rtpholdtimeout` int(11) DEFAULT NULL,
`sendrpid` enum('yes','no') DEFAULT NULL,
`outboundproxy` varchar(40) DEFAULT NULL,
`callbackextension` varchar(40) DEFAULT NULL,
`timert1` int(11) DEFAULT NULL,
`timerb` int(11) DEFAULT NULL,
`qualifyfreq` int(11) DEFAULT NULL,
`constantssrc` enum('yes','no') DEFAULT NULL,
`contactpermit` varchar(95) DEFAULT NULL,
`contactdeny` varchar(95) DEFAULT NULL,
`usereqphone` enum('yes','no') DEFAULT NULL,
`textsupport` enum('yes','no') DEFAULT NULL,
`faxdetect` enum('yes','no') DEFAULT NULL,
`buggymwi` enum('yes','no') DEFAULT NULL,
`auth` varchar(40) DEFAULT NULL,
`fullname` varchar(40) DEFAULT NULL,
`trunkname` varchar(40) DEFAULT NULL,
`cid_number` varchar(40) DEFAULT NULL,
`callingpres` enum('allowed_not_screened','allowed_passed_screen','allowed_failed_screen','allowed','prohib_not_screened','prohib_passed_screen','prohib_failed_screen','prohib') DEFAULT NULL,
`canreinvite` varchar(15) DEFAULT NULL,
`mohinterpret` varchar(40) DEFAULT NULL,
`mohsuggest` varchar(40) DEFAULT NULL,
`parkinglot` varchar(40) DEFAULT NULL,
`hasvoicemail` enum('yes','no') DEFAULT NULL,
`subscribemwi` enum('yes','no') DEFAULT NULL,
`vmexten` varchar(40) DEFAULT NULL,
`autoframing` enum('yes','no') DEFAULT NULL,
`rtpkeepalive` int(11) DEFAULT NULL,
`call-limit` int(11) DEFAULT NULL,
`g726nonstandard` enum('yes','no') DEFAULT NULL,
`ignoresdpversion` enum('yes','no') DEFAULT NULL,
`allowtransfer` enum('yes','no') DEFAULT NULL,
`dynamic` enum('yes','no') DEFAULT NULL,
`path` varchar(256) DEFAULT NULL,
`supportpath` enum('yes','no') DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `sippeers_name` (`name`),
KEY `sippeers_name_host` (`name`,`host`),
KEY `sippeers_ipaddr_port` (`ipaddr`,`port`),
KEY `sippeers_host_port` (`host`,`port`)
) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8;
--
-- Table structure for table `voicemail`
--
CREATE TABLE `voicemail` (
`uniqueid` int(11) NOT NULL AUTO_INCREMENT,
`context` varchar(80) NOT NULL,
`mailbox` varchar(80) NOT NULL,
`password` varchar(80) NOT NULL,
`fullname` varchar(80) DEFAULT NULL,
`alias` varchar(80) DEFAULT NULL,
`email` varchar(80) DEFAULT NULL,
`pager` varchar(80) DEFAULT NULL,
`attach` enum('yes','no') DEFAULT NULL,
`attachfmt` varchar(10) DEFAULT NULL,
`serveremail` varchar(80) DEFAULT NULL,
`language` varchar(20) DEFAULT NULL,
`tz` varchar(30) DEFAULT NULL,
`deletevoicemail` enum('yes','no') DEFAULT NULL,
`saycid` enum('yes','no') DEFAULT NULL,
`sendvoicemail` enum('yes','no') DEFAULT NULL,
`review` enum('yes','no') DEFAULT NULL,
`tempgreetwarn` enum('yes','no') DEFAULT NULL,
`operator` enum('yes','no') DEFAULT NULL,
`envelope` enum('yes','no') DEFAULT NULL,
`sayduration` int(11) DEFAULT NULL,
`forcename` enum('yes','no') DEFAULT NULL,
`forcegreetings` enum('yes','no') DEFAULT NULL,
`callback` varchar(80) DEFAULT NULL,
`dialout` varchar(80) DEFAULT NULL,
`exitcontext` varchar(80) DEFAULT NULL,
`maxmsg` int(11) DEFAULT NULL,
`volgain` decimal(5,2) DEFAULT NULL,
`imapuser` varchar(80) DEFAULT NULL,
`imappassword` varchar(80) DEFAULT NULL,
`imapserver` varchar(80) DEFAULT NULL,
`imapport` varchar(8) DEFAULT NULL,
`imapflags` varchar(80) DEFAULT NULL,
`stamp` datetime DEFAULT NULL,
PRIMARY KEY (`uniqueid`),
KEY `voicemail_mailbox` (`mailbox`),
KEY `voicemail_context` (`context`),
KEY `voicemail_mailbox_context` (`mailbox`,`context`),
KEY `voicemail_imapuser` (`imapuser`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Bom vamos então configurar o UnixODBC. Para o arquivo ODBCINST.INI, usaremos o criado durante a instalação, e, raramente requer alguma alteração:
# Driver from the mysql-connector-odbc package # Setup from the unixODBC package [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1
Então teremos que criar o DSN (Data Source Name):
vim /etc/odbc.ini
Devo lembrar, que, por padrão nenhum arquivo DSN é criado na instalação do UnixODBC.
[astmyconnector] Driver = MySQL Description = MySQL connection to ‘asterisk’ database Server = localhost Port = 3306 Database = astmydb UserName = astmin Password = MyPass@2020
Então, vamos validar a conexão do UnixODBC com o Banco de Dados MySQL:
echo "select 1" | isql -v astmyconnector astmin MyPass@2020 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select 1 +---------------------+ | 1 | +---------------------+ | 1 | +---------------------+ SQLRowCount returns 1 1 rows fetched
Caso não obtenha a validação acima, revise seu arquivo DNS (odbc.ini) e das configurações dos DRIVERs e SETUPs (odbcinst.ini), geralmente o problema é com a versão do driver e setup.
Estando tudo bem vamos configurar o RES_ODBC.CONF:
Edite o arquivo em /etc/asterisk/res_odbc.conf
[astmyodbc] enabled => yes dsn => astmyconnector username => astmin password => MyPass@2020 pre-connect => yes
No arquivo /etc/asterisk/modules.conf, ative o carregamento dos módulos ODBC do Asterisk® SCF™:
[modules] preload => res_odbc.so preload => res_config_odbc.so
Vamos validar a conexão do Asterisk® SCF™ com o UnixODBC:
asterisk -rx 'core reload' && asterisk -rx 'odbc show'
Se você configurou tudo corretamente vai obter este retorno:
ODBC DSN Settings
-----------------
Name: astmyodbc
DSN: astmyconnector
Number of active connections: 1 (out of 1)Neste artigo estamos tratando somente do PJSIP.CONF, as tabelas avançadas para ARA, somente deixei a titulo de você buscar uma nova jornada. Hoje o recomendado é usar ARA, ARI e AEL com o Asterisk® SCF™.
Na verdade feitiçaria define a hierarquia de uso de dados no Asterisk® SCF™. Nesse caso, vamos fazer o feitiço (a lá Delphini Riddle!), indicaremos que o módulo RES_PJSIP armazena os dados dos objetos listados (AORS, AUTHS, ENDPOINTS, DOMANIN_ALIAS e CONTACT) em nosso banco de dados, ARA:
/etc/asterisk/sorcery.conf
[res_pjsip] ; Realtime PJSIP configuration wizard endpoint=realtime,ps_endpoints auth=realtime,ps_auths aor=realtime,ps_aors domain_alias=realtime,ps_domain_aliases contact=realtime,ps_contacts [res_pjsip_endpoint_identifier_ip] identify=realtime,ps_endpoint_id_ips
Formato:
tipo de objeto[/options]=nome do assistente, dados de configurações do assistente, onde, neste exemplo, o nome do assistente é REALTIME, e os dados de configuração do assistente são o nome do objeto em /etc/asterisk/extconfig.conf.
Agora, podemos querer usar um configuração mista (em tempo real - ARA e estático - CONF), então o seguinte esquema deve ser utilizado:
endpoint=realtime,ps_endpoints endpoint=config,pjsip.conf,criteria=type=endpoint
Vamos configurar o EXTCONFIG.CONF para deixar nosso Asterisk® SCF™ fazer a comunicação entre os objetos do PJSIP, ao conector REALTIME - ARA e o UnixODBC.
/etc/asterisk/extconfig.conf
[settings] ps_endpoints => astodbc,astmyodbc ps_auths => astodbc,astmyodbc ps_aors => astodbc,astmyodbc ps_domain_aliases => astodbc,astmyodbc ps_endpoint_id_ips => astodbc,astmyodbc ps_contacts => astodbc,astmyodbc
Formato:
objeto => driver, nome do conector,<nome da tabela>
Se o nome da tabela não for especificada, por padrão, o ARA vai atribuir como o nome do objeto. Mas sobre configuração em REALTIME - ARA pode ser encontrado aqui.
Configuração do Asterisk® SCF™ PJSIP.
O transporte PJSIP é melhor definido em uma configuração textual:
/etc/asterisk/pjsip.conf
[transport-udp] type = transport protocol = udp bind = 0.0.0.0:5060 local_net = 192.168.0.0/24 external_media_address = extern ip address external_signaling_address = extern ip address allow_reload=true
Preenchendo o banco de dados PJSIP.
Para criar números internos, basta preencher três tabelas principais com os parâmetros mínimos:
insert into ps_aors (id, max_contacts) values (1001, 1);
insert into ps_auths (id, auth_type, password, username) values (1001, 'userpass', 'pbx1001', 1001);
insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) values (1001, 'transport-udp', '1001', '1001', 'externo', 'all', 'alaw,ulaw,opus', 'no');
Mais feitiços a lá Delphini Riddle!
Para importar os seus números das extensões telefonicas, podemos usar um arquivo CSV. É conveniente usar arquivos do tipo CSV para automatizar o preenchimento de tabelas MySQL. Crie o seguinte arquivo CSV, por exemplo, usando o aplicativo OpenOffice Calc:
1000,transport-udp,1000,1000,from-internal,all,"alaw,ulaw,opus","no", 1001,transport-udp,1001,1001,from-internal,all,"alaw,ulaw,opus","no",
Veja que em cada linha, estão na verdade os dados (para os objetos) de um número único. Agora para importar para as tabelas MySQL faça:
LOAD DATA INFILE '/usr/src/ps_endpoints.csv' INTO TABLE ps_endpoints FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Onde /usr/src/ps_endpoits.csv é o caminho para o arquivo do tipo CSV.
MariaDB [astmydb]> LOAD DATA INFILE '/usr/src/ps_endpoints.csv'
-> INTO TABLE ps_endpoints
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
Query OK, 1 row affected, 99 warnings (0.01 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 99MariaDB [astmydb]> select id,transport,aors,auth,context,allow,disallow,direct_media from ps_endpoints; +------+---------------+------+------+---------------+----------------+----------+--------------+ | id | transport | aors | auth | context | allow | disallow | direct_media | +------+---------------+------+------+---------------+----------------+----------+--------------+ | 1000 | transport-udp | 1000 | 1000 | from-internal | alaw,ulaw,opus | all | no | +------+---------------+------+------+---------------+----------------+----------+--------------+ 1 row in set (0.00 sec)
Então chegamos na hora de atualizar os devidos dados. Para atualizar as linhas existentes, use o comando UPDATE. E adicione um novo valor a coluna remove_existing:
update ps_aors set remove_existing = 'yes';
MariaDB [astmydb]> select id,max_contacts,remove_existing from ps_aors; +------+--------------+-----------------+ | id | max_contacts | remove_existing | +------+--------------+-----------------+ | 1000 | 1 | yes | | 1001 | 1 | yes | +------+--------------+-----------------+
Espero que isto ajude a você a ter um caminhos das pedras.
Thats All FOLKS! (Isso é tudo, pessoal!)
CentOS Linux release 7.8.2003 (Core)


Deixe um comentário