Script Template

All Lua scripts executed by the N2 Logic Node, whether read from a file or from the compiled node source:

In practical terms, every Lua script you want to use must follow this format:

local ncc = require "n2.ncc"
-- other included libraries
-- definitions
local logic = function (args)
    -- logic goes here
end
return ncc.handler (logic)

Script Examples

A real, if trivial, example is the ubiquitous Hello World version for NCC:

local ncc = require "n2.ncc"

function hello ()
    ncc.debug ("Hello, World")
end

local hw = function (a)
    hello ()
end

return ncc.handler (hw)

A more detailed production-ready example would be a helper function to retrieve a specific balance type for the active subscriber and branch accordingly:

local ncc = require "n2.ncc"
local ccs = require "n2.ccs"

function getBalance (customer, balance)
    local cust = 0
    if type (customer) == type (1) then
        cust = customer
    else
        cust = ncc.customer_id_for_name (customer)
        if not cust then
            if customer then
                cust = customer
            else
                cust = "nil"
            end
            return "Invalid customer " .. cust, 0
        end
    end

    local bal = 0
    if type (balance) == type (1) then
        bal = {['ID'] = balance} -- add to table for check
    else
        bal = ccs.customer.get_balance_type_by_name(customer, balance)
    end
    if not bal or not bal.ID then
        if balance then
            bal = balance
        else
            bal = "nil"
        end
        return "Invalid balance type " .. bal, 0
    else
        bal = bal.ID
    end

    local wi = ccs.wallet.info()
    if not wi.BALANCES[bal] or not wi.BALANCES[bal].SYSTEM_VAL then
        return 0, 0
    else
        local balAmt = wi.BALANCES[bal].SYSTEM_VAL
        local balExp = walletUtils.earliestExpiry(customer, balance)
        return balAmt, balExp
    end
end

local f = function ()
    local ba = 0
    local be = 0
    ba, be = getBalance ("Boss", "General Cash")
    if type (ba) == type (1) then
        -- store balance values in temporary storage for later control plan usage
        ncc.profile.write_int ("TEMPORARY", 100, ba)
        ncc.profile.write_int ("TEMPORARY", 101, be)
        ncc.branch.exit (1)
    else
        -- error occurred
        ncc.branch.exit (2)
    end
end

return ncc.handler (f)

Loops

Be aware of Lua operations that are local to your script. An infinite loop will cause the call to be continually processed within the SLEE and (eventually) cause a core dump as slee_acs will not respond to a watchdog signal. Calling NCC API functions will prevent a core dump, but will not prevent an infinite loop. Use the while command carefully!

Script Processing

For operations that do not involve the NCC API, the Lua script will simply execute linearly and the node will take the Default branch (if not instructed otherwise and no error occurs).

When performing calls to NCC API functions, the script will yield control to the logic node runtime engine and wait to be instructed to begin again. Some NCC calls will return almost immediately (e.g. printing debug) while others will require the node to similarly yield control to the core NCC runtime and wait for a response (e.g. reading a profile tag value). There is no need to handle this yourself, however - simply construct your script as you would like to have it and the Lua and NCC runtimes will deal with the responsibility delegation themselves.

External Libraries

External Lua libraries - whether from other N2 API sources, your custom libraries, or other third-party extensions - can be included as required in any of your scripts. Simply include them at the top of the Lua chunk, e.g.:

local ncc = require "n2.ncc"
local pretty = require "pl.pretty"

local routine = function (args)
    print (pretty.write (args))
    ncc.debug ("Logic node processing started")
    -- etc

The include path that the Lua interpreter uses is set in the LUA_PATH environment variable. This path should be used to contain any Lua chunks, both pre-compiled and as scripts.

For the acs_oper operator, who runs the SLEE, this is stored in the following file:

~acs_oper/.profile-scp

The default, installed value of LUA_PATH is:

LUA_PATH="/IN/service_packages/N2/lua/?.lua;/IN/service_packages/N2/lua/?/?.lua;/IN/service_packages/N2/lib/?.lua;/IN/service_packages/N2/lib/?/?.lua;/IN/service_packages/N2/lua/?.lc;/IN/service_packages/N2/lua/?/?.lc;/IN/service_packages/N2/lib/?.lc;/IN/service_packages/N2/lib/?/?.lc"

