RESTful SMS 1.0

Introduktion

Här hittar du allt du behöver för att koppla vårt RESTful SMS API 1.0 till ditt system eller applikation. Med hjälp av ett SMS API kan du enkelt skräddarsy dina egna SMS-funktioner.


Autentisering

HTTP Basic Läs mer om HTTP Basic Authentication här

Alla requester till vårt RESTful SMS API 1.0 kräver autentisering med dina kontouppgifter. Vi använder oss av autentisering via Konto-ID och API-nyckel genom HTTP Basic. Dessa uppgifter kan du hitta genom att logga in i vår Användarportal.

För att skapa din Basic Authentication sträng, ta ditt kontonummer (ex. ip1-12345) och din API-nyckel (ex. cCnbXFfyTM5BTKh7uNV#tz) och kör dem genom en Base64 encoder i följande format: ip1-12345:CnbXFfyTM5BTKh7uNV

Du bör få ut en sträng som ser ut ungefär så här: aXAxLTEyMzQ1OkNuYlhGZnlUTTVCVEtoN3VOVg==

Du har nu genererat din HTTP Basic Authentication-sträng, som du sedan anger som en HTTP header på följande sätt:

Authorization: Basic aXAxLTEyMzQ1OkNuYlhGZnlUTTVCVEtoN3VOVg==

HTTP Bearer Läs mer om HTTP Bearer Authentication här

Du kan också autentisera viaHTTP Bearer tokens, som vi tillhandahåller. Varje konto du skapar kan ha flera nycklar med olika restriktioner på tillåtna IP-adresser som du själv anger. Dessa API-nycklar hanterar du i vår Användarportal.


Anropsstruktur

För varje anrop som görs rekommenderar vi en maxmängd på 500 mottagare/anrop. Vid större mottagarlistor rekommenderar vi att dela upp antalet mottagare i flera anrop med max 500 mottagare i varje.

api.ip1sms.com är den URL som ligger som bas för samtliga API-anrop är och nås via HTTPS och kan användas på följande sätt:

https://api.ip1sms.com

Resten av ovannämnda URL är olika för olika anrop och kallas för anropets URI. En URI pekar i de flesta fall till en entitet eller samling av det som anropats (ex. api/contacts pekar på en samling av kontakter). HTTP verbet förtydligar operationen som behöver göras på målet (ex. GET läser och POST skapar).

Kodexempel

Kodexempel med HTTP Basic Autentisering

                                                  
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://api.ip1sms.com/api/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "ip1-xxxxx", "API-Key"))));
        
            var sms = new OutgoingSMS()
            {
                From = "iP1",
                Numbers = new List() { "46123456789" },
                Contacts = new List(),
                Groups = new List(),
                Message = "test",
                Prio = 1,
                Email = false
            };
        
            HttpResponseMessage response = await client.PostAsJsonAsync("sms/send", sms);
        
            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("Sent");
            }
            else
            {
                Console.WriteLine("Failed, " + response.StatusCode + ": " + await response.Content.ReadAsStringAsync());
            }
        }
                                                
                                            
                                                  
        $conf = array(
            'account' => 'ip1-xxxxx',
            'password' => 'apiKey',
            'apiUrl' => 'api.ip1sms.com',
            'method' => 'POST',
            'endpoint' => '/api/sms/send',
        );
        
        $message = array(
            'Numbers' => ['4673055555'],
            'From' => 'iP.1',
            'Message' => "Test message via iP.1's REST API",
        );
        
        $jsonEncodedMessage = json_encode($message);
        // Set up request options
        $options = array(
            'http' => array(
                'header'  => array(
                    'Content-Type: application/json',
                    'Authorization: Basic '. base64_encode($conf['account'].":".$conf['password']),
                    'Content-Length: ' . strlen($jsonEncodedMessage)
                ),
                'method'  => $conf['method'],
                'content' => $jsonEncodedMessage,
            )
        );
        
        $url = "https://" . $conf['apiUrl'] . $conf['endpoint'];
        $context  = stream_context_create($options);
        // Send the request
        $response = file_get_contents($url, false, $context);
        // Print the response
        echo $response;
                                                
                                            
                                                  
        Dim account As String = "ip1-xxxxxx"
        Dim password As String = "API-Key"
        
        Dim client As New HttpClient()
        
        client.BaseAddress = New Uri("https://api.ip1sms.com/api/")
        client.DefaultRequestHeaders.Accept.Clear()
        client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
        
        Dim authString As String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{account}:{password}"))
        client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Basic", authString)
        
        Dim sms As New With
            {
                Key .From = "iP1sms",
                Key .Numbers = New List(Of String)() From {"46123456789"},
                Key .Contacts = New List(Of Integer)(),
                Key .Groups = New List(Of Integer)(),
                Key .Message = "Test", Key .Email = False
            }
        
        Dim response As HttpResponseMessage = Await client.PostAsJsonAsync("sms/send", sms)
        
        
        End Sub`;
                                                
                                            

RESTful SMS Survey 1.0

Beskrivning

Vårt SMS Survey API låter dig skicka undersökningar via SMS. Perfekt för att automatisera kundundersökningar, vid exempelvis ordrar eller andra typer av registreringar. Du kan enkelt skapa, skicka och hantera enkäter direkt via API:et.


Kodexempel

                                                  
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://api.ip1sms.com/api/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "ip1-xxxxx", "API-Key"))));
        
            var survey = new OutgoingSurvey()
            {
                From = "iP1",
                Numbers = new List() { "46123456789" },
                Contacts = new List(),
                Groups = new List(),
                Message = "test survey",
                Prio = 1,
                Email = false
            };
        
            HttpResponseMessage response = await client.PostAsJsonAsync("surveys/{survey}/send", survey);
        
            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("Survey Sent");
            }
            else
            {
                Console.WriteLine("Failed, " + response.StatusCode + ": " + await response.Content.ReadAsStringAsync());
            }
        }
                                                
                                            
                                                  
        $conf = array(
            'account' => 'ip1-xxxxx',
            'password' => 'apiKey',
            'apiUrl' => 'api.ip1sms.com',
            'method' => 'POST',
            'endpoint' => '/surveys/{survey}/send',
        );
        
        $message = array(
            'Numbers' => ['4673055555'],
            'From' => 'iP.1',
            'Message' => "Test message via iP.1's REST API",
        );
        
        $jsonEncodedMessage = json_encode($message);
        // Set up request options
        $options = array(
            'http' => array(
                'header'  => array(
                    'Content-Type: application/json',
                    'Authorization: Basic '. base64_encode($conf['account'].":".$conf['password']),
                    'Content-Length: ' . strlen($jsonEncodedMessage)
                ),
                'method'  => $conf['method'],
                'content' => $jsonEncodedMessage,
            )
        );
        
        $url = "https://" . $conf['apiUrl'] . $conf['endpoint'];
        $context  = stream_context_create($options);
        // Send the request
        $response = file_get_contents($url, false, $context);
        // Print the response
        echo $response;
                                                
                                            
                                                  
        Dim account As String = "ip1-xxxxxx"
        Dim password As String = "API-Key"
        
        Dim client As New HttpClient()
        
        client.BaseAddress = New Uri("https://api.ip1sms.com/api/")
        client.DefaultRequestHeaders.Accept.Clear()
        client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
        
        Dim authString As String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{account}:{password}"))
        client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Basic", authString)
        
        Dim survey As New With
            {
                Key .From = "iP1sms",
                Key .Numbers = New List(Of String)() From {"46123456789"},
                Key .Contacts = New List(Of Integer)(),
                Key .Groups = New List(Of Integer)(),
                Key .Message = "Test", Key .Email = False
            }
        
        Dim response As HttpResponseMessage = Await client.PostAsJsonAsync("surveys/{survey}/send", survey)
        
        
        End Sub`;
                                                
                                            

RESTful 2FA

Beskrivning

Genom att koppla på 2FA vid exempelvis registrering av nya konton kan du enkelt säkerställa att personen har angivit rätt uppgifter genom att bekräfta användarens telefonummer. Koden skickas som ett SMS till angivet nummer på nolltid.

När du integrerar tvåfaktorsautentisering via SMS från iP.1 får du automatisk tillgång till vår globala spamfilterlista som innehåller tusentals virtuella nummersom använts vid illasinnade bot-registreringar.

Kodexempel


Statuskoder

Nedan hittar olika statuskoder för både HTTP-anrop samt status på SMS.

Statuskoder HTTP
Code Name Description
200 OK Standard success kod, används vid lyckade anrop, förutom vid skapade entiteter.
201 Created Används enbart vid skapande av entiteter. Headern LocationAnvänds för att peka ut nyligen skapade entiteter.
400 Bad Request Används när användarangiven information innehåller fel, respons-bodyn kan innehålla information kring vilken data som är invalid och varför.
401 Unauthorized Används när autentiseringsinformation saknas eller är felaktig, eller om den autentiserade användaren inte har behörighet att anropa API:et.
403 Forbidden Används vid lyckad autentisering, men att anropet försöker nå en entited eller samling av entiteter som användaren inte har behörighet att nå. Statusbeskrivningen kan innehålla ytterligare information.
404 Not Found Används när vid försök att nå en entitet eller samling av entiter som inte finns eller om anropet försöker nå en URI som är felaktig.
405 Method Not Allowed Används vid försök att använda ett HTTP verb som inte går att använda för angiven entitet eller samling av entiteter.
415 Unsupported Media Type Används vid försök att skicka annan data än JSON eller om anropet saknar en Content-Type header.
500 Internal Server Error Används generellt vid fel, om ingen annan felkod är mer relevant. Response bodyn kan innehålla ytterligare information.
Statuskoder SMS
statuskod Beskrivning
0 Levererad till Gateway
1 Misslyckades att logga in på Gateway
2 Ogiltigt innehåll i meddelandet
3 Ogiltigt format på telefonnumret
4 Otillräckligt saldo
10 Mottagen av Gateway
11 Tidsinställd leverans
12 Tidsinställd leverans avbruten
21 Levererad till GSM-nätet
22 Levererad till mobiltelefon
30 Otillräckligt saldo
41 Ogiltigt innehåll i meddelandet
42 Internt fel
43 Leverans misslyckades
44 Leverans misslyckades
45 Ogiltigt telefonnummer
50 Generellt leveransfel
51 Leverans till GSM-nätet misslyckades
52 Leverans till telefon misslyckades
100 Otillräckligt saldo
101 Ogiltiga kontouppgifter
110 Parameterfel

