読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

堀北真希さんご結婚おめでとうございます(´;ω;`)ブワッ

堀北真希さんファンクラブ会員番号11番を持ってるキクタローです。

堀北さん結婚おめでとうございます!堀北さんがご自身が幸せであれば、ファンとしても何よりです(>_<;

このブログは仕事で使ってるJavaを中心に書いてるブログなのですが…今までも技術に絡めて「堀北真希さん」が多々登場していました。

多分一番多いのはサンプルコードですが、JavaFXやTwitter4Jなどと絡めて色々遊んでもきました。

せっかくなので、思い出がてら掘り起こして、タグに「堀北真希」さんを作成しました。

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com
これで実際に作成してみたbotは以下です(^^;少し前にとまっちゃってますが。

twitter.com

kikutaro777.hatenablog.com

本当におめでとうございます(´;ω;`)ブワッ

f:id:kikutaro777:20150822215331j:plain

堀北真希

堀北真希とは編集

SendGrid LabsのThreadsを利用したイベントドリブンな自動メール送信

最近クラウドメールサービスのSendGridで色々と遊んだりしているのですが、色々調べていたら「Threads」なるサービスを見つけました。

threads.io

これはSendGrid Labs(SendGridの中で先端的な取り組みしてるチーム?ですかね?)が提供しているサービスの1つです。

labs.sendgrid.com

トップページで「AUTOMATED BEHAVIOR-DRIVEN EMAIL」とありますが、何かのイベントを契機にSendGrid経由でメール送信するのを簡単にしてくれるサービスです。
2015/8/1現在ではまだベータ版で、無償で使えます。なのでSendGridアカウント持ってる人は色々遊べるのではないかなーと。

f:id:kikutaro777:20150801022107j:plain

イベントは大きく分けて、次の2つの方法によって起こせます

  1. 直接JavaScriptでThreadsを呼ぶ
  2. Segment.comというサービスからThreadsと連携する

両方とも試して簡単にできたので、まず今回は1の方法についてまとめてみます。

設定の流れ

Threadsにユーザ登録して、ログインすると以下のようなDashboardが表示されています。

f:id:kikutaro777:20150801022728j:plain

手順がわかりやすい図になってる形ですね。

  1. イベントの送信(Send events)
  2. SendGridとの接続設定(Connect SendGrid)
  3. 送信元メールの設定(Add Sender)
  4. 送信メールテンプレートの設定(Create Template)
  5. ワークフロー(発火条件)の設定(Create Workflow)

です。

イベントの送信(Send events)

ここでは前述した2つのイベント送信の方法の説明があります。
Segment.comを利用する際にはEvent Keyが必要なのですが、その情報も表示されています(左下)。

f:id:kikutaro777:20150801023941j:plain

で、この右側にある「Live Log」ですが、イベント送信するとここがリアルタイムで更新されていきます。

f:id:kikutaro777:20150801024508j:plain

