ご来場されたお客様より伺ったお話から「やってみたい」と思うことがあって、早速試したことがありますので、ここに残しておこうと思います。
現状の最新版 Notes/Domino V10 には HTTP Request を送信できる新機能があります。
9.0.1 までは Windows の HTTP Request を呼び出したり Java でプログラムを組んだりしていましたが、これらは iOS 上のクライアント(HCL Nomad) では使えません。
また Notes クライアントは Windows のほか、Mac、iOS (現在は iPad のみ) で動くクライアントがありますが、OS依存の部分など多少考慮しなければならない場合があるものの、LotusScript のコードはどのクライアントでも動くようです。
V10 の新機能を使うことで、より Web サービスとの連携が容易になりました。
さて、やってみたいこととは、携帯電話への SMS (Short Message Service)の送信です。
Twilio (トゥイリオ)というサービスをご存知でしょうか。
詳しくは上のリンクをご覧いただくとして、Twilio は SMS や自動音声通話といった、電話番号を用いたサービスと連携するための API を提供しています。
電話をかけて、文章を日本語で読み上げたり、音声ファイルを再生したりといったようなことが可能なようです。
今回はこの API を使い、私のスマートフォンへ SMS を送信してみます。
SMS を送信する場合は、場合にもよるかもしれませんが料金が発生します。
Twilio の API は Free Trial が可能です。
Sign up を済ませて初回ログインすると、表示された Console Dashboard には 500円分の TRIAL BALANCE が付与されていました。
この Dashboard には、テストに使用する発信用の電話番号(TRIAL NUMBER = Twilio電話番号)を取得できるボタンがあったり、API を使う際に必要となる「アカウント SID」と「AUTH TOKEN」もあります。
なお、私が TRIAL NUMBER を取得したところ +1 で始まる米国の電話番号が取得できました。
次のコードは、サンプルとして作成したエージェントです。
Dim ss As NotesSession Const accountSid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" Const authToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" Const phoneFrom = "+11231231234" '発信用電話番号(Twilio電話番号) Sub Initialize Set ss = New NotesSession sendSMS "LotusScript から初めての SMS 送信。ドキドキ...", "+819012345678" End Sub Function base64Encode( textString As String ) As String Dim stream As NotesStream Dim db As NotesDatabase Dim doc As NotesDocument Dim body As NotesMIMEEntity Set stream = ss.CreateStream Call stream.WriteText ( textString ) Set db = ss.CurrentDatabase Set doc = db.CreateDocument Set body = doc.CreateMIMEEntity Call body.SetContentFromText ( stream, "", ENC_NONE ) Call body.EncodeContent ( ENC_BASE64 ) base64encode = Replace( Replace( body.ContentAsText, Chr( 13 ), ""), Chr( 10 ), "" ) Call stream.Close End Function Sub sendSMS( message As String, phoneTo As String ) Dim req As NotesHTTPRequest Dim url$, body$, res As Variant url = "https://api.twilio.com/2010-04-01/Accounts/" & accountSid & "/Messages.json" body = |From=| & urlEncode( phoneFrom ) & _ |&To=| & urlEncode( phoneTo ) & _ |&Body=| & urlEncode( message ) Set req = ss.Createhttprequest() req.Preferstrings = True req.Setheaderfield "Content-Type", "application/x-www-form-urlencoded" req.Setheaderfield "Accept", "application/json" req.Setheaderfield "Authorization", "Basic " & base64Encode( accountSid & ":" & authToken ) res = req.Post( url, body ) End Sub Function urlEncode( textString ) As String Dim notesmacro As String, res As Variant notesmacro = |@URLEncode( "Domino";"| & textString & |" )| res = Evaluate( notesmacro ) urlEncode = res( 0 ) End Function
以下、上のコードを補足します。
2~4行目
実行に必要なアカウントSID、AUTH TOKEN、発信者番号(Twilio電話番号)を定数(Const)で設定していますが、実行時は Console Dashboard のもので置換します。
※本番で使う場合、認証情報のハードコーディングはお勧めしません
4行目、8行目
このサービスのすばらしい点のひとつは、対応する国が日本だけではないことです。ここでは私のスマホの電話番号を指定したいので、最初のゼロを除いた番号の頭に日本の番号を示す +81 を付けました。たとえば電話番号が 090-1234-5678 の場合、発信先番号へは +819012345678 と指定します。
36行目
API の URL ですが、最後を .json とすると、レスポンス(47行目)が JSON 形式で返ります。このコードではレスポンスをほぼ無視していますが、SMSが送信されない理由を調べたい場合はコードの追加が必要です。※ res を messagebox で表示するだけでも、レスポンスにあるエラーコード等がなんとなく見えます
38行目、39行目
From(発信者番号)と To(受信者番号)と Body(メッセージ)は、URLエンコードが必要です。
46行目
API は Basic 認証をサポートしています。認証情報として
アカウントSID + ":" + AUTH TOKEN
の文字列を Base64 エンコードした値を "Authorization" ヘッダーへ追加しています。そして、エージェントを実行して、実際に iPhone で受信したところが下図です。
今回はトライアルのアカウントを使用したからでしょうか、メッセージの冒頭には "Sent from your Twilio trial account - " と追加されてしまいました。まあ、仕方ありませんね...
SMS の料金などを調べずに3回 API をコールしてしまいましたが、Dashboard を覗いてみると、まだ 500円以内に収まっていました。
もう少し楽しめそうです..
もし「私も試してみたい!」と思った方は、Qiita に「[最新版]Twilioのサインアップ」という記事がありますので、ご参考まで。
0 件のコメント:
コメントを投稿