Como preencher previamente o texto do corpo do SMS por meio de um link html

113

Como usar um link html para abrir o aplicativo sms com um corpo pré-preenchido?

Tudo o que li parece indicar que sms: 18005555555? Body = bodyTextHere

Deve funcionar, mas no iPhone, isso não funciona. Se eu tirar o? Body = bodyTextHere e apenas usar sms: phonenumber, funciona.

Já vi vários casos em que os códigos QR fazem isso por meio de um link de safári. Como eles conseguem preencher previamente o corpo do texto?

Merlincam
fonte
Eu me pergunto se esses scanners QR estão abrindo o aplicativo SMS diretamente ...
merlincam
Não acho que seja possível. Veja estes: stackoverflow.com/questions/10848/… stackoverflow.com/questions/1517169/…
Jason Gennaro
isso ainda é verdade? Nenhum método?
tyler
Isso é 100% possível. Veja minha resposta abaixo para informações.
Brad Orego,

Respostas:

178

Acontece que isso é 100% possível, embora um pouco hacky.

Se você deseja que funcione no Android, você precisa usar este formato:

<a href="sms:/* phone number here */?body=/* body text here */">Link</a>

Se quiser que funcione no iOS, você precisa disso:

<a href="sms:/* phone number here */;body=/* body text here */">Link</a>

Demonstração ao vivo aqui: http://bradorego.com/test/sms.html (observe que "Telefone e? Corpo" e "Telefone e; corpo" devem preencher automaticamente o campo to: e o texto do corpo. Veja a fonte para mais info)

ATUALIZAR:

Aparentemente, o iOS8 teve que mudar algumas coisas por nossa conta, então, graças a alguns dos outros comentaristas / respondentes, há um novo estilo para o iOS:

<a href="sms:/* phone number here */&body=/* body text here */">Link</a>

(o número de telefone é opcional)

Brad Orego
fonte
5
Observação: não testei isso nas versões mais recentes do sistema operacional (iOS7 / iPhone 5S / 5C e Android 4.4). Existem alguns relatos de que eles podem não estar mais funcionando, especialmente com a mudança do Android para o uso do Hangouts em vez de um aplicativo de SMS nativo. Vou averiguar quando tiver oportunidade.
Brad Orego
3
Dei uma olhada agora porque às vezes funcionava e às vezes não, o que parecia estranho. Minhas descobertas: Se você discar um número para o qual tenha enviado pelo menos um SMS antes, o link funciona bem com "corpo". Se for um número totalmente novo, você está sem sorte e só obtém o número :(
MMachinegun
7
Big nota: o aplicativo que manipula o smsURI podem ser alteradas no Android e muitos fabricantes de fazer isso; portanto, embora possa funcionar em um dispositivo / aplicativo específico, pode não funcionar em outro (ou simplesmente após uma atualização). Minha sugestão é nunca usar isso no Android, a menos que você esteja apenas configurando o número do telefone; use-o apenas em versões do iOS e plataformas não Android que você testou.
fregante
1
@OrangeDog veja minha resposta para iOS 7 stackoverflow.com/questions/6480462/…
paaacman
1
nenhum dos links parece funcionar com o corpo no iOS 11.1
Toskan
49

Eu sei que este é um tópico antigo, mas tropecei nele e descobri que algumas partes não são mais relevantes.

Descobri que se você deseja apenas preencher o texto por preenchimento sem adicionar um número de telefone, você pode fazer o seguinte:

sms:?&body=/* message body here */
Todos
fonte
1
Essa é a resposta que estou procurando. Obrigado pela ajuda!
Konrad G
1
funciona muito bem, mas quando feito no OSX, ele abre uma mensagem de texto para:, ?alguma ideia de como fazê-lo aparecer em branco? Eu tentei sms:?bodye sms:;?body, a primeira tentativa de enviar para? e o segundo tenta enviar para;
Joshua Ohana
@JoshuaOhana O que acontece se você tentar "sms:? 0123456789 & body = My Message"? Desculpe, não tenho acesso a nenhum dispositivo Apple disponível.
Ali
Não funciona para dispositivos Android. Apenas um? Corpo = faz o truque.
Doodlemeat
40

Para iOS 8, tente isto:

<a href="sms:/* phone number here */&body=/* body text here */">Link</a>

Alternando o ";" com um "&" funcionou para mim.

Landen
fonte
3
fwiw Acabei de testar isso no iOS 10 e ainda funciona :).
Rob Dawson
@landen Isso funciona perfeitamente bem se o aplicativo SMS já estiver aberto em segundo plano. Se não foi, estou apenas abrindo o aplicativo no meu telefone, sem número de telefone ou corpo de mensagem. Alguma ideia?
DMEM de
31

