Come precompilare il corpo del testo dell'SMS tramite un collegamento html


113

Come utilizzare un collegamento html per aprire l'app per sms con un corpo pre-riempito?

Tutto quello che ho letto sembra indicare che sms: 18005555555? Body = bodyTextHere

Dovrebbe funzionare, ma su iPhone non funziona. Se tolgo? Body = bodyTextHere e uso solo sms: phonenumber, funziona.

Ho visto diversi casi in cui i codici QR lo fanno tramite un collegamento safari. Come riescono a prepopolare il corpo del testo?


Mi chiedo se questi scanner QR stiano invece aprendo direttamente l'app SMS ...
merlincam


questo è ancora vero? Nessun metodo?
tyler

Questo è possibile al 100%. Vedi la mia risposta qui sotto per informazioni.
Brad Orego

Risposte:


178

Si scopre che questo è possibile al 100%, anche se un po 'complicato.

Se vuoi che funzioni su Android devi utilizzare questo formato:

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

Se vuoi che funzioni su iOS, hai bisogno di questo:

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

La demo live qui: http://bradorego.com/test/sms.html (nota che "Phone and? Body" e "Phone and; body" dovrebbero riempire automaticamente sia il campo a: che il corpo del testo. Visualizza la fonte per ulteriori informazioni Informazioni)

AGGIORNARE:

Apparentemente iOS8 ha dovuto cambiare le cose su di noi, quindi grazie ad alcuni degli altri commentatori / soccorritori, c'è un nuovo stile per iOS:

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

(il numero di telefono è facoltativo)


5
Nota: non li ho testati sulle ultime versioni del sistema operativo (iOS7 / iPhone 5S / 5C e Android 4.4). Ci sono alcuni rapporti che potrebbero non funzionare più, specialmente con il passaggio di Android all'utilizzo di Hangouts invece di un'app SMS nativa. Lo esaminerò quando ne avrò la possibilità.
Brad Orego

3
Ho dato un'occhiata ora perché a volte funzionava ea volte no, il che sembrava strano. I miei risultati: se componi un numero a cui hai già inviato almeno un SMS, il collegamento funziona correttamente con "body". Se si tratta di un numero completamente nuovo, sei sfortunato e ottieni solo il numero :(
MMachinegun

7
Big nota: l'applicazione che gestisce smsl'URI può essere modificata su Android e molti produttori fanno; pertanto, sebbene possa funzionare su un dispositivo / app specifico, potrebbe non funzionare su un altro (o semplicemente dopo un aggiornamento). Il mio suggerimento è di non usarlo mai su Android a meno che tu non stia solo impostando il numero di telefono; usalo solo su versioni iOS e piattaforme non Android che hai testato.
fregante

1
@OrangeDog vedi la mia risposta per iOS 7 stackoverflow.com/questions/6480462/...
paaacman

1
nessuno dei collegamenti sembra funzionare con il corpo in iOS 11.1
Toskan

49

So che questo è un vecchio thread, ma ci siamo imbattuti in esso e ho scoperto che alcune parti non sono più rilevanti.

Ho scoperto che se vuoi solo compilare il testo senza aggiungere un numero di telefono, puoi fare quanto segue:

sms:?&body=/* message body here */

1
Questa è la risposta che stavo cercando. Grazie per l'aiuto!
Konrad G

1
funziona benissimo ma quando viene fatto da OSX apre un messaggio di testo A ?:, qualche idea su come farlo apparire vuoto? Ho provato sms:?bodye sms:;?body, i primi tentativi di inviare a? e il secondo cerca di inviare a;
Joshua Ohana

@JoshuaOhana Cosa succede se provi "sms:? 0123456789 & body = Il mio messaggio"? Spiacenti, non hai accesso a nessun dispositivo Apple a portata di mano.
Ali

Non funziona per i dispositivi Android. Solo un? Body = fa il trucco.
Doodlemeat

40

Per iOS 8, prova questo:

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

Commutazione del ";" con una "&" ha funzionato per me.


3
fwiw L'ho appena testato su iOS 10 e funziona ancora :).
Rob Dawson

@landen Funziona perfettamente se l'app SMS era già aperta in background. In caso contrario, sto solo facendo in modo che l'app venga aperta sul mio telefono, senza numero di telefono o corpo del messaggio. Qualche idea?
DMEM

31

Metti semplicemente tutti i simboli in questo ordine (l'ho testato solo in questo ordine poiché per me ha più senso dal punto di vista del codice).

Avviso per il collegamento del corpo ... ho appena messo ... ;?&body=. Inoltre, nota che ho trovato che dovevo usare %20per qualsiasi spazio.

L'ho testato sul mio iPhone (v. 9.2) e un altro Android e funziona perfettamente.

Questo risolverà il problema con la necessità di hackerarlo per diversi dispositivi. Non ho artefatti quando l'ho testato nell'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>

Rimuovendo il numero e lasciando il punto e virgola (sms:;? & Body = Questi ..) funzionava su Android 7 native messenger, quando non volevo che il numero fosse precompilato
ibex

17/11/2017: provato su Aquaris BQ, Nexus, iPhone 7 e LPhone e funziona a meraviglia. Provato con vari browser (Chrome, Firefox, Opera, nativo). Molte grazie!
Urosh T.

Su Android dipende dall'app SMS utilizzata. Ad esempio, su Android 9 con l'app QKSMS, questo tenta di inviare un messaggio a;? e il corpo non è incluso. (QKSMS non è l'app predefinita, ma potrebbe essere utilizzata da persone che non desiderano che l'SMS diventi un MMS dopo aver raggiunto una certa dimensione.) Sfortunatamente non c'è modo per la pagina HTML di determinare quale app SMS sarà essere in uso. Per questo motivo ometterò i collegamenti SMS se rilevo Android.
Silas S. Brown

15

Non sono necessari due anchor tag separati per Android e iOS. Questo dovrebbe aiutare.

// Senza numero di contatto
<a href="sms:?&body=message">Text Message</a>

// Con numero di contatto
<a href="sms:1234567890;?&body=message">Text Message</a>

// Funziona su Android e iOS


1
Grazie per questo, funziona alla grande su iOS e Android! Attenzione per la Without Contact Numberversione su MacOS - imposta l'SMS tosu?
Ollie Khakwani

10

Abbiamo trovato un metodo proposto e testato:

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

Ecco i risultati:

  • iPhone4 - errore (corpo del messaggio vuoto);
  • Nokia N8 - ok (corpo del messaggio - "Hello my friend", To "12345678");
  • HTC Mozart - guasto (messaggio "pagina non supportata" (dopo aver cliccato sul collegamento "Invia sms"));
  • HTC Desire - errore (messaggio "Destinatari non validi:
    <12345678? Body = Hellomyfriend>" (dopo aver cliccato sul collegamento "Invia sms")).

Concludo quindi che non funziona davvero, almeno con questo metodo.


Per iPhone4, vedi la mia risposta muggito stackoverflow.com/questions/6480462/...
paaacman

7

Solo corpo Android e iOS :

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

Android e iOS un solo destinatario con corpo:

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

Solo destinatari multipli Android con corpo:

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

Solo iOS più destinatari con corpo:

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

Tieni presente che il corpo deve essere codificato in URI.


5

Per ottenere link sms: e mailto: per funzionare sia su iPhone che su Android, senza alcun javascript, prova questo:

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


<a href="mailto:someone@sample.com?&subject=My subject&body=This is what I want to sent">click to email</a>

L'ho testato su Chrome per Android e iPhone e Safari su iPhone.
Hanno funzionato tutti come previsto. Funzionavano anche senza il numero di telefono o l'indirizzo e-mail.


4

La soluzione di Bradorego è ciò che ha funzionato per me, ma ecco una risposta più ampia.

Una piccola considerazione è che devi codificare il corpo usando %20invece di +. Per PHP, questo significa usare rawurlencode($body)invece diurlencode($body) . Altrimenti vedrai i segni più nel messaggio sulle vecchie versioni di iOS, invece degli spazi.

Ecco una funzione jQuery che ripristinerà i tuoi collegamenti SMS per i dispositivi iOS. Android / altri dispositivi dovrebbero funzionare normalmente e non eseguiranno il codice.

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;');
  });
})();

