<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>6.0</version>
    <date>2025-01-01T00:00:00Z</date>
    <media_types>
        <media_type>
            <name>WebSMS</name>
            <type>WEBHOOK</type>
            <parameters>
                <parameter>
                    <name>websms_user</name>
                    <value>your-email@example.com</value>
                </parameter>
                <parameter>
                    <name>websms_password</name>
                    <value>your-password</value>
                </parameter>
                <parameter>
                    <name>to</name>
                    <value>{ALERT.SENDTO}</value>
                </parameter>
                <parameter>
                    <name>subject</name>
                    <value>{ALERT.SUBJECT}</value>
                </parameter>
                <parameter>
                    <name>message</name>
                    <value>{ALERT.MESSAGE}</value>
                </parameter>
            </parameters>
            <script><![CDATA[var WebSMS = {
    params: {},

    setParams: function(params) {
        this.params = params;
    },

    sendSMS: function() {
        var request = new HttpRequest(),
            url = 'https://websms.co.nz/api/connexus/sms.php',
            response,
            result;

        // Build the message - combine subject and message for SMS
        var smsBody = this.params.subject;
        if (this.params.message && this.params.message.length > 0) {
            smsBody += ': ' + this.params.message;
        }

        // Truncate to 459 chars (3 SMS parts max)
        if (smsBody.length > 459) {
            smsBody = smsBody.substring(0, 456) + '...';
        }

        // Format phone number - ensure it starts with country code
        var phoneNumber = this.params.to.replace(/[^0-9+]/g, '');
        if (phoneNumber.startsWith('0')) {
            phoneNumber = '64' + phoneNumber.substring(1);
        } else if (phoneNumber.startsWith('+')) {
            phoneNumber = phoneNumber.substring(1);
        }

        // Set up Basic Auth
        var auth = btoa(this.params.websms_user + ':' + this.params.websms_password);
        request.addHeader('Authorization: Basic ' + auth);
        request.addHeader('Content-Type: application/x-www-form-urlencoded');

        // Build POST data
        var postData = 'to=' + encodeURIComponent(phoneNumber) +
                       '&body=' + encodeURIComponent(smsBody) +
                       '&from=552' +
                       '&rateCode=zabbix';

        try {
            response = request.post(url, postData);

            if (request.getStatus() === 200 || request.getStatus() === 204) {
                result = {
                    'tags': {
                        'websms': 'sent'
                    }
                };
            } else {
                var respObj;
                try {
                    respObj = JSON.parse(response);
                } catch (e) {
                    respObj = { error: response };
                }
                throw 'WebSMS API error: ' + (respObj.error || respObj.message || 'HTTP ' + request.getStatus());
            }
        } catch (error) {
            throw 'WebSMS request failed: ' + error;
        }

        return JSON.stringify(result);
    }
};

try {
    var params = JSON.parse(value);

    // Validate required parameters
    if (!params.websms_user || params.websms_user === 'your-email@example.com') {
        throw 'WebSMS user not configured. Please update the websms_user parameter.';
    }
    if (!params.websms_password || params.websms_password === 'your-password') {
        throw 'WebSMS password not configured. Please update the websms_password parameter.';
    }
    if (!params.to) {
        throw 'Recipient phone number (to) is required.';
    }

    WebSMS.setParams(params);
    return WebSMS.sendSMS();
} catch (error) {
    throw 'WebSMS integration error: ' + error;
}]]></script>
            <process_tags>YES</process_tags>
            <show_event_menu>NO</show_event_menu>
            <description>Send SMS alerts via WebSMS (websms.co.nz).

Configuration:
1. Update websms_user with your WebSMS email address
2. Update websms_password with your WebSMS password
3. Assign this media type to users with their mobile numbers

Phone numbers should be in NZ format (e.g., 0211234567) or international format (e.g., 6421234567).

For support, visit https://websms.co.nz/integrations/zabbix/</description>
            <message_templates>
                <message_template>
                    <event_source>TRIGGERS</event_source>
                    <operation_mode>PROBLEM</operation_mode>
                    <subject>PROBLEM: {EVENT.NAME}</subject>
                    <message>{HOST.NAME}: {TRIGGER.NAME} - {ITEM.LASTVALUE}</message>
                </message_template>
                <message_template>
                    <event_source>TRIGGERS</event_source>
                    <operation_mode>RECOVERY</operation_mode>
                    <subject>RESOLVED: {EVENT.NAME}</subject>
                    <message>{HOST.NAME}: {TRIGGER.NAME} resolved</message>
                </message_template>
                <message_template>
                    <event_source>TRIGGERS</event_source>
                    <operation_mode>UPDATE</operation_mode>
                    <subject>UPDATE: {EVENT.NAME}</subject>
                    <message>{HOST.NAME}: {USER.FULLNAME} {EVENT.UPDATE.ACTION}</message>
                </message_template>
                <message_template>
                    <event_source>DISCOVERY</event_source>
                    <operation_mode>PROBLEM</operation_mode>
                    <subject>Discovery: {DISCOVERY.DEVICE.STATUS}</subject>
                    <message>{DISCOVERY.DEVICE.IPADDRESS} - {DISCOVERY.DEVICE.STATUS}</message>
                </message_template>
                <message_template>
                    <event_source>AUTOREGISTRATION</event_source>
                    <operation_mode>PROBLEM</operation_mode>
                    <subject>Autoregistration: {HOST.HOST}</subject>
                    <message>Host {HOST.HOST} registered</message>
                </message_template>
                <message_template>
                    <event_source>INTERNAL</event_source>
                    <operation_mode>PROBLEM</operation_mode>
                    <subject>Internal: {EVENT.NAME}</subject>
                    <message>{HOST.NAME}: {EVENT.NAME}</message>
                </message_template>
                <message_template>
                    <event_source>INTERNAL</event_source>
                    <operation_mode>RECOVERY</operation_mode>
                    <subject>Resolved: {EVENT.NAME}</subject>
                    <message>{HOST.NAME}: {EVENT.NAME} resolved</message>
                </message_template>
                <message_template>
                    <event_source>SERVICE</event_source>
                    <operation_mode>PROBLEM</operation_mode>
                    <subject>Service: {SERVICE.NAME} {EVENT.NAME}</subject>
                    <message>{SERVICE.NAME}: {EVENT.NAME}</message>
                </message_template>
                <message_template>
                    <event_source>SERVICE</event_source>
                    <operation_mode>RECOVERY</operation_mode>
                    <subject>Service OK: {SERVICE.NAME}</subject>
                    <message>{SERVICE.NAME} recovered</message>
                </message_template>
                <message_template>
                    <event_source>SERVICE</event_source>
                    <operation_mode>UPDATE</operation_mode>
                    <subject>Service update: {SERVICE.NAME}</subject>
                    <message>{SERVICE.NAME}: {USER.FULLNAME} {EVENT.UPDATE.ACTION}</message>
                </message_template>
            </message_templates>
        </media_type>
    </media_types>
</zabbix_export>
