Nexmo からのインバウンド SMS を処理しようとしていますが、理解できません。私はNodeとExpressにも比較的慣れていません。彼らのドキュメントは、ここに示されているようにキャッチするためのWebhookのリクエストを送信していることを示しています。サンプルコードを試して、このようにルートファイルに追加しました
var url = require('url');
module.exports = function(app) {
app.get('/webhook', function(request, response){
var url_parts = url.parse(request.url,true);
if (!url_parts.hasOwnProperty('to') || !url_parts.hasOwnProperty('msisdn') || !url_parts.hasOwnProperty('text'))
console.log('This is not an inbound message');
else {
//This is a DLR, check that your message has been delivered correctly
if (url_parts.hasOwnProperty('concat'))
{
console.log("Fail:" + url_parts.status + ": " + url_parts.err-code + ".\n" );
}
else {
console.log("Success");
/*
* The following parameters in the delivery receipt should match the ones
* in your request:
* Request - from, dlr - to\n
* Response - message-id, dlr - messageId\n
* Request - to, Responese - to, dlr - msisdn\n
* Request - client-ref, dlr - client-ref\n
*/
}
}
response.writeHead(200, {"Content-Type": "text/html"});
response.end();
});
};
これは、すべてのページをレンダリングするファイルであり、インバウンド データを受信するためだけにこの「/webhook」ページを作成しました。コールバック URL を nexmo に貼り付けると、それが確認されず、おそらく正しく処理していないと思います。
ここのサンプルコードは、 http.createServerでそれを示しており、このように異なる名前のトップレベルファイルを持っています
require('./app/server/routes')(app);
if (app.get('env') == 'development') app.use(errorHandler());
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
代わりにここで捕まえようとするべきですか?または、クライアント側でこれを行う必要がありますか? この質問を確認しましたが、それがよくわかりません。ホストとして何を置くか、またはこれはまったく正しい方法ではありませんか? 私もこれを見て、上に投稿したコードはほとんど同じことをしていると思いました。どんな助けにも乾杯!
編集:次のような単純なアプリで動作しています:
var express = require('express');
var bodyParser = require('body-parser');
var url = require('url');
var app = express();
app.use(bodyParser.urlencoded({
extended: true
}));
app.get('/:pagename', function(req,res) {
var url_parts = url.parse(req.url,true);
console.log(url_parts.query.msisdn);
res.sendfile('public/' + req.params.pagename + '.html');
});
var port = process.env.PORT || 3333;
app.listen(port);
しかし、アプリでこれを完全に引き継ぐことはできません。どこに置くべきかまだわかりません。ルーターファイルにあると思っていましたが、ログファイルに nexmo からのリクエストが表示されないため、そこで何が起こっているのかわかりません。