Considera l'idea di utilizzare una classe come a.sms-linkinvece di, a[href^="sms:"]se possibile.


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;
})

Funziona sulla maggior parte degli Android e IOS 5 e 6. Non funziona su IOS 7.
David C

3

L'iPhone non accetta alcun messaggio di testo, prenderà solo il numero di telefono. Puoi vederlo qui https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1


1
questa pagina non è più accessibile
Kirk Hammett

1
Non è più vero con iOS8. Puoi inviare <a href="sms:[phone number”&body=body text"> Link </a> - la e commerciale precede il corpo =. Sintatticamente confuso, sì, ma funziona per me e il corpo si popola con il messaggio desiderato.
Greg Johnson

1
Confermato che iOS 10.2 non supporta una parte "corpo" come descritto nel collegamento sopra.
Nicodemuz

Non sembra più vero secondo stackoverflow.com/questions/39529099/…
morels

3

Per usare Android usi il codice sottostante

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

Per iOS puoi usare il codice sottostante

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

sotto il codice che funziona sia per iOs che per Android

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

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

Funziona sul mio iPhone 5S!


2

Sospetto che nella maggior parte delle applicazioni non saprai a chi inviare il messaggio, quindi vuoi solo riempire il corpo del testo, non il numero. Funziona come ti aspetteresti semplicemente tralasciando il numero: ecco come appaiono gli URL in quel caso:

sms:?body=message

Per iOS la stessa cosa tranne che con;

sms:;body=message

Ecco un esempio del codice che utilizzo per impostare l'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;

2

Beh, non solo devi preoccuparti di iOS e Android, c'è anche quale app di messaggistica Android. L'app di messaggistica di Google per Note 9 e alcune nuove galassie non si aprono con il testo, ma l'app Samsung funziona. La soluzione sembra essere aggiunta // dopo l'SMS:

quindi sms: // 15551235555

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

dovrebbe essere

<a href="sms://15551235555?body=Hello">Link</a>

Sai se funziona per tutti gli Android o solo per alcune versioni? Questa è la versione che ha funzionato per il mio Pixel 2, Android 9
JCisar

Non ho avuto problemi con questo anche sui vecchi androidi che ho testato.
Dan Parker

2
Inoltre, non sembra funzionare quando non fornisci un numero di telefono (so che non fa parte della domanda originale ma potrebbe essere utile saperlo)
JCisar

1

(Solo un po 'di topic), ma forse se cercassi potresti inciampare qui ... In markdown (testato con parsedown e su iOS / android) potresti fare:

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

0

L'ho scoperto, su iPhone 4 con IOS 7 , PUOI mettere un corpo all'SMS solo se imposti un numero di telefono nella lista dei contatti del telefono.

Quindi funzionerà quanto segue se 0606060606 fa parte dei miei contatti:

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

A proposito, su iOS 6 (iPhone 3GS), funziona solo con un corpo:

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


-1

Uno dei problemi con un collegamento click-to-text è risolvere lo scenario desktop in cui non esiste un'app di testo nativa. Una soluzione è utilizzare il creatore di pulsanti Click-to-Text di Zipwhip.

  • Sul desktop, ti inviano un vero messaggio di testo dietro le quinte dall'input dell'utente.
  • Su iOS o Android ottieni invece la funzionalità di testo nativa.

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


Impossibile creare un pulsante senza numero di telefono.
Michal

-3

Né Android né iPhone supportano attualmente l'elemento body copy in un collegamento ipertestuale Tocca per SMS. Può essere fatto programmaticamente, però,

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

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

[self presentModalViewController:picker animated:YES];
[picker release];

Quello è l'obiettivo C? Come lo chiami da JavaScript o lo usi in HTML? Sembra impossibile?
Sparkyspider

Può essere deselezionato come accettato? Questo non risponde affatto alla domanda. In realtà ho pubblicato qualcosa che funziona e risponde alla domanda.
Brad Orego
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.