Jak wstępnie wypełnić treść wiadomości sms za pomocą linku HTML

113

Jak użyć linku HTML, aby otworzyć aplikację sms z wstępnie wypełnioną treścią?

Wszystko, co przeczytałem, wskazuje, że sms: 18005555555? Body = bodyTextHere

Powinno działać, ale na iPhonie to nie działa. Jeśli wyjmę? Body = bodyTextHere i po prostu użyję sms: phonenumber, zadziała.

Widziałem kilka przypadków, w których kody QR robią to za pośrednictwem łącza safari. Jak są w stanie wstępnie wypełnić tekst podstawowy?

merlincam
źródło
Zastanawiam się, czy te skanery QR otwierają aplikację do SMS-ów bezpośrednio ...
merlincam
Nie sądzę, żeby to było możliwe. Zobacz: stackoverflow.com/questions/10848/… stackoverflow.com/questions/1517169/ ...
Jason Gennaro
to nadal prawda? Brak metody?
tyler,
Jest to w 100% możliwe. Zobacz moją odpowiedź poniżej, aby uzyskać informacje.
Brad Orego

Odpowiedzi:

179

Okazuje się, że jest to w 100% możliwe, chociaż trochę zepsute.

Jeśli chcesz, aby działał na Androidzie, musisz użyć tego formatu:

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

Jeśli chcesz, aby działał na iOS, potrzebujesz tego:

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

Demo na żywo tutaj: http://bradorego.com/test/sms.html (zwróć uwagę, że „Telefon i? Treść” oraz „Telefon i; treść” powinny automatycznie wypełniać zarówno pole do:, jak i tekst podstawowy. Wyświetl źródło, aby uzyskać więcej informacji informacje)

AKTUALIZACJA:

Wygląda na to, że iOS8 musiał coś zmienić, więc dzięki niektórym innym komentatorom / respondentom pojawił się nowy styl dla iOS:

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

(numer telefonu jest opcjonalny)

Brad Orego
źródło
5
Uwaga: nie testowałem ich w najnowszych wersjach systemu operacyjnego (iOS7 / iPhone 5S / 5C i Android 4.4). Istnieją doniesienia, że ​​mogą już nie działać, zwłaszcza w przypadku przejścia Androida na używanie Hangouts zamiast natywnej aplikacji do obsługi SMS-ów. Zajrzę się tym, kiedy będę miał okazję.
Brad Orego
3
Spojrzałem teraz, ponieważ czasami działało, a czasami nie, co wydawało się dziwne. Moje ustalenia: jeśli wybierzesz numer, na który wysłałeś wcześniej co najmniej jedną wiadomość SMS, link działa dobrze z treścią. Jeśli jest to zupełnie nowy numer, nie masz szczęścia i otrzymujesz tylko numer :(
MMachinegun
7
Ważna uwaga: aplikację obsługującą smsidentyfikator URI można zmienić na Androidzie i robi to wielu producentów; dlatego chociaż może działać na określonym urządzeniu / aplikacji, może nie działać na innym (lub po prostu po aktualizacji). Sugeruję, aby nigdy nie używać tego na Androidzie, chyba że ustawiasz tylko numer telefonu; używaj go tylko w testowanych wersjach iOS i platformach innych niż Android.
fregante
1
@OrangeDog zobacz moją odpowiedź na iOS 7 stackoverflow.com/questions/6480462/ ...
paaacman
1
żaden z linków nie działa z ciałem w iOS 11.1
Toskan
49

Wiem, że to stara nić, ale natknąłem się na nią i stwierdziłem, że niektóre części są już nieaktualne.

Odkryłem, że jeśli chcesz po prostu wypełnić tekst bez dodawania numeru telefonu, możesz wykonać następujące czynności:

sms:?&body=/* message body here */
Ali
źródło
1
To odpowiedź, której szukałem. Dzięki za pomoc!
Konrad G,
1
działa świetnie, ale po zakończeniu z OSX otwiera wiadomość tekstową Do:, masz ?pomysł, jak sprawić, by była pusta? Próbowałem sms:?bodyi sms:;?bodypierwsza próba wysłania? a drugi próbuje wysłać do;
Joshua Ohana
@JoshuaOhana Co się stanie, jeśli spróbujesz „sms:? 0123456789 & body = Moja wiadomość”? Przepraszamy, nie mam dostępu do żadnych urządzeń Apple pod ręką.
Ali
Nie działa na urządzeniach z Androidem. Tylko? Body = załatwia sprawę.
Doodlemeat
40

W przypadku iOS 8 spróbuj tego:

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

Przełączanie „;” z „&” zadziałało dla mnie.

landen
źródło
3
fwiw Właśnie to przetestowałem na iOS 10 i nadal działa :).
Rob Dawson
@landen Działa to doskonale, jeśli aplikacja SMS była już otwarta w tle. Jeśli tak nie jest, po prostu otwieram aplikację na telefonie bez numeru telefonu ani treści wiadomości. Jakieś pomysły?
DMEM
31

