Cómo rellenar previamente el texto del cuerpo de SMS a través de un enlace html

113

¿Cómo usar un enlace html para abrir la aplicación sms con un cuerpo precargado?

Todo lo que he leído parece indicar que sms: 18005555555? Body = bodyTextHere

Debería funcionar, pero en el iPhone, esto no funciona. Si saco el? Body = bodyTextHere, y solo uso sms: phonenumber, funciona.

He visto varios casos en los que los códigos QR hacen esto a través de un enlace de safari. ¿Cómo pueden rellenar previamente el cuerpo del texto?

merlincam
fuente
Me pregunto si estos escáneres QR abren la aplicación de SMS directamente en su lugar ...
merlincam
No creo que sea posible. Vea estos: stackoverflow.com/questions/10848/… stackoverflow.com/questions/1517169/…
Jason Gennaro
¿Esto sigue siendo cierto? ¿Sin método?
Tyler
Esto es 100% posible. Vea mi respuesta a continuación para obtener información.
Brad Orego

Respuestas:

178

Resulta que esto es 100% posible, aunque un poco hacky.

Si desea que funcione en Android, debe usar este formato:

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

Si quieres que funcione en iOS, necesitas esto:

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

Demostración en vivo aquí: http://bradorego.com/test/sms.html (tenga en cuenta que "Teléfono y? Cuerpo" y "Teléfono y; cuerpo" deben autocompletar tanto el campo to: como el texto del cuerpo. Vea la fuente para obtener más información info)

ACTUALIZAR:

Aparentemente, iOS8 tuvo que cambiarnos las cosas, así que gracias a algunos de los otros comentaristas / respondedores, hay un nuevo estilo para iOS:

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

(el número de teléfono es opcional)

Brad Orego
fuente
5
Nota: No los he probado en las últimas versiones del sistema operativo (iOS7 / iPhone 5S / 5C y Android 4.4). Hay algunos informes de que es posible que ya no funcionen, especialmente con el cambio de Android para usar Hangouts en lugar de una aplicación de SMS nativa. Lo investigaré cuando tenga la oportunidad.
Brad Orego
3
Eché un vistazo ahora porque a veces funcionaba y otras no, lo que parecía extraño. Mis hallazgos: si marca un número, al menos ha enviado un SMS antes, el enlace funciona bien con "cuerpo". Si es un número completamente nuevo, no tiene suerte y solo obtiene el número :(
MMachinegun
7
Grandes nota: la aplicación que se encarga de la smsURI se puede cambiar en Android y muchos fabricantes hacen esto; por lo tanto, si bien puede funcionar en un dispositivo / aplicación específico, es posible que no funcione en otro (o simplemente después de una actualización). Mi sugerencia es que nunca use esto en Android a menos que solo esté configurando el número de teléfono; Úselo solo en versiones de iOS y plataformas que no sean de Android que haya probado.
Fregante
1
@OrangeDog vea mi respuesta para iOS 7 stackoverflow.com/questions/6480462/…
paaacman
1
ninguno de los enlaces parece funcionar con body en iOS 11.1
Toskan
49

Sé que este es un hilo antiguo, pero me topé con él y descubrí que algunas partes ya no son relevantes.

Descubrí que si solo desea completar el texto sin agregar un número de teléfono, puede hacer lo siguiente:

sms:?&body=/* message body here */
Ali
fuente
1
Esa es la respuesta que he estado buscando. ¡Gracias por la ayuda!
Konrad G
1
funciona muy bien, pero cuando se hace desde OSX abre un mensaje de texto Para:, ¿ ?alguna idea de cómo hacer que aparezca en blanco? Lo intenté sms:?bodyy sms:;?body, ¿el primero intenta enviar a? y el segundo intenta enviar a;
Joshua Ohana
@JoshuaOhana ¿Qué sucede si intentas "sms:? 0123456789 & body = My Message"? Lo siento, no tengo acceso a ningún dispositivo Apple disponible.
Ali
No funciona para dispositivos Android. Solo un? Cuerpo = hace el truco.
Doodlemeat
40

Para iOS 8, intente esto:

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

Cambiar el ";" con un "&" funcionó para mí.

landen
fuente
3
fwiw Acabo de probar esto en iOS 10 y todavía funciona :).
Rob Dawson
@landen Esto funciona perfectamente bien si la aplicación de SMS ya estaba abierta en segundo plano. Si no lo fue, solo estoy abriendo la aplicación en mi teléfono, sin número de teléfono ni cuerpo del mensaje. ¿Algunas ideas?
DMEM
31

Simplemente coloque todos los símbolos en este orden (solo lo probé en este orden, ya que tiene más sentido en cuanto al código para mí).

Aviso para el enlace cuerpo ... sólo hay que poner ... ;?&body=. Además, tenga en cuenta que he descubierto que necesitaba usarlo %20para cualquier espacio.

Lo probé en mi iPhone (v. 9.2) y en otro Android y funciona bien.

Esto resolverá el problema de tener que piratearlo para diferentes dispositivos. No tengo artefactos cuando lo probé en el 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
fuente
Simplemente quitando el número y dejando el punto y coma (sms:;? & Body = Questi ..) funcionó en el mensajero nativo de Android 7, cuando no quería que el número se completara previamente
ibex
2017-11-17: Probé en Aquaris BQ, Nexus, iPhone 7 y LPhone y esto funciona como un encanto. Probado con varios navegadores (Chrome, Firefox, Opera, nativo). ¡Muchas gracias!
Urosh T.
En Android, depende de la aplicación de SMS que se esté utilizando. Por ejemplo, en Android 9 con la aplicación QKSMS, esto intenta enviar un mensaje a;? y el cuerpo no está incluido. (QKSMS no es la aplicación predeterminada, pero puede estar en uso por personas que no quieren que el SMS se convierta en un MMS después de que alcance un cierto tamaño). Desafortunadamente, no hay forma de que la página HTML determine qué aplicación de SMS estar en uso. Por eso voy a omitir los enlaces SMS si detecto Android.
Silas S. Brown
15

No se necesitan dos etiquetas de anclaje independientes para Android e iOS. Esto debería ayudar.

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

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

// Funciona tanto en Android como en iOS

Ayushdrolia
fuente
1
Gracias por esto, ¡funciona muy bien en iOS y Android! Tenga cuidado con la Without Contact Numberversión en MacOS: establece el SMS toen?
Ollie Khakwani
10

Encontramos un método propuesto y lo probamos:

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

