A SmartComm oferece uma API REST que abrange todo o fluxo de comunicação via SMS.
A autenticação é feita via autenticação básica e os dados enviados e recebidos em JSON.
Clique aqui e baixe exemplos completos de implementação em C#, Delphi, PHP e Java.
Para a implementação em Delphi é preciso instalar OpenSSL(32 bits), clique aqui e baixe.
Para exemplos de teste REST, utilize nossas demonstrações clicando aqui.
Para mais informações e/ou suporte, entre em contato com nossos atendentes
Envio usando a mesma mensagem para todos os destinatários.
URL: https://api.smartcomm.digital/sms/envio
Método: POST
Restrições: Número máximo de destinatários 50.000
Parâmetro | Descrição | Tipo | Requerido* | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Assunto | Assunto da mensagem | string/texto | |||||||||
Destinatarios | Vetor/lista contendo celulares com DDD Ex: (11) 98765-4321 | array/lista (string) | |||||||||
Data | Horário para o envio das mensagens | DateTime/data | |||||||||
Mensagem | Conteúdo da mensagem | string/texto | |||||||||
Flash | Mensagem em formato flash | boolean/verdadeiro ou falso | |||||||||
TipoEnvio | Plataforma pela qual a mensagem será encaminhada | int/numerico | |||||||||
|
Parâmetro | Descrição | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lote | Id de identificação de envio cadastrado como lote | |||||||||||||||||
Destinatarios | Array/lista (object/class): |
|
||||||||||||||||
StatusMensagem | Mensagem do status da resposta do envio | |||||||||||||||||
Status | Código númerico da resposta do envio |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public class Resposta
{
public int Lote { get; set; }
public string StatusMensagem { get; set; }
public StatusEnvio Status { get; set; }
public IEnumerable< MensagensId > Destinatarios { get; set; }
public Resposta() {}
}
public enum EStatus
{
Erro,
Sucesso,
SemCreditos,
SemMensagem,
SemAssunto,
SemDestinatarios,
MaximoDestinatarios,
TamanhoExcedido,
DestinatarioInvalido,
}
public class MensagensId
{
public long Celular { get; set; }
public int Sequencia { get; set; }
}
public class Destinatario
{
public string Celular { get; set; }
public string Assunto { get; set; }
public string Mensagem { get; set; }
public DateTime? Data { get; set; } = DateTime.Now;
}
public partial class SmartCommSMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SmartCommSMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< Resposta > EnviarMensagens(
IEnumerable< string >
destinatarios,
string mensagem,
DateTime? data = null,
string assunto = null,
bool flash = false)
{
using (var httpclient = new HttpClient())
{
httpclient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpclient.DefaultRequestHeaders.Accept.Clear();
httpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpclient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var envio = new
{
Destinatarios = destinatarios,
Mensagem = mensagem,
Data = data,
Assunto = assunto,
Flash = flash
};
try
{
var post = await httpclient.PostAsync(
"sms/envio",
new StringContent(JsonConvert.SerializeObject(envio), Encoding.UTF8, "application/json"));
var resposta = JsonConvert.DeserializeObject< Resposta >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var envioSMS = new SmartCommSMS("usuario", "senha");
// var resposta = await envioSMS.EnviarMensagens(
// new List< string > { "(17) 996333355", "17 9964.53355", "1 7 9 9 6 4 5 3 3 5 5", "17996333355" },
// "mensagem Oi",
// data: DateTime.Parse("2022-01-01"), //Formatos: dd/MM/yyyy | yyyy/MM/dd
// assunto: "");
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
interface
uses Variants, IdHTTP, IdSSLOpenSSL, Classes, SysUtils, JSON, DateUtils, RegularExpressions;
type
TSequenciaSMS = record
Celular: int64;
Sequencia: cardinal;
end;
type
TSequencias = array of TSequenciaSMS;
type
TWS20 = class
private
var usuario, senha: string;
const url: string = 'https://ws.smartcomm.digital/sms/';
function InvoqueMetodo(metodo: string; parametros: TJSONObject) : TJSONObject;
function ProcesseResposta(resposta: TJSONObject): TSequencias;
public
constructor Create(usuario: string; senha: string);
function EnvieSMS(celulares: array of string; Mensagem: string;
Data: TDateTime; Assunto: string): TSequencias;
function EnvieSmsPersonalizado(destinatarios: TDestinatarios): TSequencias;
function ConsulteStatus(sequencias: array of cardinal): TSequenciasStatus;
function ConsulteResposta(sequencias: array of cardinal): TRespostas;
function ConsulteSaldo(subUsuario: string = ''): int64;
function ConsulteMaisClientes(evento: cardinal; senha: string; todosCelulares: boolean): TMailings;
function CadastreEntrevistado(pesquisa: cardinal; Celular: string; nome: string;
apelido: string; referencia: string): cardinal;
function CadastreUsuario(login: string; senha: string; Celular: string; email: string;
nome: string; confirmacao: byte; resposta: byte; assinatura: string;
vendedor: boolean = false) : int64;
end;
implementation
constructor TWS20.Create(usuario: string; senha: string);
begin
self.usuario := usuario;
self.senha := senha;
end;
function TWS20.InvoqueMetodo(metodo: string; parametros: TJSONObject) : TJSONObject;
var
requerimento: TIdHttp;
begin
requerimento := TIdHttp.Create(nil);
try
requerimento.IOHandler := TIdSSLIOHandlerSOcketOpenSSL.Create(Nil);
requerimento.Request.ContentType := 'application/json';
requerimento.Request.CharSet := 'utf-8';
requerimento.Request.BasicAuthentication := true;
requerimento.Request.UserName := self.usuario;
requerimento.Request.Password := self.senha;
result := TJSONObject.ParseJSONValue
(TEncoding.ASCII.GetBytes(requerimento.Post(self.url + metodo,
TStringStream.Create(parametros.ToJSON(), TEncoding.UTF8, true))), 0)
as TJSONObject;
except
on e: Exception do
begin
requerimento.Free;
raise e;
end;
end;
end;
function TWS20.ProcesseResposta(resposta: TJSONObject): TSequencias;
var destinatarios: TJSONArray;
sequencias: TSequencias;
destino: TSequenciaSMS;
i: integer;
begin
if resposta.GetValue < TJSONString >('Status').Value <> '1' then
// verificar causa
begin
raise Exception.Create(resposta.GetValue< TJSONString > ('StatusMensagem').Value);
end
else
destinatarios := resposta.GetValue< TJSONArray >('Destinatarios');
SetLength(sequencias, destinatarios.Count);
for i := 0 to destinatarios.Count - 1 do
begin
destino.Celular := destinatarios.Items[i].GetValue< int64 >('Celular');
destino.Sequencia := destinatarios.Items[i].GetValue< cardinal >('Sequencia');
sequencias[i] := destino;
end;
result := sequencias;
end;
function TWS20.EnvieSMS(celulares: array of string;
Mensagem: string; Data: TDateTime; Assunto: string): TSequencias;
var parametros: TJSONObject;
destinatarios: TJSONArray;
i: integer;
begin
parametros := TJSONObject.Create;
destinatarios := TJSONArray.Create;
for i := 0 to Length(celulares) - 1 do
destinatarios.Add(celulares[i]);
parametros.AddPair(TJSONPair.Create(TJSONString.Create('Destinatarios'), destinatarios));
parametros.AddPair(
TJSONPair.Create(TJSONString.Create('Mensagem'), TJSONString.Create(Mensagem)));
parametros.AddPair(
TJSONPair.Create(TJSONString.Create('Data'), TJSONString.Create(DateTimeToStr(Data))));
parametros.AddPair
(TJSONPair.Create(TJSONString.Create('Assunto'), TJSONString.Create(Assunto)));
result := self.ProcesseResposta(self.InvoqueMetodo('envio', parametros));
end;
(* Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.EnvieSMS(['17988135454','17988138126'], 'oi', Date() ,'empresa diz' );
*)
class RespostaEnvio
{
public $Lote, $StatusMensagem, $Status, $Destinatarios;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
public $usuario, $senha;
private $url = 'https://ws.smartcomm.digital/';
function __construct($usuario, $senha)
{
$this->usuario = $usuario;
$this->senha = $senha;
}
private function invoque_metodo ($metodo, $parametros, $classe)
{
$dados = array
(
'http' => array
(
'header' => array
(
'Content-type: application/json',
'Authorization: Basic ' . base64_encode($this->usuario . ':' . $this->senha)
),
'method' => 'POST',
'content' => json_encode($parametros),
),
);
$retorno = file_get_contents($this->url . $metodo, false, stream_context_create($dados));
$resposta = new $classe();
$resposta->set(json_decode($retorno,true));
return $resposta;
}
function envie_sms($destinatarios, $mensagem, $assunto, $data, $flash)
{
$envio = array
(
'destinatarios' => $destinatarios,
'assunto' => $assunto,
'mensagem' => $mensagem,
'data' => $data,
'flash' => $flash
);
return $this->invoque_metodo('sms/envio', $envio, 'RespostaEnvio');
}
}
// Exemplo de envio
// $sms = new SMS(usuario, senha);
// $dest = $sms->envie_sms(array('17)996333355',
// '(17) 9 9 6 3 3 3 3 5 5', '17 9964.53355'), 'oi', '', date('dd/MM/yyyy'));
public class Envio
{
public String[] destinatarios;
public String mensagem;
public Date data;
public String assunto;
}
public class SMSApi
{
String usuario, senha;
public SMSApi (String usuario, String senha)
{
this.usuario = usuario;
this.senha = senha;
}
public SequenciaSms [] envieSms (Envio envio) throws Exception
{
return new InvocarMetodo< RespostaSms, Envio >()
.invoqueMetodo(this.usuario, this.senha, "envio", envio, RespostaSms.class).destinatarios;
}
static class Dados
{
public Dados () {}
public EnvioPersonalizado [] destinatarios;
public int [] sequencias;
public String subUsuario;
}
static class RS
{
public RS(){}
public String statusMensagem;
public int status;
}
static class RespostaSms extends RS
{
public RespostaSms (){}
public int lote;
public SequenciaSms [] destinatarios;
}
}
public class InvocarMetodo< T, U >
{
T invoqueMetodo(String usuario, String senha, String metodo, U dados, Class< T > classeRetorno)
throws Exception
{
ObjectMapper mapeador = new ObjectMapper();
mapeador.setDateFormat(new TicksSinceFormat())
.setSerializationInclusion(Include.NON_EMPTY)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
T retorno = mapeador.readValue(ClientBuilder.newClient()
.target("https://ws.smartcomm.digital/").path("sms/" + metodo)
.request(MediaType.APPLICATION_JSON_TYPE)
.header("Authorization", "Basic " + new String(Base64.encode((usuario + ":" + senha).getBytes())))
.post(Entity.entity(new ObjectMapper()
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
.writeValueAsString(dados),MediaType.APPLICATION_JSON_TYPE), String.class), classeRetorno );
if (classeRetorno.getSuperclass().getDeclaredField("status").getInt(retorno) != 1)
throw new Exception
("Metodo retornou: " + classeRetorno.getSuperclass().getDeclaredField("statusMensagem")
.get(retorno).toString());
return retorno;
}
}
//Datas no padrão "/Date(NUMERO)/"
@SuppressWarnings("serial")
class TicksSinceFormat extends DateFormat
{
@Override
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field)
{
long millis = date.getTime();
return new StringBuffer("/Date(" + millis + ")/");
}
@Override
public Date parse(String string, ParsePosition position)
{
int start = string.indexOf("(") + 1;
int end = string.indexOf(")");
String ms = string.substring(start, end);
Date date = new Date(Long.parseLong(ms));
position.setIndex(string.length() - 1);
return date;
}
@Override
public Object clone()
{
return new TicksSinceFormat();
}
}
Envio usando mensagens personalizadas para cadadestinatário.
URL: https://api.smartcomm.digital/sms/envioPersonalizado
Método: POST
Restrições: Número máximo de destinatários 20.000
Parâmetro | Descrição | Tipo | Requerido* | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Destinatarios | Lista com os seguintes parâmetros: | Array/lista (object/class): | |||||||||||||||||||||
|
|||||||||||||||||||||||
TipoEnvio | Plataforma pela qual a mensagem será encaminhada | int/numerico | |||||||||||||||||||||
|
Parâmetro | Descrição | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lote | Código identificador de envio cadastrado como lote | |||||||||||||||||||
Destinatarios | Array/lista (object/class): |
|
||||||||||||||||||
StatusMensagem | Mensagem do status da resposta do envio | |||||||||||||||||||
Status | Código númerico da resposta do envio |
|
// Tipos e declarações no exemplo Envio Simples
public class Destinatario
{
public string Celular { get; set; }
public string Assunto { get; set; }
public string Mensagem { get; set; }
public DateTime? Data { get; set; }
public Destinatario() { }
}
public partial class SMS
{
public async Task < RespostaSMS > EnvieSmsPersonalizado(IEnumerable< Destinatario > destinatarios)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var envio = new { Destinatarios = destinatarios };
try
{
var post = await httpClient.PostAsync(
"sms/envioPersonalizado",
new StringContent(JsonConvert.SerializeObject(envio), Encoding.UTF8, "application/json"));
var resposta =
JsonConvert.DeserializeObject< RespostaSMS >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta.
}
catch (Exception ex)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var envioSMS = new SMS("usuario", "senha");
// var resposta = await envioSMS.EnvieSmsPersonalizado
// (new List>< Destinatario >
// {
// new Destinatario
// {
// Celular = "17 9964.53355",
// Assunto = "SmartComm",
// Mensagem = "ola",
// Data = DateTime.Now
// },
// new Destinatario
// {
// Celular = "(17)996333355",
// Mensagem = "bom dia",
// Data = DateTime.Now.AddDays(30) // Agendado
// },
// new Destinatario
// {
// Celular = "17996333355",
// Mensagem = "oi"
// }
// });
// Tipos e declarações no exemplo Envio Simples
function TWS20.EnvieSmsPersonalizado(destinatarios: TDestinatarios) : TSequencias;
var
objeto, parametros: TJSONObject;
sms: TJSONArray;
i: integer;
begin
parametros := TJSONObject.Create;
sms := TJSONArray.Create;
for i := 0 to Length(destinatarios) - 1 do
begin
objeto := TJSONObject.Create;
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Celular'),
TJSONString.Create(destinatarios[i].Celular)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Assunto'),
TJSONString.Create(destinatarios[i].Assunto)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Mensagem'),
TJSONString.Create(destinatarios[i].Mensagem)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Data'),
TJSONString.Create(DateTimeToStr(destinatarios[i].Data))));
sms.AddElement(objeto);
end;
parametros.AddPair(TJSONPair.Create(TJSONString.Create('Destinatarios'), sms));
result := self.ProcesseResposta(self.InvoqueMetodo('envioPersonalizado', parametros));
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
destino.Celular := '17988138869';
destino.Assunto := 'oi';
destino.Mensagem := 'bom dia';
destino.Data := Date();
sms.EnvieSMSPersonalizado([destino]);
*)
// Tipos e declarações no exemplo Envio Simples
class SMS
{
function envie_sms_personzalido($destinatarios)
{
$envio = array ('destinatarios' => $destinatarios);
return $this->invoque_metodo('sms/envioPersonalizado', $envio, 'RespostaEnvio');
}
}
// Exemplo de envio
// $sms = new SMS(usuario, senha);
// $sms->envie_sms_personzalido
// (
// array
// (
// array('celular' => "(17)996333355",
'mensagem' => "bom dia", 'data' => date("dd/MM/yyyy")),
// array('celular' => "17.99633.3355", 'assunto' => "ola",
'mensagem' => "boa tarde", 'data' => date("dd/MM/yyyy")),
// array('celular' => "17996333355", 'mensagem' => "oi")
// )
// );
// Tipos e declarações no exemplo Envio Simples
public class EnvioPersonalizado
{
public String celular;
public String mensagem;
public Date data;
public String assunto;
}
public class SMSApi
{
public SequenciaSms[] envieSms (EnvioPersonalizado [] envio) throws Exception
{
return new InvocarMetodo< RespostaSms, Dados >()
.invoqueMetodo(this.usuario, this.senha, "envioPersonalizado",
new Dados() { { destinatarios = envio; } }, RespostaSms.class).destinatarios;
}
}
Consulte o status de envio das mensagens solicitadas.
URL: https://api.smartcomm.digital/sms/status
Método: POST
Restrições:
* É recomendado o uso da consulta de status via URL *
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Sequencias | Array/Lista contendo os id/números de identificação das mensagens desejadas | array/lista (string) |
Parâmetro | Descrição | |||||||
---|---|---|---|---|---|---|---|---|
StatusSequencias | Array/lista (object/class): |
|
||||||
StatusMensagem | Mensagem do status da resposta do envio | |||||||
Status | Código númerico da resposta do envio |
|
Código | Status | Descrição |
---|---|---|
101 | Enviar | A mensagem está em estágio de processamento |
104 | Erro | Ocorreu um erro na comunicação com a operadora; a mensagem não foi enviada. |
105 | Enviada | Mensagem enviada; sem confirmação da entrega pela operadora. |
106 | Não entregue | A operadora não pôde enviar a mensagem por alguma razão técnica. |
107 | Entregue | Mensagem enviada; entrega confirmada pela operadora. |
108 | Blacklist | Mensagem não enviada; o número está na lista de bloqueio/blacklist. |
109 | Inválido | Mensagem enviada; número de linha fixa, inválido e/ou inexistente. |
112 | Cota Excedida | Máximo de 05 envios semanais para o mesmo número excedido. |
113 | Entregue sem confirmação | Mensagem enviada; operadora não possui função de confirmação de entrega |
114 | SPAM | Mensagem não enviada; conteúdo contém palavras não permitidas/ofensivas/enganosas |
116 | Duplicado | Mensagem não enviada; intervalo mínimo de 02 horas para o mesmo número com conteúdo igual (assunto, mensagem e assinatura) |
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaStatus > ConsulteStatus(IEnumerable< int > sequencias)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var sequenciaSMS = new { Sequencias = sequencias };
try
{
var post = await httpClient.PostAsync("sms/status", new StringContent(
JsonConvert.SerializeObject(sequenciaSMS), Encoding.UTF8, "application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaStatus >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception ex)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
public enum StatusResposta
{
Erro,
Sucesso,
MaximoConsultas
}
public class RespostaStatus
{
public IEnumerable< SequenciaStatus > StatusSequencias { get; set; }
public StatusResposta Status { get; set; }
public string StatusMensagem { get; set; }
public RespostaStatus() { }
}
}
// Exemplo de envio
// var envioSMS = new SMS("usuario", "senha");
// var resposta = await envioSMS.ConsulteStatus(sequencias);
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
function TWS20.ConsulteStatus(sequencias: array of cardinal): TSequenciasStatus;
var
objetos: TJSONObject;
vetor: TJSONArray;
i: integer;
status: TStatusSMS;
sequenciaStatus: TSequenciasStatus;
begin
objetos := TJSONObject.Create;
vetor := TJSONArray.Create;
for i := 0 to Length(sequencias) - 1 do
vetor.Add(sequencias[i]);
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Sequencias'), vetor));
objetos := self.InvoqueMetodo('status', objetos);
if objetos.GetValue <TJSONString>('Status').Value <> '1' then
begin
raise Exception.Create(objetos.GetValue<TJSONString>('StatusMensagem').Value);
end
else
vetor := objetos.GetValue<TJSONArray>('StatusSequencias');
SetLength(sequenciaStatus, vetor.Count);
for i := 0 to vetor.Count - 1 do
begin
status.StatusDescricao := vetor.Items[i].GetValue<string> ('StatusDescricao');
status.Sequencia := vetor.Items[i].GetValue<cardinal>('Sequencia');
status.StatusCodigo := vetor.Items[i].GetValue<cardinal>('Sequencia');
sequenciaStatus[i] := status;
end;
result := sequenciaStatus;
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.ConsulteStatus([271619437, 271619438, 271619440]);
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaStatus
{
public $StatusSequencias, $StatusCodigo, $StatusMensagem;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function consulte_status($sequencias)
{
$sequencias_sms = array ('sequencias' => $sequencias);
return $this->invoque_metodo('sms/status', $sequencias_sms, 'RespostaStatus');
}
}
// Exemplo de envio
// $sms = new SMS(usuario, senha);
// $sms-> consulte_status(sequencias);
// Tipos e declarações no exemplo Envio Simples
public class StatusSequencias
{
public int statusCodigo;
public int sequencia;
}
public class SMSApi
{
public StatusSequencias[] consulteStatus(int [] sequencia) throws Exception
{
return new InvocarMetodo< RespostaStatus, Dados >()
.invoqueMetodo(this.usuario, this.senha, "status",
new Dados() { { sequencias = sequencia; } }, RespostaStatus.class).statusSequencias;
}
static class RespostaStatus extends RS
{
public RespostaStatus(){}
public StatusSequencias [] statusSequencias;
}
}
Receba o status de envio das mensagens enviadas em sua aplicação, e, a cada atualização de status, sua URL será chamada
* Para habilitar esta função, cadastre uma URL no menu Configurações na plataforma. *
URL Ex.: https://www.seudominio.com/notificacoes
Parâmetro | Descrição | |||||
---|---|---|---|---|---|---|
TipoSMS | Código númerico do tipo de plataforma por qual foi encaminhada a mensagem |
|
||||
TipoSMSDescricao | Descrição do tipo de plataforma por qual foi encaminhada a mensagem | |||||
Sequencia | Número identificador de mensagem | |||||
StatusCodigo | Código númerico do atual status da mensagem | |||||
StatusDescricao | Mensagem do status da resposta do envio | |||||
Status | Código númerico da resposta do envio |
|
Código | Status | Descrição |
---|---|---|
101 | Enviar | A mensagem está em estágio de processamento |
104 | Erro | Ocorreu um erro na comunicação com a operadora; a mensagem não foi enviada. |
105 | Enviada | Mensagem enviada; sem confirmação da entrega pela operadora. |
106 | Não entregue | A operadora não pôde enviar a mensagem por alguma razão técnica. |
107 | Entregue | Mensagem enviada; entrega confirmada pela operadora. |
108 | Blacklist | Mensagem não enviada; o número está na lista de bloqueio/blacklist. |
109 | Inválido | Mensagem enviada; número de linha fixa, inválido e/ou inexistente. |
112 | Cota Excedida | Máximo de 05 envios semanais para o mesmo número excedido. |
113 | Entregue sem confirmação | Mensagem enviada; operadora não possui função de confirmação de entrega |
114 | SPAM | Mensagem não enviada; conteúdo contém palavras não permitidas/ofensivas/enganosas |
116 | Duplicado | Mensagem não enviada; intervalo mínimo de 02 horas para o mesmo número com conteúdo igual (assunto, mensagem e assinatura) |
Cancela o envio das mensagens SMS ainda não processadas
URL: https://api.smartcomm.digital/sms/cancelamento
Método: POST
Restrições: Apenas mensagens com o status Enviar
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Sequencias | Vetor/lista contendo os códigos das mensagens selecionadas | array/lista (int) | |
Lotes | Vetor/lista contendo os códigos dos lotes selecionadas | array/lista (int) |
Parâmetro | Descrição | |||||||
---|---|---|---|---|---|---|---|---|
TotalMensagensCanceladas | Número total de mensagens canceladas | |||||||
StatusMensagem | Mensagem do status da resposta da operação | |||||||
Cancelamentos | Array/lista object/class: |
|
||||||
Status | Código númerico da resposta da operação |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum EStatusCancelamento
{
Erro,
Sucesso,
SemSequencias
}
public class RespostaCancelamento
{
public string StatusMensagem { get; set; }
public int TotalMensagensCanceladas { get; set; }
public EStatusCancelamento Status { get; set; }
}
public partial class SmartCommSMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SmartCommSMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaCancelamento > CancelarEnvio(IEnumerable< int > sequencias)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var parametro = new { Sequencias = sequencias };
try
{
var post = await httpClient.PostAsync("sms/saldo",
new StringContent
(JsonConvert.SerializeObject(parametro),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaCancelamento >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de cancelamento
// var cancelamento = new SmartCommSMS("usuario", "senha");
// var resposta = await cancelamento.CancelarEnvio(
// new List< int > { 1877556304, 1516817258, 1466330340 });
Consulte as respostas das mensagens solicitadas.
URL: https://api.smartcomm.digital/sms/resposta
Método: POST
Restrições:
* É recomendado o uso da consulta de resposta via URL *
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Sequencias | Array/Lista contendo os id/números de identificação das mensagens desejadas | array/lista (string) |
Parâmetro | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Respostas | Array/lista (object/class): |
|
||||||||
StatusMensagem | Mensagem do status da resposta do envio | |||||||||
Status | Código númerico da resposta do envio |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public class Resposta
{
public int Sequencia { get; set; }
public string Mensagem { get; set; }
public DateTime Data { get; set; }
public Resposta() { }
}
public enum StatusRespostaSMS
{
Erro,
Sucesso,
MaximoConsultas
}
public class RetornoSMS
{
public StatusRespostaSMS Status { get; set; }
public string StatusMensagem { get; set; }
public IEnumerable< Resposta > Respostas { get; set; }
public RetornoSMS() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RetornoSMS > ConsulteResposta(IEnumerable< int > sequencias)
{
using (var httpClient = new HttpClient())
{
HttpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
HttpClient.DefaultRequestHeaders.Accept.Clear();
HttpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue
(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}"))
);
var sequenciasSMS = new { Sequencias = sequencias };
try
{
var post = await HttpClient.PostAsync("sms/resposta",
new StringContent(
JsonConvert.SerializeObject(sequenciasSMS),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RetornoSMS >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var envioSMS = new SMS("usuario","senha");
// var resposta = await sms.ConsulteResposta(sequencias);
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
function TWS20.ConsulteResposta(sequencias: array of cardinal): TRespostas;
var
objetos: TJSONObject;
vetor: TJSONArray;
i: integer;
resp: TRespostaSMS;
respostas: TRespostas;
regex: TRegEx;
begin
objetos := TJSONObject.Create;
vetor := TJSONArray.Create;
regex := TRegEx.Create('\D', [roIgnoreCase, roMultiline]);
for i := 0 to Length(sequencias) - 1 do
vetor.Add(sequencias[i]);
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Sequencias'), vetor));
objetos := self.InvoqueMetodo('resposta', objetos);
if objetos.GetValue<TJSONString>('Status').Value <> '1' then
begin
raise Exception.Create(objetos.GetValue<TJSONString>('StatusMensagem').Value);
end
else
vetor := objetos.GetValue<TJSONArray>('Respostas');
SetLength(respostas, vetor.Count);
for i := 0 to vetor.Count - 1 do
begin
resp.Mensagem := vetor.Items[i].GetValue<string>('Mensagem');
resp.Sequencia := vetor.Items[i].GetValue<cardinal>('Sequencia');
resp.Data := IncSecond(StrToDate('1/1/1970'),
StrToInt64(regex.Replace(vetor.Items[i].GetValue<string>('Data'), '')));
respostas[i] := resp;
end;
result := respostas;
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.ConsulteResposta([271639150]);
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaResposta
{
public $Respostas, $Status, $StatusMensagem;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function consulte_resposta($sequencias)
{
$sequencias_sms = array ('sequencias' => $sequencias);
return $this->invoque_metodo('sms/resposta', $sequencias_sms, 'RespostaResposta');
}
}
// Exemplo de envio
// $sms = new SMS (usuario,senha);
// $sms->consulte_resposta(sequencias);
// Tipos e declarações no exemplo Envio Simples
public class Resposta
{
public int Sequencia;
public String Mensagem;
public Date Data;
}
public class SMSApi
{
public Resposta [] consulteResposta(int[] sequencia) throws Exception
{
return new InvocarMetodo< RespostaResposta, Dados >()
.invoqueMetodo(this.usuario, this.senha, "resposta",
new Dados() { { sequencias = sequencia; } }, RespostaResposta.class).respostas;
}
static class RespostaResposta extends RS
{
public RespostaResposta(){}
public Resposta [] respostas;
}
}
Receba as respostas de envio das mensagens enviadas em sua aplicação, e, a cada atualização de status sua URL será chamada
* Para habilitar esta função, cadastre uma URL no menu Configurações na plataforma. *
URL Ex.: https://www.seudominio.com/notificacoes
Parâmetro | Descrição | |||||
---|---|---|---|---|---|---|
TipoSMS | Código númerico do tipo de plataforma por qual foi encaminhada a mensagem |
|
||||
TipoSMSDescricao | Descrição do tipo de plataforma por qual foi encaminhada a mensagem | |||||
Sequencia | Número identificador de mensagem | |||||
Mensagem | Resposta à mensagem encaminhada ao destinatário. | |||||
Data | Data do recebimento da resposta. | |||||
Status | Código númerico da resposta do envio |
|
Consulta o saldo disponível ou de subusuários
URL: https://api.smartcomm.digital/sms/saldo
Método: POST
Restrições: Intervalo entre consultas 10 segundos
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Subusuarios | Vetor/lista contendo os códigos dos usuários | array/lista (string) | |
Subusuario | Código do usuário/subusuário | string/texto |
Parâmetro | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Saldos | Array/lista (object/class): |
|
||||||||
Saldo | Créditos disponíveis; próprios ou do subusuário informado | |||||||||
Status | Código númerico da resposta da consulta |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum StatusSaldo
{
Erro,
Sucesso,
MaximoConsultas,
UsuarioInvalido
}
public class RespostaSaldo
{
public int Saldo { get; set; }
public StatusSaldo Status { get; set; }
public string StatusMensagem { get; set; }
public RespostaSaldo() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaSaldo > ConsulteSaldo(string subusuario = null)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var parametro = new { Subusuario= subusuario };
try
{
var post = await httpClient.PostAsync("sms/saldo",
new StringContent
(JsonConvert.SerializeObject(parametro),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaSaldo >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var consulta = new SMS("usuario", "senha" );
// var resposta = await sms.ConsulteSaldo();
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
function TWS20.ConsulteSaldo(subUsuario: string = ''): int64;
var
objeto: TJSONObject;
begin
objeto := TJSONObject.Create;
objeto.AddPair(TJSONPair.Create(TJSONString.Create('subUsuario'),
TJSONString.Create(subUsuario)));
objeto := self.InvoqueMetodo('saldo', objeto);
if objeto.GetValue<TJSONString>('Status').Value <> '1' then
begin
raise Exception.Create(objeto.GetValue<TJSONString>
('StatusMensagem').Value);
end
else
result := StrToInt64(objeto.GetValue<TJSONNumber>
('Saldo').Value);
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.ConsulteSaldo();
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaSaldo
{
public $Mailing, $Status, $StatusMensagem;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function consulte_saldo($sub_usuario = '')
{
$parametro = array ('subUsuario' => $sub_usuario);
return $this->invoque_metodo('sms/saldo', $parametro, 'RespostaSaldo');
}
}
// Exemplo de envio
// $sms = new SMS (usuario,senha);
// $sms-> consulte_saldo();
// Tipos e declarações no exemplo Envio Simples
public class SMSApi
{
public int consulteSaldo() throws Exception
{
return consulteSaldo("");
}
public int consulteSaldo(String subusuario) throws Exception
{
return new InvocarMetodo<RespostaSaldo, Dados>()
.invoqueMetodo(this.usuario, this.senha, "saldo",
new Dados() { { subUsuario = subusuario; } }, RespostaSaldo.class).saldo;
}
static class RespostaSaldo extends RS
{
public RespostaSaldo(){}
public int saldo;
}
}
Transfira créditos para subusuários
URL: https://api.smartcomm.digital/sms/transferencia
Método: POST
Restrições: Recurso disponível somente para o administrador da conta franqueada
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Subusuario | Código do usuário/subusuário destinatário dos créditos | string/texto | |
Quantidade | Quantidade de créditos para transferir | int/numérico |
Parâmetro | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Status | Código númerico da resposta da consulta |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum StatusTransferencia
{
Erro,
Sucesso,
TransferenciaInvalida,
CreditosInsuficientesExpirados
}
public class RespostaTransferencia
{
public StatusTransferencia Status { get; set; }
public string StatusMensagem { get; set; }
public RespostaTransferencia() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< bool > TransfiraCreditos(string Subusuario, uint Quantidade)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var transferencia = new { Quantidade, Subusuario };
try
{
var post = await httpClient.PostAsync(
"sms/transferencia", new StringContent(
JsonConvert.SerializeObject(transferencia),
Encoding.UTF8, "application/json"));
var resposta = JsonConvert
.DeserializeObject < RespostaTransferencia >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta.Equals(StatusTransferencia.Sucesso)
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var sms = new SMS("meu_usuario", "minha_senha");
// var resposta = await sms.TransfiraCreditos("meu_atendimento", 500);
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
procedure TWS20.TransfiraCreditos(subUsuario: string; quantidade: integer);
var objeto: TJSONObject;
begin
objeto := TJSONObject.Create;
objeto.AddPair(TJSONPair.Create(TJSONString.Create('subUsuario'),
TJSONString.Create(subUsuario)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('quantidade'),
TJSONNumber.Create(quantidade)));
objeto := self.InvoqueMetodo('transferencia', objeto);
if objeto.GetValue<TJSONString>('Status').Value <> '1' then
begin
raise Exception.Create(objeto.GetValue<TJSONString> ('StatusMensagem').Value);
end
else
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.TransfiraCreditos("subusuario", 500);
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaTransferencia
{
public $Status, $StatusMensagem;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function transfira_creditos($sub_usuario, $quantidade)
{
$parametro = array ('subUsuario' => $sub_usuario, 'quantidade' => $quantidade);
return $this->invoque_metodo('sms/transferencia', $parametro, 'RespostaTransferencia');
}
}
// Exemplo de envio
// $sms = new SMS (usuario,senha);
// $sms->transfira_creditos('subusuario', quantidade);
// Tipos e declarações no exemplo Envio Simples
public class Transferencia
{
public int quantidade;
public String subUsuario;
}
public class SMSApi
{
public void transfiraCreditos(Transferencia transferencia) throws Exception
{
new InvocarMetodo()
.invoqueMetodo(this.usuario, this.senha,
"transferencia", transferencia, RespostaRS.class);
}
static class RespostaRS extends RS { }
}
Gerar o mailing da ferramenta Mais Clientes
URL: https://api.smartcomm.digital/sms/mailingMaisClientes
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Evento | Código identificador do evento | int/numérico | |
Senha | Senha do evento | string/texto | |
TodosCelulares | Baixar todos os números ou apenas novos | boolean/verdadeiro ou falso |
Parâmetro | Descrição | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Mailing | Array/lista (object/class): |
|
||||||||||
Status | Código númerico da resposta da consulta |
|
||||||||||
StatusMensagem | Mensagem do status da resposta do envio |
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum StatusMailingMaisClientes
{
Erro,
Sucesso,
EventoInvalido
}
public class RespostaMailingMaisClientes
{
public IEnumerable< Mailing > Mailing { get; set; }
public StatusMailingMaisClientes Status { get; set; }
public string StatusMensagem { get; set; }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaMailingMaisCliente >
ConsulteMaisClientes(int evento, string senha, bool todosCelulares)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}", Usuario, Senha)));
var maisClientes = new
{
Evento = evento,
Senha = senha,
TodosCelulares = todosCelulares
};
try
{
var post = await httpClient.PostAsync("sms/mailingMaisClientes",
new StringContent(
JsonConvert.SerializeObject(maisClientes),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaMailingMaisCliente >(await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var sms = new SMS("usuario", "senha" );
// var resposta = await sms.ConsulteMaisClientes(123456, minhasenhasupersecreta, true);
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
function TWS20.ConsulteMaisClientes(evento: cardinal; senha: string;
todosCelulares: boolean): TMailings;
var
objetos: TJSONObject;
vetor: TJSONArray;
i: integer;
mailing: TMailings;
ml: TMailingSMS;
begin
objetos := TJSONObject.Create;
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Evento'),
TJSONNumber.Create(evento)));
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Senha'),
TJSONString.Create(senha)));
if todosCelulares then
begin
objetos.AddPair(TJSONPair.Create(TJSONString.Create('TodosCelulares'),
TJSONTrue.Create()));
end
else
objetos.AddPair(TJSONPair.Create(TJSONString.Create('TodosCelulares'),
TJSONFalse.Create()));
objetos := self.InvoqueMetodo('mailingMaisClientes', objetos);
if objetos.GetValue<TJSONString>('Status').Value <> '1' then
begin
raise Exception.Create(objetos.GetValue<TJSONString>
('StatusMensagem').Value);
end
else
vetor := objetos.GetValue<TJSONArray>('Mailing');
SetLength(mailing, vetor.Count);
for i := 0 to vetor.Count - 1 do
begin
ml.ID := vetor.Items[i].GetValue<cardinal>('ID');
ml.Celular := vetor.Items[i].GetValue<string>('Celular');
ml.Campo1 := vetor.Items[i].GetValue<string>('Campo1');
ml.Campo2 := vetor.Items[i].GetValue<string>('Campo2');
ml.Campo3 := vetor.Items[i].GetValue<string>('Campo3');
mailing[i] := ml;
end;
result := mailing;
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.ConsulteMaisClientes (evento,senha, true);
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaMaisClientes
{
public $Pesquisa, $Celular, $Nome;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function consulte_maisclientes ($evento, $senha, $todosCelulares)
{
$parametros = array ('evento' => $evento, 'senha' => $senha ,'todosCelulares' => $todosCelulares);
return $this->invoque_metodo('sms/mailingMaisClientes', $parametros, 'RespostaMaisClientes');
}
}
// Exemplo de envio
// $sms = new SMS (usuario, senha);
// $sms->consulte_maisclientes(evento,senha, true);
// Tipos e declarações no exemplo Envio Simples
public class MaisCliente
{
public int evento;
public String senha;
public boolean todosCelulares;
}
public class SMSApi
{
public Mailing[] consulteMaisClientes (MaisCliente maisCliente) throws Exception
{
return new InvocarMetodo<RespostaMailing, MaisCliente>()
.invoqueMetodo(this.usuario, this.senha, "mailingMaisClientes",
maisCliente, RespostaMailing.class).mailing;
}
static class RespostaMailing extends RS
{
public RespostaMailing() { }
public Mailing[] mailing;
}
}
Cadastre novo entrevistado na ferramenta RADAR
URL: https://api.smartcomm.digital/sms/entrevistado
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Pesquisa | Código identificador da pesquisa. | int/numérico | |
Celular | Número de celular do entrevistado | string/texto | |
Nome | Nome do entrevistado | string/texto | |
Apelido | Apelido do entrevistado | string/texto | |
Referencia | Nome de referência da pesquisa; Ex.: 'Satisfação campanha novos produtos' | string/texto | |
Data | Data para o envio da pesquisa | datetime/data |
Parâmetro | Descrição | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Sequencia | Código identificador da entrevista | |||||||||||
Status | Código númerico da resposta da consulta |
|
||||||||||
StatusMensagem | Mensagem do status da resposta do envio |
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum StatusEntrevistado
{
Erro,
Sucesso,
CamposInvalidos,
PesquisaInvalida
}
public class RespostaEntrevistado
{
public int Sequencia { get; set; }
public string StatusMensagem { get; set; }
public StatusEntrevistado Status { get; set; }
public RespostaEntrevistado() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaEntrevistado > CadastreEntrevistado
(int pesquisa,
string celular,
string nome = null,
string apelido = null,
string referencia = null)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var entrevistado = new
{
Pesquisa = pesquisa,
Celular = celular,
Nome = nome,
Apelido = apelido,
Referencia = referencia
};
try
{
var post = await httpClient.PostAsync("sms/entrevistado",
new StringContent(
JsonConvert.SerializeObject(entrevistado),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaEntrevistado >(
await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var sms = new SMS("usuario", "senha" );
// var resposta = await sms.CadastreEntrevistado(40,"11987654321");
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
function TWS20.CadastreEntrevistado
(
pesquisa: cardinal;
Celular: string;
nome: string;
apelido: string;
referencia: string): cardinal;
var
objetos: TJSONObject;
vetor: TJSONArray;
i: integer;
mailing: TMailings;
ml: TMailingSMS;
begin
objetos := TJSONObject.Create;
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Pesquisa'),
TJSONNumber.Create(pesquisa)));
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Celular'),
TJSONString.Create(Celular)));
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Nome'),
TJSONString.Create(nome)));
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Apelido'),
TJSONString.Create(apelido)));
objetos.AddPair(TJSONPair.Create(TJSONString.Create('Referencia'),
TJSONString.Create(referencia)));
objetos := self.InvoqueMetodo('entrevistado', objetos);
if objetos.GetValue<TJSONString>('Status').Value <> '1' then
begin
raise Exception
.Create(objetos.GetValue<TJSONString>('StatusMensagem').Value);
end
else
result := StrToInt(objetos.GetValue<TJSONNumber>('Sequencia').Value);
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.CadastreEntrevistado(40,'179917579492','nome','apelido','');
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaEntrevistado
{
public $Sequencia, $Status, $Celular, $StatusMensagem;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function cadastre_entrevistado ($pesquisa, $celular, $nome)
{
$parametros = array ('pesquisa' => $pesquisa, 'celular' => $celular ,'nome' => $nome);
return $this->invoque_metodo('sms/entrevistado', $parametros, 'RespostaEntrevistado');
}
}
// Exemplo de envio
// $sms = new SMS (usuario, senha);
// $sms->cadastre_entrevistado(pesquisa,celular, nome);
// Tipos e declarações no exemplo Envio Simples
public class Entrevistado
{
public int pesquisa;
public String celular;
public String nome;
public String apelido;
public String referencia;
}
public class SMSApi
{
public int cadastreEntrevistado(Entrevistado entrevistado) throws Exception
{
return new InvocarMetodo<RespostaRadar, Entrevistado>()
.invoqueMetodo(this.usuario, this.senha,
"entrevistado", entrevistado, RespostaRadar.class).sequencia;
}
}
static class RespostaRadar extends RS
{
public RespostaRadar () {}
public int sequencia;
}
Cadastre novo lote de entrevistados na ferramenta RADAR
URL: https://api.smartcomm.digital/sms/entrevistadoLote
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Entrevistados | Lista com os seguintes parâmetros: | Array/lista (object/class): | |||||||||||||||||||||||||||||
|
Parâmetro | Descrição | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Sequencias | Array/lista (int/numérico): |
|
||||||||||
Status | Código númerico da resposta da consulta |
|
||||||||||
StatusMensagem | Mensagem do status da resposta do envio |
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum StatusEntrevistado
{
Erro,
Sucesso,
CamposInvalidos,
PesquisaInvalida
}
public class RespostaEntrevistados
{
public string StatusMensagem { get; set; }
public IEnumerable< int > Sequencias { get; set; }
public StatusEntrevistado Status { get; set; }
public RespostaEntrevistados() { }
}
public class Entrevistado
{
public int Pesquisa { get; set; }
public string Celular { get; set; }
public string Nome { get; set; }
public string Apelido { get; set; }
public string Referencia { get; set; }
public Entrevistado() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaEntrevistadoLote > CadastreEntrevistadoLote
(IEnumerable< Entrevistado > entrevistados)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var entrevistados = new { Entrevistados = entrevistados };
try
{
var post = await httpClient.PostAsync(
"sms/entrevistadoLote",
new StringContent
(
JsonConvert.SerializeObject(entrevistados),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaEntrevistadoLote >(
await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var resposta =
// await sms.CadastreEntrevistadoLote
// (
// new List< Entrevistado >
// {
// new Entrevistado { Pesquisa = 40, Celular="11987654321", Nome ="John Doe" },
// new Entrevistado { Pesquisa = 40, Celular="12968574321", Nome ="Jane Doe" },
// new Entrevistado { Pesquisa = 40, Celular="13987612345", Nome ="Joe Bloggs" }
// }
// );
Consulte as respostas obtidas através das pesquisas da ferramenta RADAR
URL: https://api.smartcomm.digital/sms/resultados
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Pesquisa | Código identificador da pesquisa | int/numérico | |
De | Data inicial da consulta | datetime/data | |
Ate | Data final da consulta | datetime/data | |
Referencia | Nome de referência da pesquisa; Ex.: 'Satisfação campanha novos produtos' | string/texto |
Parâmetro | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Sequencias | Array/lista (int/numérico): |
|
||||||||
Status | Código númerico da resposta da consulta |
|
||||||||
StatusMensagem | Mensagem do status da resposta do envio |
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public class Resultado
{
public string Referencia { get; set; }
public string Entrevistado { get; set; }
public string Celular { get; set; }
public string Resposta { get; set; }
public Resultado() { }
}
public enum StatusResultados
{
Erro,
Sucesso,
PesquisaInvalida,
PesquisaExpirada
}
public class RespostaResultados
{
public string StatusMensagem { get; set; }
public StatusResultados Status { get; set; }
public IEnumerable< Resultado > Resultados { get; set; }
public RespostaResultados() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaResultados > ConsultaResultadoPesquisa
(int pesquisa, DateTime de, DateTime ate, string referencia = "")
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String
(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var envio = new
{
Pesquisa = pesquisa,
De = de,
Ate = ate,
Referencia = referencia
};
try
{
var post = await httpClient.PostAsync(
"sms/resultados",
new StringContent
(
JsonConvert.SerializeObject(envio),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaResultados >(
await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var resposta = await sms.ConsultaResultadoPesquisa(40, DateTime.Now.AddDays(-60), DateTime.Now);
Cadastre um novo usuário.
URL: https://api.smartcomm.digital/sms/usuario
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Login | Login para acesso à plataforma | string/texto | |||||||||
Senha | Senha para acesso à plataforma | string/texto | |||||||||
Celular | Celular do usuário | string/texto | |||||||||
Email do usuário | string/texto | ||||||||||
Nome | Nome do usuário | string/texto | |||||||||
UrlWebService | URL para retorno de resposta e confirmação de entrega | string/texto | |||||||||
Assinatura | Assinatura padrão das mensagems SMS | string/texto | |||||||||
Vendedor | Indica se o usuário é um vendedor | boolean/verdadeiro ou falso | |||||||||
Confirmacao | Indica o tipo de confirmação de entrega das mensagens | int/numérico | |||||||||
|
|||||||||||
Resposta | Indica o canal de recebimento de respostas das mensagens | int/numérico | |||||||||
|
Parâmetro | Descrição | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
StatusMensagem | Mensagem do status da resposta do envio | |||||||||||||
Status | Código númerico da resposta do envio |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum ConfirmacaoRespostaPor
{
Nao,
PorSMS,
PorEmail,
PorSMSEmail
}
public enum StatusUsuario
{
Erro,
Sucesso,
CotaExcedida,
UsuarioExistente,
CamposObrigatorios,
CamposInvalidos
}
public class RespostaUsuario
{
public string StatusMensagem { get; set; }
public StatusUsuario Status { get; set; }
public RespostaUsuario() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaUsuario > CadastreUsuario(
string login,
string senha,
string celular,
string email,
string nome,
ConfirmacaoRespostaPor confirmacao,
ConfirmacaoRespostaPor resposta,
string assinatura = null,
bool vendedor = false)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var novoUsuario = new
{
Login = login,
Senha = senha,
Celular = celular,
Email = email,
Nome = nome,
Confirmacao = confirmacao,
Resposta = resposta,
Assinatura = assinatura,
Vendedor = vendedor
};
try
{
var post = await httpClient.PostAsync(
"sms/usuario",
new StringContent
(
JsonConvert.SerializeObject(novoUsuario),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaUsuario >(
await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var resposta = await sms.CadastreUsuario("meu_usuario", "minhasupersenhasecreta",
// "11987654321", "email@dominio.com", "John Doe", ConfirmacaoRespostaPor.Nao, ConfirmacaoRespostaPor.Nao);
//Requisito: Instalar OpenSSL http://slproweb.com/products/Win32OpenSSL.html
unit TesteApi;
// Tipos e declarações no exemplo Envio Simples
function TWS20.CadastreUsuario(
login: string;
senha: string;
Celular: string;
email: string;
nome: string;
confirmacao: byte;
resposta: byte;
assinatura: string;
vendedor: boolean = false) : int64;
var
objeto: TJSONObject;
vetor: TJSONArray;
i: integer;
mailing: TMailings;
ml: TMailingSMS;
begin
objeto := TJSONObject.Create;
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Senha'),
TJSONNumber.Create(senha)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Celular'),
TJSONString.Create(Celular)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Nome'),
TJSONString.Create(nome)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Login'),
TJSONString.Create(login)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Email'),
TJSONString.Create(email)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Assinatura'),
TJSONString.Create(assinatura)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Resposta'),
TJSONNumber.Create(resposta)));
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Confirmacao'),
TJSONNumber.Create(confirmacao)));
if vendedor then
begin
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Vendedor'),
TJSONTrue.Create()));
end
else
objeto.AddPair(TJSONPair.Create(TJSONString.Create('Vendedor'),
TJSONFalse.Create()));
objeto := self.InvoqueMetodo('usuario', objeto);
if objeto.GetValue<TJSONString>('Status').Value <> '1' then
begin
raise Exception.Create(objeto.GetValue<TJSONString>
('StatusMensagem').Value);
end
else
result := StrToInt(objeto.GetValue<TJSONNumber>('Status').Value);
end;
(*
Exemplo de envio
sms := TWS20.Create(usuario,senha);
sms.CadastreUsuario(
'meu_usuario',
'minhasupersenhasecreta',
'17987654321',
'email@email.com',
'John DOe'
,1
,1,
'assinatura');
*)
// Tipos e declarações no exemplo Envio Simples
class RespostaUsuario
{
public $Status;
public function set($data)
{
foreach ($data AS $key => $value) $this->{$key} = $value;
}
}
class SMS
{
function cadastre_usuario ($login, $senha, $celular, $email, $nome, $confirmacao, $resposta)
{
$parametros = array (
'login' => $login,
'senha' => $senha,
'celular' => $celular,
'email' => $email,
'nome' => $nome,
'confirmacao' => $confirmacao,
'resposta' => $resposta);
return $this->invoque_metodo('sms/usuario', $parametros, 'RespostaUsuario');
}
}
// Exemplo de envio
// $sms = new SMS(usuario, senha);
// $sms->cadastre_usuario(login, senha, celular, email, nome, 0, 0);
Comprime uma URL e compacta utilizando o domínio: sm5.ms/codigo-url-encurtada.
URL: https://api.smartcomm.digital/sms/encurtador
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* |
---|---|---|---|
Destino | URL para encurtar | string/texto | |
Descricao | Descrição para URL encurtada | string/texto |
Parâmetro | Descrição | |||||
---|---|---|---|---|---|---|
URL | URL gerada após o processo de encurtar | |||||
StatusMensagem | Mensagem do status da resposta do envio | |||||
Status | Código númerico da resposta do envio |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public enum StatusEncurtador
{
Erro,
Sucesso
}
public class RespostaEncurtador
{
public string Url { get; set; }
public string StatusMensagem { get; set; }
public StatusEncurtador Status { get; set; }
public RespostaEncurtador() { }
}
public partial class SMS
{
public string Usuario { get; set; }
public string Senha { get; set; }
public SMS(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaEncurtador > Encurte(string destino, string descricao)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var linkEncurtar = new { Destino = destino, Descricao = descricao };
try
{
var post = await httpClient.PostAsync(
"sms/encurtador",
new StringContent
(
JsonConvert.SerializeObject(linkEncurtar),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaEncurtador >(
await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var sms = new SMS("usuario", "senha");
// var resposta = await sms.Encurte("https://www.meu-dominio.com.br", "Minha loja virtual");
Envio de mensagens de whatsapp.
URL: https://api.smartcomm.digital/sms/envioWhats
Método: POST
Restrições:
Parâmetro | Descrição | Tipo | Requerido* | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Destinatarios | Lista com os seguintes parâmetros: | Array/lista (object/class): | |||||||||||||||||||||
|
Parâmetro | Descrição | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lote | Código identificador do lote | |||||||||||||
CreditosGastos | Quantidade de créditos utilizados no envio das mensagens | |||||||||||||
StatusMensagem | Mensagem do status da resposta do envio | |||||||||||||
Destinatarios | Array/lista (object/class): |
|
||||||||||||
Status | Código númerico da resposta do envio |
|
// *-- O nome das classes pode ser da preferência, desde que siga os parâmetros --*
public class Destinatario
{
public string Celular { get; set; };
public int Chat { get; set; }
public DateTime? Data { get; set; }
public Dictionary < string, string > Parametros { get; set; }
public Destinatario() { }
}
public class SequenciaWhats
{
public long Celular { get; set; }
public int Id { get; set; }
public SequenciaWhats() { }
}
public class RespostaWhats
{
public int Lote { get; set; }
public int CreditosGastos { get; set; }
public string StatusMensagem { get; set; }
public StatusWhats Status { get; set; }
public IEnumerable< SequenciaWhats > Destinatarios { get; set; }
public RespostaWhats() { }
}
public enum StatusWhats
{
Erro,
Sucesso,
SemCreditos,
SemCelular,
CelularInvalido,
SemChat,
ChatInvalido,
SemParametros,
ParametroInvalido,
UsuarioSenhaInvalido,
AccountIdSecretKeyInvalido,
}
public partial class WhastApp
{
public string Usuario { get; set; }
public string Senha { get; set; }
public WhastApp(string usuario, string senha)
{
Usuario = usuario;
Senha = senha;
}
public async Task< RespostaWhats > EnvieWhats(IEnumerable< Destinatario > destinatarios)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://ws.smartcomm.digital/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Usuario}:{Senha}")));
var envio = new { Destinatarios = destinatarios };
try
{
var post = await httpClient.PostAsync(
"sms/EnvioWhats",
new StringContent
(
JsonConvert.SerializeObject(envio),
Encoding.UTF8,
"application/json"));
var resposta = JsonConvert
.DeserializeObject< RespostaWhats >(
await post.Content.ReadAsStringAsync());
// ...
// TODO: Tratamento do resultado de acordo com as regras de negócio de sua aplicação
return resposta;
}
catch (Exception e)
{
//TODO: Log e/ou tratamento de acordo com as regras de negócio de sua aplicação
throw new Exception(e.Message);
}
}
}
}
// Exemplo de envio
// var whats = new WhastApp("usuario", "senha");
// var resposta = await
// sms.EnvieWhats(new List< Destinatario >
// {
// new Destinatario
// {
// Celular = "(11) 987654321",
// Chat = 40,
// Data = " 13/12/2024 22:21:08 ",
// Parametros = new Dictionary< string, string >()
// {
// { "nome", "John Doe" },
// { "valor", "121.50" },
// { "vencimento", "13/12/2024 22:21:08" },
// { "codigo-barras", "05f3e671-750c-4ae6-b55d-9d3dbe95ac86" }
// };
// },
// new Destinatario
// {
// Celular = "(11) 98765-1234",
// Chat = 1,
// Data = " 26/12/2024 22:21:08 ",
// Parametros = new Dictionary< string, string >()
// {
// { "nome", "Jane Doe" },
// { "desconto", "15%" },
// { "data-limite", "13/12/2024 22:21:08" },
// { "codigo-promocional", "66a5243b-5415-4c14-9031-478fb8f99156" }
// };
// }
// });