英語の説明にもあるように、表示されているJavaScriptをコピペするだけでいいです(^^;簡単
今回は自分のローカルに立ってるWebサーバのHTMLに埋め込みました。

<!DOCTYPE html>
<html>
    <head>
        <title>Start Page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    
    <body>
        <h1>Threadsで遊んでみる!</h1>
        <script type="text/javascript">
          <!-- Threads画面でCopyしたJSを張り付けるだけ -->
        </script>
    </body>
</html>

表示してみます。

f:id:kikutaro777:20150801024814j:plain

で、Live Logみてみると

f:id:kikutaro777:20150801024831j:plain

出てきた!

クリックすると、もう少し詳細な属性情報が確認できます。

f:id:kikutaro777:20150801024959j:plain

sourceで「threads」となってますが、例えばこれがsegment.com利用すると下図のように「segment」とでます。

f:id:kikutaro777:20150801025257j:plain

これだけでも何か楽しい(^^;

この後の設定は、このLive Logで出るイベントが契機としてSendGrid経由でメール送信できるようにするものです。

SendGridとの接続設定(Connect SendGrid)

SendGridのアカウントがあれば「connect」を押します。(なければ作成が必要です)

f:id:kikutaro777:20150801025522j:plain

SendGrid側への各種操作のパーミッションが求められるので許可します。

f:id:kikutaro777:20150801025736j:plain

これだけ。設定が完了するとDashboardで「Completed」に変わるので、どこまで設定完了してるか、わかりやすいです。

f:id:kikutaro777:20150801025756j:plain

送信元メールの設定(Add Sender)

メールの送信元情報を設定します。From emailは一応Verifyの確認メールがそこに飛ぶので許可する必要があります。

f:id:kikutaro777:20150801030020j:plain

Verifyが完了すると一覧で「Verified」とStatusが変わるので、これで準備OKです。

f:id:kikutaro777:20150801030238j:plain

送信メールテンプレートの設定(Create Template)

続けて送信するメールのテンプレートを設定します。
この辺、SendGridのテンプレートとか引っ張ってくれると楽なんだけどなぁ、と思いつつ、ちょっと見当たらなかった。

f:id:kikutaro777:20150801030539j:plain

Senderの所はプルダウン式に、先ほど登録したSender情報がでてくるので選ぶだけです。
テンプレートはHTMLとPlain-text、それぞれで書けます。

あとは保存するだけ。

  1. ワークフロー(発火条件)の設定(Create Workflow)

最後に、イベントをベースにどういう条件で発火させるのか、をワークフローで設定します。

f:id:kikutaro777:20150801031401j:plain

とりあえず試したのは、該当URLのWebページが開かれたら、ある特定のメールアドレスにメールを飛ばすというものです。
Conditionで「Page View」を選んで、Single Actionで「Send email」を選択してます。

ちなみにConditionとSingle Actionの他メニューとしては次のようなものがあります。

f:id:kikutaro777:20150801031625j:plain

f:id:kikutaro777:20150801031901j:plain

User Trait辺りはまだよくわかってないです(´・ω・`)

特定のメールアドレスはSpecific emailを選ぶと、メアドが打てます。

f:id:kikutaro777:20150801032041j:plain

これで全て「Completed」になり準備万端です。

f:id:kikutaro777:20150801032314j:plain

Identifyの追加

で、再び最初のLive Logで確認しながらイベントを起こしたのですが、メールが送信されない orz

な、なぜ、と調べたらIdentifyをつけないといけないとのことです。support.threads.io

最初にコピペしたJavaScriptにidentifyの呼び出しを追加

threads.load("igVCDv"),threads.page()}}(window,document);
threads.identify('userId', { email: 'userId@xxxx.co.jp' });

Live LogみるとIdentifyも識別されて、無事メールが飛びました!
f:id:kikutaro777:20150801032900j:plain

受信したメール

f:id:kikutaro777:20150801033013j:plain

ちゃんとトリガーかかるとWorkflowsのStatsで「X times triggered」のところに回数がでるので、発火したかどうか確認できます。

f:id:kikutaro777:20150801033151j:plain

細かく書いたので、長く感じますが、既にアカウントとか持ってたりすれば5~10分くらいでできちゃうかと。

時間取れれば次にSegment.comから使ったほうも書きたい。そちらだとJavaからも遊べるんかな。

SendGrid Web API V3をUnirest for Javaでコールする -認証-

SendGrid Web API V3では認証方法が増えて、ベーシック認証やAPIキーを利用することができるみたいです。

API v3 Overview - SendGrid Documentation | SendGrid

f:id:kikutaro777:20150720193244j:plain

先日使ってみたHTTPクライアントライブラリのUnirest for Javaは、元々このAPI叩くために触ってました(^^;
全然利用例を書いていないのにはてブのったりして焦りました…。kikutaro777.hatenablog.com

Basic認証

SendGridで登録したユーザとパスワードをコロンでつなげてBase64で変換します。
例えば、ユーザが「Aladdin」でパスワードが「open sesame」の場合は「Aladdin:open sesame」をBase64で変換します。

今回は次のWebサイト使って変換しました。

www.base64encode.org
f:id:kikutaro777:20150720231241j:plain

ちなみにAladdinとopen sesameはUSのWikipediaのBasic認証の解説ページからでした(^^;
Basic access authentication - Wikipedia, the free encyclopedia

ここまで準備できたら、あとは次のように呼び出すだけ。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .header("Authorization", "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
                .asJson();
System.out.println(ret.getBody());

SendGridではメールのひな形(テンプレート)を作れるのですが、それを取得するものです。
結果はJSONで次のような情報が返ってきます。

{
    "templates": [
        {
            "id": "8832dabe-3515-47ac-a06d-f8852970556a", 
            "name": "kikutaro_template", 
            "versions": [
                {
                    "active": 1, 
                    "id": "37268f35-0ed2-4c55-bf1a-593a677b7f43", 
                    "name": "kikutaro_template Version 1", 
                    "subject": "<%subject%>", 
                    "template_id": "8832dabe-3515-47ac-a06d-f8852970556a", 
                    "updated_at": "2015-07-18 10:23:53"
                }
            ]
        }
    ]
}

今回はテンプレートを全て取得するものでしたが、基本的にREST形式となっていて

  • 全てのテンプレートを取得
  • テンプレートIDを指定して一本引き
  • テンプレートの作成(POST)
  • テンプレートの編集(PATCH)
  • テンプレートの削除(DELETE)

などの操作がAPIからできます。この辺はまた別途使っていきたい。

なお、UnirestではBASIC認証に対応していて、次のように書くこともできます。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .basicAuth("Aladdin", "open sesame")
                .asJson();
System.out.println(ret.getBody());

APIキーによる認証

APIキーについてはKKEのブログに日本語で詳しく解説されてますので、ここでは解説を飛ばします。

APIキー認証でセキュリティを強化しよう | ブログ | SendGrid

次のように書けます。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .header("Authorization", "Bearer SG.xxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyyyyyyy")
                .asJson();
System.out.println(ret.getBody());

認証ができてしまえば、色々API叩けるので遊べそうです。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村
QLOOKアクセス解析