Asterisk™: будущее телефонии Второе издание
Шрифт:
Представляет статус Zapata – каналов
Представляет статус всех Zap-каналов.
Параметры
ActionID
Привилегии
none
Пример
Action: ZapShowChannels ActionID: 9999999999
Response: Success ActionID: 9999999999
Message: Zapata channel status will follow
Event: ZapShowChannels Channel: 1
Signalling: FXO Kewlstart Context: incoming DND: Disabled Alarm: No Alarm ActionID: 9999999999
Event: ZapShowChannels Channel: 4
Signalling: FXS Kewlstart Context: incoming DND: Disabled Alarm: No Alarm ActionID: 9999999999
Event: ZapShowChannelsComplete ActionID: 9999999999
ZapTransfer
Выполняет
Выполняет переадресацию Zap-канала.
Привилегия
none
Пример
Action: ZapTransfer ZapChannel: 1 ActionID: 4242
Response: Success Message: ZapTransfer ActionID: 4242
G
Пример func_odbc
В этом приложении представлены примеры из реализации функциональности «горячих столов», о которой шла речь в разделе «Ощутим могущество func_odbc: система "горячих столов"» главы 12. Возможно, есть смысл вернуться к главе 12 и рассмотреть этот код данного примера вместе с объяснениями.
Система «горячих столов» (extensions.conf)
Коддиалплана
; Функция "горячих столов"
[hotdesk][hotdesk] |
; Регистрация "горячего стола" |
exten => _11XX,1,NoOp |
exten => _11XX,n,Set(E=${EXTEN}) |
exten => _11XX,n,Verbose(1|Hot Desk Extension ${E} is changing status) |
exten => _11XX,n,Verbose(1|Checking current status of extension ${E}) |
exten => _11XX,n,Set(${E}_STATUS=${HOTDESK_INFO(status,${E})}) |
exten => _11XX,n,Set(${E}_PIN=${HOTDESK_INFO(pin,${E})}) |
exten => _11XX,n,GotoIf($[${ISNULL(${${E}_STATUS})}]?invalid_user) |
exten => _11XX,n,GotoIf($[${${E}_STATUS} = 1]?logout,1:login,1) |
exten => login,1,NoOp |
exten => login,n,Set(PIN_TRIES=0) |
exten => login,n,Set(MAX_PIN_TRIES=3) |
exten => login,n(get_pin),NoOp |
exten => login,n,Set(PIN_TRIES=$[${PIN_TRIES} + 1]) |
exten => login,n,Read(PIN_ENTERED|enter-password|${LEN(${${E}_PIN})}) |
exten => login,n,GotoIf($[${PIN_ENTERED} = ${${E}_PIN}]?valid_login,1)
exten => login,n,Playback(invalid-pin,1)
exten => login,n,GotoIf($[${PIN_TRIES} <= ${MAX_PIN_TRIES}]?get_pin:login_fail,1)
exten => valid_login,1,NoOp
exten => valid_login,n,Set(LOCATION=${CUT(CHANNEL,/,2)})
exten => valid_login,n,Set(LOCATION=${CUT(LOCATION,-,1)})
exten => valid_login,n,Set(ARRAY(USERS_LOGGED_IN)=${HOTDESK_CHECK_PHONE_LOGINS
(${LOCATION})})
exten => valid_login,n,GotoIf($[${USERS_LOGGED_IN} > 0]?logout_login,1)
exten => valid_login,n(set_login_status),NoOp
exten => valid_login,n,Set(HOTDESK_STATUS(${E})=1\,${LOCATION})
exten => valid_login,n,GotoIf($[${ODBCROWS} < 1]?error,1)
exten => valid_login,n,Playback(agent-loginok)
exten => valid_login,n,Hangup
exten => logout_login,1,NoOp
exten => logout_login,n,Set(ROW_COUNTER=0)
exten => logout_login,n,While($[${ROW_COUNTER} < ${USERS_LOGGED_IN}])
exten => logout_login,n,Set(WHO=${HOTDESK_LOGGED_IN_USER(${LOCATION}, ${ROW_COUNTER})})
exten => logout_login,n,Set(HOTDESK_STATUS(${WHO})=0)
exten => logout_login,n,Set(ROW_COUNTER=$[${ROW_COUNTER} + 1])
exten => logout_login,n,EndWhile
exten => logout_login,n,Goto(valid_login,set_login_status)
exten => logout,1,NoOp
exten => logout,n,Set(HOTDESK_STATUS(${E})=0)
exten => logout,n,GotoIf($[${ODBCROWS} < 1]?error,1)
exten => logout,n,Playback(silence/1&agent-loggedoff)
exten => logout,n,Hangup
exten => login_fail,1,NoOp
exten => login_fail,n,Playback(silence/1&login-fail)
exten => login_fail,n,Hangup
exten => error,1,NoOp
exten => error,n,Playback(silence/1&connection-failed)
exten => error,n,Hangup
exten => invalid_user,1,NoOp
exten => invalid_user,n,Verbose(1|Hot Desk extension ${E} does not exist)
exten => invalid_user,n,Playback(silence/2&invalid)
exten => invalid_user,n,Hangup
include => hotdesk_outbound
[hotdesk_outbound]
exten => _X.,1,NoOp
exten => _X.,n,Set(LOCATION=${CUT(CHANNEL,/,2)}) exten => _X.,n,Set(LOCATION=${CUT(LOCATION,-,1)})
exten => _X.,n,Set(WHO=${HOTDESK_PHONE_STATUS(${LOCATION})})
exten => _X.,n,GotoIf($[${ISNULL(${WHO})}]?no_outgoing,1)
exten => _X.,n,Set(${WHO}_CID_NAME=${HOTDESK_INFO(cid_name,${WHO})})
exten => _X.,n,Set(${WHO}_CID_NUMBER=${HOTDESK_INFO(cid_number,${WHO})})
exten => _X.,n,Set(${WHO}_CONTEXT=${HOTDESK_INFO(context,${WHO})})
exten => _X.,n,Goto(${${WHO}_CONTEXT},${EXTEN},1)
[international]
exten => _011.,1,NoOp
exten => _011.,n,Set(E=${EXTEN})
exten => _011.,n,Goto(outgoing,call,1)
exten => i,1,NoOp
exten => i,n,Playback(silence/2&sorry-cant-let-you-do-that2)
exten => i,n,Hangup