Po prostu umieść wszystkie symbole w tej kolejności (testowałem to tylko w tej kolejności, ponieważ jest to dla mnie najbardziej sensowne z punktu widzenia kodu).

Wskazówki dla łącza ciała ... Po prostu umieścić ... ;?&body=. Zwróć również uwagę, że stwierdziłem, że muszę użyć %20dla dowolnych przestrzeni.

Przetestowałem to na moim iPhonie (v. 9.2) i innym Androidzie i działa dobrze.

To rozwiąże problem z włamaniem do różnych urządzeń. Nie mam żadnych artefaktów, kiedy testowałem to w SMS-ie.

<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
źródło
Samo usunięcie numeru i pozostawienie średnika (sms:;? & Body = Questi ..) działało na rodzimym komunikatorze Android 7, kiedy nie chciałem, aby numer był wstępnie wypełniany
ibex
2017-11-17: Wypróbowałem na Aquaris BQ, Nexus, iPhone 7 i LPhone i działa to jak marzenie. Próbowałem z różnymi przeglądarkami (Chrome, Firefox, Opera, natywna). Wielkie dzięki!
Urosh T.
W systemie Android zależy to od używanej aplikacji SMS. Na przykład w systemie Android 9 z aplikacją QKSMS ta próbuje wysłać wiadomość do;? a ciało nie jest wliczone w cenę. (QKSMS nie jest domyślną aplikacją, ale może być używany przez osoby, które nie chcą, aby SMS stał się MMS-em po osiągnięciu określonego rozmiaru). Niestety nie ma sposobu, aby strona HTML mogła określić, która aplikacja SMS być w użyciu. Z tego powodu pominę linki SMS, jeśli wykryję Androida.
Silas S. Brown
15

Nie ma potrzeby stosowania dwóch oddzielnych tagów kotwicy dla systemów Android i iOS. To powinno pomóc.

// Bez numeru kontaktowego
<a href="sms:?&body=message">Text Message</a>

// Z numerem kontaktowym
<a href="sms:1234567890;?&body=message">Text Message</a>

// Działa na Androidzie i iOS

aayushdrolia
źródło
1
Dzięki za to, działa świetnie na iOS i Androidzie! Uważaj na Without Contact Numberwersję na MacOS - SMS jest ustawiony tona?
Ollie Khakwani
10

Znaleźliśmy proponowaną metodę i przetestowaliśmy:

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

Oto wyniki:

  • iPhone4 - usterka (pusta treść wiadomości);
  • Nokia N8 - ok (treść wiadomości - „Witaj przyjacielu”, Do „12345678”);
  • HTC Mozart - usterka (komunikat „nieobsługiwana strona” (po kliknięciu w link „Wyślij sms”));
  • HTC Desire - usterka (komunikat „Nieprawidłowi odbiorcy:
    <12345678? Body = Hellomyfriend>” (po kliknięciu linku „Wyślij sms”)).

Dlatego dochodzę do wniosku, że to nie działa - przynajmniej z tą metodą.

Ben
źródło
Jeśli chodzi o iPhone4, zobacz moją odpowiedź poniżej stackoverflow.com/questions/6480462/ ...
paaacman
8

Tylko korpus Androida i iOS :

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

Tylko jeden odbiorca na Androida i iOS z treścią:

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

Tylko wielu adresatów na Androida z treścią:

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

Tylko wielu adresatów na iOS z treścią:

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

Zauważ, że treść powinna być zakodowana w URI.

MahMoos
źródło
5

Aby otrzymać linki sms: i mailto: do pracy na iPhonie i Androidzie, bez javascript, spróbuj tego:

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

Przetestowałem go w Chrome na Androida i iPhone'a oraz Safari na iPhonie.
Wszyscy działali zgodnie z oczekiwaniami. Pracowali również bez numeru telefonu i adresu e-mail.

Debbie V
źródło
4

Rozwiązanie Bradorego sprawdziło się dla mnie, ale tutaj jest bardziej rozszerzona odpowiedź.

Niewielką kwestią jest to, że musisz zakodować treść przy użyciu %20zamiast +. W przypadku PHP oznacza to używanie rawurlencode($body)zamiast urlencode($body). W przeciwnym razie w wiadomościach w starszych wersjach systemu iOS zamiast spacji zobaczysz znaki plus.

Oto funkcja jQuery, która dostosuje linki SMS do urządzeń z systemem iOS. Android / inne urządzenia powinny działać normalnie i nie będą wykonywać kodu.

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

Jeśli to możliwe, rozważ użycie klasy takiej jak a.sms-linkzamiast a[href^="sms:"].

Radley Sustaire
źródło
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
źródło
Działa na większości androidów oraz IOS 5 i 6. Nie działa na IOS 7.
David C
3