The convention used for included libraries is:

Additionally, the LUA_CPATH environment variable allows for Lua-enabled C shared libraries to be accessed.

LUA_CPATH="/IN/service_packages/N2/lua/?.so;/IN/service_packages/N2/lua/?/?.so;/IN/service_packages/N2/lib/?.so;/IN/service_packages/N2/lib/?/?.so"

Changes to either of these environment variables require a SLEE restart for the operator to pick up the modification.

I/O

In most cases, you will probably use the N2 NCC API to get information into or out of the node. However, you are by no means limited to this; all the features Lua offers for input and output are available to use.

As an example, you may want to diagnose problems with calls from a particular geographic region. In a normal NCC deployment, there is no way to do this easily, but with the Logic Node you can easily get information in real-time with minimal overhead and targeted just to the information you want:

local ncc = require "n2.ncc"

local h = function (a)
    if (ncc.engine.field.MSC_ADDRESS.DIGITS == "12345" 
        and ncc.engine.location_num () == "54321") then
        print ("Problem found! Let's get the language ID they think they're using ("
            .. ncc.engine.language_id () .. ") and their time zone ("
            .. ncc.engine.caller_logical_tz ())
    end
end

return coroutine.create (h)

This script will write to the standard slee_acs log file every time just the targeted information required is found. This is independant of whether or not debug is enabled on the SLC, so can be used in production situations for real-time analysis and tracing.

Refreshing scripts

All scripts read from the file system will exhibit changes as soon as the script is updated. No caching is performed.

Configuration in the node, however, including script source if given, is subject to the standard ACS or CCS control plan caching and activation rules.

Error handling

The N2 Logic Node has been designed from a "fail quickly and loudly" perspective, assuming that the script author will want to know immediately when 'bad' values are passed to an API function. This enables your scripts to be stringently developed and rapidly debugged, with fewer places for subtle bugs to hide by the time it gets to your production network.

Most API functions will cause an error when provided input outside the expected ranges, e.g. an invalid profile block identifier or a non-existent engine field. This error will be alerted in the system log. For example:

Sep  22 17:00:00 n2-slc01 n2LogicNode: [ID 675952 user.error] n2LogicNode(12345) ERROR: {10006004} SDK: Thread error (/IN/service_packages/N2/lua/n2/ncc.lua:289: New engine field value must be supplied).

This matches the Lua approach, which will raise an error and stop script execution if it cannot fulfil the request - for example, indexing a non-table variable.

You should include adequate checking and exception handling in your scripts to avoid errors caused by unreliable inputs, e.g.:

local periodic_charges
local customers = ncc.customers ()
local cust_id = ncc.customer_id_for_name ('Test Service Provider')

if (customers and customers[cust_id]) then
    periodic_charges = ccs.customer.periodic_charges (cust_id)
end

if (periodic_charges and type (periodic_charges) == 'table') then
    -- iterate through table, etc.

Other resources

Core Scripting Errors

The N2 Logic Node framework may raise errors in various cases: if the script is not templated correctly, or if you yield control to the node outside the NCC API functions, or if it is not syntactically valid Lua, etc.

Alarm ERROR: {10006001}: Unable to load Lua chunk (error: <Lua error>).
Problem The Lua chunk is not able to be loaded into the execution environment.
Resolution Confirm that the script is readable by acs_oper. The error details provided should provide context.

Alarm ERROR: {10006002}: Unable to execute Lua chunk (error: <Lua error>).
Problem The Lua chunk has been loaded but is not able to be executed.
Resolution Check that the Lua is syntactically valid. The error details provided should provide context.

Alarm ERROR: {10006003}: Setup did not return a coroutine thread.
Problem The Lua script was executed but did not return a coroutine thread for node control.
Resolution Confirm that the return value in your script follows the script template and that the script is readable by the acs_oper user.

Alarm ERROR: {10006004}: Thread error (<Lua error>).
Problem The thread ended abnormally (i.e. did not yield in a controlled manner).
Resolution Confirm that the structure of your script follows the script template. The error details provided should provide context.

