Sendgrid-nodejs: トランザクションテンプレートでは置換は機能しません

作成日 2017年12月08日  ·  20コメント  ·  ソース: sendgrid/sendgrid-nodejs

screenshot from 2017-12-08 10-36-46

問題の概要

このライブラリを使用する場合、置換は機能しません。 カールを使用すると機能します。

再現する手順

  1. SendGridアカウントでトランザクションメールテンプレートを作成します
  2. テンプレートに<%body%>、%firstName%、またはその両方が含まれています(両方を試しました)
  3. このノードコードを実行します(構成を入力します)
`'use strict';

var config = {

    apiKey: '',
    from: '',
    to: '',
    templateId: ''

}

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(config.apiKey);

async function sendTest() {

 var newMsg = {

   "from": {
    "name": "Test Script",
    "email": config.from
   },
   "personalizations": [{
    "to": config.to,
    "substitutions": {
     "-firstName-": "Maciejs", 
     "%firstName%": "Maciej",
     "-first_name": "Maciej",
     "%first_name%": "Maciej"
    }
   }],
   "subject": "test subject",
   "content": [{
     "type": "text/plain",
     "value": "Hello, %firstName%!"
    },
    {
     "type": "text/html",
     "value": "<html><p>Hello, %firstName%!</html> "
    }],
    "template_id": config.templateId
 }

   await sgMail.send(newMsg);

}

sendTest();`
  1. 配信された電子メールでは何も置き換えられないことに注意してください。 繰り返しますが、curlで完全に機能します。

SendGridエディターのテンプレートのスクリーンショットと受け取ったメールも添付しています
screenshot from 2017-12-08 10-36-26

技術的な詳細:

  • sendgrid-nodejsバージョン:6.1.4
  • Node.jsバージョン:8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

最も参考になるコメント

昨日私と同じように必死になっているすべての人に:v3 APIでは、 substitutions代わりにdynamic_template_dataを使用する必要がありますが、これはまだどこにも文書化されていません!

次に使う{{var_name}}メールテンプレート内とdynamic_template_data: { var_name: "var_value" } API呼び出しでを。

全てのコメント20件

@MaciejKrawczyk setSubstitutionWrapperを使用して、 substitutionsからラッパーを省略してみましたか?

例:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

この方法で一度に複数のラッパーを実行する方法はわかりませんが、substitution属性でラッパーを指定しないことで、このバージョンでサブを機能させることができました。 私の潜水艦は
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

できます。 ありがとうございました!

@kmcurryを助けるために飛び込んでくれてありがとう!

@MaciejKrawczykを稼働させていただき、ありがとうございます。

これは間違いなくREADMEに入れる必要があります! これを理解するのに2時間かかります!

@LASkuma

それは良くないね :(

このドキュメントは役に立ちますか? もしそうなら、あなたが最初に助けを求めた場所を教えていただければ、そこに明確なリンクがあることを確認できますか?

ありがとう!

敬具、

エルマー

@thinkingseriousはい。 このドキュメントは大いに役立ちました。 ただし、置換キーにラッパーを含める必要がある公式Webサイトから来たので、ユースケースにはあまり注意を払いませんでした。

こんにちは@LASkuma

公式サイトから来たとおっしゃる場合、どのURLを参照しているのか教えていただけますか? ありがとう!

こんにちは@thinkingserious
私はこのページを参照していました。 試してみるセクションでも、ラッパーが含まれている置換キーがあります。 ドキュメントを読んだ後、Nodeライブラリは当然ドキュメントと一致していると思いました。

ありがとう@LASkuma!

それは本当に役立つフィードバックです。

しかし、私は解決策についてはよくわかりません。 これらのドキュメントは、APIを直接操作するのではなく、ヘルパーライブラリの1つを使用することを希望するユーザー向けです。

先ほど、このドキュメントをREADMEに含める必要があるとおっしゃいました。 ここのことですか? そこで、置換ユースケースを具体的に呼び出す必要がありますか?

よろしくお願いします!

敬具、

エルマー

これは間違いなくreadmeにあるはずです。 私はすべてを試し、SendGrid apiリファレンスのすべてのドキュメントを読み、GitHubにあるすべて(私は思った)、サポートに連絡し、 @ kmcurryがなければ、独自のapiラッパーを作成します。はるかに簡単で混乱が少ないと思います。ヘルパーライブラリがAPI自体とまったく同じように機能するかどうか(スレッドの最初にある私のコードを参照してください)。

ありがとう@MaciejKrawczyk

これは非常に良いフィードバックであり、私はこれをチームのバックログに追加して、より深く掘り下げました。 このスレッドの更新を提供します。

ありがとう!

敬具、

エルマー

これは行われますか? 私は同じ問題を抱えています。

こんにちは@sriharrsha

@kmcurryの提案を試し

未だに。 動作するかどうかはすぐに更新します。
返事が遅れて申し訳ありません。

昨日私と同じように必死になっているすべての人に:v3 APIでは、 substitutions代わりにdynamic_template_dataを使用する必要がありますが、これはまだどこにも文書化されていません!

次に使う{{var_name}}メールテンプレート内とdynamic_template_data: { var_name: "var_value" } API呼び出しでを。

@tkafkaなんてこった! この男に感謝します、過去2日間これで私の髪を抜いてきました。

@tkafkaどうもありがとう! これはとてもイライラします! 私の一日の3時間かかりました...

誰かが同じものを探している場合のコード全体を次に示します。

var sendgrid = require('@sendgrid/mail');
sendgrid.setApiKey(env.sendgridApiKey);
sendgrid.setSubstitutionWrappers('{{', '}}');

var newMsg = {
      "from": {
       "name": "Your Company",
       "email": env.businessEmail
      },
      "personalizations": [{
       "to": order.email,
       "dynamic_template_data": {"order_id": "1234", "first_name": "Max", "last_name": "Mustermann"}
      }],
      "subject": "test subject",
      "content": [{
        "type": "text/plain",
        "value": "Hello, {{firstName}}!"
       },
       {
        "type": "text/html",
        "value": "<html><p>Hello, {{'firstName}}!</html> "
       }],
       "template_id": env.sendgridOrderConfirmationTemplateId
    };
    console.log("Sending confirmation email...")
    return sendgrid.send(newMsg);

sendgridのドキュメントは、控えめに言っても恐ろしいものです。

みなさん、こんにちは、

進捗状況については、この問題を参照し

敬具、

エルマー

ああ、 dynamic_template_data 。 私はあなたの小さなパズルを解きました! :スマイル:

他のtypescriptユーザーの場合-ファイルmail.d.ts作成します:

import {MailData} from "@sendgrid/helpers/classes/mail";

// see https://github.com/sendgrid/sendgrid-nodejs/issues/638

declare module "@sendgrid/helpers/classes/mail" {
    export interface MailData {
        dynamic_template_data: {[key: string]: string};
    }
}

ありがとう@xduseko

このページは役に立ちましたか?
0 / 5 - 0 評価