Send a Non-Ticket Message
Send messages without creating a ticket via WhatsApp, SMS and Apple Business Chat
Overview
Non-ticket message sending allows you and your team to utilize your existing channels for programmatic outbound communication, where replies will always be directed back to your team.
This opens up your WhatsApp, SMS and Apple Business Chat channels for mass external sending, while ensuring that all future communication stays within your Glassix solution.
Some of the potential use cases include:
- Running SMS and WhatsApp campaigns
- Sending out marketing material
- Sending out product updates or status messages
In all cases, replies to the communications you sent out will be directed back to your Glassix department.
Prerequisites
Note:
Non-ticket message sending is not enabled by default, and must be switched on per-channel. If you haven't already, speak with your implementation partner or Glassix contact about getting this option turned on for your requested channels.
Before you start with non-ticket message sending, you should make sure you have the following on hand:
- A way to make API calls and a basic understanding of the API.
- An API access token to provide in the request header.
- An active channel identifier (either a phone number or Apple Business ID) to send messages from.
- A channel with active non-ticket message sending.
In addition, while it's not required, we also recommend that you have a chatbot flow in place to handle responses.
Tip:
While no tickets will be generated from a non-ticket message send, any responses will come in as new tickets for your agents.
It's a good idea to either have a flow in place, or to make your agents aware ahead of time before sending out a lot of messages.
Getting Started
The basics of non-ticket message sending are covered in our Protocol Send developer documentation. In order to send out a message, you'll need a few basic pieces of information:
-
The content of your message. If this is a WhatsApp message, you will need to use an approved template or your messages will not be delivered. See below for the best way to get your approved template text for non-ticket sends.
-
The sending phone number or Apple ID. This can be found under Settings → Channels → WhatsApp/Text Message/Apple Messages. Your active sending numbers or IDs will always show up in the list on the General page of each channel:
-
The receiving phone number or Apple ID. This will be the number or ID you're sending to. See below for an example of how to send to more than one number at a time.
In addition to the required information, you also have the option to attach files to your message. Files must be hosted elsewhere and the URLs to the files provided via the endpoint.
Note:
If your WhatsApp template includes an image, video or document in the header, you are required to include a link to the file for the header media.
Info:
File URLs should link to the file directly, not to a web page containing the file. For example, this is a valid link to a file, while this is not.
Once you have all the necessary information, you can make your API call as outlined in the developer documentation and send out your message.
Getting Message Status Responses
When sending via the Protocol Send endpoint, you will always receive a successful response if your request is valid.
This does not mean, however, that the message sent successfully. Instead, it just means that Glassix will try to send your message, and you will see that successful Protocol Send responses always have a message status of "Pending".
Since it can take a bit of time to receive confirmation that a message has been sent (or not sent), we instead send message delivery statuses to you via a built-in webhook event: NON_TICKET_MESSAGE_STATUS.
See here for instructions on setting up an event webhook, and make sure you're subscribed to the NON_TICKET_MESSAGE_STATUS event:

Tip:
Both the Protocol Send endpoint and the NON_TICKET_MESSAGE_STATUS event return the providerMessageId field.
You can use this field to connect between sends and status updates in your code. This helps make sure your project can handle multiple sends to the same number or ID.
Whenever you're sending non-ticket messages, we recommend you listen for the NON_TICKET_MESSAGE_STATUS event so that you can be sure your messages were delivered. Because no ticket is created, you won't have another way to know whether a send was successful.
The NON_TICKET_MESSAGE_STATUS event will fire every time you send a non-ticket message, whether the message was successfully delivered or not. Because this event only fires when we receive updates from our messaging service providers, it can take a few seconds for the event to fire after you send a message.
Channel Guides & Limitations
WhatsApp
When sending outbound WhatsApp messages outside the 24-hour support window, you are required to use a template approved by Meta.
This is still true when sending non-ticket messages, and it means that you will have to provide pre-approved template text in the text parameter in order for non-ticket WhatsApp messages to be delivered.
To help make sure you're always using a template when one is available, Glassix has an automatic matching system which will try to find a template that matches the text you provide, and there are a few steps you need to take in order to make sure we find a match.
Tip:
If your template has buttons, don't worry - we'll match your template by the text you provide and we'll add the buttons for you automatically.
Getting a Template Match
In order to help ensure a correct match:
-
Copy and paste the template text from the WhatsApp Templates Editor exactly as it appears:
-
Replace any parameters with text or variables:
Before:
Hi {{1}}, This one was a doozy, {{2}}! We do know that you enjoy our events, {{3}}, and we'll hope to see you next time. All the best, {{4}}!
After:
Hi ${customer.name}, This one was a doozy, wasn't it! We do know that you enjoy our events, ${customer.name}, and we'll hope to see you next time. All the best, happy Friday!
-
If your template has media in the header, make sure you include include a link to the file for the header media in the files parameter:
{ "protocolType": "WhatsApp", "from": "12065551234", "to": "14255553456", "text": "Check out our new logo!", "files": [ "https://cdn.prod.website-files.com/63f20c8c5a0b87b753a18231/63f5102ea508db04f0d1626a_Asset%2011%201.svg" ] }
Limitations from Meta
Meta has restrictive rate limits on sending both Marketing and Utility templates in outbound messages to WhatsApp users. See here for more information.
SMS
Unlike WhatsApp, SMS doesn't support attachments. You are still free to include a files parameter in your call, but please be aware that the message will be sent to the end user without any attachments.
Creating a Flow to Capture Responses
Because you will be sending out a large number of messages that can all potentially result in tickets when recipients reply, we recommend setting up a flow to handle responses.
The best way to do this is to map a flow to the channel you're using to send non-ticket messages. This way, anyone who responds in that channel will get to your bot first.
You can then use an AI Agent or a Condition Step to help guide your respondents to the correct team or department.
If you're sending out a WhatsApp template with buttons, you can also use a Switch step to accept responses from your template's buttons and pass them directly into your flow:
-
Add a Switch step:
-
Add conditions which match your WhatsApp template buttons:
-
For each condition, check the 'Last customer message' parameter and see if it matches your button:
-
If it matches your button, redirect your respondent to the appropriate step in the flow (or take any other action).
Sending in Bulk
The non-ticket message endpoint only supports sending to one number at a time. This means that, in order to send non-ticket messages in bulk, you will have to make a new API call for each number you want to send to.
Whenever you run many API calls at once, we always recommend keeping our rate limits in mind. We also strongly recommend building in a safeguard to your project in order to make sure you don't exceed the rate limit.
To help get you started with bulk sending, see below for a basic JavaScript example. The script below:
- Accepts a list of numbers
- Attempts to send to each number
- Logs successful and failed attempts (remember, this status is just the status of the API call, not the status of the message delivery)
- Incorporates rate limiting (500 per minute)
This example relies on our Glassix NPM package.
import { GlassixClient } from 'glassix';
const BEARER_TOKEN = "YOUR_BEARER_TOKEN_HERE"; // Replace with your actual token
const WORKSPACE = "yourworkspace"; // e.g., "myteam" from "https://myteam.glassix.com"
const FROM_NUMBER = "12065551234"; // Replace with your sending number
const phoneNumbers = [
"12345678901",
"19876543210",
"11234567890"
// ...add more numbers as needed
];
const client = new GlassixClient({
accessToken: BEARER_TOKEN,
baseUrl: `https://${WORKSPACE}.glassix.com`
});
async function sendWhatsAppMessage(phone) {
const payload = {
protocolType: "WhatsApp",
from: FROM_NUMBER,
to: phone,
text: "Hi from Glassix!"
};
try {
const result = await client.protocols.send(payload);
console.log(`Message to ${phone}:`, result);
} catch (error) {
console.error(`Failed to send message to ${phone}:`, error.message);
}
}
async function sendMessages() {
const delay = 120; // milliseconds between messages (500/minute)
for (let i = 0; i < phoneNumbers.length; i++) {
await sendWhatsAppMessage(phoneNumbers[i]);
if (i < phoneNumbers.length - 1) {
await new Promise(resolve => setTimeout(resolve, delay));
}
}
alert("All API calls attempted!");
}
Example Web App
If you're looking for a more full-featured solution or if you need a UI, see our WhatsApp Bulk Sender example project on GitHub.
Updated 1 day ago