Alarm ERROR: {10006005}: Invalid number of parameters (<number of parameters>) returned from thread.
Problem The thread yielded with an unexpected number of parameters. Exactly two parameters (in order) are expected in a thread response: an action (string) and a (possibly empty) table of arguments.
Resolution Confirm that your script does not yield outside usage of NCC API functions. The error details provided should provide context.

Alarm ERROR: {10006006}: Thread return parameter 1 (<parameter 1>) is not a string indicating an action.
Problem The thread yielded with an unexpected parameter in the action location. Exactly two parameters (in order) are expected in a thread response: an action (string) and a (possibly empty) table of arguments.
Resolution Confirm that your script does not yield outside usage of NCC API functions.

Alarm ERROR: {10006007}: Thread return parameter 2 (<parameter 2>) is not a table with (possibly zero) parameters.
Problem The thread yielded with an unexpected parameter in the action details location. Exactly two parameters (in order) are expected in a thread response: an action (string) and a (possibly empty) table of arguments.
Resolution Confirm that your script does not yield outside usage of NCC API functions.

Alarm ERROR: {10006008}: Unknown action (<action>) received from thread.
Problem The thread yielded with an unrecognised action.
Resolution Confirm that your script does not yield outside usage of NCC API functions.

Alarm ERROR: {10006009}: Unknown engine field (<field ID>) received from thread.
Problem The thread yielded with an engine field request but for an unrecognised enumerated field.
Resolution Confirm that your script does not yield outside usage of NCC API functions.

Alarm ERROR: {10006010}: Invalid field type (<Lua type>) for engine field access received from thread.
Problem The thread yielded with an engine field request but with a non-numeric type for the enumerated field.
Resolution Confirm that your script does not yield outside usage of NCC API functions.

Alarm ERROR: {10006011}: Invalid profile block type (<Lua type>) for profile access received from thread.
Problem The thread yielded with a profile request but with a non-numeric type for the profile block.
Resolution Ensure that when specifying profile blocks that you use correct profile block identifiers.

Alarm ERROR: {10006012}: Invalid profile tag type (<Lua type>) for profile access received from thread.
Problem The thread yielded with a profile request but with a non-numeric type for the profile tag.
Resolution Ensure that when specifying profile tags that you use numeric, positive tag values.

Alarm ERROR: {10006013}: Invalid output type (<Lua type>) for debug action received from thread.
Problem The thread yielded with a debug request but with a non-string type for the debug output.
Resolution Confirm that your script does not yield a debug action outside usage of NCC API functions.

Alarm ERROR: {10006014}: Unexpected message received from get wallet request.
Problem The ACS chassis returned an invalid message in response to a get wallet request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006015}: Unexpected message received from service capability request.
Problem The ACS chassis returned an invalid message in response to a service capability request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006016}: Insufficient capabilities received in service capability response.
Problem The active charging domain does not have sufficient capabilities to perform the action requested.
Resolution Use the capabilities functions to query the available capabilities before performing a charging action.

Alarm ERROR: {10006017}: Unknown wallet category (<enumerated wallet category>) received from ACS.
Problem The ACS chassis returned an unrecognised enumeration for a wallet category in response to a get wallet request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006018}: Invalid message type (<Lua type>) for alarm request received from thread.
Problem The thread yielded with an alarm request but with a non-string type for the alarm message.
Resolution Ensure that when specifying alarm messages that you use string values.

Alarm ERROR: {10006019}: Invalid severity type (<Lua type>) for alarm request received from thread.
Problem The thread yielded with an alarm request but with a non-numeric type for the alarm severity.
Resolution Ensure that when specifying alarm severities that you use numeric, positive values.

Alarm ERROR: {10006020}: Invalid code type (<Lua type>) for alarm request received from thread.
Problem The thread yielded with an alarm request but with a non-numeric type for the alarm code.
Resolution Ensure that when specifying alarm codes that you use numeric, positive values. Alternately, do not specify a code.

Alarm ERROR: {10006021}: Invalid CLI type (<Lua type>) for wallet access received from thread.
Problem The thread yielded with a wallet request for a CLI but with a non-string type for the CLI.
Resolution Ensure that when specifying CLIs that you use string values.