IPhone nie przyjmuje żadnego tekstu wiadomości, przyjmie tylko numer telefonu. Możesz to zobaczyć tutaj https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1

AZ
źródło
1
ta strona nie jest już dostępna
Kirk Hammett
1
To już nie jest prawdą w przypadku iOS8. Możesz wysłać <a href="sms:[ numer telefonu]&body=body text"> Link </a> - ampersand poprzedza body =. Mylące składniowo, tak, ale działa dla mnie i ciało zapełnia się pożądaną wiadomością.
Greg Johnson
1
Potwierdzono, że iOS 10.2 nie obsługuje części „treści”, jak opisano w powyższym linku.
Nicodemuz
Wydaje się, że to już nieprawda według stackoverflow.com/questions/39529099/ ...
smardze
3

Do korzystania z Androida użyj poniższego kodu

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

W przypadku iOS możesz użyć poniższego kodu

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

poniższy kod działający zarówno dla iOs, jak i Android

<a href="sms:+32665?&body=reg fb1>Send SMS</a>
Pankaj Chauhan
źródło
2
<a href="sms:/* phone number here */&body=/* body text here */">Link</a>

Działa to na moim iPhonie 5S!

Kim
źródło
2

Podejrzewam, że w większości aplikacji nie wiesz, do kogo napisać, więc chcesz wypełnić tylko treść tekstu, a nie numer. Działa to zgodnie z oczekiwaniami, po prostu pomijając liczbę - oto jak wyglądają adresy URL w tym przypadku:

sms:?body=message

W przypadku iOS to samo, z wyjątkiem;

sms:;body=message

Oto przykład kodu, którego używam do skonfigurowania SMS-a:

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
źródło
2

Cóż, nie tylko musisz martwić się o iOS i Androida, ale jest też aplikacja do przesyłania wiadomości na Androida. Aplikacja do obsługi wiadomości Google dla Note 9 i niektóre nowe galaktyki nie otwierają się z tekstem, ale aplikacja Samsung działa. Rozwiązanie wydaje się być dodane // po sms:

więc sms: // 15551235555

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

Powinien być

<a href="sms://15551235555?body=Hello">Link</a>
Dan Parker
źródło
Czy wiesz, czy to działa dla wszystkich Androida, czy tylko niektórych wersji? To jest wersja, która działała na moim Pixelu 2,
Androidzie
Nie miałem z tym problemów na starszych Androidach, które testowałem.
Dan Parker
2
Wydaje się też, że nie działa, jeśli nie podasz numeru telefonu (wiem, że to nie jest część pierwotnego pytania, ale warto wiedzieć)
JCisar
1

(Tylko trochę tematu), ale może gdybyś szukał, mógłbyś się tutaj natknąć ... W przecenie (testowane z parsedown i na iOS / Android) możesz zrobić:

   [Link](sms:phone_number,?&body=URL_encoded_body_text)
   //[send sms](sms:1234567890;?&body=my%20very%20interesting%20text)
user6200044
źródło
0

Dowiedziałem się, że na iPhonie 4 z IOS 7 MOŻESZ umieścić treść do SMS-a tylko wtedy, gdy ustawisz numer telefonu na liście kontaktów telefonu.

Więc poniższe będzie działać, jeśli 0606060606 jest częścią moich kontaktów:

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

Nawiasem mówiąc, na iOS 6 (iPhone 3GS) działa tylko z ciałem:

<a href="sms:;body=Hello my friend">Send SMS</a>
paaacman
źródło
0

Każda wersja systemu operacyjnego ma inny sposób. Zapoznaj się z biblioteką sms-link

Ghigo
źródło
-1

Jednym z problemów z łączem typu „kliknij, aby przejść do tekstu” jest rozwiązanie scenariusza komputerowego, w którym nie istnieje natywna aplikacja do obsługi SMS-ów. Rozwiązaniem jest użycie kreatora przycisków Click-to-Text firmy Zipwhip.

  • Na pulpicie wysyłają ci rzeczywistą wiadomość tekstową za kulisami na podstawie danych wejściowych użytkownika.
  • W systemie iOS lub Android zamiast tego otrzymujesz natywną funkcję wysyłania wiadomości tekstowych.

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

John Lauer
źródło
Nie można utworzyć przycisku bez numeru telefonu.
Michał
-3

Ani Android, ani iPhone nie obsługują obecnie elementu Body copy w hiperłączu Dotknij, aby wysłać SMS-a. Można to jednak zrobić programowo,

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
źródło
Czy to cel C? Jak to wywołać z JavaScript lub użyć go w HTML? Brzmi niemożliwie?
sparkyspider
Czy można to usunąć oznaczenie jako zaakceptowane? To wcale nie odpowiada na pytanie. W rzeczywistości opublikowałem coś, co działa i odpowiada na pytanie.
Brad Orego