วิธีเติมข้อความเนื้อหา sms ล่วงหน้าผ่านลิงค์ html


113

จะใช้ลิงก์ html เพื่อเปิดแอป sms ด้วยเนื้อหาที่กรอกไว้ล่วงหน้าได้อย่างไร

ทุกสิ่งที่ฉันอ่านดูเหมือนจะระบุว่า sms: 18005555555? body = bodyTextHere

ควรใช้งานได้ แต่บน iPhone สิ่งนี้ไม่ทำงาน ถ้าฉันเอา? body = bodyTextHere ออกและใช้แค่ sms: phonenumber ก็ใช้ได้

ฉันเคยเห็นหลายกรณีที่รหัส QR ทำสิ่งนี้ผ่านลิงก์ซาฟารี พวกเขาจะเติมข้อความเนื้อหาล่วงหน้าได้อย่างไร


ฉันสงสัยว่าเครื่องสแกน QR เหล่านี้กำลังเปิดแอป SMS โดยตรงแทน ...
merlincam

ฉันไม่คิดว่ามันจะเป็นไปได้ ดูเหล่านี้: stackoverflow.com/questions/10848/... stackoverflow.com/questions/1517169/...
เจสัน Gennaro

ยังคงเป็นจริงไม่มีวิธีการ?
tyler

เป็นไปได้ 100% ดูคำตอบของฉันด้านล่างสำหรับข้อมูล
Brad Orego

คำตอบ:


181

ปรากฎว่าเป็นไปได้ 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 (โปรดสังเกตว่า "Phone and? body" และ "Phone and; body" ควรป้อนอัตโนมัติทั้งในฟิลด์ to: และ body text ดูแหล่งข้อมูลเพิ่มเติม ข้อมูล)

อัพเดท:

เห็นได้ชัดว่า iOS8 ต้องเปลี่ยนสิ่งต่างๆกับเราดังนั้นต้องขอบคุณผู้แสดงความคิดเห็น / ผู้ตอบกลับคนอื่น ๆ จึงมีรูปแบบใหม่สำหรับ iOS:

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

(หมายเลขโทรศัพท์เป็นทางเลือก)


5
หมายเหตุ: ฉันยังไม่ได้ทดสอบสิ่งเหล่านี้ในระบบปฏิบัติการเวอร์ชันล่าสุด (iOS7 / iPhone 5S / 5C และ Android 4.4) มีรายงานบางฉบับที่อาจใช้งานไม่ได้อีกต่อไปโดยเฉพาะเมื่อ Android เปลี่ยนไปใช้แฮงเอาท์แทนแอป SMS ที่มาพร้อมเครื่อง ฉันจะตรวจสอบเมื่อมีโอกาส
Brad Orego

3
ฉันดูตอนนี้เพราะบางครั้งมันก็ใช้งานได้และบางครั้งก็ไม่ได้ผลซึ่งดูแปลก ๆ การค้นพบของฉัน: หากคุณกดหมายเลขที่คุณเคยส่งอย่างน้อยหนึ่ง SMS ก่อนหน้านี้ลิงก์จะทำงานได้ดีกับ "body" หากเป็นหมายเลขใหม่ที่สมบูรณ์คุณจะโชคไม่ดีและคุณจะได้รับหมายเลขเท่านั้น :(
MMachinegun

7
หมายเหตุใหญ่:แอปที่จัดการsmsURI สามารถเปลี่ยนแปลงได้บน Android และผู้ผลิตหลายรายทำเช่นนี้ ดังนั้นแม้ว่าอาจทำงานบนอุปกรณ์ / แอพบางเครื่องได้ แต่ก็อาจไม่สามารถใช้งานได้บนอุปกรณ์อื่น (หรือหลังจากการอัปเดต) คำแนะนำของฉันคืออย่าใช้สิ่งนี้บน Androidเว้นแต่คุณจะตั้งค่าหมายเลขโทรศัพท์เท่านั้น ใช้เฉพาะบน iOS เวอร์ชันและแพลตฟอร์มที่ไม่ใช่ Android ที่คุณทดสอบเท่านั้น
อิสระ

1
@OrangeDog ดูคำตอบของฉันสำหรับ iOS 7 stackoverflow.com/questions/6480462/…
paaacman

1
ดูเหมือนว่าไม่มีลิงก์ใดที่ใช้งานได้กับ body ใน iOS 11.1
Toskan

50

ฉันรู้ว่านี่เป็นกระทู้เก่า แต่สะดุดกับมันและพบว่าบางส่วนไม่เกี่ยวข้องอีกต่อไป

ฉันพบว่าหากคุณต้องการเติมข้อความแต่ละครั้งโดยไม่ต้องเพิ่มหมายเลขโทรศัพท์คุณสามารถทำสิ่งต่อไปนี้:

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

1
นั่นคือคำตอบที่ฉันตามหา ขอบคุณสำหรับความช่วยเหลือ!
Konrad G

1
ใช้งานได้ดี แต่เมื่อทำจาก OSX มันจะเปิดข้อความถึง: ?มีความคิดอย่างไรที่จะทำให้มันแสดงว่างเปล่า? ฉันพยายามsms:?bodyและพยายามsms:;?bodyครั้งแรกที่จะส่ง? และครั้งที่สองพยายามส่งไปที่;
Joshua Ohana

@JoshuaOhana จะเกิดอะไรขึ้นถ้าคุณลอง "sms:? 0123456789 & body = My Message"? ขออภัยไม่สามารถเข้าถึงอุปกรณ์ Apple ใด ๆ ในมือได้
Ali

1
ใช้ไม่ได้กับอุปกรณ์ Android มีเพียงร่างกาย = เคล็ดลับเท่านั้น
Doodlemeat

40

สำหรับ iOS 8 ลองสิ่งนี้:

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

การเปลี่ยน ";" ด้วย "&" ที่ใช้ได้ผลสำหรับฉัน


3
fwiw ฉันเพิ่งทดสอบสิ่งนี้บน iOS 10 และยังใช้งานได้ :)
Rob Dawson

@landen สิ่งนี้จะทำงานได้ดีอย่างสมบูรณ์หากเปิดแอป SMS ในพื้นหลังแล้ว ถ้าไม่เป็นเช่นนั้นฉันแค่เปิดแอปบนโทรศัพท์โดยไม่มีหมายเลขโทรศัพท์หรือเนื้อความ ความคิดใด ๆ ?
DMEM

31

เพียงแค่ใส่สัญลักษณ์ทั้งหมดตามลำดับนี้ (ฉันทดสอบตามลำดับนี้เท่านั้นเพราะมันทำให้ฉันเข้าใจรหัสมากที่สุด)

แจ้งให้ทราบล่วงหน้าสำหรับการเชื่อมโยงร่างกาย ... ฉันเพียงแค่ใส่ ;?&body=... นอกจากนี้โปรดสังเกตว่าฉันพบว่าฉันจำเป็นต้องใช้%20สำหรับช่องว่างใด ๆ

ฉันได้ทดสอบบน iPhone (ข้อ 9.2) และ Android อีกเครื่องหนึ่งและใช้งานได้ดี

วิธีนี้จะช่วยแก้ปัญหาในการแฮ็คสำหรับอุปกรณ์ต่างๆ ฉันไม่มีสิ่งประดิษฐ์เมื่อทดสอบใน 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>

เพียงแค่ลบหมายเลขและออกจากอัฒภาค (sms:;? & body = Questi .. ) ทำงานบนแอนดรอยด์ 7 เนทีฟ Messenger เมื่อฉันไม่ต้องการให้หมายเลขนั้นเติมข้อมูลล่วงหน้า
ibex

2017-11-17: ลองใช้ Aquaris BQ, Nexus, iPhone 7 และ LPhone และสิ่งนี้ได้ผลเหมือนมีเสน่ห์ พยายามกับเบราว์เซอร์ต่างๆ (Chrome, Firefox, Opera, เนทีฟ) ขอบคุณมาก!
Urosh T.

บน Android ขึ้นอยู่กับว่ากำลังใช้แอป SMS ใด ตัวอย่างเช่นใน Android 9 ที่มีแอป QKSMS สิ่งนี้จะพยายามส่งข้อความถึง;? และไม่รวมร่างกาย (QKSMS ไม่ใช่แอปเริ่มต้น แต่อาจถูกใช้งานโดยผู้ที่ไม่ต้องการให้ SMS กลายเป็น MMS หลังจากถึงขนาดที่กำหนด) น่าเสียดายที่ไม่มีวิธีใดที่หน้า HTML จะระบุได้ว่าจะให้แอป SMS ใด ใช้งานได้ ด้วยเหตุนี้ฉันจะละเว้นลิงก์ SMS หากตรวจพบ Android
Silas S. Brown

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เป็น?
Ollie Khakwani

10

เราพบวิธีการที่เสนอและทดสอบ:

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

นี่คือผลลัพธ์:

  • iPhone4 - ความผิด (เนื้อหาว่างของข้อความ);
  • Nokia N8 - ตกลง (เนื้อหาของข้อความ - "สวัสดีเพื่อนของฉัน" ถึง "12345678");
  • HTC Mozart - ข้อบกพร่อง (ข้อความ "ไม่รองรับเพจ" (หลังจากคลิกที่ลิงค์ "ส่ง sms"));
  • HTC Desire - ความผิด (ข้อความ "ผู้รับไม่ถูกต้อง:
    <12345678? body = Hellomyfriend>" (หลังจากคลิกที่ลิงก์ "ส่ง sms"))

ฉันจึงสรุปว่ามันไม่ได้ผล - อย่างน้อยก็ใช้วิธีนี้


สำหรับ 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 โดยไม่ต้องใช้จาวาสคริปต์ให้ลองทำดังนี้

<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

วิธีแก้ปัญหาของ Bradorego คือสิ่งที่ใช้ได้ผลสำหรับฉัน แต่นี่คือคำตอบที่กว้างขึ้น

การพิจารณาขนาดเล็กที่คุณจำเป็นต้องเข้ารหัสร่างกายใช้แทน%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
หน้านี้ไม่สามารถเข้าถึงได้อีกต่อไป
Kirk Hammett

1
นั่นไม่เป็นความจริงอีกต่อไปกับ iOS8 คุณสามารถส่ง <a href="sms:[phone number]&body=body text"> ลิงก์ </a> - เครื่องหมายและนำหน้า body = สับสนทางไวยากรณ์ใช่ แต่มันใช้งานได้สำหรับฉันและร่างกายก็เติมข้อความที่ต้องการ
Greg Johnson

1
ยืนยันว่า iOS 10.2 ไม่รองรับส่วน "body" ตามที่อธิบายไว้ในลิงก์ด้านบน
Nicodemuz

ดูเหมือนจะไม่เป็นความจริงอีกต่อไปอ้างอิงจากstackoverflow.com/questions/39529099/…
morels

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

ฉันสงสัยว่าในแอปพลิเคชันส่วนใหญ่คุณจะไม่รู้ว่าต้องส่งข้อความถึงใครดังนั้นคุณจึงต้องการเติมข้อความเท่านั้นไม่ใช่ตัวเลข ทำงานได้ตามที่คุณคาดหวังเพียงแค่ทิ้งตัวเลขไว้ - นี่คือลักษณะของ 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 ใช้งานได้ ดูเหมือนว่าโซลูชันจะถูกเพิ่ม // หลัง sms:

sms ดังนั้น: // 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 รุ่นเก่าที่ฉันเคยทดสอบเช่นกัน
Dan Parker

2
นอกจากนี้ดูเหมือนว่าจะใช้งานไม่ได้เมื่อคุณไม่ให้หมายเลขโทรศัพท์ (ฉันรู้ว่านั่นไม่ใช่ส่วนหนึ่งของคำถามเดิม แต่อาจเป็นประโยชน์ที่จะรู้)
JCisar

1

(เป็นเพียงหัวข้อเล็กน้อย) แต่บางทีถ้าคุณค้นหาคุณอาจสะดุดที่นี่ ... ใน markdown (ทดสอบด้วยการแยกวิเคราะห์และบน 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คุณสามารถใส่เนื้อความใน SMS ได้ก็ต่อเมื่อคุณตั้งหมายเลขโทรศัพท์ไว้ในรายชื่อผู้ติดต่อของโทรศัพท์

ดังนั้นสิ่งต่อไปนี้จะใช้งานได้หาก 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/


ไม่สามารถสร้างปุ่มที่ไม่มีหมายเลขโทรศัพท์
Michal

-3

ปัจจุบันทั้ง Android และ iPhones ไม่สนับสนุนองค์ประกอบการคัดลอกเนื้อหาในไฮเปอร์ลิงก์แตะเพื่อ 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

สามารถยกเลิกการทำเครื่องหมายว่ายอมรับได้หรือไม่ สิ่งนี้ไม่ได้ตอบคำถามเลย ฉันโพสต์สิ่งที่ได้ผลจริงและตอบคำถามได้
Brad Orego
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.