NAV Navbar
Logo
cURL Ruby Python PHP Java

en es pt

Introdução

Seja bem vindo a nossa documentação para desenvolvedores. Aqui você encontrará tudo que precisa para integrar sua empresa à nossa plataforma de mensagens.

É possível fazer a integração através das seguintes formas:

API HTTPS Permite o envio e recebimento de mensagens e status através do protocolo HTTPS utilizando os métodos GET ou POST
API SMPP Protocolo especifico para troca de mensagens SMS, permite manter uma conexão ativa constante com nosso servidor SMPP, e é indicado para clientes com tráfego superior a 5 milhões de mensagens por mês
API SFTP Protocolo utilizado para transferência de arquivos, é indicado para envios de mensagens em massa (lote). Os arquivos são transferidos pelo cliente para nossos servidores, e são imediatamente processados
Websphere MQ Utilizado para transferência de mensagens entre servidores Websphere MQ, é indicado para clientes com tráfego superior a 30 milhões de mensagens por mês, principalmente para bancos financeiros, onde o cliente já possui este sistema em funcionamento para mensagens internas. Esta opção de integração possui um valor de setup e manutenção de ambiente, fixados em R$50.000,00 e R$2.000,00 respectivamente

Conheça também nosso portal Web, por ele sua empresa pode administrar usuários, projetos e configurações, enviar e receber mensagens, e obter relatórios, sem a necessidade de desenvolvimento e integração

Termos Importantes

MT Mobile Terminated É o termo utilizado para mensagens que possuem o usuário (aparelho) como destino. Ou seja, mensagens que foram originadas por sua empresa, com destino ao usuário (aparelho).
Response Resposta sincrona da Movile É a resposta imediata de uma requisição feita em nossa API, onde informamos se a mensagem foi aceita ou não por nossa plataforma.
Callback Sent status ou status de envio É o primeiro status de envio que retornamos, onde informamos se foi possível, ou não, fazer a entrega da mensagem para a operadora.
DR ou DLR Delivery Receipt É o segundo status de envio que retornamos, onde informamos se foi possível, ou não, fazer a entrega para o aparelho. As operadoras enviam para a Movile esta informação, e nós repassamos para o cliente. O tempo de entrega é variável, por exemplo, se o aparelho estava desligado no momento do envio, e o usuário ligou 2 horas depois, este status DLR será entregue para o cliente, com duas horas de atraso.
Obs1: Esta confirmação de entrega no aparelho existirá somente para os casos em que a mensagem foi entregue com sucesso na operadora, ou seja, o primeiro status (callback) foi de sucesso.
Obs2: É muito importante ressaltar, que, infelizmente, as operadoras OI e Sercomtel não possuem esta funcionalidade, ou seja, não nos retornam a informação de entrega no aparelho. Os envios feitos para números destas operadoras, terão somente a informação de entrega na operadora (callback)
MO Mobile Originated É o termo utilizado para mensagens que possuem sua empresa como destino. Ou seja, mensagens que foram originadas pelo usuário (aparelho). É utilizado por exemplo, em fluxos de pergunta e respostas via SMS, quando é necessário uma confirmação por parte do usuário.
LA Short Code Número curto de 5 ou 6 dígitos, utilizado para envio e recebimento de mensagens SMS. São designados pelas operadoras para integradores homologados (Movile), e possuem regras anti-fraude e anti-spam

Fluxo de mensagem

Fluxo simplificado - MT, Callback, DLR, e MO.

alt text

API HTTPS

Esta API permite que você automatize as requisições de envios de mensagens únicas ou em lote, e a recuperação dos status de envio através de consultas. Ela utiliza o protocolo HTTP com TLS e aceita os métodos GET com parâmetros query string, ou POST com parâmetros em JSON.

Autenticação

Para efetuar envios e consultas em nossa API é necessária a autenticação por meio de usuário ou e-mail, em conjunto com um token.

Campo Detalhes Data Type
UserName Seu usuário ou email String
AuthenticationToken Seu token de autenticação. Verifique aqui e leia as descrições de usuários abaixo. String
Tipo Detalhes
Administrador Usuário administrador de sua empresa, é utilizado para criar/editar/inativar subcontas e outros usuários, e pode visualizar relatórios de toda a empresa.
Este usuário não faz envios de mensagens, nem pelo portal, nem via integração API.
Usuário Usuário utilizado para envio de mensagens via API e portal, pode visualizar relatórios específicos de sua subconta.
Um usuário é sempre relacionado a uma única subconta.
Uma subconta pode conter múltiplos usuários.
Cada subconta é um centro de custo em nossa plataforma, as mensagens são descriminadas em relatórios e financeiramente, por subconta, e não por usuário.

Detalhes de conexão

Hostname api-messaging.movile.com
APIs Envios individuais /v1/send-sms
Envios em lote /v1/send-bulk-sms
Porta 443 (https)
Protocolo HTTPS (encriptação TLS)
Autenticação username + token
Portal messaging.movile.com

Codificação (encoding)

O Padrão de codificação utilizado é o UTF-8, todo conteudo das mensagens deve seguir esse padrão.

É possivel escapar os caracteres caso deseje ou codificar utilizando o formato HTTP

Ao lado estão alguns exemplos de codificação

“messageText”:“A combinação foi perfeita :)”

Ou você pode escapar os caracteres caso queira:

“messageText”:“A combina\u00e7\u00e3o foi perfeita :)”

Envio de mensagens (MT)

Envio por método GET - Individual

require 'uri'
require 'net/http'

url = URI("https://api-messaging.movile.com/v1/send-sms")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["username"] = '<username>'
request["authenticationtoken"] = '<authenticationtoken>'
request["content-type"] = 'application/json'
request.body = "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}"

response = http.request(request)
puts response.read_body
import requests

url = "https://api-messaging.movile.com/v1/send-sms"

payload = "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}"
headers = {
    'username': "<username>",
    'authenticationtoken': "<authenticationtoken>",
    'content-type': "application/json"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
curl -X POST \
  https://api-messaging.movile.com/v1/send-sms \
  -H 'authenticationtoken: <authenticationtoken>' \
  -H 'username: <username>' \
  -H 'content-type: application/json' \
  -d '{"destination": "5511900000000" , "messageText": "linha\nquebrada"}'

Mod curl:
sudo apt-get/yum install php5-curl

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-messaging.movile.com/v1/send-sms",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}",
  CURLOPT_HTTPHEADER => array(
    "authenticationtoken: <authenticationtoken>",
    "username: <username>",
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class SendSms {

    public static void main(String[] args) {
        String url = "https://api-messaging.movile.com/v1/send-sms";

        String userName = "<username>";
        String authenticationToken = "<authenticationtoken>";

        String body = "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}";

        String response = doPost(url, body, userName, authenticationToken);
        System.out.println(response);
    }

    public static String doPost(String strUrl, String request, String userName, String authenticationToken) {
        HttpURLConnection conn = null;
        OutputStreamWriter wr = null;
        BufferedReader br = null;
        try {
            URL url = new URL(strUrl);

            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setInstanceFollowRedirects(true);
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);

            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("UserName", userName);
            conn.setRequestProperty("AuthenticationToken", authenticationToken);

            // write the request
            wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(request);
            wr.close();

            // read the response
            br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            StringBuilder resp = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                resp.append(line).append("\n");
            }
            return resp.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (wr != null) {
                    wr.close();
                }
                if (br != null) {
                    br.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

Ao fazer o envio, você receberá um JSON informando o id que foi gerado para esta mensagem (Response ou Resposta síncrona da Movile):

[
  {
  "id":"9cb87d36-79af-11e5-89f3-1b0591cdf807",
  "correlationId":"myId"
  }
]

Via método GET, é possivel realizar o envio de uma mensagem passando todos os parâmetros como query string.

URL para envios unitários

GET https://api-messaging.movile.com/v1/send-sms

Parametros Query String

* Campo obrigatório

Campo Detalhes Tipo
destination* Telefone para qual será enviada a mensagem (incluido código de país). Exemplo: 5511900000000 String
messageText* Texto da mensagem que será enviada String
correlationId Um ID único definido por você para batimento com os status de envio (callback e DLR). Este parâmetro é opcional, e você pode utilizar o ID gerado pela Movile para este batimento. String
extraInfo Qualquer informação extra que você deseja adicionar a mensagem. String
timeWindow Mensagens serão enviadas apenas no horário especificado. Por exemplo, Se você configurar uma janela [11, 12, 18], as mensagens serão enviadas entre 11:00 e 11:59, 12:00 e 12:59 e 18:00 e 18:59 Integer[]
expiresAt A mensagem não será enviada após esta data. O formato utilizado é o Unix time . Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
expiresInMinutes A mensagem será expirada após o tempo informado neste campo. O tempo passa a ser ontabilizado assim que a mensagem é recebida pela Movile.. Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
expiresDate A mensagem não será enviada após esta data. O campo aceita o seguinte formato yyyy-MM-dd’T'HH:mm:ss. Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) String
scheduledAt A mensagem não será enviada após esta data. O formato utilizado é o Unix time. Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
delayedInMinutes Minutos depois que a requisição é feita que a mensagem será enviada. Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
scheduledDate A mensagem não será enviada antes desta data. O campo suporta o seguinte formato yyyy-MM-dd’T'HH:mm:ss. Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) String
timeZone Especifica o timezone que será utilizado diretamente nos campos: expiresDate, scheduledDate and timeWindow (que será modificado caso seja utilizado timezones dinamicos, como os com horário de verão). Se o timezone não estiver presente na requisição o sistema irá verificar o timezone do usuário - se presente - ou o timezone do país do usuário em último caso. Se nenhuma das opções estiverem presentes, o sistema irá utlizar o horário UTC String
campaignAlias Identificação de campanha criada previamente. Clique aqui para registar uma nova campanha String
flashSMS Flash SMS, use esta opção para enviar uma mensagem pop-up no telefone do usuário. Para enviar uma mensagem Flash passe o parametro true. Boolean

Envio por método POST - Individual ou em lote

require 'uri'
require 'net/http'

url = URI("https://api-messaging.movile.com/v1/send-bulk-sms")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["username"] = '<username>'
request["authenticationtoken"] = '<authenticationtoken>'
request["content-type"] = 'application/json'
request.body = '{ "messages":[{ "destination":"5519999999999", "messageText":"First message" }, { "destination":"5519999999999" }, { "destination":"5519999999999" }], "defaultValues":{"messageText":"Default message" }}'

response = http.request(request)
puts response.read_body
import requests

url = "https://api-messaging.movile.com/v1/send-bulk-sms"

payload = '{ "messages":[{ "destination":"5519999999999", "messageText":"First message" }, { "destination":"5519999999999" }, { "destination":"5519999999999" }], "defaultValues":{"messageText":"Default message" }}'
headers = {
    'username': "<username>",
    'authenticationtoken': "<authenticationtoken>",
    'content-type': "application/json"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
curl --request POST \
  --url https://api-messaging.movile.com/v1/send-bulk-sms \
  --header 'authenticationtoken: <Token de autenticação>' \
  --header 'username:<Usuário Movile Messaging>' \
  --header 'content-type: application/json' \
  --data "{ "messages":[{ "destination":"5519999999999", "messageText":"First message" }, { "destination":"5519999999999" }, { "destination":"5519999999999" }], "defaultValues":{"messageText":"Default message" }}"

Mod: curl

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-messaging.movile.com/v1/send-bulk-sms",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{ \"messages\":[{ \"destination\":\"5519999999999\", \"messageText\":\"First message\" }, { \"destination\":\"5519999999999\" }, { \"destination\":\"5519999999999\" }], \"defaultValues\":{\"messageText\":\"Default message\" }}",
  CURLOPT_HTTPHEADER => array(
    "authenticationtoken: <authenticationtoken>",
    "content-type: application/json",
    "username: <username>"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class SendSms {

    public static void main(String[] args) {
        String url = "https://api-messaging.movile.com/v1/send-bulk-sms";

        String userName = "<username>";
        String authenticationToken = "<authenticationtoken>";

        String body = "{ \"messages\":[{ \"destination\":\"5519999999999\", \"messageText\":\"First message\" }," +
                " { \"destination\":\"5519999999999\" }, { \"destination\":\"5519999999999\" }]," +
                " \"defaultValues\":{\"messageText\":\"Default message\" }}";

        String response = doPost(url, body, userName, authenticationToken);
        System.out.println(response);
    }

    public static String doPost(String strUrl, String request, String userName, String authenticationToken) {
        HttpURLConnection conn = null;
        OutputStreamWriter wr = null;
        BufferedReader br = null;
        try {
            URL url = new URL(strUrl);

            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setInstanceFollowRedirects(true);
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);

            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("UserName", userName);
            conn.setRequestProperty("AuthenticationToken", authenticationToken);

            // write the request
            wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(request);
            wr.close();

            // read the response
            br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            StringBuilder resp = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                resp.append(line).append("\n");
            }
            return resp.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (wr != null) {
                    wr.close();
                }
                if (br != null) {
                    br.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

Ao fazer o envio, será retornado um objeto JSON com o UUID do lote e das mensagens individuais :


  {
  "id": "ce528d70-013b-11e7-98f2-e27c463c8809",
  "messages": [
    {
      "id": "ce528d71-013b-11e7-98f2-e27c463c8809"
    },
    {
      "id": "ce528d72-013b-11e7-98f2-e27c463c8809"
    }
  ]
}

Permite o envio de mensagens em lote ou individuais passando os parametros em um objeto JSON

Requisição HTTP Method POST

Exemplo de JSON para envio em Lote:

Exemplo 1:

{
  "messages":[
    {
      "destination":"5519900001111",
      "messageText":"First message"
    },
    {
      "destination":"5519900002222"
    },
    {
      "destination":"5519900003333"
    }
  ],
  "defaultValues":{
    "messageText":"Default message"
  }
}

Exemplo 2:

{
  "messages":[
    {
      "destination":"5519900001111",
      "messageText":"First message"
    },
    {
      "destination":"5519900002222"
    }
  ],
  "timeZone":"America/Sao_Paulo",
  "scheduleDate": "2017-01-28T02:30:43",
  "timeWindow": [12, 15, 20],
  "defaultValues":{
    "messageText":"Default message"
  }
}

Exemplo 3:

`
{
  "messages":[
    {
      "destination":"5519900001111",
    },
    {
      "destination":"5519900002222"
    }
  ],
  "defaultValues":{
    "messageText":"Default message",
    "flashSMS":"true"
  }
}

Observe que nos exmplos acima, alguns campos “destination” não possuem um “messageText” atribuido direto a eles, nestes casos, o texto da mensagem será o “messageText” dentro de “defaultValues”. Essa função é útil quando é necessário o envio da mesma mensagem para vários números diferentes

POST https://api-messaging.movile.com/v1/send-bulk-sms Content-Type: application/json

O corpo da requisição precisa conter o objeto JSON com as informações conforme campos abaixo:

* Campo obrigatório

Campo Detalhes Tipo
destination* Telefone para qual será enviada a mensagem (incluido código de país). Exemplo: 5511900000000 String
messageText* Texto da mensagem que será enviada String
correlationId Um ID único definido por você para batimento com os status de envio (callback e DLR). Este parâmetro é opcional, e você pode utilizar o ID gerado pela Movile para este batimento. String
extraInfo Qualquer informação extra que você deseja adicionar a mensagem. String
timeWindow Mensagens serão enviadas apenas no horário especificado. Por exemplo, Se você configurar uma janela [11, 12, 18], as mensagens serão enviadas entre 11:00 e 11:59, 12:00 e 12:59 e 18:00 e 18:59 Integer[]
expiresAt A mensagem não será enviada após esta data. O formato utilizado é o Unix time . Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
expiresInMinutes A mensagem será expirada após o tempo informado neste campo. O tempo passa a ser ontabilizado assim que a mensagem é recebida pela Movile.. Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
expiresDate A mensagem não será enviada após esta data. O campo aceita o seguinte formato yyyy-MM-dd’T'HH:mm:ss. Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) String
scheduledAt A mensagem não será enviada após esta data. O formato utilizado é o Unix time. Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
delayedInMinutes Minutos depois que a requisição é feita que a mensagem será enviada. Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) Long
scheduledDate A mensagem não será enviada antes desta data. O campo suporta o seguinte formato yyyy-MM-dd’T'HH:mm:ss. Obs: Os campos expiresAt, expiresInMinutes e expiresDate são mutuamente exclusivos (use somente um deles) String
timeZone Especifica o timezone que será utilizado diretamente nos campos: expiresDate, scheduledDate and timeWindow (que será modificado caso seja utilizado timezones dinamicos, como os com horário de verão). Se o timezone não estiver presente na requisição o sistema irá verificar o timezone do usuário - se presente - ou o timezone do país do usuário em último caso. Se nenhuma das opções estiverem presentes, o sistema irá utlizar o horário UTC String
campaignAlias Identificação de campanha criada previamente. Clique aqui para registar uma nova campanha String
flashSMS Flash SMS, use esta opção para enviar uma mensagem pop-up no telefone do usuário. Para enviar uma mensagem Flash passe o parametro true. Boolean

Respostas de mensagens em lote

A resposta do envio em lote conterá um arquivo JSON com as informações necessárias para rastreio, será gerado um id para o lote todo e um id e correlationId individual para cada mensagem:

Campo Detalhes Tipo
id UUID gerado para este lote String
messages Este campo é um array com as respostas das mensanges individuais do lote, contém o id e o correlationId de cada mensagem enviada SingleSMSResponse[]

Status de envio (Callback e DLR)

Existem duas maneiras de obter os status de envio das mensagens, são elas:

Assim que entregamos a mensagem na operadora, ou assim que a operadora nos informa se entregou a mensagem no aparelho, a informação é repassada instantaneamente para você.

Os status ficam disponíveis por 3 dias, e podem ser consultados pelo UUID que a Movile retornou ao receber a mensagem de sua empresa, ou pelo ID que sua empresa passou ao entregar a mensagem para a Movile.
A desvantagem desta opção de consulta ao invés de webhook, é que você fará requisições de consulta de um ID que pode ainda não ter sido entregue na operadora ou no aparelho, neste caso, uma série de requisições desnecessárias serão feitas. Por exemplo, se um usuário estava com o aparelho desligado quando você enviou uma mensagem para ele, e ligou 2 horas depois, você ficará consultando este ID inúmeras vezes por duas horas. E no caso da uttilização de um webhook, esta informação seria enviada para você assim que fosse entregue no aparelho, sem requisições vazias.

Status via webhook (entrega em seu webservice)

Para configurar o envio dos Callbacks e DRs (dúvida sobre os termos consulte a aba Termos Importantes) primeiramente é necessário logar no Movile messaging nas configurações da API, no formulário de configuração você poderá fornecer as URLs para onde serão enviado os status de envio (Callbacks) e os status de confirmação do aparelho (DRs)

Após a inclusão de seu webhook no portal acima, as configurações serão replicadas para nossa plataforma em até 10 minutos, e chamaremos sua URL quando as seguintes ações ocorrem:

Ação Status de retorno enviado
Depois que uma mensagem for entregue ou não, na operadora API de status de envio (callback)
Quando uma mensagem for entregue ou não, no aparelho do cliente API de Delivery Report (DRs)

Exemplo JSON Status de Envio (callback - entrega na operadora)

POST https://example.com/callback/
Content-Type: application/json

{
  "id":"f9c100ff-aed0-4456-898c-e57d754c439c",
  "correlationId":"client-id",
  "carrierId":1,
  "carrierName":"VIVO",
  "destination":"5511900009999",
  "sentStatusCode":2,
  "sentStatus":"SENT_SUCCESS",
  "sentAt":1266660300000,
  "sentDate":"2010-02-20T10:05:00Z",
  "campaignId":"64",
  "extraInfo":"",
}

Campos JSON resposta Callbacks (sent status)

Campo Descrição
id UUID gerado da mensagem
correlationId Sua identificação desta mensagem
carrierId Identificador da operadora
carrierName Nome da operadora
destination Número de telefone da mensagem enviada
sentStatusCode Código de status gerado pelo movile para mensagem indicando o status de envio. Verifique em códigos de status para mais informações
sentStatus descrição do status de envio. Verifique em códigos de status para mais informações
sentAt Hora do envio, formato utilizado é o Unix_time
sentDate Data que a mensagem foi enviada. Formato: yyyy-MM-dd’T'HH:mm:ssZ
campaignId Identificador de campanha caso exista
extraInfo Qualquer informação extra adicionada pelo cliente no envio da mensagem

Campos JSON resposta Delivery Reports (DRs)

Campo Descrição
id UUID gerado da mensagem
correlationId Sua identificação desta mensagem
carrierId Identificador da operadora
carrierName Nome da operadora
destination Número de telefone da mensagem enviada
sentStatusCode Código de status gerado pelo movile para mensagem indicando o status de envio. Verifique em códigos de status para mais informações
sentStatus descrição do status de envio. Verifique em códigos de status para mais informações
sentAt Hora do envio, formato utilizado é o Unix_time
sentDate Data que a mensagem foi enviada. Formato: yyyy-MM-dd’T'HH:mm:ssZ
deliveredStatusCode Código de status gerado pelo movile para mensagem indicando o status de envio. Verifique em códigos de status para mais informações
deliveredStatus descrição do status de envio. Verifique em códigos de status para mais informações
deliveredAt Hora do envio, formato utilizado é o Unix_time
deliveredDate Data que a mensagem foi enviada. Formato: yyyy-MM-dd’T'HH:mm:ssZ
campaignId Identificador de campanha caso exista
extraInfo Qualquer informação extra adicionada pelo cliente no envio da mensagem

Consulta Status via requisição HTTP

Para consultar o status da última mensagem enviada é necessário fazer uma requisição GET na URL abaixo passando como parametro o UUID ou o correlationId obtido na resposta do envio

GET https://api-messaging.movile.com/v1/sms-status

Abaixo exemplo de requisições realizando a consulta por UUID e por correlationID

Consulta UUID:

GET https://api-messaging.movile.com/v1/sms-status?id=492a-d041

Consulta CorrelationID:

GET https://api-messaging.movile.com/v1/sms-status?correlationId=2468

Resposta

Campos JSON de resposta:

Campo Detalhes Tipo
id UUID gerado na requisição para a mensagem String
correlationId Mesmo correlationId da requisição String
carrierId ID da operadora, para mais informações consulte código de erro Long
carrierName Nome da operadora String
destination n String
sentStatusCode Sent status code. Check Sent Status Codes for more information Long
sentStatus Sent status. Check Sent Status Codes for more information String
sentStatusAt When the message was sent. It is an Epoch Date Long
sentStatusDate When the message was sent. Format yyyy-MM-dd’T'HH:mm:ssZ. Date format with time and time zone (ISO 8601) String
deliveredStatusCode Delivered status code. Check Delivered Status Codes for more information Long
deliveredStatus Delivered status. Check Delivered Status Codes for more information String
deliveredAt When the message was delivered. It is an Epoch Date Long
deliveredDate When the message was delivered. Format yyyy-MM-dd’T'HH:mm:ssZ. Date format with time and time zone (ISO 8601) String
campaignId Campaign Identifier Long
extraInfo Any extra info set by the user when the message was sent String

Exemplo JSON Delivery Report (DR ou DLR - Entrega no aparelho do usuário)

{
  "id":"8f5af680-973e-11e4-ad43-4ee58e9a13a6",
  "correlationId":"myId",
  "carrierId":5,
  "carrierName":"TIM",
  "destination":"5519900001111",
  "sentStatusCode":2,
  "sentStatus":"SENT_SUCCESS",
  "sentStatusAt":1420732929252,
  "sentStatusDate":"2015-01-08T16:02:09Z",
  "deliveredStatusCode":4,
  "deliveredStatus":"DELIVERED_SUCCESS",
  "deliveredAt":1420732954000,
  "deliveredDate":"2015-01-08T16:02:34Z",
  "campaignId":1234
}

Resposta do usuário (MO)

A API de MO permite a automação do processo de recuperação de respostas enviadas pelos clientes em resposta as mensagens que voce enviou a eles. Todas as requisições usam o método GET e as respostas são enviadas no formato JSON.

É possível também a configuração para que as MOs sejam encaminhadas conforme chegaram para uma API do cliente, essa é a forma mais eficiente pois não é necessário realizar nenhuma chamada, so tratar os envios conforme chegaram. Para que esta configuração seja realizada é necessário abrir um ticket com nosso time de suporte técnico através do email support.messaging@movile.com passando a url que receberá os MOs.

Exemplo JSON enviado para sua API (método POST)

{
     "id": "25950050-7362-11e6-be62-001b7843e7d4",
     "subAccount": "iFoodMarketing",
     "campaignAlias": "iFoodPromo",
     "carrierId": 1,
     "carrierName": "VIVO",
     "source": "5516981562820",
     "shortCode": "28128",
     "messageText": "Eu quero pizza",
     "receivedAt": 1473088405588,
     "receivedDate": "2016-09-05T12:13:25Z",
     "mt": {
       "id": "8be584fd-2554-439b-9ba9-aab507278992",
       "correlationId": "1876",
       "username": "iFoodCS",
       "email": "customer.support@ifood.com"
     }
   }

Cada requisição feita irá retornar os MOs dos ultimos 5 dias, até um limite de 10.000 MOs. Para datas anteriores ou quantidades maiores favor entrar em contato com nosso time de suporte através do email support.messaging@movile.com

O comportamento da query List MO será diferente para cada usuário autenticado devido ao nivel de permissão de cada usuário.

Recomendamos o método de envio das MOs para API, toda MO enviada será automaticamente enviada para API poism desta forma as respostas podem ser tratadas imediatamente após o recebimento

Perfil Permissão
Regular cada requisição realizada na MO API só irá retornar os MOs correspondentes a subconta que o usuário pertence. Não é possivel a um usuário regular recuperar MOs de outras subcontas.
Administrador o comportamento padrão para o usuário administrador é recuperar todos os MOs de todas as subcontas. se um admin desejar recuperar os MOs de apenas uma das subcontas é necessário especificar a subconta no parametro subAccount com o id da subconta desejada.

Fomato de resposta padrões de MO

Exemplo de JSON de resposta chamada API Movile:

{
  "total": 1,
  "start": "2016-09-04T11:12:41Z",
  "end": "2016-09-08T11:17:39.113Z",
  "messages": [
    {
      "id": "25950050-7362-11e6-be62-001b7843e7d4",
      "subAccount": "iFoodMarketing",
      "campaignAlias": "iFoodPromo",
      "carrierId": 1,
      "carrierName": "VIVO",
      "source": "5516981562820",
      "shortCode": "28128",
      "messageText": "Eu quero pizza",
      "receivedAt": 1473088405588,
      "receivedDate": "2016-09-05T12:13:25Z",
      "mt": {
        "id": "8be584fd-2554-439b-9ba9-aab507278992",
        "correlationId": "1876",
        "username": "iFoodCS",
        "email": "customer.support@ifood.com"
      }
    },
    {
      "id": "d3afc42a-1fd9-49ff-8b8b-34299c070ef3",
      "subAccount": "iFoodMarketing",
      "campaignAlias": "iFoodPromo",
      "carrierId": 5,
      "carrierName": "TIM",
      "source": "5519987565020",
      "shortCode": "28128",
      "messageText": "Meu hamburguer está chegando?",
      "receivedAt": 1473088405588,
      "receivedDate": "2016-09-05T12:13:25Z",
      "mt": {
        "id": "302db832-3527-4e3c-b57b-6a481644d88b",
        "correlationId": "1893",
        "username": "iFoodCS",
        "email": "customer.support@ifood.com"
      }
    }
  ]
}

Tanto as requisições de listagem (list) e a função de busca (search) retornam um objeto JSON com os campos abaixo:

Campo Detalhes Tipo
total O número total de MOs retornadas pela requisição Integer
start O limite minimo da query String
end O limite máximo da query String
messages Listagem dos objetos List

Cada mensagem do campo messages possui a seguinte estrutura:

Campo Detalhes Tipo
id Id da mensagem String
subAccount subconta responsável por enviar a mensagem que gerou a resposta String
carrierId Id da operadora Integer
carrierName Nome da operadora String
source Número de telefone que enviou a mensagem de resposta String
shortCode O shortcode da mensagem que originou a resposta e pelo qual a resposta foi enviada String
messageText Texto da mensagem de resposta String
receivedAt hora de recebimento Long
receivedDate Data e hora de recebimento em formato UTC String
campaignAlias Alias da campanha que originou a resposta String
mt MT original que gerou a resposta MT

MTs tem a seguinte estrutura

Campo Detalhes Tipo
id Id da MT String
correlationId CorrelationID enviado na MT String
username Username do usuário responsavel por enviar a MT String
email Email do responsavel por enviar a MT String

Requisição listar MO (list)

A Listagem irá retornar todos os MOs recebidos desde a última chamada de acordo com a resposta padrão descrita acima. Uma vez que esta chamada é realizada ela será consumida e não irá retornar as chamadas seguintes.

Como um usuário regular, para recuperar todas MOs de uma subconta use:

GET https://api-messaging.movile.com/v1/sms/receive/list

Como usuário administrador, para recuperar TODAS as MOs de TODAS subcontas use:

GET https://api-messaging.movile.com/v1/sms/receive/list

Como usuário administrador. para recuperar as MOs de uma subconta com a referencia “referencia_subconta”, use:

GET https://api-messaging.movile.com/v1/sms/receive/list?subAccount=referencia_subconta

A requisição de busca (search request) irá retornar cada MO recebido num determinado periodo de tempo. Voce precisa definir os parametros start and end para especificar um periodo de tempo, deverá ser utilizado o formato ISO-8601. START por padrão é definido 5 dias antes da data atual e END por padrão é definido na data atual. Não é possivel recuperar MOs anteriores a 5 dias.

Como um usuário regular, para recuperar todas MOs de uma subconta use:

GET https://api-messaging.movile.com/v1/sms/receive/search

Como usuário administrador, para recuperar TODAS as MOs de TODAS subcontas use:

GET https://api-messaging.movile.com/v1/sms/receive/search

Como usuário administrador. para recuperar as MOs de uma subconta com a referencia “referencia_subconta”, use:

GET https://api-messaging.movile.com/v1/sms/receive/search?subAccount=referencia_subconta

Busca com START e END definidos:

GET https://api-messaging.movile.com/v1/sms/receive/search?start=2016-09-12T00:00:00&end=2016-09-15T00:00:00

Somente com START especificado (utilizando END padrão, data atual)

GET https://api-messaging.movile.com/v1/sms/receive/search?start=2016-09-12T00:00:00

Somente com END especificado (utilizando START padrão, 5 dias antes da data atual)

GET https://api-messaging.movile.com/v1/sms/receive/search?end=2016-09-15T00:00:00

Usado valores padrão para START e END e especificado subconta

GET https://api-messaging.movile.com/v1/sms/receive/search?subAccount=iFoodMarketing

Códigos de Status de Envio

Existem dois níveis de status, que são enviados independentemente.

1 - Primeiro status (sent_status - Status de envio = Callback)

Status de entrega na operadora, este é o primeiro status que retornamos, e todas as operadoras possuem.

Código Mensagem Significado
2 SENT_SUCCESS Entregue na operadora com exito (Este é o status que deve ser considerado para efeito de cobrança.)
101 EXPIRED Expirado antes de ser entregue ao aparelho
102 CARRIER_COMMUNICATION_ERROR Erro de comunicação com a operadora
103 REJECTED_BY_CARRIER Operadora rejeitou a mensagem
201 NO_CREDIT O limite de mensagens setado pelo administrador de sua empresa, para sua conta ou sub conta, foi excedido. Ou, caso sua empresa utilize o modelo pré-pago de créditos, ele terminou.
202 INVALID_DESTINATION_NUMBER O número de destino é inválido (Não é um número de celular válido).
203 BLACKLISTED O número de destino está na lista bloqueada, e foi inserido manualmente por sua empresa.
204 DESTINATION_BLOCKED_BY_OPTOUT O número de destino solicitou opt-out, e não quer receber mais mensagens desta sub conta. (Este status é específico para contas de mobile marketing).
205 DESTINATION_MESSAGE_LIMIT_REACHED O número de destino já recebeu a quantidade máxima de mensagens que uma mesma empresa pode enviar, dentro de um período de tempo. (Este status é específico para contas de Mobile Marketing, e esta é uma regra das operadoras).
207 INVALID_MESSAGE_TEXT O texto da mensagem contém palavras que não são aceitas pela operadora. Estas palavras podem ser de baixo calão, ou, caso sua conta seja de Mobile Marketing, podem ser de grandes marcas.
301 INTERNAL_ERROR Ocorreu um erro na plataforma da Movile.

2 - Segundo status (delivered_status - Delivery Report Callback)

Status de entrega no aparelho, este é o segundo status que retornamos e só existe para os casos em que o primeiro status acima foi de sucesso, ou seja, a mensagem foi entregue na operadora com sucesso. Neste status informamos se a mensagem foi ou não entregue no aparelho. As operadoras Oi e Sercomtel não possuem este segundo nível de status, para estas operadoras, o máximo de informação que existe, é o primeiro status, ou seja, se a operadora aceitou a mensagem ou não.

Código Mensagem Significado
4 DELIVERED_SUCCESS Entregue no aparelho com sucesso.
104 NOT_DELIVERED A operadora aceitou a mensagem, mas não conseguiu entregar no aparelho. Possíveis causas:
Aparelho desligado ou fora de área de serviço por tempo determinado (normalmente 24 horas, mas algumas operadoras, como a Vivo, este tempo é de tentativa é de 8 horas).
Número válido, mas inativo (algumas operadoras retornam este tipo de erro somente neste segundo nível de status).

API SMPP

Todos os serviços providos pelo Grupo Movile devem obrigatoriamente ser encriptados, e o protocolo SMPP não possui encriptação nativa. Neste caso, disponibilizamos duas opções para integração:

Opção 1 - SMPP over TLS + IP whitelist (Opção recomendada)

Esta é a opção que recomendamos. Caso seu sistema não possua esta funcionalidade, clique AQUI para obter ajuda na configuração de um proxy TLS.

Além da encriptação que será feita pelo TLS, o acesso será autorizado somente para o IP público de seu servidor. (Aceitamos múltiplos IPs e ranges) Esta informação deve ser enviada para o e-mail support.messaging@movile.com.

Caso seja necessária a liberação de saída de tráfego em seu firewall, recomendamos que seja liberado qualquer IP de destino, na porta 2444, se isto não for possível, deve-se incluir regras com as liberações abaixo:
200.219.220.8:2444
200.219.220.193:2444
200.189.169.8:2444
189.36.59.86:2444

Opção 2 - SMPP over VPN

A encriptação e a liberação de acesso será feita via VPN.

Caso escolha esta opção, configure as VPNs utilizando os peers e hosts abaixo, já com as propostas de fase 1 e 2 que deseja. Envie o formulário de VPN de sua empresa preenchido para support.messaging@movile.com

peer 200.155.0.250
hosts 200.219.220.8 and 200.219.220.193
port 2443

peer 200.143.57.150
hosts 200.189.169.8 and 189.36.59.86
port 2443

Obs: Por razões de alta disponibilidade e balanceamento de carga, é obrigatório o estabelecimento das 2 VPNs acima, e a utilização do domínio smpp-messaging.movile.com como destino de seu cliente SMPP, ao invés de IPs.

Detalhes de conexão

Informação Detalhes
Hostname smpp-messaging.movile.com
Ao configurar seu sistema SMPP, é obrigatório a utilização do domínio como destino, ao invés de IPs.
Este domínio possui 4 proxies de entrada com round robin DNS e health check, e multiplos servidores backend. Baseado no volume de mensagens que sua empresa trafegará, vamos aumentar o número de binds(conexões) permitidos simultâneamente.
Porta 2444 (SMPP over TLS) ou 2443 (VPN)
Versão SMPP 3.4
Número de binds Mínimo 4. O estabelecimento de pelo menos 4 binds é mandatório para obtenção de alta-disponibilidade e balanceamento de carga.
Codificação dos caracteres GSM7 - Default (data_coding = 0) (GSM3.38 extended table is not supported by carriers.)
LATIN1 (data_coding = 1)
UCS2 (data_coding=8).
Atenção: Verifique AQUI detalhes de caracteres e cobranças.
Flash SMS Supported
data_coding=0x10 para GSM7 e data_coding 0x18 para UCS2
Quando recebemos mensagens flashSMS de nossos clientes, elas são enviadas para as operadoras como flahsSMS, se a operadora não suportar flashSMS, ela é entregue como um SMS normal.
Enquire-link Minimo: 30 segundos / Máximo: 59 segundos.
Concatenação UDH 8-bit reference / 5 bytes length / UDH Headers.
Default addr_ton 1
Default addr_npi 1
window size 10
2way Suportado
SMPP bind type Transceiver(Recomendado). Binds transmit/receiver separados também são aceitos.
SMPP system_type MovileSMSC
SMPP source addr (senderID) Quando seu serviço necessitar respostas de usuários (MO), o source address deve ser igual ao system_id, ou seja, o nome do usuário. Quando o serviço não precisar de MOs, você pode utilizar qualquer coisa neste campo.
Max MO vazão 100 por bind
Max MT vazão 100 por bind
Server Timezone UTC
Formato de ID UUID
Default validity_period 24 hours

Status de envio (Callback e DLR)

1 - Primeiro status (sent_status - Status de envio = Callback)

Status de entrega na operadora, este é o primeiro status que retornamos, e todas as operadoras possuem.

stat err TLV (0x1403) TLV (0x1404) Significado
ACCEPTD 000 2 SENT_SUCCESS Entregue na operadora com sucesso (Este é o status que deve ser considerado para efeito de cobrança.)
EXPIRED 101 101 EXPIRED Expirado antes de ser entregue ao aparelho.
REJECTD 102 102 CARRIER_COMMUNICATION_ERROR Erro de comunicação com a operadora.
REJECTD 103 103 REJECTED_BY_CARRIER Operadora rejeitou a mensagem.
REJECTD 201 201 NO_CREDIT O limite de mensagens setado pelo administrador de sua empresa, para sua conta ou sub conta, foi excedido. Ou, caso sua empresa utilize o modelo pré-pago de créditos, ele terminou.
REJECTD 202 202 INVALID_DESTINATION_NUMBER O número de destino é inválido (Não é um número de celular válido).
REJECTD 203 203 BLACKLISTED O número de destino está na lista bloqueada, e foi inserido manualmente por sua empresa.
REJECTD 204 204 DESTINATION_BLOCKED_BY_OPTOUT O número de destino solicitou opt-out, e não quer receber mais mensagens desta sub conta. (Este status é específico para contas de mobile marketing).
REJECTD 205 205 DESTINATION_MESSAGE_LIMIT_REACHED O número de destino já recebeu a quantidade máxima de mensagens que uma mesma empresa pode enviar, dentro de um período de tempo. (Este status é específico para contas de Mobile Marketing, e esta é uma regra das operadoras).
REJECTD 207 207 INVALID_MESSAGE_TEXT O texto da mensagem contém palavras que não são aceitas pela operadora. Estas palavras podem ser de baixo calão, ou, caso sua conta seja de Mobile Marketing, podem ser de grandes marcas.
REJECTD 301 301 INTERNAL_ERROR Ocorreu um erro na plataforma da Movile.
UNKNOWN 301 301 INTERNAL_ERROR Ocorreu um erro na plataforma da Movile.

2 - Segundo status (delivered_status - Delivery Report Callback)

Status de entrega no aparelho, este é o segundo status que retornamos e só existe para os casos em que o primeiro status acima foi de sucesso, ou seja, a mensagem foi entregue na operadora com sucesso. Neste status informamos se a mensagem foi ou não entregue no aparelho. As operadoras Oi e Sercomtel não possuem este segundo nível de status, para estas operadoras, o máximo de informação que existe, é o primeiro status, ou seja, se a operadora aceitou a mensagem ou não.

stat err TLV (0x1403) TLV (0x1404) TLV (0x1405) TLV (0x1406) Significado
DELIVRD 000 2 SENT_SUCCESS 4 DELIVERED_SUCCESS Entregue no aparelho com sucesso.
UNDELIV 104 2 SENT_SUCCESS 104 NOT_DELIVERED A operadora aceitou a mensagem, mas não conseguiu entregar no aparelho. Possíveis causas:
Aparelho desligado ou fora de área de serviço por tempo determinado (normalmente 24 horas, mas algumas operadoras, como a Vivo, este tempo é de tentativa é de 8 horas).
Número válido, mas inativo (algumas operadoras retornam este tipo de erro somente neste segundo nível de status).

Proxy TLS - Linux

O proxy é necessário caso a conexão não seja via VPN. Como explicado anteriormente, o protocolo SMPP não possui encriptação TLS nativa, neste caso indicamos o proxy abaixo:

HAProxy

Instalando HAProxy

Debian Like

Em distribuições Deian like através do repositorio: sudo apt-get install haproxy

RedHat Like

Como não há, até o momento, o pacote do HAProxy com suporte à TLS já no repositorio, é possível baixar atraés do site oficial: http://www.haproxy.org/

Ao lado um script para instalação

sudo yum install wget gcc pcre-static pcre-devel -y

wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.3.tar.gz -O ~/haproxy.tar.gz
tar xzvf ~/haproxy.tar.gz -C ~/

cd ~/haproxy-1.6.3
make TARGET=linux2628 USE_LINUX_TPROXY=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1 USE_PCRE=1
sudo make install
sudo cp /usr/local/sbin/haproxy /usr/sbin/
sudo cp ~/haproxy-1.6.3/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo mkdir -p /etc/haproxy
sudo mkdir -p /run/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats

sudo useradd -r haproxy
sudo haproxy -vv

Configuração haproxy

global
    #    local2.*                       /var/log/haproxy.log
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    ssl-server-verify       none
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

resolvers dns
    nameserver google 8.8.8.8:53
    hold valid 1s

defaults
    log                     global
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend movile
  bind *:2444
  mode tcp
  option tcplog
  use_backend movile

backend movile
    mode tcp
    server smpp-messaging.movile.com smpp-messaging.movile.com:2444 ssl resolvers dns check inter 15000

$sudo yum install -y openssl-devel haproxy

$sudo apt-get install -y openssl-devel haproxy

IMPORTANTE: Configure seu sistema (cliente SMPP) para utilizar como endereço destino 127.0.0.1:2444

Proxy TLS - Windows

configuração nginx

worker_processes  2;

events {
    worker_connections  1024;
}

stream {
  resolver 8.8.8.8 valid=1s;
  map $remote_addr $backend {
    default smpp-messaging.movile.com;
  }
  server {
    listen 2444;
    proxy_pass $backend:2444;
    proxy_ssl  on;
  }
}

É possível utilizar o nginx como proxy TLS em servidores windows para realizar a encriptação dos dados

Faça o download da versão abaixo (importante utilizar esta versão pois as versões antigas resolvem o nome apenas na primeira request)

http://nginx.org/download/nginx-1.12.1.zip

Extrai o arquivo .zip no local desejado e substitua o conteudo do arquivo conf/nginx.conf com os dados ao lado

API SFTP

Detalhes de conexão

Hostname ftp-messaging.movile.com
Porta 2222
Protocolo SFTP (transferência sobre ssh, provendo criptografia entre cliente-servidor)
Autenticação username + senha (fornecido pelo suporte)
Portal messaging.movile.com

Envio de mensagem via SFTP

Para realizar o disparo de mensagens via SFTP é necessário gerar um arquivo em formato TXT, a formatação deve seguir o exemplo abaixo:

numero;texto;correlationId(opcional);
5511900000000;mensagem 1;;
5519900000000;mensagem 2;;
5521900000000;mensagem 3;;
EOF

O nome do arquivo a ser enviado deve seguir o seguinte formato:

<ID_SUBCONTA>.<DATA(YYYYMMDD)>.<SEQUENCIA> ou <NOME_DE_REFERÊNCIA_SUBCONTA>.<DATA(YYYYMMDD)>.<SEQUENCIA>

As subcontas(projetos) podem ser criadas pelo próprio cliente no portal. Caso não seja seguida a nomenclatura acima, o envio será feito pela subconta padrão do cliente.

Exemplo:

3486.20170101.01.txt ou PROJETO1.20170101.01.txt

Após deverá ser realizado o envio do arquivo para o servidor sftp no diretório upload. O arquivo será movido para o diretório success após o término, caso seja apresentando algum erro o arquivo será movido para o diretório error.

API Validação de número

API para validação de números de telefone, onde retornamos a operadora atual dos números consultados (incluindo números portados), ou se o número não é válido, ou seja, não é um número de celular.

Autenticação

Para efetuar envios e consultas em nossa API é necessária a autenticação por meio de usuário ou e-mail, em conjunto com um token.

Campo Detalhes Data Type
UserName Seu usuário ou email String
AuthenticationToken Seu token de autenticação. Verifique aqui e leia as descrições de usuários abaixo. String

Detalhes de conexão

Hostname api-messaging.movile.com
APIs /v1/carrier/lookup
Porta 443 (https)
Protocolo HTTPS (encriptação TLS)
Autenticação username + token
Portal messaging.movile.com

Requisição HTTP Method POST

curl --request POST \
  --url https://api-messaging.movile.com/v1/carrier/lookup \
  --header 'authenticationtoken: <authenticationtoken>' \
  --header 'username: <username>' \
  --header 'Content-Type: application/json' \
  --data '{
    "destinations": ["+55(19)997712322", "5519997712322", "2312312"]
}'

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-messaging.movile.com/v1/carrier/lookup",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\n\t\"destinations\": [\"+55(19)997712322\", \"5519997712322\", \"2312312\"]\n}",
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/json",
    "authenticationtoken: <authenticationtoken>",
    "username: <username>"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

require 'uri'
require 'net/http'

url = URI("https://api-messaging.movile.com/v1/carrier/lookup")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["authenticationtoken"] = '<authenticationtoken>'
request["username"] = '<username>'
request["Content-Type"] = 'application/json'
request.body = "{\n\t\"destinations\": [\"+55(19)997712322\", \"5519997712322\", \"2312312\"]\n}"

response = http.request(request)
puts response.read_body


import requests

url = "https://api-messaging.movile.com/v1/carrier/lookup"

payload = "{\n\t\"destinations\": [\"+55(19)997712322\", \"5519997712322\", \"2312312\"]\n}"
headers = {
    'Content-Type': "application/json",
    'authenticationtoken': "<authenticationtoken>",
    'username': "<username>"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)


POST https://api-messaging.movile.com/v1/carrier/lookup Content-Type: application/json

Para realizar a consulta basta adicionar no body da requisição um json com o array de números. É possivel fazer a consulta utilizando os formatos +55(19)999999999 e 5519999999999

Resposta consulta

Resposta chamada em formato JSON

{
    "id": "aadb5130-7dd7-11e7-baac-a6aabe61edb5",
    "destinations": [
        {
            "destination": "5519997712322",
            "active": true,
            "carrier": {
                "name": "VIVO",
                "countryCode": "BR"
            }
        },
        {
            "destination": "5519997712322",
            "active": true,
            "carrier": {
                "name": "VIVO",
                "countryCode": "BR"
            }
        },
        {
            "destination": "2312312",
            "active": false,
            "carrier": {
                "name": "UNKNOWN"
            }
        }
    ]
}

O último número do exemplo trata-se de um número inválido para demonstrar como a consulta retorna o JSON nesses casos.

A resposta da consulta em lote conterá um arquivo JSON com as informações individuais sobre cada número consultado:

Campo Detalhes Tipo
id UUID gerado para este lote String
destinations Este campo é um array com as respostas das consultas individuais do lote, contém o id e o correlationId de cada número consultado IndividualResponse[]
destination Número de telefone consutado Long
active status do número na operadora (atualmente verificar apenas se o número pertence a operadora, não ativo / em uso) Boolean
carrier Operadora e país a qual pertece o número consultado array[]
name Nome da operadora String
countryCode Código do País String

Operadoras

Brasil

Código Operadora
1 VIVO
2 CLARO
4 OI
5 TIM
6 CTBC
7 SERCOMTEL
10 NEXTEL
88 PORTO_SEGURO

Argentina

Código Operadora
12 MOVISTAR_AR
13 PERSONAL_AR
14 CLARO_AR
15 NEXTEL_AR

Bolivia

Código Operadora
16 TIGO_BO
17 VIVA_BO
18 ENTEL_BO
82 NUEVATEL_BO

Belize

Código Operadora
51 DIGICELL_BZ
52 SMART_BZ

Chile

Código Operadora
19 MOVISTAR_CL
20 ENTEL_PCS_CL
21 CLARO_CDMA_CL
22 CLARO_GSM_CL
94 CELCOM_CL

Colombia

Código Operadora
23 COMCEL_CO
24 MOVISTAR_CO
25 TIGO_CO
26 AVANTEL_CO
59 UFF_MOVIL_CO
89 VIRGIN_MOBILE_CO
90 EXITO_MOVIL_CO
91 UNE_MOVIL_CO
93 ETB_MOVIL_CO

Costa Rica

Código Operadora
61 CLARO_CR
62 MOVISTAR_CR
63 ICE_CR

Republica Dominicana

Código Operadora
27 ORANGE_DO
28 VIVA_DO
29 CLARO_DO
83 CENTENNIAL_DO

Equador

Código Operadora
30 PORTA_EC
31 MOVISTAR_EC
86 CNT_EC

Guatemala

Código Operadora
69 CLARO_GT
70 TIGO_GT
71 MOVISTAR_GT
72 DIGICEL_GT

Honduras

Código Operadora
73 CLARO_HN
74 TIGO_HN
75 HONDUTEL_HN
76 DIGICEL_HN

México

Código Operadora
9 TELCEL
32 MOVISTAR_MX
33 UNEFON_MX
34 IUSACELL_MX
35 NEXTEL_MX

Nicaragua

Código Operadora
77 CLARO_NI
78 MOVISTAR_NI
79 SERCOM_NI

Panamá

Código Operadora
36 MOVISTAR_PA
37 CABLE_WIRELESS_PA
38 CLARO_PA
80 DIGICEL_PA

Peru

Código Operadora
40 MOVISTAR_PE
41 CLARO_PE
81 NEXTEL_PE
84 TIM_PE

Porto Rico

Código Operadora
42 CLARO_PR

Paraguai

Código Operadora
39 PERSONAL_PY
48 TIGO_PY
49 VOX_PY
50 CLARO_PY

El Salvador

Código Operadora
64 CTE_SV
65 CLARO_SV
66 MOVISTAR_SV
67 TIGO_SV
68 DIGICEL_SV

Estados Unidos

Código Operadora
55 ATT_US
56 VERIZON_US
57 TMOBILE_US
58 SPRINT_US
87 METRO_PCS_US

Uruguai

Código Operadora
43 ANCEL_UY
44 MOVISTAR_UY
53 CLARO_UY

Venezuela

Código Operadora
45 MOVILNET_VE
46 DIGITEL_VE
47 MOVISTAR_VE
85 TELCEL_VE

Operadora desconhecida

Código Operadora
0 UNKNOWN

Acentos e caracteres especiais

Mensagens que possuem somente caracteres que estão na tabela abaixo, são cobradas a cada 160 caracteres. Caso a mensagem possua um ou mais caracteres que não estão na tabela abaixo, a cobrança é feita a cada 70 caracteres, conforme especificação do protocolo na rede das operadoras.

Space ( 0 8 @ H P X ` h p x
! ) 1 9 A I Q Y a i q y
* 2 : B J R Z b j r z
# + 3 ; C K S [ c k s {
$ , 4 < D L T \ d l t
% - 5 = E M U ] e m u }
& . 6 > F N V ^ f n v ~
/ 7 ? G O W _ g o w

Observações:

1 - A habilitação do uso de acentos e caracteres especiais deve ser solicitada ao suporte.

2 - No caso em que a operadora destino não aceita acentos e caracteres (Oi e Sercomtel), nossa plataforma faz automaticamente para os nossos clientes, a substituição dos mesmos, por exemplo: á para a, é para e, etc.

Textos grandes (concatenação)

O protocolo utilizado na rede das operadoras possui os limites de 70 ou 160 caracteres, para mensagens com ou sem caracteres especiais, respectivamente. Mas é possível enviar mensagens maiores com a utilização de concatenação, onde o aparelho reagrupa as mensagens ao recebê-las.

Para os clientes integrados via HTTPS, SFTP, ou MQ, não existe nenhum indicador adicional para ativar a concatenação, bastando enviar o texto da mensagem grande em uma única requisição.

Para os clientes integrados via SMPP, deve-se utilizar a funcionalidade de concatenação 8 bit reference / 5 bytes length com indicadores no header (UDH), LINK.

É importante notar que, apesar de aparecerem no aparelho como uma única mensagem grande, as mensagens continuam trafegando na rede das operadoras individualmente, e neste caso, continuamos sendo cobrados e cobrando individualmente, a cada 70 ou 160 (dependendo dos caracteres utilizados).

Observação: Nos casos de operadoras que não suportam a funcionalidade de concatenação (Exemplos: Oi e Sercomtel), a Movile envia as mensagens separadamente, sem concatenar, e inclui indicadores de ordem automaticamente para nossos clientes. Ex:

Inicio do texto…. (½)

……fim do texto (2/2)

Suporte

Abertura de chamados Enviar um email para support.messaging@movile.com
Telefone (11) 3230-4162