

BluemixとNodejsでLINE BOTを作っているのですが、LINEのほうでIPをwhitelistに登録するところでつまずいてしまいました。  
Bluemixは、IPがデプロイの度に変わってしまうらしいので、[この記事](http://qiita.com/Mic-U/items/49e6867ccf1249974da8)を参考に、Staticaを用いて擬似的にIPを固定しようとしました。  
しかし、「403 error, Access to this API denied due to the following reason: Your ip
address [XXX.XX.XXX.XXX] is not allowed to access this API. Please add your IP
to the IP whitelist in the developer
center.」というようなエラーメッセージが帰ってきて送信することができませんでした。  
IPの部分はStaticaのIPと全く違うものでした。  
ソースコードは以下のような感じです。  
当方、サーバーなどに関する知識が少なく、何が原因か全くわかりません。  
どうすれば固定IPが実現できるでしょうか？

[code]

    const express = require("express");
    const bodyParser = require("body-parser")
    const request = require("request")
    const app = express();
    const cfenv = require("cfenv");
    const appEnv = cfenv.getAppEnv();
    
    const ChannelAccessToken = "ACCESS TOKEN"
    
    const vcap_services = JSON.parse(process.env.VCAP_SERVICES);
    const proxyURL = vcap_services["statica"][0].credentials.STATICA_URL;
    
    app.use(bodyParser.urlencoded({
      extended: true
    }));
    app.use(bodyParser.json())
    
    app.use(express.static(__dirname + "/public"))
    
    app.listen(appEnv.port, "0.0.0.0", function () {
      console.log("AppLog: server starting on " + appEnv.url);
    });
    
    var headers = {
      "Content-Type": "application/json; charset=UTF-8",
      "Authorization": "Bearer {" + ChannelAccessToken + "}",
      "User-Agent": "node.js"
    }
    
    app.post("/", (req, res) => {
      var events = req.body["events"]
      var replyToken = events[0]["replyToken"]
      var type = events[0]["message"]["type"]
      var replyText = ""
      if (type == "text") {
        replyText = events[0]["message"]["text"]
        console.log(replyText)
        var body = {
          "replyToken": replyToken,
          "messages": [{
            "type": "text",
            "text": "Reply Text"
          }]
        }
    
        var options = {
          url: "https://api.line.me/v2/bot/message/reply",
          proxy: proxyURL,
          headers: headers,
          json: true,
          body: body
        }
    
        request.post(options, (error, response, body) => {
          if (!error && response.statusCode == 200) {
            console.log("AppLog: success")
          }
          else {
            console.log("AppLog: " + response.statusCode + " error, " + response.body.message)
          }
        })
      }
    })
    
[/code]


CC BY-SA 3.0
2016-10-05T08:57:31.030
29373
2016-12-02T09:50:21.803
19036
question
javascript bluemix
Bluemixのサーバーで固定IPを使う方法について


Staticaはあくまでサーバーへ到達するためのIPを固定するもので  
サーバーからのリクエストのIPとは別になります。

Messaging APIではIPアドレスの指定はオプショナルになっているので必ずしも指定する必要はありません。  
Developer CenterのServer IP Whitelistの設定を削除して空白にすることで問題が解決できます。


CC BY-SA 3.0
2016-10-13T14:49:48.107
29533
2016-10-13T14:49:48.107
2260
29373
answer