Aquí están los resultados:

  • iPhone4 - falla (cuerpo vacío del mensaje);
  • Nokia N8 - ok (cuerpo del mensaje - "Hola amigo", a "12345678");
  • HTC Mozart - error (mensaje "página no compatible" (después de hacer clic en el enlace "Enviar sms"));
  • HTC Desire - error (mensaje "Destinatarios no válidos:
    <12345678? Body = Hellomyfriend>" (después de hacer clic en el enlace "Enviar sms")).

Por lo tanto, concluyo que realmente no funciona, al menos con este método.

Ben
fuente
Para iPhone4, vea mi respuesta a continuación stackoverflow.com/questions/6480462/…
paaacman
8

Solo cuerpo de Android e iOS :

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

Android e iOS un solo destinatario con cuerpo:

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

Solo varios destinatarios de Android con cuerpo:

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

Solo destinatarios múltiples de iOS con cuerpo:

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

Tenga en cuenta que el cuerpo debe estar codificado en URI.

MahMoos
fuente
5

Para obtener enlaces sms: y mailto: para que funcionen tanto en iPhone como en Android, sin ningún javascript, intente esto:

<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>

Lo probé en Chrome para Android y iPhone, y Safari en iPhone.
Todos funcionaron como se esperaba. También trabajaron sin el número de teléfono o la dirección de correo electrónico.

Debbie V
fuente
4

La solución de Bradorego es lo que funcionó para mí, pero aquí hay una respuesta más amplia.

Una pequeña consideración es que necesita codificar el cuerpo usando en %20lugar de +. Para PHP, esto significa usar en rawurlencode($body)lugar deurlencode($body) . De lo contrario, verá signos más en el mensaje en versiones anteriores de iOS, en lugar de espacios.

Aquí hay una función jQuery que reajustará sus enlaces SMS para dispositivos iOS. Android / otros dispositivos deberían funcionar normalmente y no ejecutarán el 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 una clase como en a.sms-linklugar de a[href^="sms:"]si es posible.

Radley Sustaire
fuente
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
fuente
Funciona en la mayoría de Android, IOS 5 y 6. No funciona en IOS 7.
David C
3

El iPhone no acepta ningún mensaje de texto, solo aceptará el número de teléfono. Puede ver esto aquí https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1

Arizona
fuente
1
esta página ya no es accesible
Kirk Hammett
1
Eso ya no es cierto con iOS8. Puede enviar <a href="sms:[phone number]&body=body text"> Link </a>: el signo comercial precede al body =. Sintácticamente confuso, sí, pero funciona para mí y el cuerpo se llena con el mensaje deseado.
Greg Johnson
1
Confirmado que iOS 10.2 no admite una parte de "cuerpo" como se describe en el enlace anterior.
Nicodemuz
Parece que ya no es cierto según stackoverflow.com/questions/39529099/…
morels
3

Para usar Android, usa el siguiente código

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

Para iOS puede usar el siguiente código

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

el siguiente código funciona tanto para iOS como para Android

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

¡Esto funciona en mi iPhone 5S!

Kim
fuente
2

Sospecho que en la mayoría de las aplicaciones no sabrá a quién enviar un mensaje de texto, por lo que solo desea completar el cuerpo del texto, no el número. Eso funciona como era de esperar al omitir el número; así es como se ven las URL en ese caso:

sms:?body=message

Para iOS lo mismo excepto con;

sms:;body=message

Aquí hay un ejemplo del código que utilizo para configurar el 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;
Limón Kazi
fuente
2

Bueno, no solo tienes que preocuparte por iOS y Android, también está la aplicación de mensajería de Android. La aplicación de mensajería de Google para Note 9 y algunas galaxys nuevas no se abren con texto, pero la aplicación de Samsung funciona. La solución parece ser agregar // después del sms:

entonces sms: // 15551235555

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

debiera ser

<a href="sms://15551235555?body=Hello">Link</a>
Dan Parker
fuente
¿Sabes si esto funciona para todos los Android o solo para ciertas versiones? Esta es la versión que funcionó para mi Pixel 2, android 9
JCisar
No he tenido problemas con esto en los androides más antiguos que también he probado.
Dan Parker
2
Además, parece que no funciona cuando no proporciona un número de teléfono (sé que no es parte de la pregunta original, pero podría ser útil saberlo)
JCisar
1

(Solo un poco de tema), pero tal vez si buscaras, podrías tropezar aquí ... En markdown (probado con parsedown y en iOS / Android) podrías hacer:

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

Descubrí que, en iPhone 4 con IOS 7 , PUEDES poner un cuerpo al SMS solo si configuras un número de teléfono en la lista de contactos del teléfono.

Entonces, lo siguiente funcionará si 0606060606 es parte de mis contactos:

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

Por cierto, en iOS 6 (iPhone 3GS), funciona solo con un cuerpo:

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

Uno de los problemas con un enlace de clic a texto es resolver el escenario de escritorio donde no existe una aplicación nativa de mensajes de texto. Una solución es utilizar el creador de botones Click-to-Text de Zipwhip.

  • En el escritorio, le envían un mensaje de texto real detrás de escena de la entrada del usuario.
  • En iOS o Android, obtienes la funcionalidad nativa de mensajes de texto.

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

John Lauer
fuente
No se puede crear un botón sin un número de teléfono.
Michal
-3

Actualmente, ni Android ni iPhone admiten el elemento de copia del cuerpo en un hipervínculo Tap to SMS. Sin embargo, se puede hacer mediante programación,

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
fuente
¿Ese es el objetivo C? ¿Cómo se llama a eso desde JavaScript o cómo se usa en HTML? ¿Suena imposible?
Sparkyspider
¿Se puede desmarcar esto como aceptado? Esto no responde en absoluto a la pregunta. De hecho, publiqué algo que funciona y responde la pregunta.
Brad Orego