Как предварительно заполнить текст SMS через HTML-ссылку


113

Как использовать html-ссылку, чтобы открыть приложение sms с предварительно заполненным телом?

Все, что я прочитал, похоже, указывает на то, что sms: 18005555555? Body = bodyTextHere

Должно работать, но на iPhone это не работает. Если я выну? Body = bodyTextHere и просто использую sms: phonenumber, он работает.

Я видел несколько случаев, когда QR-коды делают это через ссылку сафари. Как они могут предварительно заполнить основной текст?


Интересно, вместо этого эти QR-сканеры открывают приложение для SMS ...
merlincam


это все еще правда? Нет метода?
Тайлер

Это на 100% возможно. См. Мой ответ ниже для информации.
Брэд Орего

Ответы:


180

Оказывается, это на 100% возможно, хотя и немного взломано.

Если вы хотите, чтобы он работал на Android, вам нужно использовать этот формат:

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

Если вы хотите, чтобы он работал на iOS, вам понадобится следующее:

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

Живая демонстрация здесь: http://bradorego.com/test/sms.html (обратите внимание, что "Телефон и? Body" и "Phone and; body" должны автоматически заполнять как поле to :, так и основной текст. Подробнее см. В источнике Информация)

ОБНОВИТЬ:

Очевидно, iOS8 пришлось пойти и что-то изменить в нас, поэтому благодаря некоторым другим комментаторам / респондентам появился новый стиль для iOS:

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

(номер телефона указывать не обязательно)


5
Примечание. Я не тестировал их на последних версиях ОС (iOS7 / iPhone 5S / 5C и Android 4.4). Есть некоторые сообщения о том, что они могут больше не работать, особенно с переходом Android на использование Hangouts вместо собственного приложения для SMS. Я займусь этим, когда у меня будет возможность.
Брэд Орего

3
Я посмотрел сейчас, потому что иногда это работало, а иногда нет, что казалось странным. Мои выводы: Если вы набираете номер, на который ранее отправляли хотя бы одно SMS, ссылка работает нормально с "телом". Если это совершенно новый номер, вам не повезло, и вы получите только номер :(
MMachinegun

7
Большое примечание: приложение, которое обрабатывает smsURI, можно изменить на Android, и многие производители делают это; поэтому, хотя он может работать на определенном устройстве / приложении, он может не работать на другом (или просто после обновления). Я предлагаю никогда не использовать это на Android, если вы не устанавливаете только номер телефона; Используйте его только на протестированных вами версиях iOS и платформах, отличных от Android.
fregante

1
@OrangeDog см. Мой ответ для iOS 7 stackoverflow.com/questions/6480462/…
paaacman

1
ни одна из ссылок не работает с телом в iOS 11.1
Тоскан

50

Я знаю, что это старая ветка, но наткнулся на нее и обнаружил, что некоторые части больше не актуальны.

Я обнаружил, что если вы хотите просто заполнить текст без добавления номера телефона, вы можете сделать следующее:

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

1
Это ответ, который я искал. Спасибо за помощь!
Konrad G

1
отлично работает, но когда это делается из OSX, он открывает текстовое сообщение To:, ?есть идеи, как сделать его пустым? Я пробовал, sms:?bodyа sms:;?body, первый пытается отправить? а второй пытается отправить;
Джошуа Охана

@JoshuaOhana Что произойдет, если вы попробуете «sms:? 0123456789 & body = My Message»? К сожалению, у меня нет доступа к каким-либо устройствам Apple под рукой.
Али

1
Не работает на устройствах Android. Только? Body = поможет.
Doodlemeat

40

Для iOS 8 попробуйте следующее:

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

Переключение ";" с "&" работал у меня.


3
fwiw Я только что протестировал это на iOS 10, и он все еще работает :).
Роб Доусон,

@landen Это отлично работает, если приложение SMS уже было открыто в фоновом режиме. Если это не так, я просто получаю приложение для открытия на моем телефоне, без номера телефона или тела сообщения. Любые идеи?
DMEM

31

Просто поместите все символы в этом порядке (я тестировал его только в этом порядке, поскольку для меня это наиболее логично с точки зрения кода).

Обратите внимание на ссылку тела ... Я просто положить ... ;?&body=. Также обратите внимание, что я обнаружил, что мне нужно использовать %20для любых пробелов.

Я тестировал его на своем iphone (v. 9.2) и другом android, и он отлично работает.

Это решит проблему с хакингом на разные устройства. При тестировании в смс артефактов не обнаружил.

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

Простое удаление номера и оставление точки с запятой (sms:;? & Body = Questi ..) работало в родном мессенджере Android 7, когда я не хотел, чтобы номер
ibex

2017-11-17: Пробовал на Aquaris BQ, Nexus, iPhone 7 и LPhone, и это прекрасно работает. Пробовал с различными браузерами (Chrome, Firefox, Opera, родной). Большое спасибо!
T.

На Android это зависит от того, какое приложение для SMS используется. Например, на Android 9 с приложением QKSMS это пытается отправить сообщение на;? и тело в комплект не входит. (QKSMS не является приложением по умолчанию, но может использоваться людьми, которые не хотят, чтобы SMS превращалось в MMS после достижения определенного размера.) К сожалению, HTML-страница не может определить, какое приложение для SMS будет быть в употреблении. По этой причине я буду опускать SMS-ссылки, если обнаружу Android.
Сайлас С. Браун

15

Нет необходимости в двух отдельных тегах привязки для Android и iOS. Это должно помочь.

// Без контактного номера
<a href="sms:?&body=message">Text Message</a>

// С контактным номером
<a href="sms:1234567890;?&body=message">Text Message</a>

