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: 99
MariaDB [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