# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.monokot.io/time-series-and-stores/rest-connectivity/message-script.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