// Работает как на Android, так и на iOS


1
Спасибо за это, отлично работает на iOS и Android! Следите за Without Contact Numberверсией для MacOS - она ​​устанавливает SMS toна?
Олли Хаквани

10

Мы нашли предложенный метод и протестировали:

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

Вот результаты:

  • iPhone4 - неисправность (пустое тело сообщения);
  • Nokia N8 - ок (тело сообщения - «Привет, друг», на «12345678»);
  • HTC Mozart - неисправность (сообщение «неподдерживаемая страница» (после нажатия на ссылку «Отправить смс»));
  • HTC Desire - ошибка (сообщение «Недопустимые получатели:
    <12345678? Body = Hellomyfriend>» (после нажатия на ссылку «Отправить смс»)).

Поэтому я прихожу к выводу, что это действительно не работает - по крайней мере, с этим методом.


Для iPhone4 см. Мой ответ ниже stackoverflow.com/questions/6480462/…
paaacman

8

Только для Android и iOS :

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

Android и iOS один получатель только с телом:

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

Только несколько получателей Android с телом:

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

Только несколько получателей iOS с телом:

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

Обратите внимание, что тело должно иметь кодировку URI.


5

Чтобы получить ссылки sms: и mailto: для работы как на iPhone, так и на Android без какого-либо javascript, попробуйте следующее:

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

Я тестировал его в Chrome для Android и iPhone и в Safari на iPhone.
Все они работали как положено. Они также работали без номера телефона или адреса электронной почты.


4

Решение Брадорего - это то, что сработало для меня, но вот более развернутый ответ.

Небольшое соображение заключается в том, что вам нужно кодировать тело, используя %20вместо +. Для PHP это означает использование rawurlencode($body)вместо urlencode($body). В противном случае вы увидите в сообщении знаки плюса вместо пробелов в старых версиях iOS.

Вот функция jQuery, которая обновит ваши SMS-ссылки для устройств iOS. Android / другие устройства должны работать нормально и не выполнять код.

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

Подумайте об использовании класса like a.sms-linkвместо, a[href^="sms:"]если это возможно.


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

Работает на большинстве Android, а также на iOS 5 и 6. Не работает на iOS 7.
David C

3

IPhone не принимает текст сообщений, он принимает только номер телефона. Вы можете увидеть это здесь https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1


1
эта страница больше не доступна
Кирк Хэммет

1
С iOS8 это уже не так. Вы можете отправить <a href="sms:[phone number ]&body=body text"> ссылку </a> - перед body = стоит амперсанд. Синтаксически запутанный, да, но он работает для меня, и тело заполняется желаемым сообщением.
Грег Джонсон,

1
Подтверждено, что iOS 10.2 не поддерживает часть «тела», как описано по ссылке выше.
Никодимуз


3

Для использования Android вы используете код ниже

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

Для iOS вы можете использовать код ниже

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

ниже код, работающий как для iOS, так и для Android

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

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

Это работает на моем iPhone 5S!


2

Я подозреваю, что в большинстве приложений вы не знаете, кому писать, поэтому вам нужно заполнить только текст, а не число. Это работает, как и следовало ожидать, если просто пропустить номер - вот как выглядят URL-адреса в этом случае:

sms:?body=message

Для iOS то же самое, за исключением;

sms:;body=message

Вот пример кода, который я использую для настройки 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

Что ж, вам нужно не только беспокоиться об iOS и Android, но и о том, какое приложение для обмена сообщениями для Android. Приложение Google для обмена сообщениями для Note 9 и некоторых новых галактик не открывается с текстом, но приложение samsung работает. Решение вроде добавить // после смс:

так смс: // 15551235555

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

должно быть

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

Вы знаете, работает ли это для всех Android или только для определенных версий? Это версия, которая работала на моем Pixel 2, android 9
JCisar

У меня не было проблем с этим на старых моделях Android, которые я тестировал.
Дэн Паркер

2
Кроме того, похоже, что это не работает, когда вы не указываете номер телефона (я знаю, что это не часть исходного вопроса, но было бы полезно знать)
JCisar

1

(Немного по теме), но, возможно, если бы вы искали, вы могли бы здесь наткнуться ... В уценке (проверено с помощью parsedown и на iOS / android) вы могли бы сделать:

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

0

Я выяснил, что на iPhone 4 с IOS 7 вы МОЖЕТЕ поставить тело в смс, только если вы укажете номер телефона в списке контактов телефона.

Таким образом, будет работать следующее, если 0606060606 входит в мои контакты:

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

Кстати, на iOS 6 (iPhone 3GS) он работает только с телом:

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


-1

Одна из проблем, связанных с переходом по ссылке «щелкнуть по тексту», - это решение сценария рабочего стола, в котором нет собственного приложения для текстовых сообщений. Решение - использовать создатель кнопки Click-to-Text Zipwhip.

  • На рабочем столе они отправляют вам реальное текстовое сообщение за кулисами после ввода пользователя.
  • Вместо этого на iOS или Android вы получаете встроенную функцию текстовых сообщений.

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


Не могу создать кнопку без номера телефона.
Михал,

-3

Ни Android, ни iPhone в настоящее время не поддерживают элемент основной копии в гиперссылке Tap to SMS. Хотя это можно сделать программно,

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

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

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

Это цель C? Как это вызвать из JavaScript или использовать в HTML? Звучит невозможно?
Sparkyspider

Можно ли снять отметку о принятой? Это вовсе не отвечает на вопрос. Я действительно опубликовал кое-что, что действительно работает и действительно отвечает на вопрос.
Брэд Орего
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.