Apenas coloque todos os símbolos nesta ordem (eu só testei nesta ordem, pois faz mais sentido em termos de código para mim).

Aviso para a ligação corpo ... Eu só colocar ... ;?&body=. Além disso, observe que descobri que preciso usar %20para todos os espaços.

Eu testei no meu iphone (v. 9.2) e em outro android e funciona bem.

Isso resolverá o problema de hackear para diferentes dispositivos. Não tenho artefatos quando testei no SMS.

<a href="sms:19131234567;?&body=Question%20from%20mywebsite.com.%20%20MY%20MESSAGE%20-%20" title="Click here to TEXT US gallery token needs updating!">Send me SMS</a>
Nathan Sharfi
fonte
Apenas removendo o número e deixando o ponto-e-vírgula (sms:;? & Body = Questi ..) funcionou no messenger nativo android 7, quando eu não queria que o número fosse pré-populado
ibex
17-11-2017: Tentei no Aquaris BQ, Nexus, iPhone 7 e LPhone e funcionou perfeitamente. Tentei com vários navegadores (Chrome, Firefox, Opera, nativo). Muito obrigado!
Urosh T.
No Android, depende de qual aplicativo SMS está sendo usado. Por exemplo, no Android 9 com o aplicativo QKSMS, ele tenta enviar uma mensagem para;? e o corpo não está incluído. (QKSMS não é o aplicativo padrão, mas pode estar em uso por pessoas que não querem que o SMS se torne um MMS depois de atingir um determinado tamanho.) Infelizmente, não há como a página HTML determinar qual aplicativo SMS irá estar em uso. Por esse motivo, irei omitir os links de SMS se detectar o Android.
Silas S. Brown de
15

Não há necessidade de duas tags âncora separadas para Android e iOS. Isso deve ajudar.

// Sem número de contato
<a href="sms:?&body=message">Text Message</a>

// Com número de contato
<a href="sms:1234567890;?&body=message">Text Message</a>

// Funciona em Android e iOS

aayushdrolia
fonte
1
Obrigado por isso, funciona muito bem no iOS e Android! Cuidado com a Without Contact Numberversão para MacOS - define o SMS topara?
Ollie Khakwani
10

Encontramos um método proposto e testamos:

<a href="sms:12345678?body=Hello my friend">Send SMS</a>