Inkommande SMS

För att ta emot inkommande SMS behöver du ett telefonnummer. I dagens läge finns möjligheten att välja ett virtuellt nummer med 11 siffror samt 5 siffror och prefix. Kom ihåg att avsändaren inte får bestå av ett nummer längre än 11 tecken och det bara är möjligt att ta emot meddelanden från vår server om detta krav är uppfyllt.

Callback

Det enklaste sättet att hantera inkommande SMS är att skapa en webb-applikation och sedan registrera en callback-URL för mottagarnumret hos oss.

När ett meddelandet tas emot av vår gateway så genomförs ett HTTP GET-anrop till callback-URL:en med följande parametrar:

Parameter Beskrivning Typ
text Meddelandets innehåll Sträng
to Mottagarens telefonnummer Sträng
sender Avsändare Sträng
incsmsid ID-nummer sträng

Exempel: Om din callback-URL är http://www.example.com/smscallback.php ser anropet ut så här:

                                
        http://www.example.com/smscallback.php?incsmsid=123456789&sender=4673222222&text=testmeddelande&to=4673XXXXXXXXXXX
                                
                            

Det är också möjligt att skapa ett anrop med query-strängar, till exempel: http://www.example.com/smscallback.php?someparam=somevalue

Som svar på ditt callback-anrop ska din applikation returnera ett oformaterat OK (två tecken, utan formatering). Om ditt anrop inte lyckas eller om du får ett annat svar från servern så kommer servern att försöka igen med en intervall på 30 minuter, maximalt tio försök.

Koppla på en Callback-URL

När du har en färdig Callback-url måste du registrera den på https://app.ip1sms.com/settings/#extra. Logga in med din iP.1 Användare. Klistra in din URL i text-fältet ”Callback URL och spara dina inställningar.


SMS Gateway (Soap) Deprecated


Kodexempel
                                    
        $conf['apiurl'] = 'https://web.smscom.se/sendsms/sendsms.asmx?wsdl';
        $conf['mmsapiurl'] = 'https://web.smscom.se/mms/mms.asmx?wsdl';
        $conf['account'] = 'ip1-xxxxx';  
        $conf['password'] = 'API-Key'; 
        
        $conf['to'] = '46712345678'; 
        $conf['from'] = 'iP1';
        $conf['prio'] = '1';
        $conf['msg'] = 'Test message via iP.1 API (Web Service)';
        $conf['msg_at'] = "Test send at message via iP.1 API (Web Service)";
        $conf['msg_bundle'] = "Test bundle message via iP.1 API (Web Service)";
        
        $client = new SoapClient($conf['apiurl']);
        $mmsClient = new SoapClient($conf['mmsapiurl']);
        
        $result = $client->balans(array('konto'=>$conf['account'], 'passwd' => $conf['password']));
        echo 'Balnace: ' . $result->balansResult;
        
        $smsresult = $client->sms(array('konto'=>$conf['account'], 'passwd' => $conf['password'], 'till' => $conf['to'], 'from' => $conf['from'], 'meddelande' =>$conf['msg'], 'prio' => $conf['prio']));
        
        echo 'Result of SMS: ' . $smsresult->smsResult;
                                    
                                
Dokumenation SMS Gateway (Soap)

Deprecated Detta API är deprekerat och kommer inte längre att vidareutvecklas. Vi rekommenderar er att använda något av våra REST API:er


För varje anrop som görs rekommenderar vi en maxmängd på 500 mottagare/anrop. Vid större mottagarlistor rekommenderar vi att dela upp antalet mottagare i flera anrop med max 500 mottagare i varje.

Fullständig dokumentation

SMS Gateway (http) Deprecated


Kodexempel

                                    
        $conf['account'] = 'ip1-xxxx';  
        $conf['password'] = 'api-key'; 
        $conf['apiurl'] = 'https://web.smscom.se/sendsms.aspx';
        
        $conf['to'] = '4673055555';     
        $conf['from'] = 'iP.1';        
        $conf['msg'] = 'Test message via iP.1 HTTP Request';       
        $conf['prio'] = '1';
        
        $data = http_build_query(array('acc'=>$conf['account'],'pass'=>$conf['password'],'msg'=>  $conf['msg'],'from'=>$conf['from'],'to'=> $conf['to'],'prio'=>$conf['prio'], 'type' => ''));
                
        
        $opts = array('http' =>
            array(
                'method'  => 'GET',
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $data
            )
        );
        
        $context  = stream_context_create($opts);            
        $result = file_get_contents($conf['apiurl'] . '?' . $data, false, $context);
        
        echo 'Result/SMS ID: ' . $result;
                                    
                                
Dokumenation SMS Gateway (HTTP)

Deprecated Detta API är deprekerat och kommer inte längre att vidareutvecklas. Vi rekommenderar er att använda något av våra REST API:er


För varje anrop som görs rekommenderar vi en maxmängd på 500 mottagare/anrop. Vid större mottagarlistor rekommenderar vi att dela upp antalet mottagare i flera anrop med max 500 mottagare i varje.

Fullständig dokumentation

Hjälpmedel


iP.1 Utils

Ett nuget-paket med olika verktyg. Innehåller bland annat verktyg för att formatera dina mobilnummer och att beräkna antal SMS i ett meddelande.

iP.1 Utils
Disposable Phone numbers

Ett NPM-paket med blacklist för disposable phonenumbers. Innehåller en blacklist med bland annat virtuella engångs-nummer som använts vid kontoregistrering.

Is-Disposable-Phonenumber