Sendgrid-nodejs: substitusi tidak berfungsi di template transaksional

Dibuat pada 8 Des 2017  ·  20Komentar  ·  Sumber: sendgrid/sendgrid-nodejs

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

Ringkasan Masalah

Substitusi tidak berfungsi saat menggunakan pustaka ini. Ini berfungsi saat menggunakan curl.

Langkah-langkah untuk Mereproduksi

  1. Buat template email transaksional di akun SendGrid Anda
  2. Memiliki <% body%> di template,% firstName% atau keduanya (Saya mencoba keduanya)
  3. Jalankan kode node ini (isi config)
`'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. Perhatikan bahwa tidak ada yang akan diganti dalam email yang dikirim. Sekali lagi, ini bekerja sempurna dengan curl.

Saya juga melampirkan tangkapan layar template di editor SendGrid dan email yang saya dapatkan
screenshot from 2017-12-08 10-36-26

Detail teknis:

  • sendgrid-nodejs Versi: 6.1.4
  • Versi Node.js: 8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

Komentar yang paling membantu

Untuk semua orang yang putus asa seperti saya kemarin: di v3 API Anda perlu menggunakan dynamic_template_data alih-alih substitutions , ini belum didokumentasikan di mana pun!

Kemudian gunakan {{var_name}} dalam template email dan dynamic_template_data: { var_name: "var_value" } dalam panggilan API.

Semua 20 komentar

@MaciejKrawczyk Sudahkah Anda mencoba menggunakan setSubstitutionWrapper dan menghilangkan pembungkus dari substitutions ?

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

Tidak yakin bagaimana Anda akan melakukan beberapa pembungkus sekaligus dengan cara ini, tetapi saya bisa membuat kapal selam bekerja dengan versi ini dengan tidak menentukan pembungkus di atribut substitusi. Kapal selam saya terlihat seperti
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

Berhasil. Terima kasih!

Terima kasih telah bersedia membantu @kmcurry!

Saya senang Anda aktif dan menjalankan @MaciejKrawczyk!

Ini pasti harus dimasukkan ke dalam README! Biaya saya 2 jam untuk mencari tahu ini!

@LASUMA ,

Itu tidak baik :(

Apakah dokumentasi ini membantu? Jika demikian, dapatkah Anda menunjukkan tempat pertama kali Anda mencari bantuan sehingga saya dapat memastikan bahwa kami memiliki tautan yang jelas di sana?

Terima kasih!

Salam hangat,

Elmer

@Serius ya. Dokter ini sangat membantu. Namun, karena saya berasal dari situs resmi, di mana kunci pengganti harus menyertakan pembungkusnya, saya tidak terlalu memperhatikan kasus penggunaan.

Hai @LASuma ,

Ketika Anda mengatakan Anda datang dari situs web resmi, dapatkah Anda memberi tahu saya URL apa yang Anda maksud? Terima kasih!

Hai @serius_hatii ,
Saya mengacu pada halaman ini . Bahkan bagian mencobanya memiliki kunci pengganti dengan pembungkusnya disertakan. Setelah membaca dokumentasi, saya pikir pustaka Node secara alami konsisten dengan dokumentasinya.

Terima kasih @LASkuma!

Itu umpan balik yang sangat membantu.

Saya tidak yakin dengan solusinya. Dokumen tersebut adalah untuk mereka yang ingin berinteraksi dengan API kami secara langsung vs. menggunakan salah satu perpustakaan pembantu kami.

Sebelumnya Anda menyebutkan bahwa kami harus menyertakan dokumentasi ini di README. Apa maksudmu disini ? Haruskah kita secara khusus menyebutkan kasus penggunaan substitusi di sana?

Sekali lagi terima kasih atas bantuan Anda!

Salam hangat,

Elmer

Ini pasti harus di readme. Saya mencoba semuanya, saya membaca semua dokumen di referensi api SendGrid, semua yang ada di GitHub (saya pikir), menghubungi dukungan dan saya akan membuat pembungkus api saya sendiri jika bukan karena @kmcurry Saya pikir itu akan jauh lebih mudah dan tidak membingungkan jika perpustakaan pembantu akan bekerja persis seperti API itu sendiri (lihat kode saya di awal utas).

Terima kasih @MaciejKrawczyk ,

Ini adalah umpan balik yang sangat bagus dan saya telah menambahkan ini ke backlog tim kami untuk mendalami lebih dalam. Kami akan memberikan pembaruan pada utas ini.

Terima kasih!

Salam hangat,

Elmer

Apakah ini sudah selesai? Saya mengalami masalah yang sama;

Hai @rizarrha ,

Sudahkah Anda mencoba saran @kmcurry ?

Belum. Saya akan memperbarui jika berhasil atau tidak segera.
Maaf atas balasan yang terlambat.

Untuk semua orang yang putus asa seperti saya kemarin: di v3 API Anda perlu menggunakan dynamic_template_data alih-alih substitutions , ini belum didokumentasikan di mana pun!

Kemudian gunakan {{var_name}} dalam template email dan dynamic_template_data: { var_name: "var_value" } dalam panggilan API.

@tkafka ya Tuhan! terima kasih untuk pria ini, telah menarik rambut saya selama 2 hari terakhir.

@tkafka Terima kasih banyak! Ini sangat membuat frustrasi! Butuh waktu 3 jam dari hariku ...

Berikut ini seluruh kode jika ada yang mencari yang sama:

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);

Dokumentasi sendgrid sangat buruk untuk sedikitnya.

Halo semuanya,

Silakan lihat masalah ini untuk kemajuan. Kami sedang mengerjakan pembaruan untuk C #, lalu Java, lalu SDK ini tepat setelah itu. Terima kasih atas kesabaran Anda dan maaf atas keterlambatan ini.

Salam hangat,

Elmer

Hah, dynamic_template_data . Saya memecahkan teka-teki kecil Anda! :tersenyum:

Untuk pengguna skrip ketikan lainnya - Buat file 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};
    }
}

Terima kasih @xduseko !

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

AAverin picture AAverin  ·  39Komentar

onesien picture onesien  ·  23Komentar

froquette picture froquette  ·  29Komentar

falconmick picture falconmick  ·  26Komentar

thinkingserious picture thinkingserious  ·  30Komentar