Alarm ERROR: {10006022}: Unexpected message received from get alternate wallet request.
Problem The ACS chassis returned an invalid message in response to a get alternate wallet request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006023}: System error returned from ACS when querying alternate wallet details.
Problem The ACS chassis returned a system error in response to a get alternate wallet request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006024}: Communications error returned from ACS when querying alternate wallet details.
Problem The ACS chassis returned a communications error in response to a get alternate wallet request.
Resolution Ensure adequate performance of your network to the billing engine, and of the billing engines themselves. This is symptomatic of a timed-out request.

Alarm ERROR: {10006025}: Unknown error (<error type>) returned from ACS when querying alternate wallet details.
Problem The ACS chassis returned an unknown enumerated error in response to a get alternate wallet request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006026}: Unknown chassis action (<action>) received from thread.
Problem The thread yielded with an unrecognised chassis action.
Resolution Confirm that your script does not yield outside usage of NCC API functions.

Alarm ERROR: {10006027}: Unexpected message received from extended wallet info request.
Problem The ACS chassis returned an invalid message in response to an extended wallet info request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006028}: Unexpected message received from wallet info request.
Problem The ACS chassis returned an invalid message in response to a wallet info request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006029}: Invalid action type (<Lua type>) for chassis action request received from thread.
Problem The thread yielded with a chassis action request but with a non-string type for the action type.
Resolution Ensure that when specifying chassis actions that you use string values. Refer to the charging data model.

Alarm ERROR: {10006030}: Unexpected message received from wallet update request.
Problem The ACS chassis returned an invalid message in response to a wallet update request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006031}: Wallet update request failed: unknown subscriber.
Problem The ACS chassis returned an unknown subscriber response for a wallet update request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006032}: Wallet update request failed: general failure.
Problem The ACS chassis returned a general failure response for a wallet update request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006033}: Invalid EDR creation flag type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the EDR creation flag.
Resolution Ensure that when specifying the EDR creation flag for a wallet update that you use either 0 or 1.

Alarm ERROR: {10006034}: Invalid wallet activation date type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the wallet activation date.
Resolution Ensure that when specifying the wallet activation date for a wallet update that you use an epoch value, e.g.

wallet.ACTIVATION_DATE = os.time ()

Alarm ERROR: {10006035}: Invalid wallet last access date type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the wallet last access date.
Resolution Ensure that when specifying the wallet last access date for a wallet update that you use an epoch value, e.g.

wallet.LAST_ACCESSED = os.time ()

Alarm ERROR: {10006036}: Invalid wallet state type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-string type for the wallet state.
Resolution Ensure that when specifying the wallet state for a wallet update that you use a string value.

Alarm ERROR: {10006037}: Invalid wallet start date type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the wallet start date.
Resolution Ensure that when specifying the wallet start date for a wallet update that you use an epoch value, e.g.

wallet.START_DATE = os.time ()

Alarm ERROR: {10006038}: Invalid extra information type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-string type for the extra information.
Resolution Ensure that when specifying the extra information for a wallet update that you use a string value.

Alarm ERROR: {10006039}: Balance type ID <balance type ID> not found in the database.
Problem The balance ID specified was not found in the database.
Resolution Ensure you have specified the correct value by retrieving the database values for customer data.

Alarm ERROR: {10006040}: No suitable unit found for balance type ID <balance type ID>.
Problem The balance ID specified does not have a balance unit available.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006041}: Invalid bucket ID type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the bucket ID.
Resolution Ensure that when specifying the extra information for a bucket ID that you use a numeric, positive value.

Alarm ERROR: {10006042}: Invalid bucket start date type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the bucket start date.
Resolution Ensure that when specifying the extra information for a bucket start date that you use an epoch value, e.g.

wallet.BALANCES[x].BUCKET_START = os.time ()

Alarm ERROR: {10006043}: Invalid bucket expiry date type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the bucket expiry date.
Resolution Ensure that when specifying the extra information for a bucket expiry date that you use an epoch value, e.g.

wallet.BALANCES[x].BUCKET_EXP = os.time ()

