メッセージを送る ~要領は同じ!

Silicon Valley Super Ware

2020年7月20日


メッセージを送る ~要領は同じ!

今日は、メッセージを送る処理についてです。
やる事は前回説明した、宛先リストの取得や、登録送信者の取得と同じです。

メッセージの情報を送る事が主な違いです。

これは、5月に作成したお問合せフォームに似ている部分です。 フォームの情報を取り込んで、SendGridが要求する形でメッセージを作成して 送るだけです。

まずは、SendGridのAPIの仕様を確認!

以前作成したお問合せフォームの時は送る情報は以下の通りでした
  • お問合せする人のE-Mail
  • お問合せする人の名前
  • お問合せ件名
  • お問合せ本文
以上の4項目でした。これを、Firebaseに登録するというのが5月に作った 「お問合せフォーム」です。

今回はもう少し複雑な形が要求されています。

宛先は、「To」「Cc」「Bcc」で指定しますが、複数の宛先を指定できるように しているため少し複雑です。
「personalizations」というタグは宛先のオブジェクトの配列でしてします。 その下の要素に含まれるのが、」
  • 「To」の宛先の配列
  • 「Cc」の宛先の配列
  • 「Bcc」の宛先の配列
です。宛先は「email」と「name」の2つのフィールドが含まれます。
結構面倒な構造ですよね?このうち、最低一つの「Toの宛先」が必要です。
そのほかに必要な情報は
  • 「from(送信者)」の情報
  • 「subject(メールの件名)」
  • 「content(メールの本文)」
これらがSendGridを介してメッセージを送る最低限の情報です。 他にもたくさんの要素が指定できます。 メールに添付ファイルなども付ける事ができます。 詳細はSendGridのメールのAPIを参照してください。

今回は、このメッセージの「オブジェクト」をフロントエンドで作って貰って
バックエンドは「転送するだけ」という仕様でサービスを作ります。

SendGridに送るメッセージは?

前回の、宛先リストの取得や、登録送信者のリストの取得の場合は バックエンドからSendGridに送る情報は
  • HTTP Method(前回はGET、今回のメッセージの送信は「POST」)
  • APIのURL
  • 認証の為のAPI Key
の3つでした。今回はこれに加えてメッセージのオブジェクトを「body」の 中に埋め込んど送る事と、データの形式を「json」で送る指定の2項目を加えて 送ります。
this.app.post(
   .API_SEND,
      async (req: express.Request, res: express.Response) => {
         const url: string = CONSTANTS.SG_API_URL + CONSTANTS.SG_API_MAIL;
         const options: any = {
            method: "POST",
            url: url,
            headers: { Authorization: this.authHeader },
            body: {
            personalizations: req.body.personalizations,
               from: req.body.from,
               reply_to: req.body.reply_to,
               subject: req.body.subject,
               content: req.body.content,
            },
            json: true,
         };
         request(
            options,
            (error: any, response: request.Response, body: any) => {
               if (error) {
                  this.errorMessage = error;
                  res.end(JSON.stringify({ result: false, data: error }));
               } else {
                  const sg_message_id: string | string[] | undefined =
                     response.headers["x-message-id"];
                  if (sg_message_id) {
                     res.end(JSON.stringify({ result: true, data: sg_message_id }));
                  } else if (body.errors) {
                     res.end(
                        JSON.stringify({
                           result: false,
                           data: body.errors,
                        })
                     );
                  } else {
                     res.end(
                        JSON.stringify({
                           result: false,
                           data: "Cannot get sg_message_id",
                        })
                     );
                  }
               }
            }
         );
      }
);
こんな感じになります。
分かり易いように、受け取ったオブジェクトを個別に書いていますが、 フロントエンドでSendGridが要求するのと全く同じオブジェクトを作ればこの記述も1行で済ませる事ができます。
送る情報が多いので複雑に見えますが、やっている事は前回のデータを取得するやり方と殆ど同じです。
同じように他のサービスを追加する場合も、SendGridの仕様を見ながら必要な情報を 送信するように仕様に合わせた形のオブジェクトを作れば拡張できます。

完全なサービスにするには、「宛先の登録や削除、更新」、「送付先リストの作成、削除、リスト登録者の追加、削除」
などを作れば、SendGridのWebサイトに行かないで全てWebサービスから行えます

同じことの繰り返しで、あなた独自のメルマガ(ニュースレター)のサービスがつくれます

基本機能は完了!

ここまでで、メルマガやニュースレターを配信するWebサービスの機能が実現できました。
このままでも、基本機能は提供できるので、メッセージ配信のWebサービスとして利用、提供できます。
次回は、幾つか改善できる点があるのでその辺に触れて行きます!
シリコンバレースーパーウエアでは、バックエンドを含めた本格的なWebサービスを短期間で 作れるようになる講座を提供しています。 単純に、Webサービスを作るだけではなく、どのように作って、どのようにビジネスにつなげて 行くかを提供します。また、フリーランスの方だけではなく、就職を考えている方にも 「実践力」を養うことで「即戦力」のエンジニアとしてのスキルを身に着ける事ができます!

興味のある方は今すぐお問合せください!



またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。


Copyright(c) 2020 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム