PHP - Enviando SMS via Nexmo
Envie SMS com apenas algumas linhas de código! Guia de integração PHP com Nexmo.

Olá meus Unicórnios! 🦄✨
Existem muitas APIs para envio de SMS, porem, a maioria tem pontos negativos:
- Não enviar internacional
- Demorar para a mensagem chegar
- Não ter log do tráfego da mensagem
E nisto a Nexmo se destaca, uma ferramenta pensada para Desenvolvedores.
Criando Credenciais
Inicialmente crie uma conta na Nexmo e carrega créditos em sua conta:
Dentro de sua conta, logo na capa, será exibido a "API key" e a "API Secret"

Copie estes dados!
Enviando SMS
Para enviar um SMS, envie um POST para:
https://rest.nexmo.com/sms/json
Aqui, basta enviarmos um POST semelhante ao Json abaixo:
{
"from": "SeuSite",
"to": "55479999999",
"api_key": "[ApiKey]",
"api_secret": "[ApiSecret]",
"text": "Teste"
}
Neste Json, precisamos alterar alguns campos:
- from: O nome de origem (Não um telefone, um nome mesmo) - Exemplo: "Site do Luizinho"
- to: O telefone de destinatário com DDI - Neste exemplo, o DDI é 55 (Brasil)
- api_key: A "Api Key" que copiamos do painel da Nexmo
- api_secret: A "Api Secret" que copiamos do painel da Nexmo
- text: Mensagem que será enviada no SMS
No retorno da API, iremos receber um Json, onde o elemento "messages[0].status" ira indicar se teve sucesso ou falha.
Em caso de "Sucesso", será retornado o "status: 0":
{
"message-count": "1",
"messages": [
{
"to": "55479999999",
"message-id": "7a52fcbc-ed51-4717-93fd-9b4caba5378d",
"status": "0",
"remaining-balance": "100",
"message-price": "0.05110000",
"network": "72405"
}
]
}
Observe que também é retornado a "message-id", que podemos utilizar para monitorar a entrega da mensagem.
Em caso de "Falha", será retornado um status diferente de "0":
{
"message-count": "1",
"messages": [
{
"status": "2",
"error-text": "Missing to param"
}
]
}
Você pode consultar todos os erros possíveis através do guia abaixo:
Integrando com PHP
Agora que já sabemos com funciona, basta fazermos um Curl:
<?
$DadEnv = array();
$DadEnv["from"] = "Teste";
$DadEnv["to"] = "5547999999999";
$DadEnv["api_key"] = "XXXXXXXXXXXXXXX";
$DadEnv["api_secret"] = "XXXXXXXXXXXXXXX";
$DadEnv["text"] = "Teste";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://rest.nexmo.com/sms/json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($DadEnv));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"accept: application/json",
"content-type: application/json"
));
$response = curl_exec($ch);
$response2 = json_decode($response, true);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
curl_close($ch);
if( $response2["messages"][0]["status"] == 0 )
{
echo "Enviado com Sucesso!";
}else{
echo "ERRO >> " . $response2["messages"][0]["error-text"];
}
?>
WebHook
Sim, a Nexmo possui um Webhook.
Ao enviar um SMS, informe a url de seu webhook em "callback", seguindo o exemplo abaixo:
{
"from": "SeuSite",
"to": "55479999999",
"api_key": "[ApiKey]",
"api_secret": "[ApiSecret]",
"text": "Teste",
"callback": "https://webhook.site/80f916f2-f7f8-4772-8876-112e5fd4bdae"
}
Quando a mensagem mudar de status, a Nexmo ira fazer uma GET para a Url informada, adicionando vários dados na QueryString.
As informações que precisam nos atentar são:
- messageId: ID da Mensagem
- status: Status da mensagem
Caso a mensagem tenha sido entregue, será retornado o status "delivered".
Você pode consultar todos os status possíveis no link abaixo:
Por hoje é só, meus unicórnios! 🦄✨
Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