Alarm ERROR: {10006044}: Invalid ACS customer ID type (<Lua type>) for customer data access received from thread.
Problem The thread yielded with a customer data access request but with a non-numeric type for the ACS customer ID.
Resolution Ensure that when specifying the ACS customer ID for customer data requests that you use a numeric, positive value.

Alarm ERROR: {10006045}: Unable to extend Lua stack.
Problem The Lua runtime is unable to allocate enough space on the Lua stack that is used to transfer data between the Lua script thread and the Logic Node.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006046}: Invalid subscriber reference type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-string type for the subscriber reference.
Resolution Ensure that when specifying the subscriber reference for a wallet update that you use a string value.

Alarm ERROR: {10006047}: Invalid CLI type (<Lua type>) for subscriber information received from thread.
Problem The thread yielded with a subscriber information request for a CLI but with a non-string type for the CLI.
Resolution Ensure that when specifying CLIs that you use string values.

Alarm ERROR: {10006048}: Invalid bucket suppression flag type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the bucket suppression flag.
Resolution Ensure that when specifying the bucket suppression flag for a wallet update that you use either 0 or 1.

Alarm ERROR: {10006049}: SDK threw exception: <exception details>.
Problem The NCC SDK threw an exception in response to a request passed to it by the Lua runtime.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006050}: Must have either both or neither of bucket and balance to cancel.
Problem A wallet update request was received from the thread with only one of the bucket to cancel or balance to cancel specified.
Resolution Ensure when sending a wallet update request you either specify both the bucket and balance cancellation details, or neither of the bucket and balance cancellation details.

Alarm ERROR: {10006051}: Invalid cancel bucket ID type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the bucket ID to cancel.
Resolution Ensure that when specifying the extra information for a bucket ID to cancel that you use a numeric, positive value.

Alarm ERROR: {10006051}: Invalid cancel balance ID type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the balance ID to cancel.
Resolution Ensure that when specifying the extra information for a balance ID to cancel that you use a numeric, positive value.

Alarm ERROR: {10006053}: Invalid new wallet state (<state>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with an invalid new wallet state.
Resolution Ensure that when specifying the wallet state for a wallet update that you use a valid state. Refer to the charging data model.

Alarm ERROR: {10006054}: Invalid balance ID type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the balance ID.
Resolution Ensure that when specifying the extra information for a balance ID that you use a numeric, positive value.

Alarm ERROR: {10006055}: Invalid balance value type (<Lua type>) for wallet update received from thread.
Problem The thread yielded with a wallet update request but with a non-numeric type for the balance value.
Resolution Ensure that when specifying the extra information for a balance value that you use a numeric, positive value.

Alarm ERROR: {10006056}: Invalid extra information type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-string type for the extra information.
Resolution Ensure that when specifying the extra information for a named event that you use a string value.

Alarm ERROR: {10006057}: Invalid class type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-string type for the class.
Resolution Ensure that when specifying the class of a named event that you use a string value.

Alarm ERROR: {10006058}: Invalid name type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-string type for the name.
Resolution Ensure that when specifying the name of a named event that you use a string value.

Alarm ERROR: {10006059}: Invalid minimum units type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-numeric type for the minimum units required.
Resolution Ensure that when specifying the minimum units required for a named event that you use a numeric value.

Alarm ERROR: {10006060}: Invalid maximum units type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-numeric type for the maximum units required.
Resolution Ensure that when specifying the maximum units required for a named event that you use a numeric value.

Alarm ERROR: {10006061}: Invalid ignore balance limits flag type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-numeric type for the ignore balance limits flag.
Resolution Ensure that when specifying the ignore balance units flag for a named event that you use a numeric value.

Alarm ERROR: {10006062}: Invalid discount percentage type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-numeric type for the discount percentage.
Resolution Ensure that when specifying the discount percentage for a named event that you use a numeric value.

Alarm ERROR: {10006063}: Invalid caller timezone type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-string type for the caller timezone.
Resolution Ensure that when specifying the caller timezone of a named event that you use a string value.

Alarm ERROR: {10006064}: Invalid used units type (<Lua type>) for named event received from thread.
Problem The thread yielded with a named event request but with a non-numeric type for the used units.
Resolution Ensure that when specifying the used units for a named event that you use a numeric value.

Alarm ERROR: {10006065}: Unexpected message received from direct named event request.
Problem The ACS chassis returned an invalid message in response to a direct named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006066}: Direct named event request failed: general failure.
Problem The ACS chassis returned an unrecognised response status for a direct named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006067}: Unexpected message received from reserve named event request.
Problem The ACS chassis returned an invalid message in response to a reserve named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006068}: Reserve named event request failed: general failure.
Problem The ACS chassis returned an unrecognised response status for a reserve named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006069}: Unexpected message received from confirm named event request.
Problem The ACS chassis returned an invalid message in response to a confirm named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006070}: Confirm named event request failed: general failure.
Problem The ACS chassis returned an unrecognised response status for a confirm named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006071}: Unexpected message received from revoke named event request.
Problem The ACS chassis returned an invalid message in response to a revoke named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006072}: Revoke named event request failed: general failure.
Problem The ACS chassis returned an unrecognised response status for a revoke named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006073}: Unexpected response received for named event.
Problem The ACS chassis returned an unrecognised response type for a named event request.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006074}: Invalid announcement ID type (<Lua type>) for play announcement received from thread.
Problem The thread yielded with a play announcement request but with a non-numeric type for the announcement ID value.
Resolution Ensure that when specifying the announcement ID that you use a numeric, positive value.

Alarm ERROR: {10006075}: Invalid announcement duration type (<Lua type>) for play announcement received from thread.
Problem The thread yielded with a play announcement request but with a non-numeric type for the announcement duration value.
Resolution Ensure that if specifying the announcement duration that you use a numeric, positive value.

Alarm ERROR: {10006076}: Invalid announcement repetitions type (<Lua type>) for play announcement received from thread.
Problem The thread yielded with a play announcement request but with a non-numeric type for the announcement repetitions value.
Resolution Ensure that if specifying the announcement repetitions that you use a numeric, positive value.

Alarm ERROR: {10006077}: Invalid announcement repetition interval type (<Lua type>) for play announcement received from thread.
Problem The thread yielded with a play announcement request but with a non-numeric type for the announcement repetition interval value.
Resolution Ensure that if specifying the announcement repetition interval that you use a numeric, positive value.

Alarm ERROR: {10006078}: Unexpected message received from play announcement request.
Problem The response received from ACS for the play announcement action was not a valid response for such an action.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006079}: Play announcement failed: general failure.
Problem The response received from ACS for the play announcement action was not a valid response for such an action.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006080}: Unexpected response received from play announcement request.
Problem The response received from ACS for the play announcement action was not a valid response for such an action.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006081}: Invalid announcement number of variable parts type (<Lua type>) for play announcement received from thread.
Problem The thread yielded with a play announcement request but with a non-numeric type for the number of variable parts value.
Resolution Contact N-Squared Support.

Alarm ERROR: {10006082}: Invalid announcement variable parts TYPE type (<Lua type>) for play announcement received from thread.
Problem The thread yielded with a play announcement request but with a non-string type for the a variable part TYPE parameter.
Resolution Ensure that if specifying the announcement variable part TYPE parameter that you use a string value.

Alarm ERROR: {10006083}: Invalid announcement variable parts VALUE type (<Lua type>) with TYPE of string for play announcement received from thread.
Problem The thread yielded with a play announcement request with a string variable part TYPE but with a non-string type for the variable part VALUE.
Resolution Ensure that if specifying the announcement variable part VALUE with a string TYPE that you use a string value.

Alarm ERROR: {10006084}: Invalid announcement variable parts VALUE type (<Lua type>) with TYPE of unsigned for play announcement received from thread.
Problem The thread yielded with a play announcement request with an unsigned variable part TYPE but with a non-numeric type for the variable part VALUE.
Resolution Ensure that if specifying the announcement variable part VALUE with an unsigned TYPE that you use a positive numeric value.

Alarm ERROR: {10006085}: Invalid announcement variable parts VALUE type (<Lua type>) with TYPE of date for play announcement received from thread.
Problem The thread yielded with a play announcement request with a date variable part TYPE but with a non-numeric type for the variable part VALUE.
Resolution Ensure that if specifying the announcement variable part VALUE with a date TYPE that you use a positive numeric value.