Elastix - сервер VOIP-телефонии.
Elastix - дистрибутивный линукс IP PBX c установленным там сервером VOIP-телефонии, web-интерфейсом freePBX к Asterisk и множеством дополнительного полезного софта. Все с самого начала мне описывать неинтересно, кому это надо почитайте букварики, их в интернете навалом, например IP PBX Elastix. IP PBX Asterisk.Voip, Elastix without Tears, и вообще по запросу 'learning Elastiх' ГУГЛ выдает вообще 100 тысяч сайтов. Ставится этот готовый сконфигурированный дистрибутив линукса буквально в пол-тычка, все рассчитано буквально на домохозяек. Единственное - я всегда дополняю стандартный установку дистрибутива Elastix двумя важными конфетками PhpMyAdmin и Webmin.
Если даже пройтись бегло по вкладкам web-интерфейса Elastix, то можно сразу понять как все это работает. Грубо говоря, это очень похоже на почтовый сервер. Есть шлюзы во внешние сети, которые называются Трунки, есть аналоги почтовых ящиков, которые называются Экстеншены, есть реакции на входящую почту, которые называются Диалпланами. Только все это не простое мыло по протоколу SMTP, многократно разжеванное на моем сайте, а кодированный разными кодеками голосовой трафик, который идет по сетям в отдельных VLAN'ах.
Управляется сконфигурированный Asterics несколькими способами - со вкладок web-интерфейса freePBX, которые вы видите выше, из командной строки Asterisk CLI или непосредственно конфигурационными файлами. Есть журнал и данные в базах. Дополнительно можно добавить в Elastix еще и Webmin и phpMyAdmin.
Минимальное конфигурирование для выполнения минимального теста сервера Elastix заключается в определении транка в Didlogic (или аналогичных сервисах) и определения экстеншена в Zoiper в локалке. Это конечно лишь минимум для выполнения тестов, реально в Европе существуют отдельно провайдеры не просто интернета, а именно VOIP-телефонии, например в Болгарии это mtel, а экстеншен может быть определен в любой точке Земного шарика. Почитав до конца этой заметки, вы поймете, насколько сложно это может быть устроено.
Скриншоты сконфигурированного и работающего Elastix можно посмотреть здесь, а мы остановимся подробнее на конфигурационных файлах Elastix (строение которых весьма подробно описано как в онлайн-документации, так и в печатной литературе).
В табличке ниже в левой колонке вы видите умалчиваемые, устанавливаемые по умолчанию конфигурационные файлы, а в правой колоне конфигурационные файлы реального европейского CALL-центра, в котором определено 35 VOIP-телефонов.
Elastix default config | size | Elastix real config | size | |
---|---|---|---|---|
acl.conf | 2816 | acl.conf | 2816 | |
additional_a2billing_iax.conf | 0 | additional_a2billing_iax.conf | 0 | |
additional_a2billing_sip.conf | 0 | additional_a2billing_sip.conf | 0 | |
adsi.conf | 140 | adsi.conf | 140 | |
agents.conf | 2531 | agents.conf | 2735 | |
alarmreceiver.conf | 2084 | alarmreceiver.conf | 2084 | |
allogsm-channels.conf | 1075 | allogsm-channels.conf | 1075 | |
alsa.conf | 3498 | alsa.conf | 3498 | |
amd.conf | 767 | amd.conf | 767 | |
app_mysql.conf.sample | 1044 | app_mysql.conf.sample | 1044 | |
app_skel.conf | 338 | app_skel.conf | 338 | |
applications.conf | 8523 | applications.conf | 8523 | |
asterisk.adsi | 3254 | asterisk.adsi | 3254 | |
asterisk.conf | 367 | asterisk.conf | 369 | |
asterisk.conf.rpmnew | 4202 | asterisk.conf.rpmnew | 4227 | |
calendar.conf | 5171 | calendar.conf | 5171 | |
calendar.conf.rpmnew | 5171 | |||
cbmysql.conf | 361 | cbmysql.conf | 368 | |
ccss.conf | 8827 | ccss.conf | 8827 | |
ccss.conf.rpmnew | 8827 | |||
cdr.conf | 8586 | cdr.conf | 8518 | |
cdr.conf.rpmnew | 8586 | |||
cdr_adaptive_odbc.conf | 2580 | cdr_adaptive_odbc.conf | 2580 | |
cdr_adaptive_odbc.conf.rpmnew | 2580 | |||
cdr_custom.conf | 1617 | cdr_custom.conf | 1617 | |
cdr_manager.conf | 418 | cdr_manager.conf | 24 | |
cdr_mysql.conf | 694 | cdr_mysql.conf | 701 | |
cdr_mysql.conf.bak | 694 | cdr_mysql.conf.bak | 701 | |
cdr_mysql.conf.old_2014Aug15_060259 | 694 | cdr_mysql.conf.old_2013Jul03_143234 | 701 | |
cdr_mysql.conf.old_2014May13_174834 | 701 | |||
cdr_mysql.conf.orig | 696 | cdr_mysql.conf.orig | 696 | |
cdr_mysql.conf.sample | 2231 | cdr_mysql.conf.sample | 2231 | |
cdr_odbc.conf | 263 | cdr_odbc.conf | 263 | |
cdr_pgsql.conf | 504 | cdr_pgsql.conf | 504 | |
cdr_sqlite3_custom.conf | 984 | cdr_sqlite3_custom.conf | 984 | |
cdr_syslog.conf | 3301 | cdr_syslog.conf | 3301 | |
cdr_tds.conf | 2068 | cdr_tds.conf | 2068 | |
cel.conf | 4419 | cel.conf | 4419 | |
cel.conf.rpmnew | 4419 | |||
cel_custom.conf | 2035 | cel_custom.conf | 2035 | |
cel_custom.conf.rpmnew | 2035 | |||
cel_odbc.conf | 3155 | cel_odbc.conf | 3155 | |
cel_odbc.conf.rpmnew | 3155 | |||
cel_pgsql.conf | 1261 | cel_pgsql.conf | 1261 | |
cel_pgsql.conf.rpmnew | 1261 | |||
cel_sqlite3_custom.conf | 1526 | cel_sqlite3_custom.conf | 1526 | |
cel_sqlite3_custom.conf.rpmnew | 1526 | |||
cel_tds.conf | 1883 | cel_tds.conf | 1883 | |
chan_allogsm.conf | 36409 | chan_allogsm.conf | 36409 | |
chan_dahdi.conf | 606 | chan_dahdi.conf | 606 | |
chan_dahdi.conf.rpmnew | 65899 | chan_dahdi.conf.rpmnew | 65052 | |
chan_dahdi.conf.template | 715 | chan_dahdi.conf.template | 715 | |
chan_dahdi_additional.conf | 418 | chan_dahdi_additional.conf | 418 | |
chan_extra.conf | 36390 | chan_extra.conf | 36390 | |
cli.conf | 264 | cli.conf | 264 | |
cli_aliases.conf | 6908 | cli_aliases.conf | 6902 | |
cli_aliases.conf.rpmnew | 6908 | |||
cli_permissions.conf | 2452 | cli_permissions.conf | 2452 | |
codecs.conf | 4616 | codecs.conf | 4616 | |
codecs.conf.rpmnew | 4616 | |||
confbridge.conf | 23678 | confbridge.conf | 23021 | |
confbridge.conf.rpmnew | 23163 | |||
config_test.conf | 695 | config_test.conf | 695 | |
console.conf | 4456 | console.conf | 4456 | |
dahdi-channels.conf | 0 | dahdi-channels.conf | 0 | |
dbsep.conf | 1164 | dbsep.conf | 1164 | |
dial_auto.conf | 0 | |||
dnsmgr.conf | 190 | dnsmgr.conf | 190 | |
dsp.conf | 1470 | dsp.conf | 1470 | |
dundi.conf | 9034 | dundi.conf | 9034 | |
dundi.conf.rpmnew | 9034 | |||
enum.conf | 50 | enum.conf | 50 | |
enum.conf.old_2014Aug15_060259 | 50 | enum.conf.old_2013Jul03_143234 | 50 | |
enum.conf.old_2014May13_174834 | 50 | |||
extconfig.conf | 3809 | extconfig.conf | 3675 | |
extconfig.conf.rpmnew | 3809 | |||
extension_a2billing_additionals.conf | 1403 | extension_a2billing_additionals.conf | 1403 | |
extensions.ael | 12776 | extensions.ael | 12776 | |
extensions.conf | 28311 | extensions.conf | 28311 | |
extensions.conf.old_2014Aug15_060258 | 28311 | extensions.conf.old_2013Jul03_143235 | ||
extensions.conf.old_freePBX-2.8.1-16 | 30823 | extensions.conf.old_2014May13_174916 | 28311 | |
extensions.conf.old_freePBX-2.8.1-17 | 28311 | extensions.conf.old_freePBX-2.8.1-16 | 30823 | |
extensions.conf.old_freePBX-2.8.1-17 | 28311 | |||
extensions.conf.rpmnew | 31637 | extensions.conf.rpmnew | 31637 | |
extensions.lua | 7023 | extensions.lua | 5827 | |
extensions.lua.rpmnew | 5827 | |||
extensions_additional.conf | 81626 | extensions_additional.conf | 556081 | |
extensions_custom.conf | 1297 | extensions_custom.conf | 540262 | |
extensions_custom.conf.sample | 2671 | extensions_custom.conf.sample | 2671 | |
extensions_minivm.conf | 7480 | extensions_minivm.conf | 7480 | |
extensions_override_elastix.conf | 5982 | extensions_override_elastix.conf | 5982 | |
extensions_override_freepbx.conf | 42 | extensions_override_freepbx.conf | 3994 | |
extensions_queuemetrics.conf | 15132 | |||
extra-channels.conf | 0 | extra-channels.conf | 0 | |
features.conf | 1559 | features.conf | 1559 | |
features.conf.old_2014Aug15_060258 | 1559 | features.conf.old_2013Jul03_143235 | ||
features.conf.old_2014May13_174916 | 1559 | |||
features.conf.old_freePBX-2.8.1-16 | 13693 | features.conf.old_freePBX-2.8.1-16 | 13693 | |
features.conf.old_freePBX-2.8.1-17 | 1559 | features.conf.old_freePBX-2.8.1-17 | 1559 | |
features.conf.rpmnew | 15607 | features.conf.rpmnew | 15266 | |
features_applicationmap_additional.conf | 418 | features_applicationmap_additional.conf | 418 | |
features_applicationmap_custom.conf | 0 | features_applicationmap_custom.conf | 0 | |
features_featuremap_additional.conf | 466 | features_featuremap_additional.conf | 466 | |
features_featuremap_custom.conf | 0 | features_featuremap_custom.conf | 0 | |
features_general_additional.conf | 433 | features_general_additional.conf | 433 | |
features_general_custom.conf | 0 | features_general_custom.conf | 0 | |
festival.conf | 923 | festival.conf | 923 | |
followme.conf | 3881 | followme.conf | 3881 | |
followme.conf.rpmnew | 3881 | |||
freepbx_featurecodes.conf.template | 1494 | freepbx_featurecodes.conf.template | 1494 | |
freepbx_menu.conf.template | 1235 | freepbx_menu.conf.template | 1235 | |
freepbx_module_admin.conf | 730 | freepbx_module_admin.conf | 730 | |
freepbx_module_admin.conf.old_2013Jul03_143234 | 730 | |||
freepbx_module_admin.conf.old_2014Aug15_060259 | 730 | freepbx_module_admin.conf.old_2014May13_174834 | 730 | |
func_odbc.conf | 5314 | func_odbc.conf | 5314 | |
globals_custom.conf | 0 | globals_custom.conf | 461 | |
gtalk.conf | 895 | gtalk.conf | 895 | |
gtalk.conf.rpmnew | 895 | |||
h323.conf | 8227 | h323.conf | 8227 | |
http.conf | 3114 | http.conf | 2941 | |
http.conf.rpmnew | 2941 | |||
iax.conf | 2096 | iax.conf | 2096 | |
iax.conf.old_2014Aug15_060258 | 2096 | iax.conf.old_2013Jul03_143235 | ||
iax.conf.old_2014May13_174916 | 2096 | |||
iax.conf.old_freePBX-2.8.1-16 | 23424 | iax.conf.old_freePBX-2.8.1-16 | 23424 | |
iax.conf.old_freePBX-2.8.1-17 | 2096 | iax.conf.old_freePBX-2.8.1-17 | 2096 | |
iax.conf.rpmnew | 26375 | iax.conf.rpmnew | 26182 | |
iax_additional.conf | 418 | iax_additional.conf | 1028 | |
iax_custom.conf | 0 | iax_custom.conf | 0 | |
iax_custom_post.conf | 0 | iax_custom_post.conf | 0 | |
iax_general_additional.conf | 488 | iax_general_additional.conf | 488 | |
iax_general_custom.conf | 44 | iax_general_custom.conf | 44 | |
iax_registrations.conf | 418 | iax_registrations.conf | 418 | |
iax_registrations_custom.conf | 0 | iax_registrations_custom.conf | 0 | |
iaxprov.conf | 2402 | iaxprov.conf | 2402 | |
indications.conf | 841 | indications.conf | 690 | |
indications.conf.old_2014Aug15_060259 | 24419 | indications.conf.old_2013Jul03_143234 | 841 | |
indications.conf.old_2014May13_174834 | 690 | |||
indications.conf.rpmnew | 25367 | indications.conf.rpmnew | 24970 | |
jabber.conf | 2150 | jabber.conf | 2150 | |
jabber.conf.rpmnew | 2150 | |||
jingle.conf | 512 | jingle.conf | 512 | |
localprefixes.conf | 418 | localprefixes.conf | 418 | |
logger.conf | 917 | logger.conf | 917 | |
logger.conf.old_2014Aug15_060259 | 917 | logger.conf.old_2013Jul03_143234 | 917 | |
logger.conf.old_2014May13_174834 | 940 | |||
logger.conf.rpmnew | 4742 | logger.conf.rpmnew | 4612 | |
manager.conf | 910 | manager.conf | 1339 | |
manager.conf.bak | 915 | manager.conf.bak | 922 | |
manager.conf.old_2014Aug15_060259 | 910 | manager.conf.old_2013Jul03_143234 | 917 | |
manager.conf.old_2014May13_174834 | 1337 | |||
manager.conf.orig | 919 | manager.conf.orig | 919 | |
manager.conf.rpmnew | 6571 | manager.conf.rpmnew | 6501 | |
manager_additional.conf | 0 | manager_additional.conf | 0 | |
manager_custom.conf | 1122 | manager_custom.conf | 1181 | |
manager_humbug.conf | 123 | |||
meetme.conf | 40 | meetme.conf | 40 | |
meetme.conf.old_2014Aug15_060259 | 40 | meetme.conf.old_2013Jul03_143234 | 40 | |
meetme.conf.old_2014May13_174834 | 40 | |||
meetme_additional.conf | 418 | meetme_additional.conf | 418 | |
mgcp.conf | 5852 | mgcp.conf | 5852 | |
minivm.conf | 9925 | minivm.conf | 9925 | |
modem.conf | 1774 | modem.conf | 1774 | |
modem.conf.old_2014Aug15_060259 | 1774 | modem.conf.old_2013Jul03_143234 | 1774 | |
modem.conf.old_2014May13_174834 | 1774 | |||
modules.conf | 2393 | modules.conf | 2393 | |
modules.conf.old_2014Aug15_060259 | 2585 | modules.conf.old_2013Jul03_143234 | 2585 | |
modules.conf.old_2014May13_174834 | 2395 | |||
modules.conf.orig | 2393 | modules.conf.orig | 2393 | |
motif.conf | 4573 | motif.conf | 4573 | |
musiconhold.conf | 208 | musiconhold.conf | 208 | |
musiconhold.conf.old_2014Aug15_060259 | 208 | musiconhold.conf.old_2013Jul03_143234 | 208 | |
musiconhold.conf.old_2014May13_174834 | 208 | |||
musiconhold.conf.rpmnew | 3084 | musiconhold.conf.rpmnew | 3084 | |
musiconhold_additional.conf | 127 | musiconhold_additional.conf | 338 | |
musiconhold_custom.conf | 0 | musiconhold_custom.conf | 0 | |
muted.conf | 1285 | muted.conf | 1285 | |
ooh323.conf.sample | 5793 | ooh323.conf.sample | 5793 | |
osp.conf | 3900 | osp.conf | 3900 | |
oss.conf | 7461 | oss.conf | 7461 | |
phone.conf | 1418 | phone.conf | 1418 | |
phone.conf.old_2014Aug15_060259 | 1418 | phone.conf.old_2013Jul03_143234 | 1418 | |
phone.conf.old_2014May13_174834 | 1418 | |||
phoneprov.conf | 7431 | phoneprov.conf | 7431 | |
phoneprov.conf.rpmnew | 7431 | |||
phpagi.conf | 90 | phpagi.conf | 90 | |
phpagi.conf.old_2014Aug15_060259 | 90 | phpagi.conf.old_2013Jul03_143234 | 90 | |
phpagi.conf.old_2014May13_174834 | 90 | |||
privacy.conf | 81 | privacy.conf | 81 | |
privacy.conf.old_2014Aug15_060259 | 81 | privacy.conf.old_2013Jul03_143234 | 81 | |
privacy.conf.old_2014May13_174834 | 81 | |||
queuerules.conf | 1440 | queuerules.conf | 1440 | |
queues.conf | 522 | queues.conf | 522 | |
queues.conf.old_2014Aug15_060259 | 522 | queues.conf.old_2013Jul03_143234 | 522 | |
queues.conf.old_2014May13_174834 | 522 | |||
queues.conf.rpmnew | 25608 | queues.conf.rpmnew | 25609 | |
queues_additional.conf | 418 | queues_additional.conf | 14582 | |
queues_custom.conf | 0 | queues_custom.conf | 0 | |
queues_custom_general.conf | 0 | queues_custom_general.conf | 0 | |
queues_general_additional.conf | 440 | queues_general_additional.conf | 440 | |
queues_post_custom.conf | 0 | queues_post_custom.conf | 0 | |
res_config_mysql.conf | 417 | res_config_mysql.conf | 424 | |
res_config_mysql.conf.sample | 2061 | res_config_mysql.conf.sample | 2061 | |
res_config_sqlite.conf | 378 | res_config_sqlite.conf | 378 | |
res_config_sqlite3.conf | 1332 | res_config_sqlite3.conf | 1332 | |
res_corosync.conf | 876 | res_corosync.conf | 876 | |
res_curl.conf | 160 | res_curl.conf | 160 | |
res_fax.conf | 67 | res_fax.conf | 67 | |
res_fax_custom.conf | 0 | res_fax_custom.conf | 0 | |
res_fax_digium.conf | 54 | res_fax_digium.conf | 54 | |
res_fax_digium_custom.conf | 0 | res_fax_digium_custom.conf | 0 | |
res_ldap.conf | 7075 | res_ldap.conf | 7075 | |
res_odbc.conf | 5208 | res_odbc.conf | 4684 | |
res_pgsql.conf | 995 | res_pgsql.conf | 995 | |
res_pktccops.conf | 713 | res_pktccops.conf | 713 | |
res_snmp.conf | 834 | res_snmp.conf | 834 | |
res_stun_monitor.conf | 1350 | res_stun_monitor.conf | 1350 | |
rtp.conf | 282 | rtp.conf | 282 | |
rtp.conf.old_2014Aug15_060259 | 282 | rtp.conf.old_2013Jul03_143234 | 282 | |
rtp.conf.old_2014May13_174834 | 282 | |||
rtp.conf.rpmnew | 1797 | rtp.conf.rpmnew | 1797 | |
save | 4096 | |||
say.conf | 17057 | say.conf | 17057 | |
sip.conf | 3001 | sip.conf | 3001 | |
sip.conf.old_2014Aug15_060258 | 3001 | sip.conf.old_2013Jul03_143235 | ||
sip.conf.old_2014May13_174916 | 3001 | |||
sip.conf.old_freePBX-2.8.1-16 | 80389 | sip.conf.old_freePBX-2.8.1-16 | 80389 | |
sip.conf.old_freePBX-2.8.1-17 | 3001 | sip.conf.old_freePBX-2.8.1-17 | 3001 | |
sip.conf.rpmnew | 91165 | sip.conf.rpmnew | 88514 | |
sip_additional.conf | 525 | sip_additional.conf | 49272 | |
sip_custom.conf | 0 | sip_custom.conf | 12 | |
sip_custom_post.conf | 0 | sip_custom_post.conf | 0 | |
sip_general_additional.conf | 656 | sip_general_additional.conf | 655 | |
sip_general_custom.conf | 14 | sip_general_custom.conf | 14 | |
sip_nat.conf | 0 | sip_nat.conf | 0 | |
sip_notify.conf | 487 | sip_notify.conf | 487 | |
sip_notify.conf.old_2014Aug15_060258 | 487 | sip_notify.conf.old_2013Jul03_143235 | ||
sip_notify.conf.old_2014May13_174916 | 487 | |||
sip_notify.conf.old_freePBX-2.8.1-16 | 790 | sip_notify.conf.old_freePBX-2.8.1-16 | 790 | |
sip_notify.conf.old_freePBX-2.8.1-17 | 487 | sip_notify.conf.old_freePBX-2.8.1-17 | 487 | |
sip_notify_additional.conf | 779 | sip_notify_additional.conf | 779 | |
sip_notify_custom.conf | 40 | sip_notify_custom.conf | 40 | |
sip_notify_custom_elastix.conf | 66 | sip_notify_custom_elastix.conf | 66 | |
sip_registrations.conf | 418 | sip_registrations.conf | 546 | |
sip_registrations_custom.conf | 0 | sip_registrations_custom.conf | 0 | |
skinny.conf | 9185 | skinny.conf | 9185 | |
sla.conf | 7092 | sla.conf | 7092 | |
smdi.conf | 2669 | smdi.conf | 2669 | |
telcordia-1.adsi | 1384 | telcordia-1.adsi | 1384 | |
udptl.conf | 656 | udptl.conf | 656 | |
unicall.conf | 496 | unicall.conf | 496 | |
unistim.conf | 5621 | unistim.conf | 5621 | |
unistim.conf.rpmnew | 5621 | |||
users.conf | 2571 | users.conf | 2687 | |
users.conf.rpmnew | 2571 | |||
version | 16 | version | 15 | |
vm_email.inc | 577 | vm_email.inc | 578 | |
vm_general.inc | 1835 | vm_general.inc | 1835 | |
voicemail.conf | 67 | voicemail.conf | 11540 | |
voicemail.conf.rpmnew | 23819 | voicemail.conf.rpmnew | 23772 | |
voicemail.conf.template | 67 | voicemail.conf.template | 67 | |
vpb.conf | 5938 | vpb.conf | 5938 | |
vpb.conf.rpmnew | 5938 | |||
xmpp.conf | 2150 | xmpp.conf | 2150 | |
zapata.conf.template | 699 | zapata.conf.template | 699 |
Теперь я расскажу в двух словах - в чем заключается программирование VOIP-телефонии под Asterisk. При нажатии каких-то кнопок на телефоне, вызываются приложения, которые выполняют какую-то полезную работу, например проигрывают музыку или предлагают юзеру нажать какие цифры кода на клавиатуре своего телефона. Приложения могут читать эти коды и модернизировать DIAL-планы по протоколу AGI. Например если вы ввели какой-то код правильно, то приложение может занести некоторую отметку в базу, например добавить вам денег на VOIP-переговоры, или активировать вашу виндузню (именно так происходит сейчас телефонная активация), после чего сказать вам - до свиданья. Если же код вы ввели неверный код, то дальше DIAL-план может быть установлен прогой с AGI-интерфейсом какой-угодно, от разрыва разговора, до предложения прослушать музычку и пройти все меню DIAL-плана с самого начала.
Даже в скромных фирмах в несколько человек, диалплан может насчитывать десятки тысяч строк. Вот конфиг небольшой компании, в которой, как вы видите, определено 35 VOIP телефонов на горячей линии 400 - зато приложений, работающих по интерфейсу AGI, в этой фирме функционировало больше двухсот штук!
Все интернет и телевизионные магазины Европы тоже работают по VOIP (как правило на каждый отдельный товар на своем номере телефона). К примеру, компания, которую тут описываю - торгует примерно сотней товаров.
И здесь возникает второй аспект программирования - клиентское программирование десктопных приложений на компьютерах операторов. Когда на некотором телефонном номере горячей линии оператор поднимает трубку, у оператора на кампутере сразу же открывается связанное с этим товаром приложение (как устроена эта взаимосвязь VOIP-номера и айпишника кампутера я не понял - ну допустим по триггеру, при добавлению какой-то записи в базу Asterisk). И соответственно, оператор видит не только сведения о звонящем, но и все сведения о товаре. Сведения о звонящем позволяют оператору увеличить оборот торговой фирмы, предложив сразу же какие-то акции, например если звонит пенсионер или данный человек уже делал заказ в данной фирме. А сведения о товаре позволяют видеть реальный остаток товара, норму отгрузки, стоимость доставки, возможность сделать скидку и какую. Приложение также позволяет оператору сразу же оформить заказ и отправить его в отдел доставки фирмы поставщика. То есть данная торговая фирма своего склада не имеет, а является лишь информационной структурой, колл-центром на базе Elastix, а в плане бизнеса является оптово-розничным отделом сбыта сотни производителей, с которыми заключены соответствующие соглашения. По названиям фирменной музычки, связанной с каждым товаром, мы видим что данная фирма торгует пивом Staropramen, Каменица, Carlsberg и другими товарами.
Тема торговли пивом мне близка, как никакая другая. Ибо я знаю насколько мутно эта схема работает на территории бывшего совка. Самая моя первая коммерчески успешная программа была написала на Клиппере первоначально для Роганского пивзавода №3 г. Харькова в незабываемом 1990-м году, 25 лет назад! И за эту программу я получил свои первые в жизни 70 тысяч долларов наличными. Из-за чего и уволился из Национального космического агенства Украины и отправился далее в самостоятельное плавание. Эту свою первую коммерчески удачную прогу я написал на Клиппере, сначала на четверке, потом переписал ее на пятерке и пытался тиражировать ее по разным пивзаводам. Но это было уже не так просто, ибо на Роганском пивзаводе хоть какой-то порядок был налажен в отделе сбыта в голодные и бандитские 90-е годы, а видели бы вы как были устроены отделы сбыта на других пивных заводах! Достаточно сказать, что все оптовые закупки фур пива были только за наличный расчет, а инфляция была такая, что даже некая условная отпускная цена (которая как бы существовала на каждом заводе) менялась по нескольку раз в день! В противовес всему этому грязному совковому балагану, здесь вы можете видеть, как устроен процесс торговли пивом в Европе, в частности в Болгарии.
И вот здесь в моем повествовании мы подошли к пониманию вопроса, который я пытался решить в этой фирме. Дело в том, что конечно же, заказы на товары поступают не из того города, где расположена эта торговая фирма. То есть люди звонят по межгороду, а значительная часть звонков вообще международная. Соответственно, дорогие звонки сразу же сбрасываются и сервер VOIP выполняет CallBack звонящему. И здесь возникла проблема. После некоторых изменений, очереди на обратный звонок с обычных 25-ти звонков стали сбрасываться после попадания в очередь всего 5-8 звонков. Что было для данной торговой фирмы неприемлемо. Могу похвастаться, что причину этого я понял и дал им соответствующие рекомендации по разрешению возникшей проблемы.
И наконец, коснемся слегонца третьего, последнего, аспекта проблемы программирования для Asterisk. В дистрибутив Elastix встроены десятка два основных приложений, например когда дистрибутив применяется Elastix в гостиннице для звонков постояльцев, в него сразу же встроен софт управления Минибаром гостинницы. То есть возникает необходимость как программировать в среде этих 20-30 бесплатных, изначально встроенных в Elastix приложений, а так же существуют полсотни различных платных плагинов для Elastix, которые тоже нуждаются в адаптации к конкретному применению.
К сказанному остается добавить, что в дикой России технологии VOIP (и тем более продвинутое программирование под Asterisk) практически не существует. На всю Рассею, думаю, существует от силы десяток VOIP-серверов с каким-то более ли менее развитым меню и приложениями - наверное только у сотовых компаний (без этого невозможно никак, это их техническое ядро), ну и может быть в нескольких ведущих банках на горячих линиях. В остальной России - на тему VOIP все гораздо хуже, чем в Сомали и Зимбабве. А вот в Европе это совсем не так, здесь CALL-центр это вообще автономный бизнес, информационная компания (не только как описанная здесь торговая фирма), но такая информационная компания на базе VOIP-сервера может брать заказы для опросов общественного мнения, для обратной связи от телевидения, даже создание любой общественной организации начинается тут не со взяток кремлевским чеченам (типа Суркова) или кремлевским пидарасам (типа Володина или Иванова) - а с установки сервера VOIP.
Еще немного о VOIP я написал тут - Интернет в Европе.
|