> For the complete documentation index, see [llms.txt](https://docs.monokot.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.monokot.io/time-series-and-stores/rest-connectivity/message-script.md).

# Message Script

The message script allows to dynamically generate an HTTP request for sending time series to the target URL. The script uses JavaScript with the support for all built-in objects and functions of ECMAScript 5 specification (read more about it [<mark style="color:blue;">here</mark>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)).  As a result, the script should return a *RestRequestMessage* object. The object is a prototype of the generated HTTP request and should contain all necessary message headers and body. Detailed description of the object can be found [<mark style="color:blue;">here</mark>](/time-series-and-stores/rest-connectivity/restrequestmessage.md).

In order to access the time series data ready to be sent, the *dataContext* object is used. It provides access to an array of time series data. The object provides access to the secret string, [<mark style="color:blue;">TimeSeries</mark>](/time-series-and-stores/rest-connectivity/timeseries.md) and [<mark style="color:blue;">ValueState</mark>](/scripts/api/valuestate.md) objects. A detailed description of *dataContext* can be found [<mark style="color:blue;">here</mark>](/time-series-and-stores/rest-connectivity/datacontext.md).

The following example shows a script used for inserting data into InfluxDB, which marks the data with an additional *ts\_type* tag during generation.

```javascript
var message = new RestRequestMessage();
var body = '';
var firstLine = true;
var ts_type = 'misc'; // Declare a variable for the ts_type tag

// Process the ready-to-publish time series
for (var i = 0; i < dataContext.series.length; i++)
{
	var ts = dataContext.series[i];

	// Determine the value of the ts_type tag
	// based on the path of the time series
	if (ts.path.includes('Power'))
		ts_type = 'power';
	else if (ts.path.includes('Alarms'))
		ts_type = 'alarm';
	else if (ts.path.includes('Fuel'))
		ts_type = 'fuel';

	// Process the samples of the i-th time series
	for (var j = 0; j < ts.samples.length; j++)
	{
		var sample = ts.samples[j];        
		
		if (!firstLine)
			body += '\n'; // If at least one line was added, insert a line break
           
		// Generate a string like this:
		// rest_measures,ts_path=Plant.Generator1.Power full.kWh value=280.87124,status=0,ts_type='power' 1591172295193
		body += 'rest_measures,ts_path=' + ts.path
            + ' value=' + sample.value.toFixed(5)
            + ',status=' + sample.status
            + ', ts_type=' + ts_type
            + ' ' + sample.time.getTime();

            firstLine = false;
	}
}

// Specifying the final string as the HTTP request body
message.body = body;
return message;
```

When publishing data to various cloud services, cryptographic and text functions may be useful. Access to them is provided by [<mark style="color:blue;">MosCrypto</mark>](/scripts/api/moscrypto.md) and [<mark style="color:blue;">MosText</mark>](/scripts/api/mostext.md) objects.
