巷で話題のLINE BOT APIをforce.comで試してみましたー

事前準備

LINE BOT APIの設定に関しては割愛しますが(参考URL参照)、メッセージリクエストのホワイトリスト登録では、SalesforceのIPアドレスホワイトリストが広いので面倒です。全部設定するのは無理だと思うので、検証用であれば以下のようなIPアドレスのエラーをわざと発生させて、forceのIPアドレスを取得してそれをホワイトリストに登録すれば通ると思います(もちろん変更する可能性は大いにあるので一時的な検証用として利用する感じで)。

どうしても無理なら、APIコールの本体を固定IPを持ったサーバに持たせて、プロキシ的にリクエストすればOKです。

メッセージ送信

ソースコードはこんな感じで。trialbot-api.line.meに対するリモートサイトの設定もお忘れなく。

ちなみにApex RESTは470のステータスコードを返却できないので”Unable to process the contents of the received request.”をLINEサーバに伝達できません。

コールバックのクラス

コールバックには任意のヘッダを入れることができず、Authorizationヘッダによる認証ができないので、公式サポートされてるのかイマイチ不明なAnonymous Apex RESTを利用します。具体的な実装方法に関してはこちらの記事を参照してください。コールバックURLは以下のようになります。

https://{サイトのドメイン}:443/services/apexrest/line_callback

クラスはこんな感じで作りました ※乃木坂仕様です

メッセージ配信自体はfutureやbatchを使って非同期処理させた方が良いかもです。

で、このBOTとお友達になってやりとりするとこんな感じになります↓

line-maiyan

その他

コールバックのデバッグするときはrunscope等のプロキシを噛ますと楽かも。
runscopeを使う場合、サイトのドメインがhoge-fuga.force.comであれば

というようにコールバックURLを書き換えればOK(ハイフンはハイフン2つ、ドットはハイフンにそれぞれ変換)

また、MIDはユーザ自身が設定するIDとは異なるので、ユーザからのメッセージに含まれるcontent.fromを参照して適宜取得する必要があります。

参考URL

所感

事前準備で書いた通り、SalesforceのIPアドレスのレンジが広いので、24-30というサブネットの仕様が緩和されない限り、実運用でSalesforceから直接メッセージを飛ばすのは厳しそうです。またAnonymous Apex RESTも非公式な匂いがプンプンするので、forceからLINE BOTをあれこれしたい場合は、HerokuなりAWSなりでサーバ立てて、プロキシ&Webhookしてもらうのが現状は良さそうな感じがします。force.comのキュー(及びワーカー)の仕組みもちょっと弱い感じなので。

Salesforceと連携するとなると顧客とのチャネルに利用する話だと思うので、ケースでメール送信の代わりにLINEを使うとかそんな感じになるんですかねー。