Generate VCard and Send Via Twilio

三世轮回 提交于 2019-12-21 17:55:10

问题


I am writing a Twilio + Parse app which lets users share their contact info via SMS. I have a sample Vcard as a string in javascript:

  message = '';
  message += 'BEGIN:VCARD';
  message += 'BDAY;VALUE=DATE:1963-09-21';
  message += 'VERSION:3.0';
  message += 'N:Stenerson;Derik';
  message += 'FN:Derik Stenerson';
  message += 'ORG:Microsoft Corporation';
  message += 'ADR;TYPE=WORK,POSTAL,PARCEL:;;One Microsoft Way;Redmond;WA;98052-6399;USA';
  message += 'TEL;TYPE=WORK,MSG:+1-425-936-5522';
  message += 'TEL;TYPE=WORK,FAX:+1-425-936-7329';
  message += 'EMAIL;TYPE=INTERNET:deriks@Microsoft.com';
  message += 'END:VCARD';
  message += 'BEGIN:VCARD';
  message += 'VERSION:3.0';
  message += 'N:Ganguly;Anik';
  message += 'FN:Anik Ganguly';
  message += 'ORG: Open Text Inc.';
  message += 'ADR;TYPE=WORK,POSTAL,PARCEL:;Suite 101;38777 West Six Mile Road;Livonia;MI;48152;USA';
  message += 'TEL;TYPE=WORK,MSG:+1-734-542-5955';
  message += 'EMAIL;TYPE=INTERNET:ganguly@acm.org';
  message += 'END:VCARD';
  message += 'BEGIN:VCARD';
  message += 'VERSION:3.0';
  message += 'N:Moskowitz;Robert';
  message += 'FN:Robert Moskowitz';
  message += 'EMAIL;TYPE=INTERNET:rgm-ietf@htt-consult.com';
  message += 'END:VCARD';

And I am trying to figure out how to send this to a phone number as a vcard so the phone detects it instead of the text.

I have a method:

function respondWithMessage(message, response) {
  response.set('Content-Type', 'text/xml');
  var xmlVersion = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n';
  message = '<Message>\n' + message + '\n</Message>';
  message = '<Response>\n' + message + '\n</Response>';
  message = xmlVersion + message;
  response.send(message);
}

With which I am able to send text messages. In their documentation, Twilio states that text/vcard messages are supported here: https://www.twilio.com/docs/api/rest/accepted-mime-types But I have been unable to get it to work. Could you provide an example of how to send this VCard via SMS with Twilio? Thanks!


回答1:


Twilio developer evangelist here. If you're trying to start a new message, then you don't need to use TwiML, but can simply use the rest API to send the information from your server.

With Parse.com it should be something like the following:

// Require and initialize the Twilio module with your credentials
var client = require('twilio')('ACCOUNT_SID', 'AUTH_TOKEN');

// Send an SMS message
client.sendSms({
    to:'to', 
    from: 'from', 
    body: 'Hello world!',
    mediaUrl: your-vcard-url
  }, function(err, responseData) { 
    if (err) {
      console.log(err);
    } else { 
      console.log(responseData.from); 
      console.log(responseData.body);
    }
  }
);

So all you need to do now, is make sure your-vcard-url is accessible by Twilio, and that its mime type is set to be text/vcard.

In other words, you can't just send the contents of the vcard via text message, but need to tell Twilio where the vcard actually is, so it includes it in the message.

An example of a valid URL for a vcard would be this one. Hope this helps you




回答2:


How to send

To send a contact card in Twilio is pretty simple, use this curl command and it should work:

curl -X POST https://api.twilio.com/2010-04-01/Accounts/<acc>/Messages.json \
--data-urlencode "Body=Your Heart Health Coach contact card" \
--data-urlencode "MediaUrl=https://mighty-health-assets.s3.amazonaws.com/vcf/James%20Li.vcf" \
--data-urlencode "From=<from>" \
--data-urlencode "To=<to>" \
-u <auth>:<auth>

You can actually use that vCard linked in the request for testing purposes.

What can go wrong

If your header are not properly configured, the contact card will not render properly on your iOS/Android phone, even though it seems to be a correct contact card.

Headers

The contact card on iOS can only display the same text as of your file, so name your file with the same filename header property on Content-Type and it should work accordingly

Content-Type: inline; filename="<You file name>.vcf"
Content-Disposition: text/x-vcard
Cache-Control: no-cache

Cached file

  1. When Twilio receives a file for the first time, it caches
  2. If you adjust the headers accordingly it won't impact the delivery of the VCF file, because it will use the cached version
  3. There is a way to overcome that

Make sure you submit it correctly from the first time, or you'll have to the the changes I suggest below

Twilio Caching

To remove the caching on your files or to set the appropriate cache policy, read: https://support.twilio.com/hc/en-us/articles/360024716314-How-Can-I-Change-the-Cache-Behavior-or-Message-Media-Files-

Troubleshooting I figured out that Twilio don't change cache based only on filename for VCF files, but by the file content itself, so you have to modify your file in order for it to clear the cache, not just the name.



来源:https://stackoverflow.com/questions/32675283/generate-vcard-and-send-via-twilio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!