SMS API
API change historySMS API contains methods used to send notifications via Short Message Service, directly to your client's phone
Create Campaign Webhook
This method creates new campaign webhook record for specified campaign. Request body is to contain information required to create new webhook instance - url and webhook type. If successfully created, when sent message status is updated, message is to be sent to specified url: { "Timestamp": "2021-12-08T15:09:24.9724224Z", "Type": "CampaignMessageStatusUpdate", "Events": [ { "Number": "27728374958", "Status": "Enroute" }, { "Number": "27722738495", "Status": "Delivered" }, { "Number": "27720293845", "Status": "Delivered" } ] }
Events are dispatched usually a few seconds after being received. Also, they're aggregated - a single notification contains array of up to 500 events. Each event contains phone number and current message status. For CampaignReply webhook type, there's also a 'Message' field in each event instance, containing received reply text. Type field designates webhook type - in this case 'CampaignMessageStatusUpdate'.
Try itRequest
Request URL
Request parameters
-
int
ID value of SMS campaign, new webhook is to be created for
Request headers
-
string
The authorization token. The token will be in the format "Bearer API_KEY". For example: "Authorization: Bearer 123456789". Please include the space between "Bearer" and "API_KEY".
Request body
New campaign webhook request should contain a JSON object with webhook type and url properties set. Allowed webhook types are: 'CampaignReply' and 'CampaignMessageStatusUpdate'
{
"Url": "https://mywebhook.com/drkfgjhcfkjghikedurhgid",
"WebhookType": "CampaignMessageStatusUpdate"
}
{
"type": "object",
"properties": {
"Url": {
"type": "string",
"description": "Webhook url - an internet address to which event notifications are to be set to"
},
"WebhookType": {
"type": "string",
"description": "Webhook type"
}
}
}
Responses
201 Created
New SMS campaign webhook has been created. Response body contains new record, and Location header contains its url
Response headers
-
(optional)string
Url of just created subscriber record
Representations
{
"Id": 31,
"IsActive": true,
"Url": "https://mywebhook.com/2938ruweiury2983r92",
"WebhookType": "CampaignMessageStatusUpdate",
"DateCreated": "2021-10-25T11:29:17Z"
}
{
"type": "object",
"properties": {
"Id": {
"type": "integer",
"description": "Webhook ID value"
},
"IsActive": {
"type": "boolean",
"description": "Webhook active status indicator"
},
"Url": {
"type": "string",
"description": "Webhook url - address to which event notifications are to be sent"
},
"WebhookType": {
"type": "string",
"description": "Webhook type"
},
"DateCreated": {
"type": "string",
"description": "Webhook creation date"
}
}
}
400 Bad Request
An error occurred while making campaign webhook create request. Please check response body to find additional details about error.
Representations
{
"Code": 146,
"Message": "Webhook URL is too long. It must not be longer then 512 characters"
}
{
"type": "object",
"properties": {
"Code": {
"type": "integer",
"description": "Error code"
},
"Message": {
"type": "string",
"description": "Error details in user-friendly form"
}
}
}
401 Unauthorized
Provided API credentials is not valid. Please check out response body for more details.
Representations
{
"Code": 100,
"Message": "Provided API key is invalid"
}
{
"type": "object",
"properties": {
"Code": {
"type": "integer",
"description": "Error code"
},
"Message": {
"type": "string",
"description": "Error details in user-friendly form"
}
}
}
404 Not Found
SMS campaign with specified ID value does not exist
Representations
{
"Code": 132,
"Message": "Campaign with provided ID value does not exist"
}
{
"type": "object",
"properties": {
"Code": {
"type": "integer",
"description": "Error code"
},
"Message": {
"type": "string",
"description": "Error details in user-friendly form"
}
}
}
409 Conflict
Creating new webhook record has failed due to database constraint. Please check out response body for more details
Representations
{
"Code": 133,
"Message": "Campaign with provided ID value already has a webhook instance with specified type"
}
{
"type": "object",
"properties": {
"Code": {
"type": "integer",
"description": "Error code"
},
"Message": {
"type": "string",
"description": "Error details in user-friendly form"
}
}
}
Code samples
@ECHO OFF
curl -v -X POST "https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks"
-H "Authorization: Bearer "
-H "Content-Type: application/json"
--data-ascii "{body}"
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;
namespace CSHttpClientSample
{
static class Program
{
static void Main()
{
MakeRequest();
Console.WriteLine("Hit ENTER to exit...");
Console.ReadLine();
}
static async void MakeRequest()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Authorization", "Bearer ");
var uri = "https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes("{body}");
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
response = await client.PostAsync(uri, content);
}
}
}
}
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class JavaSample
{
public static void main(String[] args)
{
HttpClient httpclient = HttpClients.createDefault();
try
{
URIBuilder builder = new URIBuilder("https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks");
URI uri = builder.build();
HttpPost request = new HttpPost(uri);
request.setHeader("Authorization", "Bearer ");
request.setHeader("Content-Type", "application/json");
// Request body
StringEntity reqEntity = new StringEntity("{body}");
request.setEntity(reqEntity);
HttpResponse response = httpclient.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null)
{
System.out.println(EntityUtils.toString(entity));
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>JSSample</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(function() {
var params = {
// Request parameters
};
$.ajax({
url: "https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks?" + $.param(params),
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("Authorization","Bearer ");
xhrObj.setRequestHeader("Content-Type","application/json");
},
type: "POST",
// Request body
data: "{body}",
})
.done(function(data) {
alert("success");
})
.fail(function() {
alert("error");
});
});
</script>
</body>
</html>
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString* path = @"https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks";
NSArray* array = @[
// Request parameters
@"entities=true",
];
NSString* string = [array componentsJoinedByString:@"&"];
path = [path stringByAppendingFormat:@"?%@", string];
NSLog(@"%@", path);
NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
[_request setHTTPMethod:@"POST"];
// Request headers
[_request setValue:@"Bearer " forHTTPHeaderField:@"Authorization"];
[_request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// Request body
[_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
NSURLResponse *response = nil;
NSError *error = nil;
NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];
if (nil != error)
{
NSLog(@"Error: %@", error);
}
else
{
NSError* error = nil;
NSMutableDictionary* json = nil;
NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataString);
if (nil != _connectionData)
{
json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
}
if (error || !json)
{
NSLog(@"Could not parse loaded json with error:%@", error);
}
NSLog(@"%@", json);
_connectionData = nil;
}
[pool drain];
return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';
$request = new Http_Request2('https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks');
$url = $request->getUrl();
$headers = array(
// Request headers
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
);
$request->setHeader($headers);
$parameters = array(
// Request parameters
);
$url->setQueryVariables($parameters);
$request->setMethod(HTTP_Request2::METHOD_POST);
// Request body
$request->setBody("{body}");
try
{
$response = $request->send();
echo $response->getBody();
}
catch (HttpException $ex)
{
echo $ex;
}
?>
########### Python 2.7 #############
import httplib, urllib, base64
headers = {
# Request headers
'Authorization': 'Bearer ',
'Content-Type': 'application/json',
}
params = urllib.urlencode({
})
try:
conn = httplib.HTTPSConnection('api.touchbasepro.com')
conn.request("POST", "/sms/campaigns/{campaignId}/webhooks?%s" % params, "{body}", headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64
headers = {
# Request headers
'Authorization': 'Bearer ',
'Content-Type': 'application/json',
}
params = urllib.parse.urlencode({
})
try:
conn = http.client.HTTPSConnection('api.touchbasepro.com')
conn.request("POST", "/sms/campaigns/{campaignId}/webhooks?%s" % params, "{body}", headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
require 'net/http'
uri = URI('https://api.touchbasepro.com/sms/campaigns/{campaignId}/webhooks')
request = Net::HTTP::Post.new(uri.request_uri)
# Request headers
request['Authorization'] = 'Bearer '
# Request headers
request['Content-Type'] = 'application/json'
# Request body
request.body = "{body}"
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
http.request(request)
end
puts response.body