Comment pré-remplir le texte du corps du SMS via un lien html

113

Comment utiliser un lien html pour ouvrir l'application SMS avec un corps pré-rempli?

Tout ce que j'ai lu semble indiquer que sms: 18005555555? Body = bodyTextHere

Cela devrait fonctionner, mais sur l'iPhone, cela ne fonctionne pas. Si je retire le? Body = bodyTextHere, et que j'utilise simplement sms: phonenumber, cela fonctionne.

J'ai vu plusieurs cas où les codes QR le font via un lien safari. Comment peuvent-ils pré-remplir le corps du texte?

merlincam
la source
Je me demande si ces scanners QR ouvrent directement l'application SMS à la place ...
merlincam
Je ne pense pas que ce soit possible. Voir ceux-ci: stackoverflow.com/questions/10848/… stackoverflow.com/questions/1517169/…
Jason Gennaro
c'est toujours vrai? Pas de méthode?
tyler
C'est 100% possible. Voir ma réponse ci-dessous pour plus d'informations.
Brad Orego

Réponses:

179

Il s'avère que c'est possible à 100%, bien qu'un peu piraté.

Si vous voulez que cela fonctionne sur Android, vous devez utiliser ce format:

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

Si vous voulez que cela fonctionne sur iOS, vous en avez besoin:

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

Démo en direct ici: http://bradorego.com/test/sms.html (notez que "Téléphone et? Corps" et "Téléphone et; corps" doivent remplir automatiquement le champ to: et le corps du texte. Pour en savoir plus, consultez la source Info)

METTRE À JOUR:

Apparemment, iOS8 a dû changer les choses sur nous, donc grâce à certains des autres commentateurs / répondeurs, il y a un nouveau style pour iOS:

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

(le numéro de téléphone est facultatif)

Brad Orego
la source
5
Remarque: je ne les ai pas testés sur les dernières versions du système d'exploitation (iOS7 / iPhone 5S / 5C et Android 4.4). Certains rapports indiquent qu'ils pourraient ne plus fonctionner, en particulier avec le passage d'Android à l'utilisation de Hangouts au lieu d'une application SMS native. Je l'examinerai quand j'en aurai l'occasion.
Brad Orego
3
J'ai jeté un coup d'œil maintenant parce que cela fonctionnait parfois et parfois non, ce qui semblait bizarre. Mes conclusions: Si vous composez un numéro que vous avez déjà envoyé au moins un SMS, le lien fonctionne bien avec "corps". Si c'est un nouveau numéro complet, vous n'avez pas de chance et vous n'obtenez que le numéro :(
MMachinegun
7
Big Note: l'application qui gère l' smsURI peut être modifié sur Android et de nombreux fabricants font; Par conséquent, bien qu'il puisse fonctionner sur un appareil / une application spécifique, il peut ne pas fonctionner sur un autre (ou simplement après une mise à jour). Ma suggestion est de ne jamais l'utiliser sur Android à moins que vous ne définissiez uniquement le numéro de téléphone; utilisez-le uniquement sur les versions iOS et les plates-formes non Android que vous avez testées.
fregante
1
@OrangeDog voir ma réponse pour iOS 7 stackoverflow.com/questions/6480462/…
paaacman
1
aucun des liens ne semble fonctionner avec le corps dans iOS 11.1
Toskan
49

Je sais que c'est un vieux fil, mais je suis tombé dessus et j'ai constaté que certaines parties ne sont plus pertinentes.

J'ai constaté que si vous souhaitez simplement remplir le texte sans ajouter de numéro de téléphone, vous pouvez effectuer les opérations suivantes:

sms:?&body=/* message body here */
Ali
la source
1
C'est la réponse que je cherchais. Merci pour l'aide!
Konrad G le
1
fonctionne très bien, mais une fois fait à partir d'OSX, il ouvre un message texte À:, ?une idée de comment le faire apparaître vide? J'ai essayé sms:?bodyet sms:;?body, le premier essaie d'envoyer à? et le second essaie d'envoyer à;
Joshua Ohana
@JoshuaOhana Que se passe-t-il si vous essayez "sms:? 0123456789 & body = Mon message"? Désolé, je n'ai accès à aucun appareil Apple sous la main.
Ali
Ne fonctionne pas pour les appareils Android. Seul un? Body = fait l'affaire.
Doodlemeat
40

Pour iOS 8, essayez ceci:

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

Commutation du ";" avec un "&" a fonctionné pour moi.

Landen
la source
3
fwiw Je viens de tester cela sur iOS 10 et cela fonctionne toujours :).
Rob Dawson
@landen Cela fonctionne parfaitement bien si l'application SMS était déjà ouverte en arrière-plan. Si ce n'était pas le cas, je fais simplement ouvrir l'application sur mon téléphone, sans numéro de téléphone ni corps de message. Des idées?
DMEM
31

Mettez simplement tous les symboles dans cet ordre (je ne l'ai testé que dans cet ordre car cela me semble le plus logique du point de vue du code).

Avis pour le lien du corps ... je viens juste ... ;?&body=. Notez également que j'ai trouvé que je devais utiliser %20pour tous les espaces.

Je l'ai testé sur mon iPhone (v. 9.2) et un autre Android et cela fonctionne très bien.

Cela résoudra le problème de devoir le pirater pour différents appareils. Je n'ai aucun artefact lorsque je l'ai testé dans le 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
la source
Le simple fait de supprimer le numéro et de laisser le point-virgule (sms:;? & Body = Questi ..) fonctionnait sur Android 7 native Messenger, alors que je ne voulais pas que le numéro soit prérempli
ibex
17/11/2017: Essayé sur Aquaris BQ, Nexus, iPhone 7 et LPhone et cela fonctionne comme un charme. Essayé avec différents navigateurs (Chrome, Firefox, Opera, natif). Merci beaucoup!
Urosh T.17
Sur Android, cela dépend de l'application SMS utilisée. Par exemple, sur Android 9 avec l'application QKSMS, cela tente d'envoyer un message à;? et le corps n'est pas inclus. (QKSMS n'est pas l'application par défaut, mais il peut être utilisé par des personnes qui ne veulent pas que le SMS devienne un MMS après avoir atteint une certaine taille.) Malheureusement, il n'y a aucun moyen pour la page HTML de déterminer quelle application SMS sera être utilisé. Pour cette raison, je vais omettre les liens SMS si je détecte Android.
Silas S.Brown
15

Il n'est pas nécessaire de disposer de deux balises d'ancrage distinctes pour Android et iOS. Cela devrait aider.

// Sans numéro de contact
<a href="sms:?&body=message">Text Message</a>

// Avec numéro de contact
<a href="sms:1234567890;?&body=message">Text Message</a>

// Fonctionne sur Android et iOS

aayushdrolia
la source
1
Merci pour cela, fonctionne très bien sur iOS et Android! Méfiez-vous de la Without Contact Numberversion sur MacOS - il définit le SMS tosur?
Ollie Khakwani
10

Nous avons trouvé une méthode proposée et testé:

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

Voici les résultats:

  • iPhone4 - défaut (corps de message vide);
  • Nokia N8 - ok (corps du message - "Bonjour mon ami", à "12345678");
  • HTC Mozart - défaut (message "page non prise en charge" (après avoir cliqué sur le lien "Envoyer sms"));
  • HTC Desire - défaut (message "Destinataire (s) non valide (s):
    <12345678? Body = Hellomyfriend>" (après avoir cliqué sur le lien "Envoyer sms")).

Je conclus donc que cela ne fonctionne pas vraiment - du moins avec cette méthode.

Ben
la source
Pour iPhone4, voir ma réponse ci-dessous stackoverflow.com/questions/6480462/…
paaacman
8

Corps Android et iOS uniquement:

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

Android et iOS un seul destinataire avec corps:

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

Seulement plusieurs destinataires Android avec corps:

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

Seulement iOS plusieurs destinataires avec corps:

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

Notez que le corps doit être encodé en URI.

MahMoos
la source
5

Pour obtenir des liens sms: et mailto: qui fonctionnent à la fois sur iPhone et Android, sans JavaScript, essayez ceci:

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

Je l'ai testé sur Chrome pour Android et iPhone, et Safari sur iPhone.
Ils ont tous fonctionné comme prévu. Ils ont également travaillé sans numéro de téléphone ni adresse e-mail.

Debbie V
la source
4

La solution de Bradorego est ce qui a fonctionné pour moi, mais voici une réponse plus étendue.

Une petite considération est que vous devez encoder le corps en utilisant %20au lieu de +. Pour PHP, cela signifie utiliser rawurlencode($body)au lieu de urlencode($body). Sinon, vous verrez des signes plus dans le message sur les anciennes versions d'iOS, au lieu d'espaces.

Voici une fonction jQuery qui réaménagera vos liens SMS pour les appareils iOS. Les appareils Android / autres devraient fonctionner normalement et n'exécuteront pas le code.

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

Pensez à utiliser une classe comme a.sms-linkau lieu de a[href^="sms:"]si possible.

Radley Sustaire
la source
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
la source
Fonctionne sur la plupart des Android et IOS 5 et 6. Ne fonctionne pas sur IOS 7.
David C
3

L'iPhone n'accepte aucun texte de message, il ne prendra que le numéro de téléphone. Vous pouvez le voir ici https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1

AZ
la source
1
cette page n'est plus accessible
Kirk Hammett
1
Ce n'est plus vrai avec iOS8. Vous pouvez envoyer un <a href="sms:[numéro de téléphone circular&body=body text"> Lien </a> - l'esperluette précède le corps =. Syntaxiquement déroutant, oui, mais cela fonctionne pour moi et le corps se remplit du message souhaité.
Greg Johnson
1
Confirmé qu'iOS 10.2 ne prend pas en charge une partie "corps" comme décrit dans le lien ci-dessus.
Nicodemuz
Cela ne semble plus vrai selon stackoverflow.com/questions/39529099/...
morilles
3

Pour utiliser Android, vous utilisez le code ci-dessous

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

Pour iOS, vous pouvez utiliser le code ci-dessous

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

code ci-dessous fonctionnant à la fois pour iOs et Android

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

Cela fonctionne sur mon iPhone 5S!

Kim
la source
2

Je soupçonne que dans la plupart des applications, vous ne saurez pas à qui envoyer un SMS, vous ne voulez donc remplir que le corps du texte, pas le numéro. Cela fonctionne comme prévu en omettant simplement le numéro - voici à quoi ressemblent les URL dans ce cas:

sms:?body=message

Pour iOS même chose sauf avec le;

sms:;body=message

Voici un exemple du code que j'utilise pour configurer le 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;
Citron Kazi
la source
2

Eh bien, non seulement vous devez vous soucier d'iOS et d'Android, mais il existe également une application de messagerie Android. L'application de messagerie Google pour la note 9 et certains nouveaux galaxys ne s'ouvrent pas avec du texte, mais l'application Samsung fonctionne. La solution semble être d'ajouter // après le sms:

donc sms: // 15551235555

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

devrait être

<a href="sms://15551235555?body=Hello">Link</a>
Dan Parker
la source
Savez-vous si cela fonctionne pour tous les Android ou seulement certaines versions? C'est la version qui a fonctionné pour mon Pixel 2, Android 9
JCisar
Je n'ai eu aucun problème avec cela sur les androïdes plus anciens que j'ai également testés.
Dan Parker
2
De plus, cela ne semble pas fonctionner lorsque vous ne fournissez pas de numéro de téléphone (je sais que cela ne fait pas partie de la question d'origine, mais il peut être utile de savoir)
JCisar
1

(Juste un peu de sujet), mais peut-être que si vous cherchiez, vous pourriez tomber ici ... Dans Markdown (testé avec parsedown et sur iOS / Android), vous pourriez faire:

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

J'ai découvert que, sur iPhone 4 avec IOS 7 , vous POUVEZ mettre un corps au SMS uniquement si vous définissez un numéro de téléphone dans la liste de contact du téléphone.

Donc, ce qui suit fonctionnera si 0606060606 fait partie de mes contacts:

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

Au fait, sur iOS 6 (iPhone 3GS), cela ne fonctionne qu'avec un corps:

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

Chaque version du système d'exploitation a une manière différente de le faire. Jetez un œil à la bibliothèque sms-link

Ghigo
la source
-1

L'un des problèmes avec un lien clic-texte est la résolution du scénario de bureau où aucune application de messagerie native n'existe. Une solution consiste à utiliser le créateur de bouton Click-to-Text de Zipwhip.

  • Sur le bureau, ils vous envoient un vrai message texte dans les coulisses à partir de l'entrée de l'utilisateur.
  • Sur iOS ou Android, vous obtenez la fonctionnalité de messagerie native à la place.

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

John Lauer
la source
Impossible de créer un bouton sans numéro de téléphone.
Michal
-3

Ni Android ni les iPhones ne prennent actuellement en charge l'élément de copie de corps dans un lien hypertexte Tap to SMS. Cela peut être fait par programme,

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
la source
Est-ce l'objectif C? Comment appeler cela à partir de JavaScript ou l'utiliser en HTML? Cela semble impossible?
sparkyspider
Cela peut-il être annulé comme accepté? Cela ne répond pas du tout à la question. J'ai en fait publié quelque chose qui fonctionne et qui répond à la question.
Brad Orego