Sendgrid-nodejs: أضف دعم القالب الديناميكي

تم إنشاؤها على ٢٤ يوليو ٢٠١٨  ·  30تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

ملخص القضية

في 24/7/2018 ، أطلق فريقنا علنًا محتوى ديناميكيًا لقوالب المعاملات. إنه متاح الآن لجميع العملاء الذين يرسلون الإصدار 3 من واجهة برمجة تطبيقات إرسال البريد. كرر القوائم ، والتعامل مع الشروط الشرطية والمزيد ، وذلك بفضل الدعم الأصلي لمجموعة فرعية من بنية المقاود!

يمكن العثور على مزيد من المعلومات في إعلان ما بعد المدونة .

يمكنك حاليًا استخدام هذه الميزة عن طريق إنشاء نص الطلب يدويًا كما هو موضح هنا .

الآن ، نحتاج إلى إنشاء كود مساعد ( هذا مكتمل ) وأمثلة لهذا SDK.

معايير القبول

  • [[COMPLETE] (https://github.com/sendgrid/sendgrid-nodejs/pull/691#issuecomment-407490342)] [تنفيذ مساعد مشابه لما لدينا للنماذج القديمة] (https://github.com /sendgrid/sendgrid-nodejs/blob/master/packages/mail/USE_CASES.md#transactional-templates)
  • قم بتحديث مثال USE_CASES.md لتوضيح القوالب الديناميكية الجديدة باستخدام المساعد وإعادة تسمية المثال الحالي إلى Legacy

توثيق

medium docs update

التعليق الأكثر فائدة

يرجى تحديث الوثائق الخاصة بك - لقد قضيت ساعة للتو في محاولة معرفة سبب عدم عمل البدائل مع v3 API.

ال 30 كومينتر

يرجى تحديث الوثائق الخاصة بك - لقد قضيت ساعة للتو في محاولة معرفة سبب عدم عمل البدائل مع v3 API.

اعتذاري عن التجربة السيئة @ jharris-code.

لقد أضفت تصويتك إلى هذه المشكلة لمساعدتها في الحصول على الأولوية. أعتقد أنه سيتم تحديثه قريبًا لأن لدينا PR # 711.

إنه لأمر سخيف للغاية أن يؤدي غياب التوثيق إلى منع إصدار الكود الفعلي.

مرحبًا catamphetamine ،

تم إصدار الكود في

مع أطيب التحيات،

إلمر

thinkingserious أوه ، رائع ، في الواقع لم يخطر ببالي تحديث إصدار المكتبة.
سأحاول ذلك ، تشك.

ملاحظة للمستخدمين: عند استخدام القوالب ، قم بتمرير dynamic_template_data بدلاً من substitutions .

الآن عليك تغيير "الاستبدالات" إلى "dynamic_template_data:"

ولا تستخدم القوالب المقاود بعد الآن في الحاجة إلى تحديد "أغلفة الاستبدال"

لا يزال هذا المثال في حالات الاستخدام الخاصة بك يستخدم البدائل بدلاً من dynamic_template_data. تحديث Plz ، لقد استغرق الأمر بالتأكيد بضع ساعات من اللعب باستخدام SDK والبحث قبل أن أجد هذا الموضوع. (كما أن مستندات api الخاصة بك لا تذكر أي شيء حول هذا الأمر ، وهو ما لم يساعد أيضًا.
أيضًا ، لا يبدو أن أغلفة الاستبدال تعمل مع dynamic_template_data على الإطلاق. بغض النظر عن تضمين زوج القيمة الرئيسية substitutionWrappers: ['*|', '|*'] في كائن رسالتي ، لم يتم ملء سوى قوالب القوالب الملفوفة بأقواس متعرجة. (هل تجبرون الآن الجميع عمدًا على استخدام بنية المقود للقوالب؟)

اعتذاري @ josh-yonomi ،

لقد قمت بتحديث الوثائق بناءً على ملاحظاتك.

بالنسبة إلى قوالبنا الجديدة ، فإنهم يستخدمون بناء جملة المقاود. لا تزال القوالب القديمة تعمل كما كانت من قبل.

مع أطيب التحيات،

إلمر

أتلقى البريد الإلكتروني ولكن البدائل لا تعمل. ما يمكن أن يسبب هذه المشكلة؟

const msg = {
    to: email,
    from: sendGridMail,
    templateId: emailTemplate.confirmationEmail,
    dynamic_template_data: {
      firstName: firstName,
      lastName: lastName,
      link: link
    }
  };

تحرير عبر Thinkingserious

هل تمانع في إخبارنا أين تكمن المشكلة؟ نود أن نفهم إحباطاتك حتى نتمكن من تحسينها.

@ drav96 ،

هل تمانع في مشاركة شكل القالب الخاص بك؟

مع أطيب التحيات،

إلمر

لماذا تجردون الأحرف الخاصة في أغلفة الاستبدال ؟؟

dynamic_template_data: {
      'foo-bar': 'wtf',
      'bar_baz': 'wtf',
      'baz.bro': 'wtf',
      'foo': 'wtf'
    }

فقط {{foo}} إرجاع سلسلة wtf في رسائل البريد الإلكتروني.

لست متأكدًا من larafale ، لكن هذا بالتأكيد لا يبدو معقولًا. بالنظر إلى الكود المصدري لـ SDK هذا ، لا أرى أين يتم تعديل هذه المفاتيح.

هل تمانع في إنشاء مشكلة منفصلة لهذه المشكلة وتضمين شكل نموذج HTML الخاص بك؟ سأضع علامة على المشكلة الجديدة على أنها خطأ وسأحاول إعادة إنتاجها وإصلاحها إذا لزم الأمر.

أهلا،

لذلك ، أحاول إرسال نموذج بريد إلكتروني ديناميكي ، ومع ذلك ، لم أتمكن من استخدام البدائل أو dynamic_template_data .
يحتوي القالب على علامات مثل {{fullname}} أو {{date}} وتم إرسال هذه الخصائص إلى الوظيفة send :

const msg = {
        to,
        from,
        templateId: template.id,
        dynamic_template_data: substitutions,
    };

    return sgMail.send(msg)

لقد أكدت أن الكائن substitutions له الخصائص الصحيحة مع القيم الصحيحة لكن الاستبدال لا يعمل.

أي فكرة عما أفعله خطأ؟

شكرا.

تضمين التغريدة
الهيكل صحيح. كان لي نفس المشكلة.
كان الحل هو إلغاء تثبيت حزمة sendgrid من مشروعي وتثبيته مرة أخرى
دعني اعلم ان كانت تعمل ل
const msg= { to: email, from: sendGridMail, templateId: emailTemplate.requestDemoEmail, dynamic_template_data: { name: data.name, email: data.email, } };

@ drav96 شكرا

إضافة ما آمل أن يكون بعض الوثائق النهائية بعد إضاعة ساعة أخرى من وقتي في هذا. (أولاً ، شكراً لكل من ضيع ساعات من وقته قبلي).

  1. إذا كان معرف القالب يبدأ بـ d- ، فلن يعمل substitutions ، ويجب عليك استخدام CAMEL-CASE dynamicTemplateData (انظر هنا ، حيث يتم تحويل مفاتيح snake_case إلى حالة الجمل على أي حال )
  2. إذا كان نموذجك يبدأ بـ d- ، فسيتم تجاهل setSubstitutionWrappers بصمت ، ويجب عليك استخدام {{ و }} في القوالب الخاصة بك

إضافة ما آمل أن يكون بعض الوثائق النهائية بعد إضاعة ساعة أخرى من وقتي في هذا. (أولاً ، شكراً لكل من ضيع ساعات من وقته قبلي).

  1. إذا كان معرف القالب يبدأ بـ d- ، فلن يعمل substitutions ، ويجب عليك استخدام CAMEL-CASE dynamicTemplateData (انظر هنا ، حيث يتم تحويل مفاتيح snake_case إلى حالة الجمل على أي حال )
  2. إذا كان نموذجك يبدأ بـ d- ، فسيتم تجاهل setSubstitutionWrappers بصمت ، ويجب عليك استخدام {{ و }} في القوالب الخاصة بك

في حالتي ، يعمل مع dynamic_template_data حتى إذا كان في معرف القالب الحرف d-

نعم ، إنه يعمل مع مفاتيح حالة الثعبان ، لكن يبدو كما لو أن المطورين قد التزموا داخليًا بحافظة الجمل (انظر السطر الذي ربطته به في تقريري أعلاه). وبالتالي ، أوصي باستخدام كل كود جديد حالة الجمل.

مرحبا @ kael-shipman ،

نشكرك على الوقت الذي أمضيته في المساعدة ، نحن نقدر ذلك كثيرًا!

هل حدث أن رأيت هذه الوثائق ؟ إذا لم يكن الأمر كذلك ، فهل تمانع في وصف مسار اكتشافك الذي أدى إلى إضاعة ساعة. أود ألا يحدث ذلك مرة أخرى وأعتذر عن التجربة السيئة.

مع أطيب التحيات،

إلمر

thinkingserious ، شكرًا لتفهمك واستعدادك لتحسين الوضع. وآسف للحصول على مقتطف هناك. كان يوم طويل جدا ؛).

على أي حال ، لا تكمن المشكلة في وجود التوثيق الصحيح في مكان ما ، بل تكمن في أن الكثير من الوثائق القديمة لا تزال عالقة في عمليات بحث Google. لقد أجريت بحثًا عن "حقول نموذج Sendgrid" (الآن) وكانت النتيجة الأولى غير الإعلانية هي هذه ، والتي بكل الدلائل هي الوثائق الرسمية ، ولكن من الواضح أنها قديمة. ليس ذلك فحسب ، بل إنه يحتوي أيضًا على تنسيقين مختلفين للاستبدال ( -firstName- و %firstName% ) ويقول فقط "ما تستخدمه قد يعتمد على مكتبة SDK التي تستخدمها" ، وهو ما يبدو غير مناسب حقًا ، مع الأخذ في الاعتبار من المفترض أن تشير جميع مكتبات SDK إلى نفس المعبد الفردي (الذي يحتوي على نمط واحد فقط من علامات الاستبدال).

في تجربتي مع sendgrid ، بينما أقدر بشدة ما تم بناؤه ، فإن هذا الالتباس في التوثيق هو في الواقع القاعدة وليس الاستثناء. أعلم أنه من المحتمل أن يتقدم للأمام بقدر ما هو الحال مع بقية عالم البرامج ، ولكن سيكون من الجيد أن تستغرق شهرًا أو نحو ذلك لمجرد تطبيع جميع الوثائق ، ووضع أرقام الإصدارات عليها ، وما إلى ذلك ، وربما تفعل شيئًا حيال أعلى جوجل يضرب.

على أي حال ، شكرا مرة أخرى!

أيضًا ، لا تزال الوثائق التي قمت بربطها تظهر dynamic_template_data في حالة ثعبان ، وإذا كان هذا صحيحًا ، فأنا لست متأكدًا من سبب تحويل الكود نفسه إلى camelCase. كما هو مذكور أعلاه ، أدرك أن حالة الثعبان تعمل ، ولكن بالنظر إلى الكود ، لا يبدو أن الوثائق يجب أن توصي باستخدامها.

مرحبا @ kael-shipman ،

شكرًا لك على الوقت الذي قضيته في تقديم ملاحظات مفصلة!

فيما يتعلق بالرابط الذي قدمته ، فإن هذه الوثائق تشير إلى SendGrid SMTP API ، وليس SendGrid v3 REST API التي تدعمها SDK. ومع ذلك ، لا ينبغي أن يتوقع منك معرفة ذلك. سأوجه انتباه فريق التوثيق لدينا إلى هذه المشكلة لمعرفة ما إذا كانت هناك طريقة لتوضيح ذلك.

لقد قمنا مؤخرًا بتحديث وإعادة إطلاق وثائقنا مفتوحة المصدر . أتمنى أن تجد سهولة في التنقل.

سوف أقوم بإصلاح README لاستخدام camelCase من أجل الاتساق. شكرا لالتقاط ذلك ولفت انتباهنا!

شكرًا مرة أخرى وكعراب عن تقديرنا لملاحظاتك التفصيلية ، نود أن نقدم لك بعض الهدايا الرائعة . يتمتع!

مع أطيب التحيات،

إلمر

مرحبًا ، شكرًا: د

يوم الثلاثاء 18 سبتمبر 2018 الساعة 6:09 مساءً Elmer Thomas [email protected]
كتب:

مرحبا @ kael-shipman https://github.com/kael-shipman ،

شكرًا لك على الوقت الذي قضيته في تقديم ملاحظات مفصلة!

فيما يتعلق بالرابط الذي قدمته ، فإن هذه الوثائق هي مرجع
إلى SendGrid SMTP API ، وليس SendGrid v3 REST API التي تعد SDK
يدعم. ومع ذلك ، لا ينبغي أن يتوقع منك معرفة ذلك. سأجلب
هذه المشكلة إلى عناية فريق التوثيق لدينا لمعرفة ما إذا كان هناك ملف
طريقة لتوضيح ذلك.

لقد قمنا مؤخرًا بتحديث وإعادة إطلاق وثائقنا مفتوحة المصدر
https://sendgrid.com/blog/how-to-get-the-most-from-sendgrids-new-knowledge-center/ .
أتمنى أن تجد سهولة في التنقل.

سوف أقوم بإصلاح README لاستخدام camelCase من أجل الاتساق. شكرا لك على
اصطياد ذلك ولفت انتباهنا!

شكرًا مرة أخرى وكعربون لتقديرنا على التفاصيل الخاصة بك
ردود الفعل ، نود أن نقدم لك بعض غنيمة
https://dx.sendgrid.com/swag . يتمتع!

مع أطيب التحيات،

إلمر

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/703#issuecomment-422588492 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ADUIglZIH2d7imy-H7dekTo5A-v2Xau8ks5ucX0agaJpZM4Vev8b
.

يمكنني الحصول على dynamic_template_data للعمل مع متغيرات البريد الإلكتروني العامة ، ولكن ماذا لو احتجنا إلى إضافة بيانات ديناميكية لكل مستلم أيضًا؟ على سبيل المثال ، أرقام الطلبات ، وكمية الطلب ، وما إلى ذلك. لا أرى حالة استخدام لهذا في المستندات ، ولكن ربما أغفلها.

ملاحظة للمستخدمين: عند استخدام القوالب ، قم بتمرير dynamic_template_data بدلاً من substitutions .

catamphetamine لسوء الحظ ، لقد قمت بالتخفيض في التصويت لأنني قضيت الكثير من الوقت في محاولة معرفة سبب عمل كود كل شخص مع dynamicTemplateData ، ولكن في حالتي تمت إزالة البدائل ببساطة. أتمنى فقط أن يتمتع الآخرون بتجربة أفضل.

نسختي:
"@sendgrid/mail": "^6.3.1"

تبين أنه بالنسبة لي كان علي أن أفعل ما يلي (عكس ما يقوله الناس):

// This seems to be the default, however, to avoid unexpected API changes,
// I'd rather set this manually
setSubstitutionWrappers("{{", "}}");

{
      subject: EMAIL_SUBJECT_ONBOARDING,
      templateId: "templateId",
      personalizations: [{
        to,
        // NOT WORKING WITH THIS ❌
        // dynamicTemplateData: {
        //   senderName: EMAIL_FROM_NAME,
        //   senderAddress: "an actual adress",
        // },

        // WORKS WITH THIS ✅
        substitutions: {
            senderName: EMAIL_FROM_NAME,
            senderAddress: "an actual adress",
        },
    }],
}

thinkingserious أحب الأداة. يرجى الاستمرار في تحسين المستندات ، وحالات الغطاء ، وما إلى ذلك 🎉❤️


تحديث:

بفضل catamphetamine التصويت السلبي. لقد جعلني أفكر أنه قد يكون substitutions عمل لأنني فعلت setSubstitutionWrappers("{{", "}}"); . للأسف لا. لا أعرف ما حدث ، قد أكون متعبًا ، لكن dynamicTemplateData يعمل . لاحظ ، أنها camelCase _ (انظر تعليق @ kael-shipman) _ أرى معظم أمثلة حالة الثعبان. أيضًا ، أنا أستخدم أنواع TS لـ sendgrid. لا يوجد مفتاح snake_case متاح في التعريف.


التحديث 2:

فيما يتعلق بالأنواع المتوفرة. لقد وجدت dynamic_template_data في نوع PersonalizationJSON . إذا كنت تستخدم ما يلي:
import { send } from "@sendgrid/mail";
ثم بعد التحقق من المعلمة الأولى للإرسال ، سترى MailData الذي يحتوي على التعريف التالي:

export interface MailData {
  // ...
  personalizations?: PersonalizationData[],
  // ...
}

ثم أعثر على النوعين التاليين:

export interface PersonalizationData {
  // omitted keys...
  dynamicTemplateData?: { [key: string]: string; };
  customArgs?: { [key: string]: string };
  sendAt?: number;
}

export interface PersonalizationJSON {
  // same omitted keys...
  dynamic_template_data?: { [key: string]: string; };
  custom_args?: { [key: string]: string; };
  send_at?: number;
}

أخيرًا ، أحصل على dynamic_template_data للعمل باستمرار مثل:

{
    templateId: "d-templateId",
    dynamic_template_data: { name: "elton yet again"}, // <-- either here
    personalizations: [{
        to,
        dynamic_template_data: { name: "Elton again" }, // <-- or here
    }],
}

thinkingserious من الواضح أن هناك مشكلات في تعريف النوع تحتاج إلى

حسنًا ، أريد التحقيق مرة أخرى. أنا مندهش لأنه لا يعمل الآن بالنسبة لي dynamicTemplateData ولا substitutions .

تحديث:
قلبت بعض الطاولات ، لكنها عملت على تحديث تعليقي السابق.

أخيرًا ، أحصل على dynamic_template_data للعمل باستمرار مثل:

{
    templateId: "d-templateId",
    dynamic_template_data: { name: "elton yet again"}, // <-- either here
    personalizations: [{
        to,
        dynamic_template_data: { name: "Elton again" }, // <-- or here
    }],
}

كانت هذه نقطة مهمة بالنسبة لي. كنت أحاول تعيين الموضوع في نموذج المعاملات بشكل مختلف عن رسائل البريد الإلكتروني مقابل رسائل البريد الإلكتروني. لقد نجحت عندما وضعت خاصية dynamic_template_data داخل مصفوفة التخصيص كما هو مذكور أعلاه.

    const msg = {


         personalizations: [
            {
              to: req.body.to,
              dynamic_template_data : {
                subject: "Just to adsf...",
                full_name_from: req.body.full_name_from,
                full_name_to: req.body.full_name_to,
                manager: req.body.manager,
                message: req.body.message,
                badge: req.body.badge,
                badge_image: 'https://asdf' + req.body.badge_image
             }
            },
            {
              to: req.body.manager,
              dynamic_template_data : {
                subject: req.body.full_name_from + ' received a asdf asdf',
                full_name_from: req.body.full_name_from,
                full_name_to: req.body.full_name_to,
                manager: req.body.manager,
                message: req.body.message,
                badge: req.body.badge,
                badge_image: 'https://asdf' + req.body.badge_image
             }
            }
          ]
    };

الحل الذي نجح معي هو وضع dynamic_template_data داخل كائن التخصيص بالطريقة الدقيقة الموضحة أدناه:

    "personalizations": [
        {
              "dynamic_template_data": {
            "fullname": "full Name",
            "useremail": ":[email protected]",
            "userphone": "56456",
            "usermsg": "tex fdsfgasdf t"
    },
            "to": [
                {
                    "email": "[email protected]"
                }
            ],
            "cc": [
                {
                    "email": "[email protected]"
                }
            ]
        }
]
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات