生成VCard并通过Twilio发送

Att*_*Fun 4 javascript sms twilio parse-platform

我正在写一个Twilio + Parse应用程序,它允许用户通过短信分享他们的联系信息.我在javascript中有一个示例Vcard作为字符串:

  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';
Run Code Online (Sandbox Code Playgroud)

我试图找出如何将其作为vcard发送到电话号码,以便手机检测到它而不是文本.

我有一个方法:

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);
}
Run Code Online (Sandbox Code Playgroud)

我可以用它发送短信.在他们的文档中,Twilio说这里支持文本/ vcard消息:https: //www.twilio.com/docs/api/rest/accepted-mime-types 但是我无法让它工作.你能提供一个如何通过短信与Twilio发送这个VCard的例子吗?谢谢!

fel*_*pes 6

如何发送

要在 Twilio 中发送联系人卡片非常简单,请使用此 curl 命令,它应该可以工作:

curl -X POST https://api.twilio.com/2010-04-01/Accounts/<account sid>/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 <account sid>:<auth token>
Run Code Online (Sandbox Code Playgroud)

您实际上可以将请求中链接的 vCard 用于测试目的。

什么会出错

如果您的标头配置不正确,则联系人卡片将无法在您的 iOS/Android 手机上正确呈现,即使它看起来是正确的联系人卡片。

标题

iOS 上的联系人卡片只能显示与您的文件相同的文本,因此使用相同的filename标头属性命名您的文件Content-Type,它应该会相应地工作

Content-Type: text/x-vcard
Content-Disposition: inline; filename="<You file name>.vcf"
Cache-Control: no-cache
Run Code Online (Sandbox Code Playgroud)

缓存文件

  1. 当 Twilio 第一次收到文件时,它会缓存
  2. 如果您相应地调整标头,则不会影响 VCF 文件的交付,因为它将使用缓存版本
  3. 有办法克服

确保从第一次开始就正确提交,否则您将不得不进行我在下面建议的更改

Twilio 缓存

要删除文件缓存或设置适当的缓存策略,请阅读:https : //support.twilio.com/hc/en-us/articles/360024716314-How-Can-I-Change-the-Cache-Behavior -或-消息-媒体-文件-

故障排除 我发现 Twilio 不会仅根据 VCF 文件的文件名更改缓存,而是根据文件内容本身更改缓存,因此您必须修改文件以清除缓存,而不仅仅是名称。


Mar*_*ona 5

Twilio开发者传道者在这里.如果您尝试启动新消息,则不需要使用TwiML,但只需使用其余API即可从服务器发送信息.

使用Parse.com时,它应该类似于以下内容:

// 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);
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

所以你现在需要做的就是确保your-vcard-urltext/vcard`.

换句话说,你不能只通过短信发送vcard的内容,但需要告诉Twilio实际上vcard的位置,所以它将它包含在消息中.

vcard的有效URL的一个例子就是这个.希望这对你有所帮助