Aqui estão os resultados:

  • iPhone4 - falha (corpo vazio da mensagem);
  • Nokia N8 - ok (corpo da mensagem - "Olá meu amigo", Para "12345678");
  • HTC Mozart - falha (mensagem "página não suportada" (após clicar no link "Enviar sms"));
  • HTC Desire - falha (mensagem "Destinatários inválidos:
    <12345678? Body = Hellomyfriend>" (após clicar no link "Enviar sms")).

Portanto, concluo que realmente não funciona - com este método, pelo menos.

Ben
fonte
Para iPhone4, veja minha resposta abaixo stackoverflow.com/questions/6480462/…
paaacman
8

Android e iOS apenas:

<a href="sms://;?&body=Hello%20World">Only body</a>

Android e iOS um destinatário apenas com corpo:

<a href="sms://+15552345678;?&body=Hello%20World">one recipient only with body</a>

Apenas vários destinatários Android com corpo:

<a href="sms://+15552345678, +15552345679;?&body=Hello%20World">Android multiple recipients with body</a>

Somente destinatários múltiplos iOS com corpo:

<a href="sms://open?addresses=+15552345678,+15552345679;?&body=Hello%20World">iOS multiple recipients with body</a>

Observe que o corpo deve ser codificado por URI.

MahMoos
fonte
5

Para fazer com que os links sms: e mailto: funcionem no iPhone e no Android, sem nenhum javascript, tente o seguinte:

<a href="sms:321-555-1111?&body=This is what I want to sent">click to text</a>


<a href="mailto:[email protected]?&subject=My subject&body=This is what I want to sent">click to email</a>

Eu testei no Chrome para Android e iPhone e Safari no iPhone.
Todos eles funcionaram conforme o esperado. Eles trabalharam sem o número de telefone ou endereço de e-mail também.

Debbie V
fonte
4

A solução de Bradorego é o que funcionou para mim, mas aqui está uma resposta mais ampla.

Uma pequena consideração é que você precisa codificar o corpo usando em %20vez de +. Para PHP, isso significa usar em rawurlencode($body)vez de urlencode($body). Caso contrário, você verá sinais de mais na mensagem nas versões antigas do iOS, em vez de espaços.

Aqui está uma função jQuery que irá reajustar seus links SMS para dispositivos iOS. Android / outros dispositivos devem funcionar normalmente e não executarão o código.

HTML:

<a href="sms:+15551231234?body=Hello%20World">SMS "Hello World" to 555-123-1234</a>

jQuery:

(function() {
  if ( !navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ) return;

  jQuery('a[href^="sms:"]').attr('href', function() {
    // Convert: sms:+000?body=example
    // To iOS:  sms:+000;body=example (semicolon, not question mark)
    return jQuery(this).attr('href').replace(/sms:(\+?([0-9]*))?\?/, 'sms:$1;');
  });
})();

Considere usar uma classe como em a.sms-linkvez de, a[href^="sms:"]se possível.

Radley Sustaire
fonte
4
<a href="###" data-telno="13800000000" data-smscontent="hello" class="XXXXX XXXXXX XXXXXX sendsms"/>

$('.sendsms').on('click', function(){
    var p = $(this).data('telno'),
        c = $(this).data('smscontent'),
        t = ';';

    if (!ios) { // add your own iOS check
        t = '?';
    }
    location.href = 'sms:'+ p + t + c;
})
hkongm
fonte
Funciona na maioria do Android e IOS 5 e 6. Não funciona no IOS 7.
David C
3

O iPhone não aceita mensagens de texto, apenas aceita o número do telefone. Você pode ver isso aqui https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1

AZ
fonte
1
esta página não está mais acessível
Kirk Hammett
1
Isso não é mais verdade com o iOS8. Você pode enviar <a href="sms:[phone number]&body=body text"> Link </a> - o "e" comercial precede o corpo =. Sintaticamente confuso, sim, mas está funcionando para mim e o corpo é preenchido com a mensagem desejada.
Greg Johnson
1
Confirmado que o iOS 10.2 não oferece suporte a uma parte do "corpo" conforme descrito no link acima.
Nicodemuz
Parece não ser mais verdade de acordo com stackoverflow.com/questions/39529099/…
morels
3

Para usar o Android, você usa o código abaixo

<a href="sms:+32665?body=reg fb1>Send SMS</a>

Para iOS você pode usar o código abaixo

<a href="sms:+32665&body=reg fb1>Send SMS</a>

abaixo o código que funciona para iOS e Android

<a href="sms:+32665?&body=reg fb1>Send SMS</a>
Pankaj Chauhan
fonte
2
<a href="sms:/* phone number here */&body=/* body text here */">Link</a>

Isso funciona no meu iPhone 5S!

Kim
fonte
2

Suspeito que, na maioria dos aplicativos, você não saberá para quem enviar a mensagem de texto, portanto, deseja apenas preencher o corpo do texto, não o número. Isso funciona como você esperava, apenas omitindo o número - eis a aparência dos URLs nesse caso:

sms:?body=message

Para iOS mesma coisa, exceto com o;

sms:;body=message

Aqui está um exemplo do código que uso para configurar o SMS:

var ua = navigator.userAgent.toLowerCase();
var url;

if (ua.indexOf("iphone") > -1 || ua.indexOf("ipad") > -1)
   url = "sms:;body=" + encodeURIComponent("I'm at " + mapUrl + " @ " + pos.Address);
else
   url = "sms:?body=" + encodeURIComponent("I'm at " + mapUrl + " @ " + pos.Address);

   location.href = url;
Lemon Kazi
fonte
2

Bem, você não só precisa se preocupar com iOS e Android, mas também com qual aplicativo de mensagens para Android. O aplicativo de mensagens do Google para o Note 9 e algumas novas galáxias não abrem com texto, mas o aplicativo Samsung funciona. A solução parece ser adicionar // após o sms:

então sms: // 15551235555

<a href="sms:/* phone number here */?body=/* body text here */">Link</a>

deveria estar

<a href="sms://15551235555?body=Hello">Link</a>
Dan Parker
fonte
Você sabe se isso funciona para todos os Android ou apenas algumas versões? Esta é a versão que funcionou no meu Pixel 2, android 9
JCisar de
Não tive problemas com isso em andróides mais antigos que também testei.
Dan Parker
2
Além disso, não parece funcionar quando você não fornece um número de telefone (eu sei que não faz parte da pergunta original, mas pode ser útil saber)
JCisar
1

(Apenas um pouco de tópico), mas talvez se você pesquisar você pode tropeçar aqui ... No markdown (testado com parsedown e no iOS / android) você poderia fazer:

   [Link](sms:phone_number,?&body=URL_encoded_body_text)
   //[send sms](sms:1234567890;?&body=my%20very%20interesting%20text)
user6200044
fonte
0

Descobri que, no iPhone 4 com IOS 7 , você PODE colocar um corpo no SMS somente se definir um número de telefone na lista de contatos do telefone.

Portanto, o seguinte funcionará se 0606060606 fizer parte dos meus contatos:

<a href="sms:0606060606;body=Hello my friend">Send SMS</a>

Já agora, no iOS 6 (iPhone 3GS), funciona apenas com um corpo:

<a href="sms:;body=Hello my friend">Send SMS</a>
paaacman
fonte
0

Cada versão do sistema operacional tem uma maneira diferente de fazer isso. Dê uma olhada na biblioteca de sms-link

Ghigo
fonte
-1

Um dos problemas com um link click-to-text é resolver o cenário da área de trabalho onde não existe um aplicativo de texto nativo. Uma solução é usar o criador do botão Click-to-Text da Zipwhip.

  • Na área de trabalho, eles enviam uma mensagem de texto real real nos bastidores a partir da entrada do usuário.
  • No iOS ou Android, você obtém a funcionalidade nativa de mensagens de texto.

https://www.zipwhip.com/create-sms-button/

John Lauer
fonte
Não é possível criar botão sem número de telefone.
Michal
-3

Atualmente, nem Android nem iPhones oferecem suporte ao elemento de cópia do corpo em um hiperlink Toque para SMS. No entanto, isso pode ser feito programaticamente,

MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;

picker.recipients = [NSArray arrayWithObject:@"48151623"];  
picker.body = @"Body text.";

[self presentModalViewController:picker animated:YES];
[picker release];
Iñigo Beitia
fonte
Esse é o objetivo C? Como você chama isso de JavaScript ou usa em HTML? Parece impossível?
sparkyspider
Isso pode ser desmarcado como aceito? Isso não responde de forma alguma à pergunta. Na verdade, postei algo que funciona e responde à pergunta.
Brad Orego